Linux的企业-高可用集群Haproxy+corosync+pacemaker+fence

简介:

一.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

wKiom1nIiYeg0aKTAADWPAYI4dQ998.png


安装包依赖

wKioL1nIiUyR7TxUAAAaaxTIPtM245.png

wKioL1nIiUygTluGAAAYKs2HVz4224.png


配置指定路径

wKiom1nIiYfi86O1AAA3hJhdIwA412.png

wKiom1nIiYjx-QZMAAB9mPrnsXc545.png


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

wKioL1nIiU3xGZ81AAApMgaEd1s788.png


编译后做成*.rpmwKioL1nIiU3iZE5zAADI0NElExk990.png


安装做好后的haproxy包

wKiom1nIiYjjxPcOAAB0io_MKFE428.png


2.配置haproxy

复制模版配置文件

wKioL1nIi0WjQh7AAAAafvqzceI491.png


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

wKioL1nIi0WA5aujAABWqYxQRjo902.png

wKiom1nIi4CRttBVAAAaiYHHjJk058.png


配置主配置文件

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

wKiom1nIi4GAnr6tAADSpWkofqw942.png

wKiom1nIjZKQQfFSAAB5MNtS5c4367.png


3.测试

服务端口已经打开

wKiom1nIjZOSfA0rAABjfyU9o_0226.png


可以轮询

wKioL1nIjVewUv9NAACpXxVYRao614.png


haproxy监控页面正常

wKioL1nIjVfAW255AADjXYVDziA213.png


haproxy正常

wKiom1nIjZOCTin3AABDlV4ALkM676.png


五.Haproxy日志的配置

vim /etc/rsyslog.conf

wKioL1nIjViBQwT5AAAp7FDKro8443.png

wKioL1nIjViyQM9hAAA-piy95Cg431.png

wKiom1nIjZPxyqj3AAAr86RYdMo158.png


测试显示日志正常

wKioL1nIjVjATqKFAACpatXYMb8829.png

wKiom1nIjZTDB-k-AAE2dTn0H1U798.png


六.调度算法的设置


wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

1.默认为rr轮询


2.设置权重weight 2

wKiom1nIjuWzIXhcAABA9TcweHM847.png

wKiom1nIjuXAyUwBAABOTOiF-v8449.png


server2的权重变大

wKioL1nIjqqRGltqAACouBPY_KM713.png


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

wKiom1nIjubSmhjTAABJBDEWmsc365.png

wKioL1nIjqqSgJrdAAAs349wc9A344.png

wKioL1nIjqqSKpfwAACpyGsrZIU835.png


七.设置动态页面访问php

1.载server1上配置文件

wKiom1nIjubD0lA_AABpuf9KH_E640.png

wKioL1nIjquS81WsAAAsTDCgmvQ590.png


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

wKiom1nIjuaTAk_hAAAmWSHzPWM343.png


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

wKioL1nIjquxdSDfAAAQ2D94JQc317.png


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

wKiom1nIjufxipGRAABmmye0qJw106.png

wKiom1nIjueicmC2AAAtmWTS3nk303.png



3.在客户机测试

wKioL1nIkLyCxty-AAD9sUCCO3U874.png


八.设置acl禁止访问用户

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

wKioL1nIkL2xVhrAAABiomHjxek523.png

客户机172.25.29.250无法访问

wKiom1nIkPig-fVbAACe230onvQ638.png



九.acl设置重定向


wKiom1nIi4HjoMCWAAAW0CO-3wo069.png


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

wKiom1nIkPiQr-gRAACTI7O6yso121.png

将本机的httpd改为8080端口

wKiom1nIkPnCaepNAAAbGF_U8Zo174.png

wKioL1nIkL3C6FHdAABz3O6Ziqg407.png

wKiom1nIkPnxt-i8AABhg7_qaWU951.png

十.acl设置动态写入

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

1.设置配置

wKiom1nIkPniCyLfAACqx3r2GoU636.png

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

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


wKioL1nIkL6yCymmAAAm4WGpAVo122.png

wKiom1nIkPrCqXWnAAE_10Zdd1o151.png


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

wKioL1nIkL-D5LrxAAGTkP1vp4c681.png


在server3上设置好权限

wKioL1nIk-PglVapAACNlwj9Npo222.png


4.在客户机上测试

可以上传图片

wKiom1nIlB-zSx2XAAArVSwUJLM321.png

可以访问images目录下的图片

wKioL1nIk-Ti4eVAAAB9w6YLv2U263.png

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


1.安装配置

wKiom1nIlB_CUu9kAAAVUhzB5dU270.png

wKioL1nIk-TjyyEpAAA3rUPlkjg320.png


bindnetaddr 设置网段

多波设置改变一个mcastaddr和mcastport

wKioL1nIk-TTEqmuAABek58m6R0601.png

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

wKiom1nIlCDihTPXAAAXGFvTbKU325.png


server4与server1同样配置

wKioL1nIk-SxuWN3AABHH8g6l5o176.png

wKiom1nIlCCw_h1kAAAV0TrAOAI711.png


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

