一.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有更出色的负载均衡速度。
6HAProxy可以对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

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第1张图片


安装包依赖

wKioL1nIiUyR7TxUAAAaaxTIPtM245.png

wKioL1nIiUygTluGAAAYKs2HVz4224.png


配置指定路径

wKiom1nIiYfi86O1AAA3hJhdIwA412.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第2张图片


为了方便创建rpm包,先安装rpmbuild包

wKioL1nIiU3xGZ81AAApMgaEd1s788.png


编译后做成*.rpmLinux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第3张图片


安装做好后的haproxy包

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第4张图片


2.配置haproxy

复制模版配置文件

wKioL1nIi0WjQh7AAAAafvqzceI491.png


创建haproxy用户和添加内核最大连接数量8000

wKioL1nIi0WA5aujAABWqYxQRjo902.png

wKiom1nIi4CRttBVAAAaiYHHjJk058.png


配置主配置文件

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第5张图片


3.测试

服务端口已经打开

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第6张图片


可以轮询

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第7张图片


haproxy监控页面正常

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第8张图片


haproxy正常

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第9张图片


五.Haproxy日志的配置

vim /etc/rsyslog.conf


测试显示日志正常

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第10张图片


六.调度算法的设置


wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

1.默认为rr轮询


2.设置权重weight 2

wKiom1nIjuWzIXhcAABA9TcweHM847.png

wKiom1nIjuXAyUwBAABOTOiF-v8449.png


server2的权重变大


3.设置source算法原地址保持

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第11张图片

wKioL1nIjqqSgJrdAAAs349wc9A344.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第12张图片


七.设置动态页面访问php

1.载server1上配置文件

如果是php结尾的,转到dynamic


2.在server3上安装php,配置httpd


设置访问页面vim /var/www/html/index.php


设置httpd默认优先访问index.php



3.在客户机测试

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第13张图片


八.设置acl禁止访问用户

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第14张图片

客户机172.25.29.250无法访问

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第15张图片



九.acl设置重定向


wKiom1nIi4HjoMCWAAAW0CO-3wo069.png


设置访问错误的重定向到本机的8080端口

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第16张图片

将本机的httpd改为8080端口

wKiom1nIkPnCaepNAAAbGF_U8Zo174.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第17张图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第18张图片

十.acl设置动态写入

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

1.设置配置



2.在server2上安装php,设置好所需要的测试文件

在默认的html下放置上传文件的upload_file.php upload目录


wKioL1nIkL6yCymmAAAm4WGpAVo122.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第19张图片


3.设置好权限,并将文件传给server3

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第20张图片


在server3上设置好权限

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第21张图片


4.在客户机上测试

可以上传图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第22张图片

可以访问images目录下的图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第23张图片

十一.安装高可用pacemaker+corosync集群


1.安装配置

wKiom1nIlB_CUu9kAAAVUhzB5dU270.png

wKioL1nIk-TjyyEpAAA3rUPlkjg320.png


bindnetaddr 设置网段

多波设置改变一个mcastaddr和mcastport

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第24张图片

底下添加service,0表示自动启动pacemarker

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第25张图片


server4与server1同样配置

wKioL1nIk-SxuWN3AABHH8g6l5o176.png

wKiom1nIlCCw_h1kAAAV0TrAOAI711.png


2.校验集群配置文件,显示错误,需要安装接口插件crmsh

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第26张图片


crmsh作为pacemaker的接口,而安装crmsh需要依赖psshLinux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第27张图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第28张图片


3.两边启动corosync服务后,在server1上 crm_mon  监控集群健康状态,server1与server4 online

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第29张图片


启动需要fence

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第30张图片


4.在server4上使用crm相关命令管理集群

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设备,因此在配置集群的全局属性时要对其禁用
       ②、当一个集群没有法定票数时,资源是不会正常转移的,当一个节点出现故障时,资源不会正常的转移到正常的节点上,就会导致所有的资源都故障了。所以,应该定义法定票数不足时做忽略而不是停止所有资源

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第31张图片



5.安装fence

在server1上安装fence

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第32张图片


在客户机上安装fence


wKioL1nImP3CBhleAAAYBu-cOf4539.png

wKiom1nImTjAjSqQAAAqb_CxoSw473.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第33张图片


端口1229已经开打

wKiom1nImTeiJaOjAAAyuzlK4O0543.png


6.在server4上配置fence机制


在server1上crm_mon监控集群健康状态,fence已经启动正常


7.在server4上配置虚拟IP,并重启corosync服务


在server1上crm_mon监控集群健康状态,vip已经启动正常


Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第34张图片


8.测试fence机制

pacemaker节点数需大于2,因为只有两个节点没有办法提供仲裁,忽略这个系统条件,要不然无法执行

关闭server4上节点,服务到server1上

wKiom1nInqOQQ4OHAAA__0Ycf04059.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第35张图片


Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第36张图片



附:服务器自带内置fence设置,两台机器的为fence IP 为172.25.254.203    172.25.254.204



十二.添加负载均衡Haproxy

1.server4配置haproxy

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

修改绑定的VIP


将server1的haproxy传给server4


2.server4安装haproxy

在高可用上配置haproxy

crm node standby操作节点的备用属性以确定资源是否可在此节点上运行

在资源里更新server1 的haproxy


3.server4节点上线,集群正常,VIP已经到server4

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第37张图片



4.测试,停止server4节点,服务到server1

wKioL1nIogLxG5PKAABFo3DBNhA890.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第38张图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第39张图片


server4网卡down掉,服务到server1

wKioL1nIogKxORwHAAAAhXWeJuI420.png

wKiom1nIoj7xFDPYAAASKqNnEiY519.png

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第40张图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第41张图片

Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence_第42张图片