Corosync作为通信层和提供关系管理服务,Pacemaker来实现资源管理,crm shell 来显示并修改配置文件.
Pacemaker本身由四个关键组件组成:CIB (aka. 集群信息基础),CRMd (aka. 集群资源管理守护进程),PEngine (aka. PE or 策略引擎),STONITHd(Shoot-The-Other-Node-In-The-Head(爆其他节点的头)),STONITH是用来关闭节点的电源来保证共享数据的完整性或是完全地恢复资源,并且通常是靠远程电源开关来实现的。在Pacemaker中,STONITH设备被当成资源(并且是在CIB中配置
)从而轻松地监控。

两台高可用主机
安装软件包:
yum install corosync pacemaker -y   两台主机都要安装
corosync-keygen          产生两台主机同步的密钥
scp /etc/corosync/authkey  192.168.0.34:/etc/corosync/
cd  /etc/corosync/
cp corosync.conf.example corosync.conf
vim corosync.conf
    bindnetaddr: 192.168.0.0
        mcastaddr: 236.94.1.6     修改多播地址和端口
        mcastport: 5466

service {                       添加服务
        name: pacemaker
        ver: 0
}
scp  corosync.conf  192.168.0.34:/etc/corosync/
/etc/init.d/corosync start  两台主机都要启动
crm_verify -L                检查配置文件,如果报与stonish有关的错误,则
crm configure property stonish-enabled=false  关闭stonish
然后:crm configure show   查看节点及全局配置

添加资源:
crm configure primitive vip ocf:heartbeat:IPaddr2 params ip=192.168.0.250 cidr_netmask=24 op monitor interval=30s  添加vip资源
commit  提交
在另一台主机crm_mon 监控是否添加
ip addr show 查看vip

此时,在另一台主机 crm_mon 监控,关闭当前主机的corosync服务,看是否切换,如果没有切换,则crm configure property no-quorum-policy=ignore,再开启当前主机的corosync服务,默认又切换回去,可以crm configure rsc_defaults resource-stickiness=100,commit 改变黏性,使其恢复后资源不切换回去

在两台主机安装:httpd,wget,不需要将httpd服务手动开启
vim /   大概在921行,将其前面的#去掉,以使corosync服务可以 开启httpd服务,两台主机都要修改
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
etc/httpd/conf/httpd.conf

crm configure primitive web ocf:heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf  op monitor interval=1min  添加apache资源
commit
再crm_mon 监控

确保资源在同一台主机运行:
crm configure colocation web-with-vip inf:web vip 将服务和资源粘在一起
commit  同时用crm_mon 监控

控制资源的启动停止顺序:
crm configure location  master-desktop81 web 10:  desktop81.example.com
配置资源优先在desktop81上启动,master-desktop81是启的名字
再用crm_mon 监控是否改变

手动move,切换资源:
crm resource move web desktop34.example.com 手动将资源切换到desktop34主机
用crm_mon 监控是否改变
crm configure show
此时在配置文件多了如下语句:
location cli-prefer-web web \
    rule $id="cli-prefer-rule-web" inf: #uname eq desktop81.example.com
crm resource  unmove web  再切换回来

crm node  standby  将自己置为不可用
crm node  online   将自己置为可用

添加fence 隔离:确保两台主机的hostname为虚拟机的名字
在宿主机和两台主机安装:
 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 只需在宿主机上创建
 scp /etc/cluster/fence_xvm.key 192.168.0.81:/etc/cluster/
scp /etc/cluster/fence_xvm.key 192.168.0.34:/etc/cluster/
/etc/init.d/fence_virtd start  宿主机和两台主机都要开启。如果报错,则vim /etc/fence_virt.conf
backends {

        libvirt {
                uri = "qemu:///system";
        }

}
fence_virtd {
        module_path = "/usr/lib64/fence-virt";
        backend = "libvirt";
        listener = "multicast";
}

添加fence 资源:
设置stonith 为true:
crm configure property stonish-enabled=true
crm configure cib new stonith 创建stonith
crm configure primitive vmfence stonith:fence_xvm params pcmk_host_list="new FOR"   new和FOR为两台虚拟机在virt-manager 之后显示的名字
crm_mon 监控是否添加fence

stonith_admin -I #rhel6中用 stonith_admin -L  查看支持的fence设备
stonith_admin  --metadata  -a  fence_xvm   

可以在两台主机的一台:fence_xvm -H new -o reboot 看是否能将另一台重启
或者: echo c > /proc/sysrq-trigger   使系统内核崩溃,看资源和fence是否切换到另一台主机。重启的主机启动后,又将fence 抢夺回去。