一.Haproxy简介
Haproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
二.HAProxy的特点
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。
三.高可用corosync+pacemaker介绍
高可用架构由两个核心部分组成,一个是心跳检测,判断服务器是否正常运行;一个是资源转移,用来将公共资源在正常服务器和故障服务器之间搬动。整个运行模式就是心跳检测不断的在网络中检测各个指定的设备是否能够正常响应,如果一旦发生设备故障,就由资源转移功能进行应用的切换,以继续提供服务。
corosync,心跳信息传输层,它是运行在每一个主机上的一个进程 。
pacemaker是一个集群管理器。它利用推荐集群基础设施(OpenAIS 或heartbeat)提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。用于资源转移。
四.环境配置
客户机:172.25.29.250
服务端
server1:172.25.29.1 haproxy httpd8080 corosync+pacemaker
server4:172.25.29.4 corosync+pacemaker
RS:
server2:172.25.29.2 httpd
server3:172.25.29.3 httpd
1.安装haproxy
安装包依赖
配置指定路径
为了方便创建rpm包,先安装rpmbuild包
编译后做成*.rpm
安装做好后的haproxy包
2.配置haproxy
复制模版配置文件
创建haproxy用户和添加内核最大连接数量8000
配置主配置文件
3.测试
服务端口已经打开
可以轮询
haproxy监控页面正常
haproxy正常
五.Haproxy日志的配置
vim /etc/rsyslog.conf
测试显示日志正常
六.调度算法的设置
1.默认为rr轮询
2.设置权重weight 2
server2的权重变大
3.设置source算法原地址保持
七.设置动态页面访问php
1.载server1上配置文件
2.在server3上安装php,配置httpd
设置访问页面vim /var/www/html/index.php
设置httpd默认优先访问index.php
3.在客户机测试
八.设置acl禁止访问用户
客户机172.25.29.250无法访问
九.acl设置重定向
设置访问错误的重定向到本机的8080端口
将本机的httpd改为8080端口
十.acl设置动态写入
1.设置配置
2.在server2上安装php,设置好所需要的测试文件
在默认的html下放置上传文件的upload_file.php upload目录
3.设置好权限,并将文件传给server3
在server3上设置好权限
4.在客户机上测试
可以上传图片
可以访问images目录下的图片
十一.安装高可用pacemaker+corosync集群
1.安装配置
bindnetaddr 设置网段
多波设置改变一个mcastaddr和mcastport
底下添加service
server4与server1同样配置
2.校验集群配置文件,显示错误,需要安装接口插件crmsh
crmsh作为pacemaker的接口,而安装crmsh需要依赖pssh
3.两边启动corosync服务后,在server1上 crm_mon 监控集群健康状态,server1与server4 online
STONITH
shoot the other node in the head,这个RA类型主要是做节点隔离的,专为配置stonith设备耐用。
使用STONITH主要目的就是为了避免由于网络原因,节点之间不能完全通信(比如分为了两部分,左边3台,右边2台),左边的3台能收到各自的心跳信息,右边的2台也可以收到各自的心跳信息,就是左边部分和右边部分收不到各自的心跳信息,因此,它们都各自以为对方故障了,就会各自重新推选出一台做为DC(Designated Coordinator),从而出现了两个集群,这就导致了资源争用;如果恰好双方都往其共享存储写数据,很可能就会导致文件系统崩溃,这种现象就叫做集群分裂(brain-split)。
为了避免集群分裂,就出现了法定票数(quorum,票数>半数票数的集群成为满足法定票数)这一说法,就是在集群通信故障时,为了避免资源抢占,应该让一方放弃成为集群,具体应该哪方放弃呢?这就是投票的结果了,只有具有法定票数的一方才有资格做为集群,相反的一方就应该退出集群,但它放弃后并不代表服务停止,所以应该让其释放资源,关闭电源。stonith设备就是在这里用的,要让退出集群的设备彻底失效,电源交换机就是这个原理了
而如果一个集群只有两个节点的话,这又是一种特殊的集群,万一出现集群分裂后,它们双方可能都不会具有法定票数,那结果可想而知,资源不会转移,导致整个资源都故障了,因为没有仲裁设备
说这么多,就是为了说明下面两个比较重要的概念
①、corosync默认启用了stonith功能,而我们要配置的集群并没有stonith设备,因此在配置集群的全局属性时要对其禁用
②、当一个集群没有法定票数时,资源是不会正常转移的,当一个节点出现故障时,资源不会正常的转移到正常的节点上,就会导致所有的资源都故障了。所以,应该定义法定票数不足时做忽略而不是停止所有资源
5.安装fence
在server1上安装fence
在客户机上安装fence
端口1229已经开打
6.在server4上配置fence机制
在server1上crm_mon监控集群健康状态,fence已经启动正常
7.在server4上配置虚拟IP,并重启corosync服务
在server1上crm_mon监控集群健康状态,vip已经启动正常
8.测试fence机制
关闭server4上节点,服务到server1上
修改绑定的VIP
将server1的haproxy传给server4
2.server4安装haproxy
在高可用上配置haproxy
crm node standby操作节点的备用属性以确定资源是否可在此节点上运行
在资源里更新server1 的haproxy
3.server4节点上线,集群正常,VIP已经到server4
4.测试,停止server4节点,服务到server1
server4网卡down掉,服务到server1