keepalived+nginx高可用环境搭建
前言
最近工作 中 有用到keepalived,就想着 在 本地 搭建一套环境验证一下相关的功能。因为创建虚拟机比较麻烦,就借助 docker来搭建这样 一套 环境 ,顺带学习 巩固下docker的相关 命令;
1.准备工作
本地 安装好docker环境,我本地 使用的win10,已经安装好了docker环境;
2.下载centos7.6基础镜像
docker pull centos:7.6.1810
我已经安装好了,所以执行结果 如下
3.在centos7.6中安装keepalived和nginx 以及其他软件
启动容器:
docker run -it f1cb7c7d58b7 /bin/bash
使用 ip和 ifconfig命令需要安装 下面两个
yum install iproute
yum install net-tools
4.使用yum 安装 keepalived
yum install keepalived
一直确认 y即可,安装完成
Keepalived检测nginx的脚本
/etc/keepalived 中 新建 check_nginx.sh
脚本 如下 :注意grep nginx: 冒号 ,因为执行的 时候脚本 的名字中也有nginx,会导致计算出来 的 数量不对 ,所以要 用nginx:
#!/bin/bash
A=$(ps -ef | grep nginx: | grep -v grep | wc -l)
if [ $A -eq 0 ];then
nginx
echo "restart nginx, sleep 2 s"
sleep 2
num=$(ps -ef | grep nginx: | grep -v grep | wc -l)
if [ $num -eq 0 ];then
ps -ef | grep keepalived | grep -v grep | awk '{print $2}'| xargs kill -9
echo "start nginx failed,kill keepalived"
fi
else
echo "nginx not dead"
fi
查看 本机
ip a
Keepalived配置
注释vrrp_strict 否则会导致 VIP 无法访问
增加检测脚本
添加VIP,注意 VIP 和本机IP在 同一个 网段内,否则也 无法访问
本机172.17.0.6/16 虚IP设置 为172.17.0.8/16
5.使用yum安装nginx
yum install yum-utils
添加源
到 cd /etc/yum.repos.d/ 目录下
新建
vim nginx.repo
文件
输入以下信息
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
yum install nginx
安装完成
启动查看是否成功
nginx
curl localhost:80
6.退出 ,制作 镜像
docker ps -a
找到 刚才 的容器
docker commit 5f781fbe483e keepavled_nginx:v1
7.启动主备keepalived容器
docker run --privileged -it --name keepalived_master 8dfe8c83bfae /usr/sbin/init
docker run --privileged -it --name keepalived_salve 8dfe8c83bfae /usr/sbin/init
8.进入容器
docker ps
找到 启动 的容器
分别 进入容器
主 :172.17.0.7
备:172.17.0.6
备 keepalived修改 配置
9.验证keepalived
启动主keepalived,发现虚IP 已经绑定
systemctl status keepalived
查看启动状态
备keepalived启动,虚IP没有绑定
Kill 掉主的keepalived进程 后,主不再绑定VIP
重新查看 备,发现 绑定了VIP
再启动主keepalived,会发现VIP重新绑定在 主keepalived服务器
验证
掉nginx进程之后,再次查看 会发现nginx被重新 启动,因为 keepalived检测 脚本 会 自动检查 ,没有 进程 会自动重启,启动不成功则把keepalived kill掉。
见脚本check_nginx.sh
注意:check_nginx.sh必须要 加 权限 ,否则 不会执行;
chmod +x check_nginx.sh
VIP访问nginx测试
先分别修改主备 nginx的页面并重启
vi /usr/share/nginx/html/index.html
主备分别启动keepalived,此时 VIP绑定在主服务器 ;
访问nginx: curl 172.17.0.8:80,此时访问的是主服务器
把主服务器 的keepalived kill掉 之后验证 ,此时VIP绑定在备服务器,访问 的备服务器 的nginx
11.遇到的几个 问题
VIP无法访问的问题:
注释掉
在一个网段
Check_nginx.sh脚本 问题:
冒号要加上否则执行过程中会grep 到脚本名称导致判断进程数量一直不为0;
脚本必须加权限,否则无法执行