准备在虚拟机的centos7上搭建搭建docker+Nginx+LVS+keepalived搭建分布式双机主从热备,其架构图如下
yum install docker #该命令安装过程中的提示一律填 y 再回车即可
安装好docker后设置docker开机启动
systemctl start docker.service
systemctl enable docker.service
直接拿最新的nginx镜像
docker pull nginx
镜像是否成功下载使用下面命令查看是否存在nginx镜像
docker images
切换到当前用户跟目录,然后建立一个nginx目录,并在nginx目录下新建nginx_master和nginx_backup; 然后分别在这两个文件夹下建立conf, logs, html 三个文件夹(这里之所以要建立nginx_backup是因为方便到时候虚拟机克隆,也可以不建立nginx_backup)
先建立启动一个nginx容器
docker run -d --name nginx nginx
切换目录到nginx_master目录下,然后将docker下的nginx 容器的nginx.conf和conf.d文件copy到nginx_master nginx_backup的conf下
docker cp nginx:/etc/nginx/nginx.conf $PWD/conf
docker cp nginx:/etc/nginx/conf.d $PWD/conf
复制完成后删除刚才启动nginx容器
docker stop nginx
docker rm nginx
docker ps -a
复制完成后在nginx_master目录下查看复制完成后的目录结构
ll $PWD/*
在nginx_master/html目录下新建一个index.html文件,随便输入文字
关闭防火墙
systemctl stop firewalld.service
禁止防火墙开机启动
systemctl disable firewalld.service
确保文件创建好后,就可以按照下面命令创建nginx容器
docker run -d -p 80:80 \
-p 443:443 \
--name nginx_master \
--restart=always \
--privileged=true \
-v /root/nginx/nginx_master/html:/usr/share/nginx/html \
-v /root/nginx/nginx_master/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/nginx/nginx_master/conf/conf.d:/etc/nginx/conf.d \
-v /root/nginx/nginx_master/logs:/var/log/nginx \
nginx
# 以上是命令,下面是命令的解析
-d # 表示在一直在后台运行容器
-p 80:80 # 对端口进行映射,将本地80端口映射到容器内部的80端口
--name # 设置创建的容器名称
-v # 将本地目录(文件)挂载到容器指定目录;
--restart=always是重启策略,当docker服务重启后,容器也会自动启动(必须,否则后面启动虚拟机,需要手动启动nginx)
--privileged=true 使创建的容器拥有root权限(必须,没有的话,启动nginx报错,说没有权限)
如果启动的时候不带上 –privileged=true,会出现 nginx: [alert] could not open error log file: open() “/var/log/nginx/error.log” failed (13: Permission denied)
启动完查看容器的启动状态是否正常
docker ps -a
启动完,访问nginx_master的nginx,看看是否能访问到index.html的内容
安装命令
yum install keepalived -y
查看是否安装成功,使用如下命令能看到版本号,表示成功
rpm -q -a keepalived
使用yum命令安装keepalived成功后,在/etc/keepalived目录下有keepalived.conf配置文件,高可用配置就是主要配置该文件
主机的keepalived.conf的配置内容如下
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server mail.xuad.com
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/root/keepalived/nginx_check.sh" # 检查nginx状态的脚本
interval 2
weight 3
}
vrrp_instance VI_1 {
state MASTER #备份服务器上将MASTER改为BACKUP
interface ens33 #这个需要根据你服务器的网卡进行选择,我这里是ens33
virtual_router_id 51 #这个id必须与备机的id一样
priority 100 #备份服务上将100改为小于100,可配置成90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.247.120 #这个IP前三位最后与服务器的IP前三位相同,有多个vip可在下面继续增加
}
track_script {
chk_nginx
}
}
切换到当前用户目录空间,建立一个keepalived目录,这个目录存放的是nginx是否正常启动的检测脚本
进入keepalived目录,创建nginx_check.sh文件,文件内容如下
#!/bin/bash
#version 0.0.1
#
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
systemctl restart docker
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
systemctl stop keepalived
fi
fi
# 脚本说明:当nginx进程不存在时,会自动重启docker服务,docker服务启动时会自动启动nginx容器;再次检查nginx进程,如果不存在,就停止keepalived服务,然后NGINX_BACKUP主机会自动接替NGINX_MASTER的工作。
脚本创建完成后,必须给脚本赋予可以执行的权限,这里为了方便直接给所有权限
chmod 777 nginx_check.sh
启动keepalived并查看其状态
systemctl start keepalived
systemctl status keepalived
关闭虚拟机,对主机进行克隆
克隆完成后,选择克隆出来的备机需要改变下MAC地址 重要
开启备机服务器,然后修改备机的hostname,将备机的hostname改成salve或者backup都可以,修改完成重启备机
hostnamectl set-hostname salve
由于是从主机克隆来的,所以主机的docker和keepalived、Nginx都已经有了,主要对 /etc/keepalived/keepalived.conf 文件进行进行一定修改就好;另外的nginx容器也可以重新建立一个,命名为:nginx_salve;最后启动主机和备机两台服务机,分别查看keepalived的状态是否都启动了,没有启动就启动
systemctl status keepalived
当master节点没有宕机的情况,访问的是master节点下的nginx,当出现宕机的情况下访问的是backup节点下的nginx
将主机关机,造成主机宕机现象,就访问了备机的nginx
至此使用docker搭建的双机主从热备环境就搭建好了,如有问题,评论区留言