1. 服务器列表
IP | 名称 | hostname |
---|---|---|
192.168.0.86 | manager86 | manager86 |
192.168.0.87 | manager87 | manager87 |
2. 两台服务器都安装nginx
参考上篇文章《Linux下安装nginx 1.18.0稳定版》
3. 两台服务器安装keepalived
yum install keepalived
如果安装失败多执行几次即可
默认安装路径:/etc/keepalived
安装之后,在etc里面生成目录keepalived, 有配置文件keepalived.conf
4. 检查是否完成安装keepalived
rpm -q -a keepalived
5. 新建keepalived所须的用户并授权
打开终端并以 root 用户登录。
运行以下命令创建新用户:
useradd -r keepalived_script
设置该用户的密码:
passwd keepalived_script
修改脚本权限
chmod 755 /usr/local/src/nginx_check.sh
6. 完成高可用配置(主从配置)
配置keepalived的配置文件,使其使用上述新建的网卡进行通信,并使用ARR协议管理vip
keepalived配置文件路径:/etc/keepalived/keepalived.conf
主机manager86配置信息
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
779627573@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_ server 192.168.0.86
smtp_connect_timeout 30
router_id LVS_DEVEL
script_user root
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens3 # 这里设置成自己电脑的网卡
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.0.79/24 dev ens3 # 这里的vip设置成自己的vip,需要和ens3在同一个网段
}
}
从机manager87配置信息
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
779627573@qq.com
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_ server 192.168.0.87
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/usr/local/src/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens3 # 这里设置成自己电脑的网卡
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.0.79/24 dev ens3 # 这里的vip设置成自己的vip,需要和ens3在同一个网段
}
}
两台服务器都设置keepalived开机自启
systemctl enable keepalived
启动keepalived服务,观察服务情况
systemctl start keepalivied
编写服务检测脚本/usr/local/src/nginx_check.sh
用于检测nginx服务是否存在,不存在则尝试启动nginx,启动失败则关掉keepalived,避免没有nginx服务,但是当前服务器的keepalived拿走了vip导致服务访问不了的问题
#!/bin/bash
A=`ps -C nginx -o pid= | wc -l`
if [ $A -eq 0 ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
killall keepalived
fi
fi
7. 其他命令
重启keepalived:
systemctl restart keepalived
查看keepalived状态:
systemctl status keepalived