基本信息
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理
HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上
HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数;多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接;事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)实现所有这些任务,所以没有这些问题;此模型的弊端是:在多核系统上,这些程序通常扩展性较差,这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作
包括GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy
官方网站:
HAProxy - The Reliable, High Performance TCP/HTTP Load Balancerhttps://www.haproxy.org/以下实验所需的配置环境
boke1 HAProxy负载均衡主机 IP=172.25.100.11
boke2 后端真实apache服务器主机 IP=172.25.100.12
boke3 后端真实apache服务器主机 IP=172.25.100.13
boke4 HAProxy负载均衡主机 IP=172.25.100.14
负载均衡配置
HAProxy配置中分成五部分内容:
1、global:设置全局配置参数,属于进程的配置,通常和操作系统相关
2、defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
3、frontend:接收请求的前端虚拟节点,Frontend可以更改规则直接指定具体使用后端的backend
4、backend:后端服务集群的配置,是真实服务器,一个Backend对应一个或者多个实体服务器
5、Listen:frontend和backend的组合体
##简单的负载均衡配置
##访问此负载均衡器得到的效果
负载均衡器的状态报告配置
##在haproxy配置文件的defaults板块添加状态报告访问路径并开启登陆认证
##访问测试效果
负载均衡器的日志管理
##haproxy配置文件
##rsyslog配置文件
负载均衡器的source算法
##haproxy配置文件
##配置source轮询算法后的访问效果,此时后端服务器均正常运行
##关闭boke2主机的apache服务后的访问效果
##重新打开boke2主机的apache服务后的访问效果
负载均衡器的应用分离
##haproxy配置文件中配置应用分离
##准备访问素材
##访问效果
负载均衡器的访问控制
##配置访问黑名单
##访问效果
##配置黑名单地址访问的重定向
##访问效果
##配置访问源的重定向
##访问效果
负载均衡器的读写分离
##配置访问请求为写指令的指向后端
##配置后端服务器主机的访问素材
##浏览器访问并上传文件(写的动作)
##写的指令被成功定向至指定的后端服务器
Pacemaker集群管理器
Pacemaker是一个集群资源管理器,它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性
更多信息参见以下
ClusterLabs > PacemakerCommunity hub for open-source high-availability softwarehttps://clusterlabs.org/pacemaker/环境:
boke1 pacemaker主机,安装haproxy IP=172.25.100.11
boke4 pacemaker主机,安装haproxy IP=172.25.100.14
boke2 后端真实服务器,安装apache IP=172.25.100.12
boke3 后端真实服务器,安装apache IP=172.25.100.13
##配置pacemaker主机间的免密登陆
1、pacemaker安装:
##搭建软件源,安装pacemaker所用到的所有安装包及依赖rhel7.6的镜像资源中都有
yum install -y pacemaker pcs psmisc policycoreutils-python
##boke1、boke4主机均安装,可通过ssh实现远程操作,前提需要都配置好软件仓库
##启动boke1、boke4主机的haproxy和pcsd服务
2、pcs集群创建:
##命令含义依次为:配置集群用户密码;配置群集节点的认证;创建一个二个节点的群集
##启用集群并设置为开机自启
##验证群集配置信息;没有Fencing设备时,禁用STONITH组件功能;在stonith-enabled="false"的情况下,分布式锁管理器 (DLM) 等资源以及依赖DLM的所有服务(例如 cLVM2、GFS2 和 OCFS2)都将无法启动
##查看集群状态;crm_mon为实时监控
##查看资源标准;查看资源提供者;查看资源使用参数
3、pcs集群资源创建:
##配置虚拟IP
##此时访问VIP效果
##停掉集群中两个节点的haproxy服务并创建haproxy集群资源;让集群来接手管理haproxy服务
##可以看到boke4主机的haproxy被强制重启了;但此时vip还在boke1主机上,因此客户端访问vip时会失败
4、pcs集群资源组创建及集群管理测试:
##创建一个hagroup的资源组,将vip和haproxy资源都添加至此组中;现在可以看到两个资源运行在同一台主机boke1上
##此时boke4主机的haproxy服务自动关闭
##两个资源都在boke1主机上运行
##此时客户端访问vip成功返回数据
##在手动关闭boke1主机的haproxy服务后,监控出现以上信息后会自动重启boke1主机的haproxy服务
##同上,在手动删除boke1主机的vip后,监控出现以上信息后会自动在boke1主机添加vip
##再将boke1集群节点待机后,集群资源自动转移至boke4主机进行管理
##恢复运行boke1集群节点后,boke4主机管理的集群资源不会回退至boke1主机
5、fence
fence/fencing又名STONITH(Shoot The Other Node In The Head)
fence设备是RHCS集群中必不可少的一个组成部分,通过fence设备可以避免因出现不可预知的情况而造成的“脑裂”现象;fence设备主要是通过服务器或存储本身的硬件管理接口或者外部电源管理设备来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接
脑裂:集群中某节点突然夯住,无法响应,但仍在运行状态,集群检测到就把vip这些资源迁移到另外的节点,重新挂载存储,但是之前的节点也挂载在存储上,先前节点恢复正常运行后,两个节点同时写入时就会导致脑裂
fence的工作原理:
当意外原因导致主机异常或者宕机时,备机会首先调用fence设备,然后通过fence设备将异常主机重启或者从网络隔离,当fence操作成功执行后,返回信息给备机,备机在接到fence信息后,开始接管主机的服务和资源;这样通过fence设备将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上
RHCS的fence设备可以分为两种:内部fence和外部fence;常用的内部fence有IBMRSAII卡,HP的iLO卡,还有IPMI的设备等;外部fence设备有UPS、SANSWITCH、NETWORKSWITCH等
配置fence设备:
##在宿主机端配置fence_virtd服务
##生成fence密钥文件并重启fence_virtd服务,停掉宿主机的火墙和selinux
##在fence_virtd服务管理集群主机上安装fence-virt模块,建立目录用来存放fence密钥文件
##拷贝密钥文件至集群主机
##查看集群节点的fence设备
stonith_admin -M -a fence_xvm
##查看fence_xvm设备的元数据
##添加fence设备至集群并做主机影射;集群工作时用的是集群中各机器的主机名,而fence_virtd服务是通过虚拟机域名对虚拟机进行管控的;格式为【主机名:虚拟机域名】
假设boke4主机挂掉后,其上的fence设备也无法与fence_virtd服务所在主机进行通信;因此fence总是在资源运行所在主机的对端,当此资源运行主机boke4挂掉后,集群中的fence设备获取到boke4主机挂掉的信息通知fence_virtd服务主机,并接管原boke4上的资源继续对外提供服务,fence_virtd服务主机知晓boke4主机挂掉后会对其进行断电、重启或从集群里剔除
##在之前次的集群配置中曾将stonith禁用,现在启用并进行验证,无误即fence设备配置完成
测试:
##在资源运行主机端关闭网卡
##不多时后之后boke4主机重启,并接管fence设备,资源运行在对端节点
##在资源运行主机端模拟内核崩溃,不多时后之后此主机重启
##资源运行在对端,自己接管fence设备