CRM集群资源管理器 Pacemaker
环境:rhel6.5 node1:192.168.2.228 node1.example.com
node2: 192.168.2.242 node2.example.com
示例集群会使用以下软件:
1. Fedora 13 as the host operating system
2. Corosync作为通信层和提供关系管理服务
3. Pacemaker来实现资源管理
4. DRBD 作为一个经济的共享存储方案
5. GFS2 作为集群文件系统(主/主模式中)
6. crm shell 来显示并修改配置文件
在某些情况下,可能会需要关闭节点的电源来保证共享数据的完整性或是完全地恢复资源。为此
Pacemaker引入了STONITHd。STONITH是 Shoot-The-Other-Node-In-The-Head(爆其他节点的头)的缩写,并且通常是靠远程电源开关来实现的。
下载包crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm
安装两个包rpm -ivh crmsh-1.2.6-0.rc2.2.1.x86_64.rpm
yum localinstall crmsh-1.2.6-0.rc2.2.1.x86_64.rpm
node1上:
ssh-keygen #使两节点之间ssh连接不需密码
ssh-copy-id node2.example.com
scp -r .ssh/ node2.example.com:
可尝试连接node2 ssh node2.example.com 不需验证密码
cd /etc/corosync/
cp corosync.conf.example corosync.conf
vim corosync.conf
totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0 #红色为要修改的
bindnetaddr: 192.168.2.0 #当前为2网段
mcastaddr: 226.94.1.1
mcastport: 5798 #注意多播端口或多播地址不要冲突
ttl: 1
}
}
service { #添加pacemaker服务
name: pacemaker
ver: 0
}
scp corosync.conf node2.example.com:/etc/corosync/
两边开启corosync服务,就会开启pacemaker。 /etc/init.d/corosync start
crm_mon #监控
crm node show #显示节点
crm configure show #显示配置文件
crm_verify -LV #校验
交互式访问:
crm(live)configure# property stonith-enabled=false #停掉stonith(相当与节点的电源)
commit #每更改一条配置文件都要提交
crm_verify -LV 第一次会出错,关闭stonith,校验就不会有错了
首先要做的是配置一个IP地址,不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择192.168.2.29作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群 每30秒检查它一次。
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=192.168.2.29 cidr_netmask=24 op monitor interval=30s #添加虚拟IP
commit
crm(live)configure# property no-quorum-policy=ignore #忽略达不到法定人数的情况,继续运行资源
commit #提交
两个节点机添加apache服务,编辑配置文件,不用开启httpd,交给集群。
为了监控Apache实例的健康状态,并在它挂掉的时候恢复Apache服务,资源agent会假设 server-status URL是可用的。查看/etc/httpd/conf/httpd.conf并确保下面的选项没有被禁用或注释掉。
vim /etc/httpd/conf/httpd.conf
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
更新配置文件
crm(live)configure# primitive website ocf:heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf op monitor interval=30s
commit
可是,WebSite这个资源跟IP没有跑在同一个节点上面!
确保资源在同一个节点运行
crm(live)configure# colocation website-with-vip inf: website vip
crm(live)configure# commit
设置主节点为node1,指定优先的 Location
crm(live)configure# location master-node website 10:node1.example.com
crm(live)configure# commit
/etc/init.d/corosync restart
node2上监控crm_mon
node1 corosync 停掉,node2会接管,node1恢复后会继续接管。
ip addr show
当前node1接管,node1上可查到虚拟IP
查看添加的资源vip website
虚拟机fence
fence机 yum install fence-virt fence-virtd fence-virtd-libvirt fence-virtd-multicast -y
fence_virtd -c 设置隔离设备
mkdir /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 #生成fence_xvm.key
scp /etc/cluster/fence_xvm.key node1.example.com:/etc/cluster/
scp /etc/cluster/fence_xvm.key node2.example.com:/etc/cluster/
/etc/init.d/fence_virtd start #启动服务
注意:需保证fence机selinux关掉,iptables不用
节点机:
yum install -y fence-agents.x86_64 fence-virt.x86_64
node1:
crm(live)configure# property stonith-enabled=true #开启stonith,相当与总开关
crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map=node1.example.com:node1;node2.example.com:node2 op monitor interval=60s
注意格式 主机名:域名(虚拟机名称)
crm(live)configure# commit
查看资源:
node2监控:
重启corosynv服务 /etc/init.d/corosync restart
设置开机自启动 chkconfig corosync on
当前fence在node2上接管
若挂掉node2,比如ifdown eth0或echo c > /proc/sysrq-trigger弄崩内核,fence会接管到node1,node2会重新启动修复,重启完毕,fence又切到node2.若node1网卡挂掉,fence会让node1重启。
iscsi存储
给集群管理加存储服务,在一个存储服务器上共享一块硬盘,作为存储(在实验中,就直接在集群管理的那台服务器上共享一块硬盘)
物理机192.168.2.38上:
yum install -y scsi-*
lvcreate -L 2G -n iscsi vg0 创建/dev/vg0/iscsi逻辑卷
vim /etc/tgt/targets.conf
<target iqn.2014-05.com.example:server.target1>
backing-store /dev/vg0/iscsi
initiator-address 192.168.2.228 //两台节点机IP
initiator-address 192.168.2.242
</target>
开启服务 /etc/init.d/tgtd start chkconfig tgtd on
tgt-admin -s 查看设备共享的信息
两个节点机都要做以下操作:
yum install -y iscsi-*
iscsiadm -m discovery -t st -p 192.168.2.38 //查找iscsi设备是否在1主机上
iscsiadm -m node -l //登录到iscsi设备
fdisk -l 可查看多了一块共享硬盘/dev/sdb
这时在节点1主机node1上创建一个主分区1.现在在一个节点上给此设备做 分区和格式化 (做本地文件系统 ext4)
fdisk -cu /dev/sdb
会同步到node2节点机。
格式化为ext4格式文件系统
mkfs.ext4 /dev/sdb1
在节点2主机node2上执行partprobe,更新内核分区表,cat /proc/partitions查看内核分区。
现在iscsi已经工作了,我们可以配置一个Filesystem资源来使用它。 挂载设备/dev/sda1到/var/www/html ,写一个文件index.html。
crm(live)configure# primitive webdata ocf:heartbeat:Filesystem params device=/dev/sda1 directory=/var/www/html fstype=ext4 op monitor interval=30s
crm(live)configure# group webgrp vip webdata website #按顺序将vip webdata website 添加到组webgrp
crm(live)configure# commit
node1上
crm(live)node# standby
crm(live)node# online
另一个节点机监控