1.Pacemaker
pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供 底层心跳信息传递的功能,
要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。(作为通信层和提供关系管理服务,心跳引擎,检测心跳信息)
2.Corosync
Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。
主机环境:RHEL6.5 selinux and iptables disabled
Master: server1:172.25.27.1 server5:172.25.27.5
Chunkserver: server2:172.25.27.2 server3:172.25.27.3
Client:server4:172.25.27.4 scsi: server6:172.25.27.6
Vmfence: foundation27:172.25.27.250
[root@server5 ~]# yum install -y moosefs-cgi-3.0.97-1.rhsysv.x86_64.rpm moosefs-master-3.0.97-1.rhsysv.x86_64.rpm
moosefs-cgiserv-3.0.97-1.rhsysv.x86_64.rpm
[root@server1 3.0.97]# cd /var/lib/mfs/
[root@server1 mfs]# scp * 172.25.27.5:/var/lib/mfs/ #为了使server1、server上的数据保持一致,直接将server1上的数据直接复制过去
[root@server1 ~]# yum install -y pacemaker corosync
[root@server1 ~]# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y
[root@server1 ~]# cd /etc/corosync/
[root@server1 corosync]# cp corosync.conf.example corosync.conf
[root@server1 corosync]# vim corosync.conf
compatibility: whitetank ##兼容0.8以前的版本##totem定义集群内各节点间是怎么通信的,totem本是一种协议,专用于corosync专用于各节点间的协议
totem {
version: 2 ##totem的版本,不可更改
secauth: off ##安全认证
threads: 0 ##用于安全认证开启的并线程数
interface {
ringnumber: 0 ##回环号码
bindnetaddr: 172.25.27.0 ##绑定心跳网段,corosync会自动判断本地网卡上配置的哪个ip地址是属于这个网络的,并把这个接口作为
多播心跳信息传递的接口
mcastaddr: 226.94.1.1 ##心跳信息组播地址,每个节点的组播地址必须为同一个
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 ##是否打印时间戳,利于定位错误,但会产生大量系统调用,消耗CPU资源
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
##如果想让pacemaker在corosync中以插件方式启动,需要 在corosync.conf文件中加上如下内容:
service {
name: pacemaker ##模块名,启动corosync时同时启动pacemaker
ver: 0
[root@server4 corosync]# /etc/init.d/corosync start
[root@server4 corosync]# scp corosync.conf server7:/etc/corosync/
server7与server4配置相同
[root@server7~]# yum install -y pacemaker corosync
[root@server7 ~]# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y
[root@server7 corosync]# /etc/init.d/corosync start
关于crm shell的使用
crm可以显示并修改配置文件
直接执行crm命令进行交互式修改配置文件,交互式输入的内容被记录在配置文件中
show 显示配置文件
commit提交
如果添加资源时出错,首先进入resource,将添加的资源stop,然后进入cofigure,delete错误的资源
[root@server1 corosync]# crm
[root@server1 corosync]# crm
crm(live)# configure
crm(live)configure# show
node server1
node server5
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2"
crm(live)configure# property stonith-enabled=false #禁掉fence
crm(live)configure# commit
crm(live)configure# quit
bye
[root@server1 corosync]# crm
crm(live)# configure
crm(live)configure#primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.27.100 op monitor interval=1minv#添加IP
crm(live)configure# commit
crm(live)configure# show
node server1
node server5
primitive vip ocf:heartbeat:IPaddr2 \
params ip="172.25.27.100" \
op monitor interval="1min"
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false"
crm(live)configure# quit
# 在添加资源时命令写错的解决方法
[root@server4 mfs]# crm
crm(live)# resource
crm(live)resource# show
vip (ocf::heartbeat:IPaddr2): Started
crm(live)resource# stop vip ##首先停掉资源,当资源在使用时是无法对他进行改动的
crm(live)resource# delete vip ##但是不能在这里delete,会报错语法错误ERROR: syntax: delete vip
crm(live)resource# cd ..
crm(live)# configure ##进入configure执行delete
crm(live)configure# delete vip ##删除后一定要提交,接下来就可以重新进行配置了
crm(live)configure# commit
Vim /etc/hosts #修改解析,所有节点都修改
172.25.27.100 mfsmaster
如图,在master非正常关闭后,重新启动时报错,启动失败
[root@server2 corosync]# vim /etc/init.d/moosefs-master #修改启动脚本
修改脚本后,启动成功
# 配置存储:
Server6 上添加虚拟磁盘
[root@server6 ~]# yum install -y scsi-*
[root@server6 ~]# vim /etc/tgt/targets.conf #设置要共享的磁盘
[root@server6 ~]# /etc/init.d/tgtd start
[root@server1 corosync]# yum install -y iscsi-* #server1、server5上都安装
[root@server1 corosync]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2008-09.com.example:server.target1, portal: 172.25.27.6,3260] (multiple)
Login to [iface: default, target: iqn.2008-09.com.example:server.target1, portal: 172.25.27.6,3260] successful.
[root@server1 corosync]# fdisk -l
[root@server1 corosync]# fdisk /dev/sda
[root@server1 corosync]# mkfs.ext4 /dev/sda1
[root@server1 corosync]# mount /dev/sda1 /mnt
[root@server1 corosync]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 19134332 1018668 17143684 6% /
tmpfs 961272 37152 924120 4% /dev/shm
/dev/vda1 495844 33487 436757 8% /boot
/dev/sda1 8256936 149492 7688016 2% /mnt
[root@server1 ~]# umount /mnt/
[root@server1 ~]# mount /dev/sda1 /var/lib/mfs/
[root@server1 ~]# cd /var/lib/mfs/
[root@server1 mfs]# chown mfs.mfs . -R
[root@server1 mfs]# ll
total 3640
-rw-r----- 1 mfs mfs 4356 Apr 8 20:13 changelog.3.mfs
-rw-r----- 1 mfs mfs 491 Apr 8 20:13 changelog.4.mfs
-rw-r----- 1 mfs mfs 45 Apr 8 20:13 changelog.5.mfs
drwx------ 2 mfs mfs 16384 Apr 8 20:09 lost+found
-rw-r----- 1 mfs mfs 4300 Apr 8 20:13 metadata.mfs.back
-rw-r----- 1 mfs mfs 4300 Apr 8 20:13 metadata.mfs.back.1
-rwxr--r-- 1 mfs mfs 8 Apr 8 20:13 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 Apr 8 20:13 stats.mfs
[root@server5 ~]# iscsiadm -m discovery -t st -p 172.25.27.6
[root@server5 ~]# iscsiadm -m node -l
[root@server5 ~]# mount /dev/sda1 /var/lib/mfs/ #由于共享存储,此时不需要再分区,直接挂载
[root@server5 ~]# cd /var/lib/mfs/
[root@server5 mfs]# ll
总用量 3640
-rw-r----- 1 mfs mfs 4356 4月 8 20:13 changelog.3.mfs
-rw-r----- 1 mfs mfs 491 4月 8 20:13 changelog.4.mfs
-rw-r----- 1 mfs mfs 45 4月 8 20:13 changelog.5.mfs
drwx------ 2 mfs mfs 16384 4月 8 20:09 lost+found
-rw-r----- 1 mfs mfs 4300 4月 8 20:13 metadata.mfs.back
-rw-r----- 1 mfs mfs 4300 4月 8 20:13 metadata.mfs.back.1
-rwxr--r-- 1 mfs mfs 8 4月 8 20:13 metadata.mfs.empty
-rw-r----- 1 mfs mfs 3672832 4月 8 20:13 stats.mfs
[root@server1 mfs]# crm
crm(live)# configure
crm(live)configure# primitive mfsdata ocf:heartbeat:Filesystem params device=/dev/sda1 directory=/var/lib/mfs fstype=ext4
op monitor interval=1min #添加共享存储
crm(live)configure# primitive mfsmaster lsb:moosefs-master op monitor interval=1min #添加服务
crm(live)configure# group mfsgroup vip mfsdata mfsmaster #创建组,使他们绑定再一起
crm(live)configure# commit
WARNING: mfsdata: default timeout 20s for start is smaller than the advised 60
WARNING: mfsdata: default timeout 20s for stop is smaller than the advised 60
WARNING: mfsdata: default timeout 20s for monitor is smaller than the advised 40
crm(live)configure# cd
crm(live)# bye
bye
此时,将server1上corosync关掉,造成认为宕机,或使用 crm node standby 管理节点,服务被立即转接到了server5上,没有影响到数据写入
此时,不断的重启master主机上的corosync, 或使用 crm node standby、crm node online管理节点,发现集群服务始终会随着ip的漂移而漂移
# 本次部署采用外部fence ,fence是C/S架构,在fence服务端节点需要安装如下三个软件包。
[root@foundation27 ~]# yum install -y fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64
安装好之后使用命令fence_virtd -c进入交互式界面配置fence文件,在配置时需要注意的是选择接口(interface)时选主机之间通信的网卡。
[root@foundation 27 ~]# mkdir /etc/cluster # 默认不存在cluster;
服务端和客户端之间通过key文件进行通信,key文件默认不存在,需要手动生成并拷贝到所有客户端节点。节点默认没有/etc/cluster目录,需自己建立
[root@foundation27 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
[root@foundation27 cluster]# systemctl start fence_virtd.service #启动fence服务
[root@server1 ~]# yum install -y fence-virt #server1、server5上都安装
[root@server1 ~]# mkdir /etc/cluster/ #server1、server5上都建立
[root@foundation27cluster]#scpfence_xvm.key root@172.25.27.1:/etc/cluster/ #将钥匙远程分发给server1和server5
[root@server1 ~]# crm
crm(live)# configure
crm(live)configure# property stonith-enabled=true #开启fence
crm(live)configure# commit
crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="server1:server1;server5:server5" op monitor
interval=30 #将domain与hostname绑定,并每隔30s监控一次。
crm(live)configure# commit
监控页面
[root@server1 ~]# chkconfig corosync on #设置corosync开机自启动
测试:查看ip ,知此时服务在server5上
[root@server5 ~]# echo c > /proc/sysrq-trigger Write failed: Broken pipe #故意让server5系统崩溃,此时由于fence作用,
server5重启,服务转移到了server1上
[root@server1 ~]# echo c > /proc/sysrq-trigger #让server1系统崩溃
#server1重启
此时服务又回到了server5
至此, mfsmaste基于pacemaker+corosync+iscsi已经全部实现