一、Corosync简介和pacemaker简介
1、Corosync
Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。可以说Corosync是OpenAIS工程的一部分。corosync是用于高可用环境中的提供通讯服务的,它位于高可用集群架构中的底层(Message Layer),扮演着为各节点(node)之间提供心跳信息传递这样的一个角色;
Corosync执行高可用应用程序的通信组系统它有以下特征:
一个封闭的程序组A closed process group communication model通信模式这个模式提供一种虚拟的同步方式来保证能够复***务器的状态。 一个简单可用性管理组件A simple availability manager这个管理组件可以重新启动应用程序的进程当它失败后。 一个配置和内存数据的统计A configuration and statistics in-memory database内存数据能够被设置回复接受通知的更改信息。 一个定额的系统A quorum system,定额完成或者丢失时通知应用程序。
2、pacemaker
pacemaker(直译心脏起搏器)是一个群集资源管理器。它实现最大可用性群集服务亦称资源管理的节点和资源级故障检测和恢复使用您的首选集群基础设施OpenAIS的或Heaerbeat提供的消息和成员能力。
它可以做乎任何规模的集群并配备了一个强大的依赖模型使管理员能够准确地表达群集资源之间的关系包括顺序和位置。几乎任何可以编写脚本可以管理作为心脏起搏器集群的一部分。
pacemaker的特点:
主机和应用程序级别的故障检测和恢复 几乎支持任何冗余配置 同时支持多种集群配置模式 配置策略处理法定人数损失多台机器失败时 支持应用启动/关机顺序 支持必须在同一台机器上运行的应用程序 支持多种模式的应用程序如主/从 可以测试任何故障或群集的群集状态 现在最主流的资源管理器
3、corosync和pacemaker结合的两种方式:
pacemaker作为corosync的插件运行; pacemaker作为独立的守护进程运行;
注:由于corosync的早期版本不具备投票能力,所以集群内的节点总数应为奇数,并且大于2
在corosync1.0的时候,其本身不具备票务功能(votes),不过在corosync2.0之后引入了votequorum
cman(DC)+corosync(如果想用pacemaker又想用cman,只能把cman当成corosync的插件来用)
二、安装Corosync和Pacemaker
准备工作:
1、规划
域名:node1.test.com IP:172.16.12.101 hostname:node1
域名:node2.test.com IP:172.16.12.102 hostname:node2
2、配置本地hosts,解析各节点域名
[root@node1 ~]# vim /etc/hosts //添加如下内容 172.16.12.101node1.test.com 172.16.12.102node2.test.com
3、同步各节点时间
[root@node1 ~]# ntpdate 172.16.0.1
4、基于密钥,各节点配置无密码登录
[root@node1 ~]# ssh-keygen -t rsa -P '' [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
5、配置yum源(EPEL源)
下载地址:epel-release-5-4.noarch
[root@node1 ~]# rpm -ivh epel-release-5-4.noarch.rpm warning: epel-release-5-4.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6 Preparing... ########################################### [100%] 1:epel-release ########################################### [100%] [root@node1 src]# rpm --import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
6、关闭防火墙
[root@node1 ~]# vim /etc/selinux/config //修改如下内容 SELINUX=disabled
7、安装corosync与pacemaker
[root@node1 ~]# yum install -y corosync* [root@node1 ~]# yum install -y pacemaker*
以上操作,需要在所有节点上均操作一遍
三、配置Corosync
1、提供配置文件
[root@node1 ~]# cd /etc/corosync/ //corosync.conf.example是模板配置文件 [root@node1 corosync]# cp corosync.conf.example corosync.conf
2、修改配置文件
# Please read the corosync.conf.5manual page compatibility: whitetank //兼容08.以前的版本 //totem定义集群内各节点间是如何通信的,totem本是一种协议,专用于corosync专用于各节点间的协议,协议是有版本的 totem { version: 2//版本号2 secauth: on //安全认证,是否打开,最好打开 threads: 0//用于安全认证开启并行线程数 interface{ ringnumber: 0//环号码,如果一个主机有多块网卡,避免心跳信息回流 bindnetaddr: 172.16.0.0//网络地址(节点所在的网络地址) mcastaddr: 226.77.12.100//组播地址224.0.1.0 ~ 238.255.255.255 用户可用组播地址(临时组播地址,全网有效) //bindip绑定的网络 与 mcust组播地址 实现各个节点在心跳信息层的心跳信息与事务信息的侦听联系 mcastport: 5405//组播端口 ttl: 1//只向外一跳心跳信息,避免组播报文环路 } } logging { fileline: off to_stderr: no //日志信息是否发往错误输出(否) to_logfile: yes //是否记录日志文件 to_syslog: yes //是否记录于syslog日志-->此类日志记录于/var/log/message中 logfile: /var/log/cluster/corosync.log //日志文件存放位置 debug: off //只要不是为了排错,最好关闭debug,它记录的信息过于详细,会占用大量的磁盘IO. timestamp: on //记录日志的时间戳 logger_subsys { subsys: AMF debug: off } } amf { mode: disabled } //让pacemker在corosync以一个插件来用,corosync启动后会自动启动pacemaker service { ver: 0 name: pacemaker } //启用ais功能时以什么身份来运行,默认为root,aisexec区域也可以不写 aisexec { user :root group:root }
3、生成密钥文件
authkys 保证各个节点在心跳信息层传输信息和事务的安全
注:corosync生成key文件会默认调用/dev/random随机数设备一旦系统中断的IRQS的随机数不够用将会产生大量的等待时间因此为了节约时间我们在生成key之前将random替换成urandom以便节约时间但在实际生产环境中请勿使用不安全。
[root@node1 dev]# cd /etc/corosync/ [root@node1 corosync]# mv /dev/{random,ran.bak} [root@node1 corosync]# ln -sv /dev/{urandom,random} [root@node1 corosync]# corosync-keygen [root@node1 corosync]# chmod 400authkey [root@node1 corosync]# rm /dev/random [root@node1 corosync]# mv /dev/{ra.bak,random}
4、将key文件authkey与配置文件corosync.conf复制到node2上
[root@node1 corosync]# scp -p authkey corosync.conf node2.test.com:/etc/corosync/
5、安装crmsh
从pacemaker 1.1.8开始crm sh 发展成一个独立项目pacemaker中不再提供因此需要自行下载安装crmsh依赖于pssh因此需要一并下载
①、crmsh下载地址:crmsh-1.2.6-4.el6.x86_64.rpm
②、pssh下载地址:pssh-2.3.1-2.el6.x86_64.rpm
[root@node1 ~]# yum -y --nogpgcheck localinstall crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm
四、启动Corosync
1、启动节点上的corosync
[root@node1 ~]# ssh node2.gulong.com "service corosync start" [root@node1 ~]# service corosync start
2、查看corosync启动信息
①、查看corosync引擎是否正常启动
[root@node1 ~]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
②、检查启动过程中是否有错误产生
[root@node1 ~]# grep ERROR: /var/log/cluster/corosync.log
上面的错误信息表示packmaker不久之后将不再作为corosync的插件运行因此建议使用cman作为集群基础架构服务此处可安全忽略。
③、查看pacemaker是否正常启动
[root@node1 ~]# grep pcmk_startup /var/log/cluster/corosync.log
3、查看集群状态
[root@node1 ~]# crm status
node1,node2都在线
五、pacemaker资源管理器(CRM)命令注解
1、crm有两种工作方式
●批处理模式:就是在命令行中直接输入命令(如上个命令执行时使用的crm status)
●交互式模式(crm(live)#):入到crmsh中交互执行
2、crm命令介绍
①、一级子命令
[root@node1 ~]# crm crm(live)# help This is crm shell, a Pacemaker command line interface. Available commands: cib manage shadow CIBs //cib沙盒 resource resources management //所有的资源都在这个子命令后定义 configure CRM cluster configuration //编辑集群配置信息 node nodes management //集群节点管理子命令 options user preferences //用户优先级 history CRM cluster history site Geo-cluster support ra resource agents information center //资源代理子命令(所有与资源代理相关的程都在此命令之下) status show cluster status #显示当前集群的状态信息 help,? show help (help topics for list of topics)#查看当前区域可能的命令 end,cd,up go back one level #返回第一级crm(live)# quit,bye,exit exit the program //退出crm(live)交互模式
②、resource子命令:所有的资源状态,都在此控制
crm(live)resource# help vailable commands: status show status of resources //显示资源状态信息 start start a resource //启动一个资源 stop stop a resource //停止一个资源 restart restart a resource //重启一个资源 promote promote a master-slave resource //提升一个主从资源 demote demote a master-slave resource //降级一个主从资源 manage put a resource into managed mode unmanage put a resource into unmanaged mode migrate migrate a resource to another node //将资源迁移到另一个节点上 unmigrate unmigrate a resource to another node param manage a parameter of a resource //管理资源的参数 secret manage sensitive parameters //管理敏感参数 meta manage a meta attribute //管理源属性 utilization manage a utilization attribute failcount manage failcounts //管理失效计数器 cleanup cleanup resource status //清理资源状态 refresh refresh CIB from the LRM status //从LRM(LRM本地资源管理)更新CIB(集群信息库),在 reprobe probe for resources not started by the CRM //探测在CRM中没有启动的资源 trace start RA tracing //启用资源代理(RA)追踪 untrace stop RA tracing //禁用资源代理(RA)追踪 help show help (help topics for list of topics) //显示帮助 end go back one level //返回一级(crm(live)#) quit exit the program //退出交互式程序
③、configure子命令:所有资源的定义都在此子命令下完成
crm(live)# configure crm(live)configure# help Available commands: node define a cluster node //定义一个集群节点 primitive define a resource //定义资源 monitor add monitor operation to a primitive //对一个资源添加监控选项(如超时时间,启动失败后的操作) group define a group //定义一个组类型(将多个资源整合在一起) clone define a clone //定义一个克隆类型(可以设置总的克隆数,每一个节点上可以运行几个克隆) ms define a master-slave resource //定义一个主从类型(集群内的节点只能有一个运行主资源,其它从的做备用) rsc_template define a resource template //定义一个资源模板 location a location preference //定义位置约束优先级(默认运行于那一个节点(如果位置约束的值相同,默认倾向性那一个高,就在那一个节点上运行)) colocation colocate resources //排列约束资源(多个资源在一起的可能性) order order resources //资源的启动的先后顺序 rsc_ticket resources ticket dependency property set a cluster property //设置集群属性 rsc_defaults set resource defaults //设置资源默认属性(粘性) fencing_topology node fencing order #隔离节点顺序 role define role access rights //定义角色的访问权限 user define user access rights //定义用用户访问权限 op_defaults set resource operations defaults //设置资源默认选项 schema set or display current CIB RNG schema show display CIB objects //显示集群信息库对 edit edit CIB objects //编辑集群信息库对象(vim模式下编辑) filter filter CIB objects //过滤CIB对象 delete delete CIB objects //删除CIB对象 default-timeouts set timeouts for operations to minimums from the meta-data rename rename a CIB object //重命名CIB对象 modgroup modify group //改变资源组 refresh refresh from CIB //重新读取CIB信息 erase erase the CIB //清除CIB信息 ptest show cluster actions if changes were committed rsctest test resources as currently configured cib CIB shadow management cibstatus CIB status management and editing template edit and import a configuration from a template commit commit the changes to the CIB //将更改后的信息提交写入CIB verify verify the CIB with crm_verify //CIB语法验证 upgrade upgrade the CIB to version 1.0 save save the CIB to a file //将当前CIB导出到一个文件中(导出的文件存于切换crm 之前的目录) load import the CIB from a file //从文件内容载入CIB graph generate a directed graph xml raw xml help show help (help topics for list of topics) //显示帮助信息 end go back one level //回到第一级(crm(live)#) quit exit the program //退出crm交互模式
④、node子命令:节点管理和状态命令
crm(live)resource# cd .. crm(live)# node crm(live)node# help Node management and status commands. Available commands: status show nodes status as XML //以xml格式显示节点状态信息 show show node //命令行格式显示节点状态信息 standby put node into standby //模拟指定节点离线(standby在后面必须的FQDN) online set node online // 节点重新上线 maintenance put node into maintenance mode ready put node into ready mode fence fence node //隔离节点 clearstate Clear node state //清理节点状态信息 delete delete node //删除 一个节点 attribute manage attributes utilization manage utilization attributes status-attr manage status attributes help show help (help topics for list of topics) end go back one level quit exit the program
⑤、ra子命令:资源代理类别都在此处
crm(live)node# cd .. crm(live)# ra crm(live)ra# help Available commands: classes list classes and providers //为资源代理分类 list list RA for a class (and provider) //显示一个类别中的提供的资源 meta show meta data for a RA //显示一个资源代理序的可用参数(如meta ocf:heartbeat:IPaddr2) providers show providers for a RA and a class help show help (help topics for list of topics) end go back one level quit exit the program