haproxy负载均衡及高可用集群

时间:2022-04-14 03:15:59

 Haproxy

 HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整 合进您当前的架构中同时可以保护你的 web 服务器不被暴露到网络上。

、haproxy 实现web服务器的负载均衡

haproxy负载均衡及高可用集群

实验环境:rhel6.5    selinux and iptables disabled

实验主机: 172.25.27.1 (server1)   haproxy

172.25.27.2 (server2)            web1

172.25.27.3 (server3)            web2

172.25.27.4(server4)             haproxy

软件下载:http://haproxy.1wt.eu/

rpm 包方式:

rpmbuild -tb haproxy-1.6.11.tar.gz   #build rpm 包

rpm -ivh /root/rpmbuild/RPMS/x86_64/haproxy-1.6.11-1.x86_64.rpm

源码方式:

tar zxf haproxy-1.6.11.tar.gz

cd haproxy-1.6.11

make TARGET=linux26 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

配置:

[root@server1 ~]# cd /root/rpmbuild/BUILD/haproxy-1.6.11/examples

[root@server1 examples]# mv acl-content-sw.cfg /etc/haproxy/ 

[root@server1 examples]# cd /etc/haproxy/

[root@server1 haproxy]# mv acl-content-sw.cfg haproxy.cfg   

[root@server1 haproxy]# id haproxy

uid=188(haproxy) gid=188(haproxy) =188(haproxy)

[root@server1 haproxy]# vim haproxy.cfg    #编辑配置文件

global

        maxconn         65535  #并发最大连接数量

        stats socket    /var/run/haproxy.stat mode 600 level admin

        log             127.0.0.1 local0

        uid             188                  #用户  必须是本机查看显示的id

        gid             188                  #组  

        chroot          /var/empty

        Daemon                              #后台运行

defaults

        mode            http            #默认使用 http 的 7 层模式 tcp: 4 层

        log             global

        option          httplog            #http 日志格式

        option          dontlognull        #禁用空链接日志

        monitor-uri     /monitoruri         

        maxconn         8000

        timeout client  30s

        retries         2

        option redispatch

        timeout connect 5s

        timeout server  5s

        stats uri       /admin/stats   #haproxy 监控页面

# The public 'www' address in the DMZ

frontend public

        bind            172.25.27.1:80 name clear

        #bind            192.168.1.10:443 ssl crt /etc/haproxy/haproxy.pem

 

        #use_backend     static if { hdr_beg(host) -i img }

        #use_backend     static if { path_beg /img /css   }

        default_backend dynamic

 

# The static backend backend for 'Host: img', /img and /css.

backend dynamic

        balance         roundrobin      #负载均衡算法

        server          web1 172.25.27.2:80 check inter 1000

        server          web2 172.25.27.3:80 check inter 1000 检测心跳频率
/etc/init.d/haproxy start

修改别的限制:

1. 和nginx相同,从三个层面设置:  

2. 内核层面:  

3. [root@server1 haproxy]# sysctl -a | grep file  

4. fs.file-nr = 544    0   188465  

5. fs.file-max = 188465                      #此处内核所支持的最大连接数已满足  

6. 如果不满足需要修改配置文件:  

7. vim /etc/sysctl.conf    

8.   7 net.ipv4.ip_forward = 1             #开启内核路由功能  

9. 系统层面:  

10. vim /etc/security/limits.conf        #最后一行添加  

11.     haproxy          -      nofile          65535  

12. 应用层面:  

13. vim /etc/haproxy/haproxy.cfg   

14.      最大连接设置为65535  

 [root@server1 haproxy]# /etc /init.d/haproxy  start  #开启haproxy服务

haproxy负载均衡及高可用集群

开启server2 server3 上的apache

haproxy负载均衡及高可用集群

测试:

balance     roundrobin        #轮询模式下

haproxy负载均衡及高可用集群

 balance           source   #主备模式测试 

 haproxy负载均衡及高可用集群

宕掉server3上的apache 后测试

 haproxy负载均衡及高可用集群

二、 pacemaker+ corosync 实现对haproxy集群的高可用

在server4主机上安装haproxy,为了保持数据的一致性,直接从server1主机上把haproxy配置文件等远程复制过去

scp haproxy-1.6.11-1.x86_64.rpm serevr4:  

scp /etc/haproxy/haproxy.cfg server4:/etc/haproxy  

scp /etc/security/limits.conf server4:/etc/security  

vim /etc/haproxy/haproxy.cfg   

37         bind   172.25.27.100:80 name clear     #设置只有访问172.25.27.100才能访问集群资源

yum install -y pacemaker corosync         #sevrer1、server4两个节点都安装

[root@server1 ~]# cd /etc/corosync/

[root@server1 corosync]# cp corosync.conf.example  corosync.conf    #配置corosync配置文件,server1、server4上必须保持一致

