keepalived+nginx 搭建
0x00 环境说明
1.系统环境:centos7.9
2.主机规划
主节点:site1,IP地址:10.20.140.9
备节点:site2,IP地址:10.20.140.10
VIP地址:10.20.140.188
3.带安装软件清单
nginx:主备节点都需安装
keepalived:主备节点都需安装
web站点:主备节点nginx的index.html需要更改为不同的显示内容,用以区分,并验证切换是否成功。site1------>site2 ,或者site2------->site1
0x01 软件安装
1.nginx安装
(主备节点都需要安装):本次安装仅仅为了试验目的,使用root用户安装,且采用yum安装,生产环境中,建议增加专用账户和组,并采用二进制安装,可以选择性的安装多个nginx默认不安装的功能模块,比如nginx的监视模块等
tar -zxvf nginx-1.22.1.tar.gz cd nginx-1.22.1 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --add-module=/home/data/nginx-module-vts make && make install # 如果是安装过nginx的,再次添加模块的时候不要使用make install,否则配置会被初始化
本次安装采用yum安装
yum install -y nginx
2.keepalived安装
(主备节点都需要安装)
yum install -y keepalived
0x02 启动nginx和keepalived并设置开机启动
systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived
0x03 更改web站点显示内容,用以区分站点
# 主节点nginx01 echo "<h1> web site1<h1> <h1>this is a test about keepalived at site1 <h1>" >/usr/share/nginx/index.html # 备节点nginx02 echo "<h1> web site2<h1> <h1>this is a test about keepalived at site2 <h1>" >/usr/share/nginx/index.html
0x04 配置keepalived
1.配置规划
router_id 主节点:nginx01,备节点:nginx02
优先级:主节点100,备节点90,优先级比大,谁大谁优先
认证auth_pass:主备一致,需要验证
认证类型auth_type:PASS 采用密码验证
virtual_router_id :默认51 主备均不变
nginx检查脚本:check_nginx
#!/bin/bash set -x A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then echo `date`': nginx is not healthy, try to killall keepalived' >> /etc/keepalived/keepalived.log killall keepalived fi
2.配置文件:
! Configuration File for keepalived global_defs { notification_email { xxxx@xxxx.com #告警邮件的接收邮箱地址 } notification_email_from xxx@xxxxx.com 发送告警邮件的发送邮箱地址 smtp_server x.x.x.x # 邮件服务器地址 smtp_connect_timeout 30 #连接邮件地址的超时时间 router_id NGINX01 # 节点的router_id }
#定义vrrp脚本,监测nginx,如果nginx进程不存在,则kill掉keepalived,切换至备节点 vrrp_script check_nginx{ script "/etc/keepalived/check_nginx.sh" #定义脚本绝对路径 interval 2 # 定义监测间隔时间,单位秒 } # 设置vrrp实例 vrrp_instance VI_1 { state MASTER # state用来指定该节点是主节点还是备节点,MASTER主,BACKUP备 interface eth0 # 指定vrrp使用的物理网卡 virtual_router_id 51 # 主备相同即可,相同的id即为一组 priority 100 # 指定优先级,比大,大的优先级高 advert_int 1 # 主备心跳通讯时间间隔,主备节点必须一致,这里是1s authentication { #认证类型和认证密码设置 auth_type PASS auth_pass 1111 }
# 指定VIP,可以设置多个,之间使用回车换行隔开即可 virtual_ipaddress { 10.20.140.188 }
# 指定检测vrrp使用的脚本名称 track_script{ check_nginx } }
将主备配置更改,注意其中需要更改的地方,包含state,优先级等。
3.重载keepalived配置
systemctl restart keepalived
此时查看VIP是挂载nginx01节点,即主节点,如下图:
0x05 访问web站点,验证keepalive
此时断掉主节点nginx01,再次访问VIP:
此时在主节点nginx01上启动nginx和keepalived服务后,web站点重新切回site1
如何自动切回呢?