Keepalive+Haproxy部署

本文档详述了一个实验环境的搭建过程,旨在通过Keepalived在两台服务器间实现VIP漂移,确保服务高可用。同时,结合Haproxy进行负载均衡,当Master节点宕机时,VIP自动切换至Backup节点,保持对外服务的连续性。实验涉及关闭防火墙、安装必要软件、配置Keepalived和Haproxy,并通过Nginx网页验证负载均衡效果。
摘要由CSDN通过智能技术生成

实验环境:

IP备注
172.16.3.225/21Keepalive-Master+Haproxy+Nginx
172.16.3.226/21Keepalive-Backup+Haproxy+Nginx
172.16.3.200/24VIP

注:这里因为自己的环境有限为了更好地测试,所以就用两台机器。

实验效果

  • 最终的实验效果是通过一个虚拟IP反向代理两台Nginx,当我们Keepalive-Master宕机VIP会转到Keepalive-Backup并且还可以正常对外访问

实验步骤

1、部署Keepalive

1)关闭两台Firewalls、Selinux

[root@bogon ~]# setenforce 0 && sed -i  's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
[root@bogon ~]# systemctl  stop firewalld  &&  systemctl  disable firewalld

2)两台主机安装环境所需的软件

[root@bogon ~]# yum install epel-release keepalived haproxy  bzip2-devel  popt-devel kernel-devel openssl-devel -y
[root@bogon ~]# yum install nginx -y

3)配置一下Master配置文件

[root@bogon ~]# cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived

global_defs {
   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_MASTER           # 两台ID不能一致
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER                        # 指定A节点为主节点 备用节点上设置为BACKUP即可
    interface ens160                    # 绑定虚拟IP的网络接口
    virtual_router_id 51                # VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
    priority 100                        # 主节点的优先级(1-254之间),备用节点必须比主节点优先级低
    advert_int 1                        # 组播信息发送间隔,两个节点设置必须一样
    authentication {                    # 设置验证信息,两个节点必须一致
        auth_type PASS					 
        auth_pass 1111					 
    }
    virtual_ipaddress {                 # 指定虚拟IP, 两个节点设置必须一样
            172.16.3.200/24				
} 
}
EOF

4)配置一下Backup的配置文件

[root@bogon ~]# cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived

global_defs {
   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_NODE           # 两台ID不能一致
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP                        # 指定A节点为主节点 备用节点上设置为BACKUP即可
    interface ens160                    # 绑定虚拟IP的网络接口
    virtual_router_id 51                # VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
    priority 90                         # 主节点的优先级(1-254之间),备用节点必须比主节点优先级低
    advert_int 1                        # 组播信息发送间隔,两个节点设置必须一样
    authentication {                    # 设置验证信息,两个节点必须一致
        auth_type PASS					 
        auth_pass 1111					 
    }
    virtual_ipaddress {                 # 指定虚拟IP, 两个节点设置必须一样
            172.16.3.200/24				
} 
}
EOF

4)验证一下VIP是否已经映射出

[root@bogon ~]# ip a | grep '172.16.3.200'
inet 172.16.3.200/24 scope global ens160

2、修改一下Nginx网页方便验证

[root@bogon ~]# echo "172.16.3.225" > /usr/share/nginx/html/index.html 
[root@bogon ~]# echo "172.16.3.226" > /usr/share/nginx/html/index.html

3、配置Haproxy

1)创建日志目录

[root@bogon ~]# mkdir /var/log/haproxy
[root@bogon ~]# chmod a+w /var/log/haproxy

2)开启rsyslog记录haproxy日志

[root@bogon ~]# vim /etc/rsyslog.conf 
# Provides UDP syslog reception
$ModLoad imudp    # 
$UDPServerRun 514

# haproxy log
local0.*    /var/log/haproxy/haproxy.log  # 添加

3)修改/etc/sysconfig/rsyslog文件

[root@bogon ~]# vim /etc/sysconfig/rsyslog
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0 -c 2"
[root@bogon ~]# systemctl restart rsyslog

4)在Master配置Haproxy配置

