pacemaker+haproxy实现高可用

1.haproxy

haproxy简介
HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作
haproxy主机:server2—>172.25.25.2
后端服务器:server1 —>172.25.25.1
server4 —>172.25.25.4

1)安装haproxy

在Server2上安装haproxy
关闭多余的进程

# 安装
[root@server2 ~]# yum install -y rpm-build-4.8.0-37.el6.x86_64
[root@server2 ~]# rpmbuild -tb haproxy-1.6.11.tar.gz
[root@server2 ~]# cd rpmbuild/RPMS/
[root@server2 RPMS]# ls
x86_64
[root@server2 RPMS]# cd x86_64/
[root@server2 x86_64]# rpm -qpl haproxy-1.6.11-1.x86_64.rpm
[root@server2 x86_64]# rpm -ivh haproxy-1.6.11-1.x86_64.rpm
Preparing...                                                          ########################################### [100%]
   1:haproxy                                                          ########################################### [100%]
[root@server2 x86_64]# cd
[root@server2 ~]# tar zxf haproxy-1.6.11.tar.gz
[root@server2 ~]# cd haproxy-1.6.11
[root@server2 haproxy-1.6.11]# cd examples/
[root@server2 examples]# cp content-sw-sample.cfg /etc/haproxy/haproxy.cfg
[root@server2 examples]# cd /etc/haproxy/
[root@server2 haproxy]# ls
haproxy.cfg  haproxy.cfg.rpmsave

pacemaker+haproxy实现高可用_第1张图片
pacemaker+haproxy实现高可用_第2张图片
pacemaker+haproxy实现高可用_第3张图片
pacemaker+haproxy实现高可用_第4张图片
pacemaker+haproxy实现高可用_第5张图片

2)配置haproxy


[root@server2 haproxy]# id haproxy
uid=188(haproxy) gid=188(haproxy) groups=188(haproxy)
[root@server2 haproxy]# vim haproxy.cfg
global
        maxconn         10000
        stats socket    /var/run/haproxy.stat mode 600 level admin
        log             127.0.0.1 local0
        uid             188     #haproxy的组id
        gid             188     #haproxy的用户id,没有的话,需要创建
        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
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   }
        default_backend  static

# The static backend backend for 'Host: img', /img and /css.
backend static
        balance  roundrobin
        server   statsrv1 172.25.25.1:80 check inter 1000  #后端服务器
        server   statsrv2 172.25.25.4:80 check inter 1000  #后端服务器
[root@server2 haproxy]# vim /etc/security/limits.conf
haproxy          -       nofile          10000
# 启动服务
[root@server2 haproxy]# /etc/init.d/haproxy start
Starting haproxy:                                          [  OK  ]

Server1
[root@server1 ~]# /etc/init.d/httpd start

Server4
[root@server4 ~]# /etc/init.d/httpd start
浏览器访问172.25.25.2

pacemaker+haproxy实现高可用_第6张图片
pacemaker+haproxy实现高可用_第7张图片
pacemaker+haproxy实现高可用_第8张图片
这里写图片描述
srever1
这里写图片描述
srevre4
这里写图片描述
这里写图片描述
这里写图片描述
pacemaker+haproxy实现高可用_第9张图片
pacemaker+haproxy实现高可用_第10张图片

3)haproxy日志

[root@server2 haproxy]# vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514

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

local0.*                                               /var/log/haproxy.log
# 重启
[root@server2 haproxy]# /etc/init.d/rsyslog restart
[root@server2 haproxy]# cat /var/log/haproxy.log

# 在浏览器访问,再次查看日志可看到日志内容

pacemaker+haproxy实现高可用_第11张图片
这里写图片描述
pacemaker+haproxy实现高可用_第12张图片
这里写图片描述
这里写图片描述
pacemaker+haproxy实现高可用_第13张图片

4)haproxy算法

# 以source算法为例
[root@server2 haproxy]# vim /etc/haproxy/haproxy.cfg
backend static
       #balance  roundrobin
       balance  source  
       server   statsrv1 172.25.25.1:80 check inter 1000  #后端服务器
       server   statsrv2 172.25.25.4:80 check inter 1000  #后端服务器

[root@server2 haproxy]# /etc/init.d/haproxy reload

 浏览器访问172.25.25.2

这里写图片描述
这里写图片描述
反复刷新网页内容也不会变
pacemaker+haproxy实现高可用_第14张图片
关掉一个服务
这里写图片描述
刷新
pacemaker+haproxy实现高可用_第15张图片

5)动静分离

Server4
[root@server4 ~]# yum install -y php
[root@server4 ~]# cd /var/www/html/
[root@server4 html]# vim index.php

