Keepalived+Haproxy搭建高可用Web群集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Keepalived+Haproxy搭建高可用Web群集相关的知识,希望对你有一定的参考价值。

通过博文:Haproxy服务调优及配置内容详解
已经可以了解Haproxy服务的作用;
通过博文:利用Keepalived实现双机热备详解
已经可以了解到Keepalived服务的作用;

Haproxy服务是搭建群集调度的一种工具,性能好。但是现实环境中肯定需要和Keepalived服务一起使用,避免造成单点故障。

一、案例环境:

技术图片

这篇博文其实跟博文:搭建LVS(DR模式)+Keepalived高可用群集,可跟做!!!
差不多,只是把负责搭建群集环境的LVS换成了Haproxy。其实也没什么好写的,本意是不想写的。但是其中有几个知识点,必须要了解,否则这个环境不可能实现。

二、案例实施

案例实施大致步骤:
1.为了简单起见,每个服务器(不管是Web节点和是调度服务器),实际环境中,应该开启防火墙相关流量;
2.主调度服务器上安装Keepalived和Haproxy服务;
3.配置Web节点服务器,安装Web服务(APache、nginx都可以)创建虚拟IP地址,所有配置都一样但是建议主页不要一样,这样能看出效果,实际环境中网站主页内容必须一样,可以搭建NFS服务器等来同步网页内容;
4.客户机测试访问主Haproxy服务器地址(能否访问到Web页面);
5.从调度服务器安装Keepalived和Haproxy服务;
6.客户机访问漂移IP地址(能否访问成功);

关于服务具体较少及软件包获取方式,可以参考博文:利用Keepalived实现双机热备详解
Haproxy服务调优及配置内容详解

具体步骤:

(1)配置主调度器服务器

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
//关闭防火墙与SELinux
[root@localhost ~]# yum -y install keepalived pcre-devel bzip2-devel
//安装相应的服务及工具
[root@localhost ~]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/haproxy-1.5.19/
[root@localhost haproxy-1.5.19]# make TARGET=linux26
[root@localhost haproxy-1.5.19]# make install
//安装Haproxy服务
[root@localhost ~]# mkdir /etc/haproxy
[root@localhost ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/
[root@localhost ~]# vim /etc/haproxy/haproxy.cfg
//编写Haproxy服务的配置文件
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen  appli1-rewrite 0.0.0.0:80
        option httpchk GET /index.html
        balance roundrobin
        server  app1_1 192.168.1.3:80 check inter 2000 rise 2 fall 5
        server  app1_2 192.168.1.4:80 check inter 2000 rise 2 fall 5
[root@localhost ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@localhost ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy 
[root@localhost ~]# chmod +x /etc/init.d/haproxy 
[root@localhost ~]# chkconfig --add /etc/init.d/haproxy 
[root@localhost ~]# /etc/init.d/haproxy start
Starting haproxy (via systemctl):                          [  确定  ]
//编写服务启动脚本并启动服务             
[root@localhost ~]# vim /etc/keepalived/keepalived.conf 
//编写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_DEVEL1


vrrp_instance VI_1 
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication 
        auth_type PASS
        auth_pass 1111
    
    virtual_ipaddress 
        192.168.1.254
    

//配置文件只留这些,剩下的建议注释或删除
[root@localhost ~]# systemctl start keepalived
//启动Keepalived服务

(2)配置Web节点服务器

两台Web节点服务器,配置几乎一样,只有网页内容不一样,这里就拿一个为例:

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo aaa > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
//安装并启动http服务

两台Web节点服务器都已配置完毕可以通过主调度器的IP地址进行访问!

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.254
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
[root@localhost network-scripts]# ifup lo
[root@localhost network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.1.254  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
//配置虚拟IP地址
[root@localhost ~]# route add -host 192.168.1.254 dev lo:0
//添加本机路由
[root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore  =  1
net.ipv4.conf.all.arp_announce  =  2
net.ipv4.conf.default.arp_ignore  =  1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore  =  1
net.ipv4.conf.lo.arp_announce  = 2
[root@localhost ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
//修改内核参数

两台Web节点配置到这里,就可以使用漂移IP地址进行访问!虽然是使用漂移IP进行访问,但是当主调度器宕机,客户端也就不能访问Web节点服务器了。所以需要搭建从调度器(越多越好)!

(3)配置从调度器服务器

从调度服务器配置几乎和主调度器配置一样,但是Keepalived服务中的路由器ID、优先级、热备状态不一样,剩下的就是一模一样!所以这里就不介绍了!相信大家看完前几篇博文,都不用看博文就可以做出来的。

主、从调度器配置完毕后,可以测试主调度器宕机,还能不能访问!(本人测试没问题)大家自行测试!

使用Haproxy服务搭建的群集环境,可以很清除的看出群集轮询的状态!

这样就可以很好的避免单点故障带来的损失!

实际环境中,肯定要搭建NFS共享存储来同步网站主页内容,NFS共享存储很基础的服务,这里就不介绍了!

建议搭建NFS共享存储,来保证Web节点服务内容一致(实际环境中肯定是这样做的)!

———————— 本文至此结束,感谢阅读 ————————

以上是关于Keepalived+Haproxy搭建高可用Web群集的主要内容,如果未能解决你的问题,请参考以下文章

Haproxy+Keepalived(双机热备)搭建高可用web架构

keepalived+Haproxy搭建高可用Web群集

keepalived+Haproxy搭建高可用Web群集

高可用篇之Keepalived (HAProxy+keepalived 搭建高可用负载均衡集群)

搭建高可用负载均衡器: haproxy+keepalived

Kubernetes云原生实战03 搭建高可用负载均衡器(Keepalived 和 HAproxy)