[root@server1 corosync]# vim corosync.conf

 8         interface {

  9                 ringnumber: 0

 10                 bindnetaddr: 172.25.27.0

 11                 mcastaddr: 226.94.1.1

34 service{

 35         name:pacemaker

 36         ver:0

 37 }
[root@server1 ~]# /etc/init.d/corosync start    #启动服务

[root@server1 ~]# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y    #同样两个节点都安装

[root@server1 ~]# crm      #查看管理集群

crm(live)# configure 

crm(live)configure# show

node server1

node server4

property $id="cib-bootstrap-options" \

dc-version="1.1.10-14.el6-368c726" \

cluster-infrastructure="classic openais (with plugin)" \

expected-quorum-votes="2"

crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip= 172.25.27.100 cidr_netmask=24 op monitor interval=30s #添加ip

crm(live)configure# property stonith-enabled=false #禁掉fence功能

crm(live)configure# property no-quorum-policy=ignore #关闭集群对节点数量的检查,集群默认最少量台主机, 如果只是一台主机不能接管资源 shcrm(live)configure# show node server1 node server4 primitive vip ocf:heartbeat:IPaddr2 \ params ip="172.25.27.100" cidr_netmask="24" \ op monitor interval="30s" property $id="cib-bootstrap-options" \ dc-version="1.1.10-14.el6-368c726" \ cluster-infrastructure="classic openais (with plugin)" \ expected-quorum-votes="2" \ stonith-enabled="false" \ no-quorum-policy="ignore

查看ip

haproxy负载均衡及高可用集群

 主机端测试:

 haproxy负载均衡及高可用集群

[root@server1 ~]# /etc/init.d/corosync stop  #server1上的corosync关掉,造成人为宕机

此时ip已经漂移到了server4上,即此时集群服务已经由server4接管

haproxy负载均衡及高可用集群

crm(live)configure#  primitive haproxy lsb:haproxy op monitor interval=30s    #向集群添加haproxy 服务

crm(live)configure# commit 

crm(live)configure# show

node server1 \

attributes standby="off"

node server4

primitive haproxy lsb:haproxy \

op monitor interval="30s"

primitive vip ocf:heartbeat:IPaddr2 \

params ip="172.25.27.100" cidr_netmask="24" \

op monitor interval="30s"

property $id="cib-bootstrap-options" \

dc-version="1.1.10-14.el6-368c726" \

cluster-infrastructure="classic openais (with plugin)" \

expected-quorum-votes="2" \

stonith-enabled="false" \

no-quorum-policy="ignore"

发现此时viphaproxy 不在一台主机上,造成资源飘移,所以让他们绑定在一个组上

crm(live)configure# group westos vip haproxy    #创建组

crm(live)configure#  commit

此时开启server1server4上的haproxy ,关闭此时ip在的主机上的corosync,发现服务仍能正常访问,实现了群高可用

 haproxy负载均衡及高可用集群

crm(live)configure# property stonith-enabled=true   #开启fence功能

crm(live)configure# commit 

[root@foundation27 corosync]# systemctl start fence_virtd  #开启主机上的fence功能

[root@server1 ~]# yum install -y fence-virt.x86_64 fence-agents.x86_64 #server1server4上都安装,同时设置corosync的开机自启动

crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="server1:server1;server4:server4" onitor 
interval=1min      #添加fence资源,并做好集群节点名和真实server的名字映射  

crm(live)configure# commit 

crm(live)configure# show

node server1 \

attributes standby="off"

node server4

primitive haproxy lsb:haproxy \

op monitor interval="30s"

primitive vip ocf:heartbeat:IPaddr2 \

params ip="172.25.27.100" cidr_netmask="24" \

op monitor interval="30s"

primitive vmfence stonith:fence_xvm \

params pcmk_host_map="server1:server1;server4:server4" \

op monitor interval="1min"

group westos vip haproxy

property $id="cib-bootstrap-options" \

dc-version="1.1.10-14.el6-368c726" \

cluster-infrastructure="classic openais (with plugin)" \

expected-quorum-votes="2" \

stonith-enabled="true" \

no-quorum-policy="ignore"

crm(live)configure#

此时重启server4后,server4会自动加入集群,不断的重启sever1,server4在机子启来后自动加入集群,haproxy服务也自动的被接管

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.westos.org.server3</hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.server2.com </hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.westos.org.server3</hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.server2.com </hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.westos.org.server3</hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.server2.com </hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.westos.org.server3</hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.server2.com </hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.westos.org.server3</hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.server2.com </hi>

[root@foundation27 corosync]# curl 172.25.27.100

<hi> www.westos.org.server3</hi>
至此 haproxy 的基于 pacemaker 结合 corosync 的高可用负载均衡集群部署完毕

#对集群资源的管理:

crm(live)resource# show

 Resource Group: westos

     vip (ocf::heartbeat:IPaddr2): Started 

     haproxy (lsb:haproxy): Started 

 vmfence (stonith:fence_xvm): Stopped 

crm(live)resource# stop vip   #停掉vip

crm(live)resource# show

 Resource Group: westos

     vip (ocf::heartbeat:IPaddr2): Stopped 

     haproxy (lsb:haproxy): Stopped   #由于ip没有了,此时的haproxy停止了

 vmfence (stonith:fence_xvm): Stopped

 

#对集群节点的管理:

crm(live)# node

crm(live)node# standby  #停掉server1节点

crm(live)node# show    

server1: normal

standby: on

server4: normal

crm(live)node# online   #开启server1节点

crm(live)node# show

server1: normal

standby: off

server4: normal

crm(live)node#