centos7系统keepalived安装配置(服务器主备、负载均衡)

本文详细介绍了如何在Linux系统中安装Keepalived,配置主备服务器之间的网络虚拟IP以及监控脚本,确保在Nginx服务故障时进行自动切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本

https://gitcode.net/zengliguang/nginx_keepalived.git

系统拓扑

安装keepalived

主备服务器上都需要安装

在线安装

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 stop 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 stop 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。

主备服务器上都需要配置

    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 stop keepalived.service
        fi
    fi

启动keepalived

systemctl start keepalived.service

重启keepalived

systemctl restart keepalived.service

 查询keepalived状态

systemctl status keepalived.service

nginx部署

nginx web页面修改

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

具体访问呈现效果如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三希

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值