keepalived实现http高可用配置操作过程

设备: 两台AlmaLinux9.3服务器

角色主机名IP地址虚拟IP(VIP)优先级
主节点master(前面忘改了,后面改过来了)192.168.111.10192.168.111.100100
备节点backup192.168.111.11192.168.111.10090

firewall-cmd –zone=public –add-protocol=vrrp –permanent && sudo firewall-cmd –reload

firewall-cmd –list-all #如下图放行vrrp,当然测试环境也可以直接关闭firewalld

setenforce 0  #临时关闭selinux
# 安装 Apache
dnf install -y httpd

# 安装 Keepalived
dnf install -y keepalived

# 验证安装
rpm -q httpd keepalived

以上操作两台都执行

[root@master ~]# systemctl start httpd
[root@master ~]# systemctl enable httpd #操作如下

[root@master html]# firewall-cmd –permanent –zone=public –add-port=80/tcp #给80端口放行
success
[root@master html]# firewall-cmd –reload #重载一下
success

主节点(192.168.111.10):
echo "Master Server - 192.168.111.10" > /var/www/html/index.html
备节点(192.168.111.11):
echo "Backup Server - 192.168.111.11" > /var/www/html/index.html

然后登录网页测试,如下图:

以下是我的keepalived.conf的配置 ###master和backup只在state初始角色,优先级priority,interface上有区别有区别

global_defs { # 全局配置开始
notification_email { # 邮件通知收件人列表
acassen@firewall.loc # 收件人1
failover@firewall.loc # 收件人2
sysadmin@firewall.loc # 收件人3
}
notification_email_from Alexandre.Cassen@firewall.loc # 发件人地址
smtp_server 192.168.200.1 # 邮件服务器地址
smtp_connect_timeout 30 # 连接邮件服务器超时时间(秒)
router_id LVS_DEVEL # 本机标识(建议改为主机名)
}

vrrp_script check_httpd { # 定义一个健康检查脚本
script "killall -0 httpd" # 执行的命令:检查httpd进程是否存在
interval 2 # 每2秒执行一次
}

vrrp_instance HA_1 { # 定义一个VRRP实例,名为HA_1
state MASTER # 初始角色:主节点
interface ens33 # 绑定的网卡
virtual_router_id 80 # 虚拟路由ID,同一组必须一致
priority 100 # 优先级,越高越可能成为主
advert_int 2 # 心跳间隔(秒),每2秒发送一次

authentication {                              # 认证配置
    auth_type PASS                             # 认证类型:简单密码
    auth_pass 123456                            # 密码(最多8位)
}

notify_master "/etc/keepalived/master.sh "    # 成为主节点时执行的脚本
notify_backup "/etc/keepalived/backup.sh"     # 成为备节点时执行的脚本
notify_fault "/etc/keepalived/fault.sh"       # 发生故障时执行的脚本

track_script {                                 # 跟踪的脚本列表
    check_httpd                                 # 跟踪上面定义的check_httpd脚本
}

virtual_ipaddress {                            # 虚拟IP地址列表(没有被占用的IP)
    192.168.111.80/24 dev ens33                   # VIP地址/掩码,绑定到ens33
}

}

然后是我的三个脚本:

master.sh文件的内容为:
#!/bin/bash
LOGFILE=/var/log/keepalived-http-state.log
echo "[Master]" >> $LOGFILE
date >> $LOGFILE

backup.sh文件的内容为:
#!/bin/bash
LOGFILE=/var/log/keepalived-http-state.log
echo "[Backup]" >> $LOGFILE
date >> $LOGFILE

fault.sh文件的内容为:
#!/bin/bash
LOGFILE=/var/log/keepalived-http-state.log
echo "[Fault]" >> $LOGFILE
date >> $LOGFILE
chmod +x /etc/keepalived/master.sh
chmod +x /etc/keepalived/backup.sh
chmod +x /etc/keepalived/fault.sh

然后启动keepalived服务

systemctl start keepalived
systemctl enable keepalived
systemctl status keepalived #如下图的日志

看主机是master备用机日志是backup

然后 ip addr

然后通过网页访问192.168.111.80

然后tail -f /var/log/keepalived-http-state.log 查看日志

主机

备用机

然后再备用机上,killall -9 httpd

然后重新启动httd,日志又更新了

然后再master上进行通杨的操作

然后从backup备用机的状态来看,很显然当主机的http故障,他自动接管了服务

可以登录网址验证,如下

这个上面是设置了抢占模式,如果不设置强制模式的话,就先去conf的配置文件改一下

如下图: vim keepalived.conf

把state都设置为BACKUP 然后添加nopreempt,一般是再高权重的主机上设置

然后重启keepalived ,在之前的备用机上可以明显的看到,已经把80绑定到他身上了

然后从日志和网页也能看出来确实如此,并且之前的主机没有抢占

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注