rel6.5-RHCS-pacemaker+corosync
一.pacemaker和corosync的了解
1.Pacemaker
Pacemaker是一个集群资源管理器。它利用集群基础构件(OpenAIS 、heartbeat或corosync)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务(亦称资源)的最大可用性。它可以做几乎任何规模的集群,并带有一个强大的依赖模式,让管理员能够准确地表达群集资源之间的关系(包括顺序和位置)。几乎任何可以编写的脚本,都可以作为管理起搏器集群的一部分。尤为重要的是Pacemaker不是一个heartbeat的分支,似乎很多人存在这样的误解。Pacemaker是CRM项目(亦名V2资源管理器)的延续,该项目最初是为heartbeat而开发,但目前已经成为独立项目。
pacemaker 特点
(1)主机和应用程序级别的故障检测和恢复
(2)几乎支持任何冗余配置
(3)同时支持多种集群配置模式
(4)可以测试任何故障或群集的群集状态
pacemaker的内部结构:
stonithd:心跳系统。
lrmd:本地资源管理守护进程。它提供了一个通用的接口支持的资源类型。直接调用资源代理(脚本)。
pengine:政策引擎。根据当前状态和配置集群计算的下一个状态。产生一个过渡图,包含行动和依赖关系的列表。
cib:群集信息库。包含所有群集选项,节点,资源,他们彼此之间的关系和现状的定义。同步更新到所有群集节点。
crmd:集群资源管理守护进程。主要是消息代理的PEngine和LRM,还选举一个领导者(DC)统筹活动(包括启动/停止资源)的集群。
heartbeat:心跳消息层
CCM:共识群集成员,心跳成员层。
2.corosync
Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议。corosync可以实现故障检测功能,发现存在问题的资源,同时也具有心跳检测机制 ,检测服务是否启用,运行在每个节点上,多个节点之间通过组播的方式监测心跳。
二.haproxy的安装及部署
haproxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。haproxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。
1.haproxy的安装
(1)使用rpm-build创建rpm的二进制软件包和源码软件包
(2)rpmbuild -tb haproxy-1.6.11.tar.gz ##创建haproxy的rpm包
(3)rpmbuild会在用户的家目录里自动创建rpmbuild目录,在rpmbuild/RPMS/x86_64/目录下有创建的haproxy的rpm包
2.haproxy的部署
(1)vim /etc/haproxy/haproxy.cfg ##haproxy的配置文件
把静态后端和动态后端都使用的一些参数放在全局变量的位置
(2)创建haproxy的用户和用户组
global
log 127.0.0.1 local0 ##日志
uid 200
gid 200
(3)静态的负载均衡配置
bind *:80 name clear ###监听端口是80
default_backend static ###默认使用静态后端
web1 172.25.78.2:80;web2 172.25.78.3:80;roundrobin ##轮询访问后端
(4)测试:curl 172.25.78.1 轮询访问后端
(5)监控以及用户认证
stats uri /admin/stats ##监控的访问方式
stats auth admin:laoyang ##用户:密码
监控的访问方式:http://172.25.23.1/admin/stats
关闭web1 IP:172.25.78.2 ##监控界面用醒目的红色提醒web1已经down掉
测试:curl 172.25.78.1 (只能访问web2,haproxy自带后端健康检查功能)
用户认证(haproxy的监控界面肯定不能让每个人都能访问到,在配置文件里添加用户认证)
(6)日志的分离
vim /etc/rsyslog.conf ##系统日志的配置文件
打开提供UDP日志的接收
haproxy.none ##haproxy的日志不在/var/log/messages里面记录
local0.* /var/log/haproxy.log ##haproxy的日志文件
重启haproxy,日志记录到/var/log/haproxy.log
(7)重定向的两种方式
acl blacklist src 172.25.78.250
http-request deny if blacklist
errorloc 403 http://172.25.78.1:8080/index.html ##请求的IP来源是在用户访问限制的名单里的172.25.78.250,就重定向到haproxy的apache8080端口(因为haproxy是80端口,避免冲突)
acl blacklist src 172.25.23.254 ##重定向
redirect location http://172.25.23.1:8080/index.html if blacklist
测试:访问172.25.78.1,自动传到8080端口
(8)动静分离
use_backend dynamic if { path_end .php } ##如果是以.php结尾的文件就去访问动态的后端
测试:172.25.78.1/index.php
在web2上面装php插件,php支持动态页面
(9)读写分离
acl read method GET
acl read method HEAD ##读的两种方式
acl write method POST
acl write method PUT ##写的两种方式
use_backend dynamic if write ##如果是上传数据访问dynamic(动态)
在web1和web2上面同样的配置(都装php插件,都在/var/www/html/下写一个数据上传的index.php)
图片成功上传到web2动态后端的/var/www/html/upload
三.pacemaker+corosync+haproxy
1.pacemaker,crmsh以及pssh(crmsh的依赖包)的安装(两个节点server2和server4都安装)
crm:管理集群的工具crm的特性;任何操作都需要commit提交后才会生效;想要删除一个资源之前需要先将资源停止;可以用 help 获取该命令的帮助;与Linux命令行一样,都支持TAB补全
2.corosync的配置
vim /etc/corosync.conf ##corosync的配置文件
bindnetaddr ##心跳监听网段
mcastaddr ##约定的广播地址,所有节点相同
corosync以插件形式运行pacemaker
ver:0 ##自动随着corosync开启
每一个节点的/etc/corosync.conf都要相同,之后所有节点重启corosync服务
3.配置集群资源
(1)crm_verify -LV ##检查crm的语句是否有错
关闭property stonith-enabled=false
Stonith 即shoot the other node in the head使Heartbeat软件包的一部分,该组件允许系统自动地复位一个失败的服务器使用连接到一个健康的服务器的遥远电源设备。Stonith设备是一种能够自动关闭电源来响应软件命令的设备
cib #cib管理模块
resource #所有的资源都在这个子命令后定义:cleanup #清理资源状态 ;refresh #LRM本地资源管理更新CIB(集群信息库)
configure #编辑集群配置信息:show #显示集群信息库;edit #编辑集群信息库对象(vim模式下编辑);delete #删除CIB对象;primitive #定义资源;monitor #对一个资源添加监控选项(如超时时间,启动失败后的操作);group #定义一个组类型(将多个资源整合在一起)
node #集群节点管理子命令:status #以xml格式显示节点状态信息;show #命令行格式显示节点状态信息;standby #模拟指定节点离线(standby在后面必须的FQDN);online #节点重新上线;fence #隔离节点;delete #删除 一个节点
options #用户优先级
(2)crm configure show ##查看集群的信息
(3)添加虚拟IP:primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.78.100 cidr_netmask=24 op monitor interval=1min
(4)添加服务haproxy:primitive haproxy lsb:haproxy op monitor interval=1min
(5)忽略投票规则:property no-quorum-policy=ignore (两个节点中有一个损坏,集群就不能使用,忽略这个规则,当一个节点损坏,另一个接管服务)
(6)添加资源组:group hagroup vip haproxy (和ricci+luci的顺序一样,先加VIP再加服务)
(7)添加fence设备
在真机把fence_virtd打开
stonith_admin -I ##检验fence,有fence_xvm就可以
stonith_admin -M -a fence_xvm ##查看fence_xvm
(8)crm_mon ##监控集群
此时添加一个资源VIP和fence设备,两个节点在线,运行在server2上,fence设备所在节点和正在运行的节点对立
(9)测试:
本来运行在节点server2,当下线节点server2之后,VIP漂移到server4节点;
值得注意的是,当节点server2再次上线时,VIP还是会停留在节点server4,直到节点server4损坏,才会再次漂移