wKiom1nIlCDBzXnJAAC7GzW-QaQ598.png


crmsh作为pacemaker的接口,而安装crmsh需要依赖psshwKioL1nIk-XzlUg1AAB3wJDK-XY027.png

wKioL1nIk-WR1DRWAACI-BCWipo125.png


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

wKiom1nIlCHBRMbCAACgT1_EHTc688.png


启动需要fence

wKiom1nImTbCoqgCAACXfVVX5V0004.png


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

wKioL1nImPvyOoIDAAHY6_WmkLQ741.png



5.安装fence

在server1上安装fence

wKioL1nImPuBmGSPAABC2uMmF_4326.png


在客户机上安装fence


wKioL1nImP3CBhleAAAYBu-cOf4539.png

wKiom1nImTjAjSqQAAAqb_CxoSw473.png

wKioL1nImP3D-gKBAAFcSVITa2k699.png


端口1229已经开打

wKiom1nImTeiJaOjAAAyuzlK4O0543.png


6.在server4上配置fence机制wKiom1nImTejkXvmAADs18jtdh8383.png


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

wKioL1nImPyCydCFAAC0UrqN-TI528.png


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

wKiom1nImTjS0FVkAAGDVF6gRK8943.png


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

wKioL1nImP3AXDuzAADJV-i2VRk963.png


wKiom1nImTmz11S9AADsPSQeBCo166.png


8.测试fence机制

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

wKioL1nInmfwkeNyAABXq6TKEIA485.png

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

wKiom1nInqOQQ4OHAAA__0Ycf04059.png

wKiom1nInqPBAmvAAAA1fe7evvU993.png


wKioL1nInmeSZpdeAAA949NzlBg306.png


wKiom1nInqOjUh55AABmLOkISqM728.png

wKioL1nInmjjDIO2AAA3hGQwIqo499.png


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

wKiom1nfeZHDXSR3AAS8bJ7RvJc906.png



十二.添加负载均衡Haproxy

1.server4配置haproxy

wKiom1nIi4HjoMCWAAAW0CO-3wo069.png

修改绑定的VIP

wKioL1nInmjBUAA8AACt58_2Or8258.png


将server1的haproxy传给server4

wKiom1nInqTSoFkLAAC-POoFpGE510.png


2.server4安装haproxy

在高可用上配置haproxy

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

在资源里更新server1 的haproxy

wKioL1nInmigkN3SAAEWgDHhAxM721.png

wKiom1nInqSgIR51AAD4hYmCNrE492.png


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

wKiom1nIoj3wCq86AAD9HGR6RLk202.png

wKioL1nInmnQGcFWAADsBeUXXpw001.png



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

wKioL1nIogLxG5PKAABFo3DBNhA890.png

wKiom1nIoj2yqvN2AABJIqt0rhU098.png

wKioL1nIogLQ9m9KAAB6P74JyWg221.png


server4网卡down掉,服务到server1

wKioL1nIogKxORwHAAAAhXWeJuI420.png

wKiom1nIoj7xFDPYAAASKqNnEiY519.png

wKiom1nIoj6A3DJjAABhgLQkBEw099.png

wKioL1nIogPhPfuZAADwDFenLv8726.png

wKiom1nIoj6BHwnWAAA49DuzW_g106.png







      本文转自一百个小排 51CTO博客,原文链接:http://blog.51cto.com/anfishr/1968418,如需转载请自行联系原作者




相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
30天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
113 0
|
4月前
|
监控 负载均衡 网络协议
小白带你学习linux的HAproxy
小白带你学习linux的HAproxy
70 0
|
4月前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
62 0
|
6月前
|
负载均衡 算法 应用服务中间件
百度搜索:蓝易云【Linux系统如何使用 HAProxy、Nginx 和 Keepalived 进行负载均衡?】
通过上述步骤,你可以在Linux系统中使用HAProxy、Nginx和Keepalived来实现负载均衡。这些工具可以帮助你将流量分配到多个后端服务器上,提高系统的性能、可靠性和可扩展性。
90 0
|
4月前
|
存储 Java Linux
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群(二)
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群
77 1
【Zookeeper】基于3台linux虚拟机搭建zookeeper集群(二)
|
5月前
|
JSON Linux 开发工具
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
Linux jq 、vim以及LInux集群安装miniconda并配置虚拟环境(笔记)
58 0
|
3月前
|
分布式计算 Hadoop Java
linux上面hadoop配置集群
linux上面hadoop配置集群
46 0
|
8月前
|
运维 关系型数据库 MySQL
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(二)
【运维知识进阶篇】集群架构-Nginx实现基础web架构(Linux+Nginx+PHP+Mysql)(二)
202 0
|
4月前
|
关系型数据库 MySQL Linux
Linux|集群初始化脚本--osiniit.sh简介
Linux|集群初始化脚本--osiniit.sh简介
23 0
|
4月前
|
存储 NoSQL Linux
猿创征文|linux部署Redis集群(修订版)
猿创征文|linux部署Redis集群(修订版)
147 1