Keepalive+Haproxy部署

  • Post author:
  • Post category:其他




实验环境:

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

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



实验效果

  • 最终的实验效果是通过一个虚拟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



版权声明:本文为qq_43164571原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。