rhel HA + HAProxy 实现高可用集群及负载均衡

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

包括 GitHub、Bitbucket[3]、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和 Tuenti[7]在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。

 

实验环境:

server1: ip:172.25.61.1

server2: ip:172.25.61.2

server3: ip:172.25.61.3

server4: ip:172.25.61.4

 

server1,server4 上安装rhel_ha高可用集群组件,安装haproxy负责负载均衡,来访问server2,server3上的服务

 

server1,server4:

yum install rpm-build -y    

yum install -y gcc pcre-devel     ##rpmbuild所依赖的包

rpmbuild -tb haproxy-1.6.11.tar.gz 

cd ~/rpmbuild/RPMS/x86_64/

rpm -ivh haproxy-1.6.11-1.x86_64.rpm 

rpm -ql haproxy-1.6.11-1.x86_64.rpm

rhel HA + HAProxy 实现高可用集群及负载均衡_第1张图片

tar  zxf haproxy-1.6.11.tar.gz

cp haproxy-1.6.11/examples/content-sw-sample.cfg /etc/haproxy/haproxy.cfg

groupadd -g 200 haproxy

useradd -u 200 -g 200 haproxy

cd /etc/haproxy/

vim haproxy.cfg

 

global
        maxconn         10000
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             200
        gid             200
        chroot          /var/empty
        daemon


defaults

        mode            http
        log             global
        option          httplog
        option          dontlognull
        monitor-uri     /monitoruri
        maxconn         8000
        timeout client  30s
        stats uri       /admin/stats
        option prefer-last-server
        retries         2
        option redispatch
        timeout connect 5s
        timeout server  5s

# The public 'www' address in the DMZ
frontend public
        bind            *:80 name clear       ##监听80端口
        #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 static

# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin               ##负载均衡算法为轮循
        server          statsrv1 172.25.61.2:80 check inter 1000             check inter 1000:检测心跳频率
        server          statsrv2 172.25.61.3:80 check inter 1000

 

/etc/init.d/haproxy start

测试:

rhel HA + HAProxy 实现高可用集群及负载均衡_第2张图片

 

server1:

/etc/init.d/ricci start

/etc/init.d/luci start

 

server4:

/etc/init.d/ricci start

 

主机:

systemctl start fence_virtd

通过浏览器访问https://server1:8084

添加resource

rhel HA + HAProxy 实现高可用集群及负载均衡_第3张图片

添加service group

rhel HA + HAProxy 实现高可用集群及负载均衡_第4张图片

rhel HA + HAProxy 实现高可用集群及负载均衡_第5张图片

rhel HA + HAProxy 实现高可用集群及负载均衡_第6张图片

可以看到当前haproxy服务在server1上运行

rhel HA + HAProxy 实现高可用集群及负载均衡_第7张图片

测试:

rhel HA + HAProxy 实现高可用集群及负载均衡_第8张图片

将web服务切换到server4上

rhel HA + HAProxy 实现高可用集群及负载均衡_第9张图片

测试:

rhel HA + HAProxy 实现高可用集群及负载均衡_第10张图片

 

haproxy的相关设置

访问haproxy管理工具

rhel HA + HAProxy 实现高可用集群及负载均衡_第11张图片

显示haproxy服务是否正常

rhel HA + HAProxy 实现高可用集群及负载均衡_第12张图片

haproxy日志

vim /etc/rsyslog.conf

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

local0.*                                                /var/log/haproxy.log

*.info;mail.none;authpriv.none;cron.none;local0.none    /var/log/messages

/etc/init.d/rsyslog restart

vim /var/log/haproxy.log

Sep 25 09:17:05 localhost haproxy[13011]: 172.25.61.250:39100 [25/Sep/2018:09:17:05.974] public static/statsrv1 0/0/0/0/0 200 293 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"
Sep 25 09:17:08 localhost haproxy[13011]: 172.25.61.250:39100 [25/Sep/2018:09:17:05.975] public static/statsrv2 2361/0/1/0/2362 200 285 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"
Sep 25 09:17:09 localhost haproxy[13011]: 172.25.61.250:39100 [25/Sep/2018:09:17:08.336] public static/statsrv1 730/0/0/0/730 200 293 - - ---- 1/1/0/1/0 0/0 "GET / HTTP/1.1"

 

当在defaults中加入  stats auth admin:westos  后,访问http://172.25.61.1/admin/stats时需要输入密码进行验证

rhel HA + HAProxy 实现高可用集群及负载均衡_第13张图片

 

当server1和server2上的服务都停止时,使用本机的服务

backend static
        balance         roundrobin
        server          statsrv1 172.25.61.2:80 check inter 1000
        server          statsrv2 172.25.61.3:80 check inter 1000
        server backup 127.0.0.1:8080 backup

rhel HA + HAProxy 实现高可用集群及负载均衡_第14张图片

haproxy 黑名单

frontend public
        bind            *: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   }

        acl blacklist src 172.25.61.250
        http-request deny if blacklist   ##拒绝blacklist名单中的ip进行访问,当blacklist名单中的ip进行访问时,会出现403报错
        default_backend static

 

rhel HA + HAProxy 实现高可用集群及负载均衡_第15张图片

 

frontend public
        bind            *: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   }
        
        acl blacklist src 172.25.61.250
        http-request deny if blacklist
        errorloc 403 http://172.25.61.1:8080         ##当出现403报错时,跳转到http://172.25.61.1:8080
        default_backend static

rhel HA + HAProxy 实现高可用集群及负载均衡_第16张图片

frontend public
        bind            *: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   }

        acl blacklist src 172.25.61.250
        redirect location http://172.25.61.1:8080 if blacklist     ##当blacklist 名单中的ip进行访问时,直接重定向到http://172.25.61.1:8080
        default_backend static

 

根据不同条件访问不同页面

frontend public
        bind            *: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   }
        use_backend dynamic if { path_end -i .php }        ##当网址最后为.php时访问dynamic
        default_backend static

# The static backend backend for 'Host: img', /img and /css.
backend static
        balance         roundrobin
        server          statsrv1 172.25.61.2:80 check inter 1000

        #server backup 127.0.0.1:8080 backup


backend dynamic
        balance         roundrobin
        server          statsrv2 172.25.61.3:80 check inter 1000

当网址不是以.php结尾时访问static中的server

rhel HA + HAProxy 实现高可用集群及负载均衡_第17张图片

当网址以.php结尾时访问dynamic中的server

rhel HA + HAProxy 实现高可用集群及负载均衡_第18张图片

 

 

 

你可能感兴趣的:(rhel HA + HAProxy 实现高可用集群及负载均衡)