离线centOS 7使用keepalived+docker+nginx构建高可用
环境条件:两台centos7的服务器;
IP | nginx端口 |
---|---|
192.168.6.136 | 80 |
192.168.6.138 | 80 |
一、下载:
- 下载keepalived需要的环境包,为以下几种依赖:**
gcc-c++
pcre pcre-devel
zlib zlib-devel
openssl-devel
popt-devel
initscripts
net-tools
如果能连接外网直接使用yum,无法连接外网下载rpm包:http://www.rpmfind.net/linux/rpm2html/search.php,搜索需要的包下载 - 下载keepalived,下载地址:https://www.keepalived.org/download.html,我这里下载的是https://www.keepalived.org/software/keepalived-2.0.6.tar.gz 版本
二、安装keepalived
tar -zxvf keepalived-2.0.6.tar.gz; #解压
cd keepalived-2.0.6; #进入解压目录
./configure --prefix=/usr/local/keepalived; #编译
make && make install; #安装
安装成功后会有/usr/local/keepalived目录,如果安装过程报错,一般就是少包,看步骤一是否缺少包。
/usr/local/keepalived 目录下结构:
三、将keepalived 安装成系统服务
mkdir /etc/keepalived #创建目录
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ #拷贝主要文件
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
systemctl daemon-reload #重新加载
systemctl start keepalived.service #启动
#如果有错误执行下面命令替换下
cd /usr/sbin/
rm -f keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
常用命令:
systemctl daemon-reload #重新加载
systemctl start keepalived.service #启动
systemctl stop keepalived.service #停止
systemctl enable keepalived.service #开机启动
systemctl disable keepalived.service #取消开机启动
systemctl status keepalived.service #服务状态
四、配置keepalived
cd /etc/keepalived #进入配置目录下
mv keepalived.conf keepalived.conf.backup #备份原来配置
vim keepalived.conf
#配置文件如下
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER #指定为master
interface ens33 #网卡名
virtual_router_id 121 #路由id需要一致
mcast_src_ip 192.168.6.136 #广播本机ip
priority 100 #权重
nopreempt
advert_int 1 #检测时间 1s
authentication { #认证
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.6.100 #虚拟ip,得是统一ip段的
}
}
添加心跳检测脚本:
vim nginx_check.sh
#以下是脚本内容
#!/bin/bash
# 容器名称
containerName=nginx
currTime=`date +"%Y-%m-%d %H:%M:%S"`
# 查看进程是否存在
exist=`docker inspect --format '{{.State.Running}}' ${containerName}`
if [ "${exist}" != "true" ]; then
#如果关闭了可以重启我们这里方便测试跳过
# docker restart ${containerName}
# 记录
echo "${currTime} 重启docker容器,容器名称:${containerName}" >> /mnt/xvde1/ms_ctynyd/scripts/wbwf_monitor.log
fi
五、docker中安装Nginx
服务器连接不了外网的话请参考:https://editor.csdn.net/md/?articleId=107047628
docker pull nginx #下载nginx镜像
docker run -d --name nginx nginx:latest #启动一个镜像
mkdir /usr/share/; #创建nginx页面目录
docker cp nginx:/etc/nginx /etc/ #拷贝出配置文件
docker cp nginx:/usr/share /usr/share #拷贝出基础页面
docker stop nginx;#停止容器
docker rm nginx;#删除容器
#映射端口和数据卷,确保宿主机的80端口没被占用
docker run -it -d --name nginx --restart=always -p 80:80 -v /etc/nginx/:/etc/nginx/ -v /usr/share/nginx:/usr/share/nginx --privileged nginx
修改nginx的默认页面
vi /usr/share/nginx/html/index.html
将Welcome to nginx!修改成Welcome to nginx! Master
六、构建另一个服务器的环境
1,将上面的步骤环境在操作一遍
2,配置keepalived.conf如下:
需要修改的就是mcast_src_ip 、state 、priority 这三个参数
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP #指定为BACKUP
interface ens33 #网卡名
virtual_router_id 121 #路由id需要一致
mcast_src_ip 192.168.6.138 #广播本机ip
priority 80 #权重
nopreempt
advert_int 1 #检测时间 1s
authentication { #认证
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.6.100 #虚拟ip,得是统一ip段的
}
}
3,修改nginx的默认页面
vi /usr/share/nginx/html/index.html
将Welcome to nginx!修改成Welcome to nginx! Slave
systemctl restart keepalived.service #重启keepalived
systemctl status keepalived.service #检测一下日志
如果日志输出一下内容则没问题
七、测试
1.客户端测试:
打开dos窗口->输入:curl 192.168.6.100
2,现在我们把docker容器的nginx停了看一下
docker stop nginx
重开dos窗口:
3,docker重启nginx
docker restart nginx
大功告成,楼主在搭建的时候遇到了很多坑。需要耐心,如果错误了细心看了keepalived的日志解决。