[root@bogon ~]# cat > /etc/haproxy/haproxy.cfg << EOF
###########全局配置#########
global
    log 127.0.0.1 local0 info  # 日志类型,为不影响性能使用err
    daemon
    #nbproc 1     #进程数量 
    maxconn 4096  #最大连接数 
    #user haproxy  #运行用户  
    #group haproxy #运行组 
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid

########默认配置############
    defaults
        log global
        mode http          #默认模式{ tcp|http|health }
        option httplog       #日志类别,采用httplog
        option dontlognull   #不记录健康检查日志信息  
        retries 2            #3次连接失败就认为服务器不可用
        option forwardfor    except 127.0.0.0/8  #后端服务获得真实ip,在HTTP请求中添加"HTTP_X_FORWARDED_FOR"字段
        option httpclose     #请求完毕后主动关闭http通道
        option abortonclose  #服务器负载很高,自动结束比较久的链接  
        maxconn 10000        #最大连接数  
        timeout connect 5m   #连接超时   m(分钟)
        timeout client 1m    #客户端超时  
        timeout server 1m    #服务器超时  
        timeout check 10s    #心跳检测超时  s(秒)
        balance leastconn    #负载均衡方式,最少连接 

########后端配置############
     listen test
         bind *:8080
         mode http
         #balance roundrobin
         timeout server 15s
         timeout connect 15s
         server web01 172.16.3.225:80 check port 80 inter 5000 fall 5
         server web02 172.16.3.226:80 check port 80 inter 5000 fall 5
EOF
[root@bogon ~]# systemctl start haproxy

5)Backup上配置Haproxy

[root@bogon ~]# cat > /etc/haproxy/haproxy.cfg << EOF
###########全局配置#########
global
    log 127.0.0.1 local0 info  # 日志类型,为不影响性能使用err
    daemon
    #nbproc 1     #进程数量 
    maxconn 4096  #最大连接数 
    #user haproxy  #运行用户  
    #group haproxy #运行组 
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid

########默认配置############
    defaults
        log global
        mode http          #默认模式{ tcp|http|health }
        option httplog       #日志类别,采用httplog
        option dontlognull   #不记录健康检查日志信息  
        retries 2            #3次连接失败就认为服务器不可用
        option forwardfor    except 127.0.0.0/8  #后端服务获得真实ip,在HTTP请求中添加"HTTP_X_FORWARDED_FOR"字段
        option httpclose     #请求完毕后主动关闭http通道
        option abortonclose  #服务器负载很高,自动结束比较久的链接  
        maxconn 10000        #最大连接数  
        timeout connect 5m   #连接超时   m(分钟)
        timeout client 1m    #客户端超时  
        timeout server 1m    #服务器超时  
        timeout check 10s    #心跳检测超时  s(秒)
        balance leastconn    #负载均衡方式,最少连接 

########后端配置############
     listen test
         bind *:8080
         mode http
         #balance roundrobin
         timeout server 15s
         timeout connect 15s
         server web01 172.16.3.225:80 check port 80 inter 5000 fall 5
         server web02 172.16.3.226:80 check port 80 inter 5000 fall 5
EOF
[root@bogon ~]# systemctl start haproxy

6)测试一下haproxy代理是否配置成功

[root@bogon ~]# curl http://172.16.3.200:8080
172.16.3.225
[root@bogon ~]# curl http://172.16.3.200:8080
172.16.3.226

注:出现这种负载说明没有问题

现在开始测试keepalive

注:将Master宕机看一下vip是否会转移到Backup

[root@bogon ~]# systemctl stop keepalived
[root@bogon ~]# ip a | grep 200			# 如果Backup上可以查看到说明没有问题,再次访问一下VIP看一下是否可以正常访问
inet 172.16.3.200/24 scope global ens160
# 如果还可以访问说明实验成功
[root@bogon ~]# curl http://172.16.3.200:8080
172.16.3.225
[root@bogon ~]# curl http://172.16.3.200:8080
172.16.3.226
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

运维生涯记录

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

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

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

打赏作者

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

抵扣说明:

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

余额充值