天工造物局 keepailved基于不同网段虚拟机的httpd服务做高可用

keepailved基于不同网段虚拟机的httpd服务做高可用

环境如下:

系统:Centos 7.9

主服务器:192.168.1.2     vip:192.168.1.100    版本:apache-2.4.6   keepalived-1.3.5

备服务器:192.168.2.2     vip:192.168.1.100    版本:apache-2.4.6   keepalived-1.3.5

vmware配置不同网段虚拟机参考 https://blog.51cto.com/qidian510/12873433

一、系统环境设置

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
  • 1.
  • 2.
  • 3.
  • 4.

二、两个服务器分别安装配置httpd

1、安装服务
yum install -y curl net-tools psmisc httpd keeplived
  • 1.
2、给每个主机提供各自的测试页面方便测试
主服务器:
echo "master:192.168.1.2" > /var/www/html/index.html
chown -R apache.apache  /var/www
systemctl start httpd

从服务器:
echo "backup:192.168.2.2" > /var/www/html/index.html
chown -R apache.apache  /var/www
systemctl start httpd
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

三、配置keepalived

1、主服务器keepalived配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   script_user root
   enable_script_security
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_httpd {
    #"killall -0 httpd"
    script "/etc/keepalived/check_httpd.sh"
    interval 2
    weight -5
    }
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    notify_master "/etc/keepalived/master.sh"
    notify_backup "/etc/keepalived/backup.sh"
    notify_fault "/etc/keepalived/fault.sh"

    virtual_ipaddress {
        192.168.1.100
    }
    nopreempt
    track_script {
        check_httpd
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
2、从服务器keepalived配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   script_user root
   enable_script_security
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_httpd {
   # "killall -0 httpd"
    script "/etc/keepalived/check_httpd.sh"
    interval 2
    weight -5 
    }
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    notify_master "/etc/keepalived/master.sh"
    notify_backup "/etc/keepalived/backup.sh"
    notify_fault "/etc/keepalived/fault.sh"

    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        check_httpd
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • vrrp_instance VI_1:定义了一个VRRP实例,可以根据实际情况更改名称。
  • state MASTER / state BACKUP:指定当前服务器的角色,主服务器为MASTER,备份服务器为BACKUP。
  • interface ens33:指定用于VRRP通信的网络接口。
  • virtual_router_id 51:指定VRRP的虚拟路由器ID,主备服务器要保持一致。
  • priority:指定服务器的优先级,数字越大优先级越高。
  • advert_int 1:VRRP广播间隔时间,单位为秒。
  • nopreempt:设置为不抢占模式,表示当前服务器获取到主服务器角色后不会主动让出。
  • authentication:VRRP密码认证配置。
  • virtual_ipaddress:定义VRRP虚拟IP地址,所有VRRP服务器都应当共享相同的虚拟IP地址。

两个网卡不在一个vlan,virtual_router_id可以一样

反之,两个网卡在一个vlan 上,则virtual_router_id 一定要不一样

如果1个网卡上有多个ip, 也不能一样

3、相关检测脚本
vim /etc/keepalived/check_httpd.sh 
#!/bin/bash
if [ -f /run/httpd/httpd.pid ]; then 
  exit 0;
else 
  killall keepalived; 
fi
-----------------------------------------
vim /etc/keepalived/master.sh 
#!/bin/bash
LOGFILE=/var/log/keepalived-httpd-state.log
echo "[Master]">>$LOGFILE
date >> $LOGFILE
------------------------------------------
vim /etc/keepalived/backup.sh 
#!/bin/bash
LOGFILE=/var/log/keepalived-httpd-state.log
echo "[Backup]">>$LOGFILE
date >> $LOGFILE
------------------------------------------
vim /etc/keepalived/fault.sh 
#!/bin/bash
LOGFILE=/var/log/keepalived-httpd-state.log
echo "[Fault]">>$LOGFILE
date >> $LOGFILE

最后启动keepalived
systemctl start keepalived
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

四、测试

1.主服务器设置MASTER

keepailved基于不同网段虚拟机的httpd服务做高可用_跨网段

keepailved基于不同网段虚拟机的httpd服务做高可用_apache_02

主上测试发现本机服务异常后,vip会漂移到backup主机,等主服务器的服务恢复后又漂移回来了,设置的nopreempt不生效。

2.主服务器设置BACKUP

测试将keepalived配置state状态修改为BACKUP后,nopreempt生效了。

keepailved基于不同网段虚拟机的httpd服务做高可用_apache_03

keepailved基于不同网段虚拟机的httpd服务做高可用_跨网段_04

五、报错处理

keepalived 报错WARNING - default user ‘keepalived_script‘ for script execution does not exist - please

#keepalived全局配置添加以下参数即可
script_user root
enable_script_security
}
  • 1.
  • 2.
  • 3.
  • 4.
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐

  • 浏览量 1113
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献29条内容