[root@server4 html]# /etc/init.d/httpd restart

Server2
[root@server2 haproxy]# vim /etc/haproxy/haproxy.cfg
frontend public
        use_backend     static2 if { path_end -i .php   }
        default_backend  static1
backend static1
        balance         roundrobin
        #balance         source
        server          statsrv1 172.25.25.1:80 check inter 1000
backend static2
        balance         roundrobin
        server          statsrv2 172.25.25.4:80 check inter 1000
[root@server2 haproxy]# /etc/init.d/haproxy reload
浏览器访问172.25.25.2/index.html
172.25.25.2/index.php

pacemaker+haproxy实现高可用_第16张图片
pacemaker+haproxy实现高可用_第17张图片
这里写图片描述

6)访问控制列表

[root@server2 haproxy]# vim /etc/haproxy/haproxy.cfg
frontend public
         acl blacklist src 172.25.25.250
         http-request deny if blacklist
[root@server2 haproxy]# /etc/init.d/haproxy reload
浏览器访问172.25.25.2
[root@server2 haproxy]# yum install httpd
[root@server2 haproxy]# vim /var/www/html/index.html
[root@server2 haproxy]# cat /var/www/html/index.html
此站点正在维护......
[root@server2 haproxy]# vim /etc/haproxy/haproxy.cfg
frontend public
         acl blacklist src 172.25.25.250
         http-request deny if blacklist
         errorloc 403 http://172.25.25.2:808
[root@server2 haproxy]# /etc/init.d/haproxy reload
[root@server2 haproxy]# vim /etc/httpd/conf/httpd.conf 
8080
[root@server2 haproxy]# /etc/init.d/haproxy reload
[root@server2 haproxy]# /etc/init.d/httpd start
浏览器访问172.25.25.2

pacemaker+haproxy实现高可用_第18张图片
pacemaker+haproxy实现高可用_第19张图片
pacemaker+haproxy实现高可用_第20张图片
vim /etc/haproxy/haproxy.cfg
pacemaker+haproxy实现高可用_第21张图片
更改apache端口号
这里写图片描述
重新加载httpd服务
这里写图片描述
浏览器访问
pacemaker+haproxy实现高可用_第22张图片

7)重定向

[root@server2 haproxy]# vim /etc/haproxy/haproxy.cfg
frontend public
         acl blacklist src 172.25.25.250
 redirect location http://www.baidu.com
[root@server2 haproxy]# /etc/init.d/haproxy reload
浏览器访问172.25.25.2

pacemaker+haproxy实现高可用_第23张图片
pacemaker+haproxy实现高可用_第24张图片

8)读写分离

Server2
[root@server2 haproxy]# vim /etc/haproxy/haproxy.cfg
frontend public
acl write method POST
       acl write method PUT
use_backend     static2 if write
[root@server2 haproxy]# /etc/init.d/haproxy reload
[root@server2 haproxy]# yum install -y php

Server1
[root@server1 html]# yum install -y php
[root@server1 ~]# cd /var/www/html/upload/
[root@server1 upload]# ls
index.php  upload_file.php
[root@server1 upload]# mv * ..
[root@server1 upload]# cd ..
[root@server1 html]# ls
index.html  index.php  upload  upload_file.php
[root@server1 html]# chmod 777 upload
[root@server1 html]# vim upload_file.php
&& ($_FILES["file"]["size"] < 2000000))
[root@server4 html]# /etc/init.d/httpd restart

Server4
[root@server4 html]# cd upload/
[root@server4 upload]# ls
index.php  upload_file.php
[root@server4 upload]# mv * ..
[root@server4 upload]# cd ..
[root@server4 html]# ls
index.html  index.php  l802  upload  upload_file.php
[root@server4 html]# vim upload_file.php 
&& ($_FILES["file"]["size"] < 2000000))
[root@server4 html]# /etc/init.d/httpd restart
浏览器访问172.25.25.2

pacemaker+haproxy实现高可用_第25张图片
pacemaker+haproxy实现高可用_第26张图片
pacemaker+haproxy实现高可用_第27张图片

2.安装配置pacemaker、corosync、crmsh

Pacemaker是一个集群资源管理器。它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性。

Corosync是集群管理套件的一部分,通常会与其他资源管理器一起组合使用它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了。Corosync是未来的发展方向。在以后的新项目里,一般采用Corosync,而hb_gui可以提供很好的HA管理功能,可以实现图形化的管理。另外相关的图形化有RHCS的套件luci+ricci,当然还有基于java开发的LCMC集群管理工具

crmsh is a cluster management shell for the Pacemaker High Availability stack.

