
主备服务器上都需要安装
yum install -y keepalived
主服务器脚本
- # 设置虚拟机ip、网卡命令、hostname(后期自动获取)
- master_ipaddress=192.168.11.54
- backup_ipaddress=192.168.11.53
- virtual_ipaddress=192.168.11.56
- hostname=localhost.localdomain
- interface=ens33
-
- #关闭防火墙
- systemctl stop firewalld.service
- systemctl disable firewalld.service
- setenforce 0
- #永久关闭
- sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- #创建文件夹
- mkdir /home/tuners -p
- # 拷贝到tuners路径下
- \cp -r ./*keepalived* /home/tuners
- echo "拷贝完成"
-
- # 离线安装
- cd /home/tuners/keepalived
- rpm -Uvh --force --nodeps *.rpm
- # 生成主服务器配置文件
-
- cat > /etc/keepalived/keepalived.conf << EOF
- global_defs {
-
- router_id $hostname # 访问到主机,本机的hostname,需要修改
- }
-
- vrrp_script chk_http_port {
- script "/usr/local/src/nginx_check.sh" # 检测脚本位置
- interval 2 #(检测脚本执行的间隔)
- weight 2 # 权重
- }
-
- vrrp_instance VI_1 {
- state MASTER # 备份服务器上将 MASTER 改为 BACKUP,需要修改
- interface $interface # 网卡名字,使用ifconfig查看,需要修改
- virtual_router_id 51 # 主、备机的 virtual_router_id 不能相同
- priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
- advert_int 1 # 每隔1秒发送心跳
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- unicast_src_ip $master_ipaddress ##自己ip
- unicast_peer { #单模式
- $backup_ipaddress #另一个ip
- }
- virtual_ipaddress {
- $virtual_ipaddress #// VRRP H 虚拟地址,也可以绑定多个虚拟ip,需要修改
- }
- }
- EOF
-
- # 生成备服务器配置文件
- # cat > /etc/keepalived/keepalived.conf << EOF
- # global_defs {
-
- # router_id localhost.localdomain # 访问到主机,本机的hostname,需要修改
- # }
-
- # vrrp_script chk_http_port {
- # script "/usr/local/src/nginx_check.sh" # 检测脚本位置
- # interval 2 #(检测脚本执行的间隔)
- # weight 2 # 权重
- # }
-
- # vrrp_instance VI_1 {
- # state BACKUP # 备份服务器上将 MASTER 改为 BACKUP,需要修改
- # interface ens33 # 网卡名字,使用ifconfig查看,需要修改
- # virtual_router_id 59 # 主、备机的 virtual_router_id 不能相同
- # priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
- # advert_int 1 # 每隔1秒发送心跳
- # authentication {
- # auth_type PASS
- # auth_pass 1111
- # }
- # virtual_ipaddress {
- # $virtual_ipaddress #// VRRP H 虚拟地址,也可以绑定多个虚拟ip,需要修改
- # }
- # }
- # EOF
- # 生成监测脚本
-
- # cat > /usr/local/src/nginx_check.sh << EOF
- # #!/bin/bash
- # A=\`ps -C nginx – no-header |wc -l\`
- # if [ \$A -eq 0 ];then
- # /usr/sbin/nginx #nginx启动路径
- # sleep 2
- # if [ \`ps -C nginx --no-header |wc -l\` -eq 0 ];then
- # killall keepalived
- # fi
- # fi
- # EOF
-
- cat > /usr/local/src/nginx_check.sh << EOF
- rm -rf ./tmp.log
- systemctl status nginx.service > ./tmp.log
- if cat tmp.log |grep "failed";then
- systemctl start nginx.service
- sleep 2
- rm -rf ./tmp.log
- systemctl status nginx.service > ./tmp.log
- if cat tmp.log |grep "failed";then
- systemctl start keepalived.service
- fi
- fi
- EOF
- # 启动keepalived
- systemctl enable keepalived.service
- systemctl restart keepalived.service
- # 查看keepalived
- systemctl status keepalived.service
备服务器脚本
- # 设置虚拟机ip、网卡命令、hostname(后期自动获取)
- master_ipaddress=192.168.11.54
- backup_ipaddress=192.168.11.53
- virtual_ipaddress=192.168.11.56
- hostname=localhost.localdomain
- interface=ens33
-
- #关闭防火墙
- systemctl stop firewalld.service
- systemctl disable firewalld.service
- setenforce 0
- #永久关闭
- sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- #创建文件夹
- mkdir /home/tuners -p
- # 拷贝到tuners路径下
- \cp -r ./*keepalived* /home/tuners
- echo "拷贝完成"
-
- # 离线安装
- cd /home/tuners/keepalived
- rpm -Uvh --force --nodeps *.rpm
- # 生成主服务器配置文件
-
- # cat > /etc/keepalived/keepalived.conf << EOF
- # global_defs {
-
- # router_id localhost.localdomain # 访问到主机,本机的hostname,需要修改
- # }
-
- # vrrp_script chk_http_port {
- # script "/usr/local/src/nginx_check.sh" # 检测脚本位置
- # interval 2 #(检测脚本执行的间隔)
- # weight 2 # 权重
- # }
-
- # vrrp_instance VI_1 {
- # state MASTER # 备份服务器上将 MASTER 改为 BACKUP,需要修改
- # interface ens33 # 网卡名字,使用ifconfig查看,需要修改
- # virtual_router_id 51 # 主、备机的 virtual_router_id 不能相同
- # priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
- # advert_int 1 # 每隔1秒发送心跳
- # authentication {
- # auth_type PASS
- # auth_pass 1111
- # }
- # virtual_ipaddress {
- # $virtual_ipaddress #// VRRP H 虚拟地址,也可以绑定多个虚拟ip,需要修改
- # }
- # }
- # EOF
-
- # 生成备服务器配置文件
- cat > /etc/keepalived/keepalived.conf << EOF
- global_defs {
-
- router_id $hostname # 访问到主机,本机的hostname,需要修改
- }
-
- vrrp_script chk_http_port {
- script "/usr/local/src/nginx_check.sh" # 检测脚本位置
- interval 2 #(检测脚本执行的间隔)
- weight 2 # 权重
- }
- EOF
-
- vrrp_instance VI_1 {
- state BACKUP # 备份服务器上将 MASTER 改为 BACKUP,需要修改
- interface $interface # 网卡名字,使用ifconfig查看,需要修改
- virtual_router_id 59 # 主、备机的 virtual_router_id 不能相同
- priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
- advert_int 1 # 每隔1秒发送心跳
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- unicast_src_ip $backup_ipaddress ##自己ip
- unicast_peer { #单模式
- $master_ipaddress #另一个ip
- }
- virtual_ipaddress {
- $virtual_ipaddress #// VRRP H 虚拟地址,也可以绑定多个虚拟ip,需要修改
- }
- }
- EOF
- # 生成监测脚本
-
- # cat > /usr/local/src/nginx_check.sh << EOF
- # #!/bin/bash
- # A=\`ps -C nginx – no-header |wc -l\`
- # if [ \$A -eq 0 ];then
- # /usr/sbin/nginx #nginx启动路径
- # sleep 2
- # if [ \`ps -C nginx --no-header |wc -l\` -eq 0 ];then
- # killall keepalived
- # fi
- # fi
- # EOF
- cat > /usr/local/src/nginx_check.sh << EOF
- rm -rf ./tmp.log
- systemctl status nginx.service > ./tmp.log
- if cat tmp.log |grep "failed";then
- systemctl start nginx.service
- sleep 2
- rm -rf ./tmp.log
- systemctl status nginx.service > ./tmp.log
- if cat tmp.log |grep "failed";then
- systemctl start keepalived.service
- fi
- fi
- EOF
-
- # 启动keepalived
- systemctl enable keepalived.service
- systemctl restart keepalived.service
-
- # 查看keepalived
- systemctl status keepalived.service
虚拟机ip:192.168.11.56
主服务器:192.168.11.53
备服务器:192.168.11.54
keepalived安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf
/etc/keepalived

- global_defs {
-
- router_id localhost.localdomain # 访问到主机,本机的hostname,需要修改
- }
-
- vrrp_script chk_http_port {
- script "/usr/local/src/nginx_check.sh" # 检测脚本位置
- interval 2 #(检测脚本执行的间隔)
- weight 2 # 权重
- }
-
- vrrp_instance VI_1 {
- state MASTER # 备份服务器上将 MASTER 改为 BACKUP,需要修改
- interface ens33 # 网卡名字,使用ifconfig查看,需要修改
- virtual_router_id 59 # 主、备机的 virtual_router_id 组播模式不能相同,单播模式必须相同
- priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
- advert_int 1 # 每隔1秒发送心跳
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- unicast_src_ip 192.168.11.53 ##自己ip
- unicast_peer { #单模式
- 192.168.11.54 #另一个ip
- }
- virtual_ipaddress {
- 192.168.11.56 #// VRRP H 虚拟地址,也可以绑定多个虚拟ip,需要修改
- }
- }
hostname 需要修改

hostname获取方式 :在命令行中输入hostname

网卡命令需要修改:interface这个字段的值
![]()
查看网卡信息:输入下面命令
ip a
下图中ens33就是网卡名字

虚拟ip需要修改:virtual_ipaddress 这个字段

- global_defs {
-
- router_id localhost.localdomain # 访问到主机,本机的hostname,需要修改
- }
-
- vrrp_script chk_http_port {
- script "/usr/local/src/nginx_check.sh" # 检测脚本位置
- interval 2 #(检测脚本执行的间隔)
- weight 2 # 权重
- }
-
- vrrp_instance VI_1 {
- state BACKUP # 备份服务器上将 MASTER 改为 BACKUP,需要修改
- interface ens33 # 网卡名字,使用ifconfig查看,需要修改
- virtual_router_id 59 # 主、备机的 virtual_router_id 组播模式不能相同,单播模式必须相同
- priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小,一般主100从90
- advert_int 1 # 每隔1秒发送心跳
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- unicast_src_ip 192.168.11.54 ##自己ip
- unicast_peer { #单模式
- 192.168.11.53 #另一个ip
- }
- virtual_ipaddress {
- 192.168.11.56 #// VRRP H 虚拟地址,也可以绑定多个虚拟ip,需要修改
- }
- }
需要修改的内容跟主服务器脚本一样
主备切换的测试的两种方案
方案1:关服务器
方案2: 停nginx应用

监测脚本流程

监测脚本路径:/usr/local/src/nginx_check.sh
功能:检测nginx是否启动,如果停了就重启,如果还是起不来,就停止keepalived。
主备服务器上都需要配置
- #!/bin/bash
- A=`ps -C nginx – no-header |wc -l`
- if [ $A -eq 0 ];then
- /usr/sbin/nginx #nginx启动路径
- sleep 2
- if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
- killall keepalived
- fi
- fi
systemctl start keepalived.service
systemctl restart keepalived.service
systemctl status keepalived.service
nginx配置文件路径:/etc/nginx/nginx.conf,该配置文件引用了/etc/nginx/conf.d/default.conf


打开/etc/nginx/conf.d/default.conf配置文件可以看到html页面的路径
/usr/share/nginx/html 为路径
index.html为页面

进入到对应路径下

打开页面文件,修改信息,作为访问的服务器的标记,比如我服务器是54,我就在页面中加上54

具体访问呈现效果如下
