测试环境:
OS:rhel6.4
web1: 192.168.1.121 httpd heartbeat pacemaker crmsh pcs
web2: 192.168.1.122 httpd heartbeat pacemaker
web3: 192.168.1.125 httpd nfs
VIP:192.168.1.160
PS:注意这里的测试环境是干净的,啥也没安装。。。go on !!
一、安装corosync和pacemaker之前的准备工作
1.节点名称(各个节点通过节点名称来通信的)确保集群的每个节点的名称都能互相解析
编辑/etc/sysconfig/network 文件
HOSTNAME=we1.luochen.com
编辑/etc/hosts 文件
192.168.1.121 web1.luochen.com web1
192.168.1.122 web2.luochen.com web2
# sysctl kernel.hostname=web1.luochen.com
PS:必须确保uname -n 命令查看的结果与/etc/hosts 文件中对应ip地址解析的名称一样
2.确保所有节点之间的时间一致(建议使用NTP服务器)
在所有节点里与同一个时间服务器进行时间同步
# ntpdate ntp-server-ip
3.基于ssh实现无密钥认证通信
# ssh-keygen -t rsa -P ‘‘ ####生成一对公钥和私钥,id_rsa 私钥id_rsa.pub 公钥
把公钥复制到其他节点上
# ssh-copy-id -i .ssh/id_rsa.pub [email protected] (第一次需要输入密码)
# ssh web2.luochen.com ‘date‘;date ####查看时间是否一致(同时在web1和web2上执行date命令)
PS:如果要实现在web2上实现与web1的无密钥认证通信,则要在web2上执行同样的操作
二、在web1和web2上安装corosync和pacemaker
# service httpd stop
# chkconfig httpd off
# yum -y install corosync*
# yum -y install pacemaker*
# rpm -ql corosync
# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf ###提供配置文件
在corosync配置文件中添加service (指定corosync来启动pacemaker)
compatibility: whitetanktotem { version: 2 ###协议版本 secauth: on ###开启安全认证功能 threads: 0 ###并行的线程数,0代表采用默认的 interface { ###定义在哪个网卡接口发心跳检测信息 ringnumber: 0 ###每块网卡都有独一无二的环号码 bindnetaddr: 192.168.1.0 ###绑定的网络地址 mcastaddr: 226.100.20.121 ###组播地址 224.0.1.0---238.255.255.255 mcastport: 5405 ###组播端口 ttl: 1 ###只发一次 }}logging { fileline: off to_stderr: no ###错误信息是否发往标准错误输出 to_logfile: yes ###错误信息是否发往日志文件 logfile: /var/log/cluster/corosync.log ###日志文件 to_syslog: no ###错误信息是否发往syslog debug: off ###是否开启调错模式 timestamp: off ####记录时间戳,如果写入日志文件就不用启用;这里使用no会出现错误,服务启动不了 logger_subsys { subsys: AMF debug: off }}####配置corosync启动时自动启动pacemakerservice { ver: 0 name: pacemaker #use_mgmtd: yes}aisexec { user: root group: root}
三、生成节点间通信时用到的认证密钥文件,会自动在/etc/corosync/目录下生成authkeys文件
# corosync-keygen
# scp -p /etc/corosync/{authkeys,corosync.conf} web2.luochen.com:/etc/corosync/
四、下载安装pcs
# wget ftp://ftp.pbone.net/mirror/ftp.scientificlinux.org/linux/scientific/6.4/x86_64/updates/fastbugs/pcs-0.9.90-1.el6_4.noarch.rpm
# rpm -ivh pcs-0.9.90-1.el6_4.noarch.rpm
五,在web3上建立共享存储
建立一个共享目录:
# mkdir -pv /www/htdocs
#echo "<h1>nfs server page</h1>" > /www/htdocs/index.html
#vim /etc/exports
/www/htdocs 192.168.1.0/24(rw)
#setfacl -m u:apache:rwx /www/htdocs
#service nfs start
六、在web1上启动corosync
# service corosync start
# ssh web2.luchen.com ‘service corosync start‘
查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
corosync [MAIN ] Corosync Cluster Engine (‘1.4.7‘): started and ready to provide service.
corosync [MAIN ] Successfully read main configuration file ‘/etc/corosync/corosync.conf‘.
查看初始化成员节点通知是否正常发出:
# grep TOTEM /var/log/cluster/corosync.log
检查启动过程中是否有错误产生。下面的错误信息表示pacemaker不久之后将不再作为corosync的插件运行,因此,建议使用集群基础构建服务;此处可安全忽略:
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/cluster/corosync.log
七、使用pcs定义web服务的资源(pcs命令只有一种模式:直接在命令行执行(批处理模式))
1,配置集群的工作属性,禁用stonith:
# pcs property set stonith-enable=false
2,配置集群的工作属性,no-quorum-policy(节点不具备法定票数时忽略):
# pcs property set no-quorum-policy=ignore
3,配置集群的工作属性,定义资源默认黏性值:
# pcs resource defaults resource-stickiness=100
4,先定义资源,再把他们加入到同一个资源组里(添加资源后会立即在某个节点上启动该资源):
定义一个webip(vip)的主资源:
# pcs resource create webip ocf:heartbeat:IPaddr ip=192.168.1.160 op monitor interval=30s timeout=20s
# pcs status (立即生效,资源启动了)
5,定义一个webstore(共享存储)的主资源:
# pcs resource create webstore ocf:heartbeat:Filesystem device="192.168.1.125:/www/htdocs" directory="/var/www/html" fstype="nfs" op monitor interval=20s timeout=40s op start timeout=60s op stop timeout=60s
# pcs status
6,定义一个webserver的主资源:
# pcs create webserver lsb:httpd op monitor interval=30s timeout=20s on-fail=restart
# pcs status
7,定义webservice 资源组:
# pcs resource group add webservice webip webstore webserver
# pcs status
8,定义顺序约束(确保资源的启动和关闭顺序,这里每次只能定义两个资源的顺序约束 ):
# pcs constraint order webip then webstore
# pcs constraint order webstore then webserver
# pcs constraint order show
9,在宿主机上访问vip查看webservice是否正常运行
10,在crmsh命令行下切换web服务运行的节点(这里没有pcsd,所以只有用crm来操作)
# crm node standby web2.luochen.com
# crm status
11,再次让web2节点启动
# crm node online web2.luochen.com
12,pcs命令的其他用法示例:
显示默认属性配置
# pcs property list --all
# pcs property list --defaults
查看有哪些资源代理类别
# pcs resource standards
查看有哪些OCF的providers
# pcs resource providers
显示某个类别下的所有的RA
# pcs resource agents ocf:heartbeat
显示某RA的属性信息
# pcs resource describe ocf:heartbeat:IPaddr
查看所有约束
# pcs constraint list --full
定义位置约束
# pcs constraint location webservice prefers web1.luochen.com =500
# pcs config
定义排列约束
# pcs constraint colocation add webserver with webstore
# pcs config