实验环境:
节点:server2,server3
后端服务器:server1 ,server4
Server3和server2做相同的haproxy配置

Server3
[root@server3 ~]# rpm-ivh haproxy-1.6.11.x86_64.rpm
[root@server3 ~]# tar zxf haproxy-1.6.11.tar.gz
##从Server2上拷贝配置文件
[root@server2 ~]# scp /etc/haproxy/haproxy.cfg 172.25.25.3:/etc/haproxy/haproxy.cfg
##开启服务
[root@server3 ~]# /etc/init.d/haproxy start

安装pacemaker corosync crmsh

Server2
#安装
[root@server2 ~]# yum install -y pacemaker corosync
[root@server2 ~]# rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm
[root@server2 ~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
##更改配置文件
[root@server2 ~]# vim /etc/corosync/corosync.conf
--->内容见截图
##开启服务
[root@server2 ~]# /etc/init.d/corosync start
[root@server2 ~]# /etc/init.d/pacemaker start

/etc/corosync/corosync.conf文件内容
pacemaker+haproxy实现高可用_第28张图片
pacemaker+haproxy实现高可用_第29张图片
server3

[root@server3 ~]#  yum install -y pacemaker corosync
[root@server3 ~]#  yum install -y crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm
##从Server2上拷贝配置文件
[root@server2 ~]# scp /etc/corosync/corosync.conf 172.25.25.3:/etc/corosync

Server3
[root@server3 ~]# /etc/init.d/corosync start
[root@server3 ~]# /etc/init.d/pacemaker start

# 查看,两个节点都可以查看到
[root@server2 ~]# crm status

pacemaker+haproxy实现高可用_第30张图片
pacemaker+haproxy实现高可用_第31张图片
pacemaker+haproxy实现高可用_第32张图片

3.配置

两个节点任选一个配置就行
Server2
##只有两个节点所以不竞选
[root@server2 ~]# crm configure property noquorum-policy="ignore"
##禁用stonith
[root@server2 ~]# crm configure property stonith-enabled=false


#添加vip,haproxy
[root@server2 ~]# crm 
crm(live)# configure 
crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=172.25.25.100 cidr_netmask=24 op monitor interval=lmin
crm(live)configure# primitive haproxy lsb:haproxy op monitor interval=1min   
crm(live)configure# group hagroup vip haproxy  #将vip和haproxy绑定到一个组,使他们在同一个节点上运行
crm(live)configure# commit   #提交
crm(live)configure# bye

这里写图片描述
pacemaker+haproxy实现高可用_第33张图片

##查看
[root@server2 ~]# crm configure show
[root@server2 ~]# crm status

pacemaker+haproxy实现高可用_第34张图片
pacemaker+haproxy实现高可用_第35张图片

4.测试

1)down掉server2,查看状态

Server2
[root@server2 ~]# crm node standby
[root@server2 ~]# crm status

pacemaker+haproxy实现高可用_第36张图片
2)down掉server3.开启server2,查看状态

Server3
[root@server3 ~]# crm node standby

Server2
[root@server2 ~]# crm node online
[root@server2 ~]# crm status

这里写图片描述
pacemaker+haproxy实现高可用_第37张图片

3)同时down掉server2和server3,查看状态

[root@server2 ~]# crm node standby
[root@server2 ~]# crm status

pacemaker+haproxy实现高可用_第38张图片

5.Fence服务

#打开物理主机的fence服务
[root@foundation25 ~]# systemctl start fence_virtd.service 
[root@foundation25 ~]# systemctl status fence_virtd.service 
确保两个节点有fence_xvm
并且/etc/cluster/目录下有fence_xvm.key文件

pacemaker+haproxy实现高可用_第39张图片
pacemaker+haproxy实现高可用_第40张图片
这里写图片描述
这里写图片描述

#配置
[root@server2 cluster]# crm
crm(live)# configure 
crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="server2:test2;server3:test3" op monitor interval=1min
crm(live)configure# property stonith-enabled=ture #允许
crm(live)configure# commit

pacemaker+haproxy实现高可用_第41张图片

#查看
[root@server2 ~]# crm status

pacemaker+haproxy实现高可用_第42张图片

测试

# Fence服务在server2,haproxy服务在server3,所以,使server3的内核崩溃
[root@server3 cluster]# echo c > /proc/sysrq-trigger

这里写图片描述

在server2监控
[root@server2 cluster]# crm_mon

服务转到server2上
pacemaker+haproxy实现高可用_第43张图片

Fence服务将server3断电再打开
在Server3开启corosync服务
查看监控

pacemaker+haproxy实现高可用_第44张图片

你可能感兴趣的:(pacemaker+haproxy实现高可用)