天天看点

pacemaker+corosync+iscsi实现mfsmaster的高可用

集群管理 pacemaker

pacemaker+corosync+iscsi实现mfsmaster的高可用
1.pacemaker

pacemaker是一个开源的高可用资源管理器(CRM),位于HA集群架构中资源管理、资源代理(RA)这个层次,它不能提供底层心跳信息传递的功能,要想与对方节点通信需要借助底层的心跳传递服务,将信息通告给对方。(作为通信层和提供关系管理服务,心跳引擎,检测心跳信息)

2.Corosync

Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。

主机环境:RHEL6.5 selinux and iptables disabled
Master:          server4:172.25.254.4 server7:172.25.254.7
Chunkserver:     server5:172.25.254.5 server6:172.25.254.6
Client,vm_fence: 172.25.254.56
scsi:            server8:172.25.254.8           

使用pacemaker配置时需要安装pacemaker的接口,程序接口为crmshell,早期装上pacemaker自带有crmshell接口,新版本已被独立出来,不再是pacemaker组成部分。而crmshell又依赖于pssh相关包,因此得安装这两个组件。

使用yum install安装pacemaker时会安装其大量相关性依赖包,包括corosync,所以corosync可以不用独立安装,直接修改其配置文件/etc/corosync/corosync.conf。

[root@server4 corosync]# yuyum install pacemaker -y
[root@server4 corosync]# yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y
[root@server4 ~]# cd /etc/corosync/
[root@server4 corosync]# cp corosync.conf.example corosync.conf
[root@server4 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.254.0 
##绑定心跳网段,corosync会自动判断本地网卡上配置的哪个ip地址是属于这个网络的,并把这个接口作为多播心跳信息传递的接口
                mcastaddr: 226.94.1.1
 ##心跳信息组播地址,每个节点的组播地址必须为同一个
                mcastport: 23   ##组播时使用的端口
                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 corosync]# 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 restart

查看corosync和pacemaker服务是否成功开启。开启了就说明成功了。           
pacemaker+corosync+iscsi实现mfsmaster的高可用
关于crm shell的使用
  crm可以显示并修改配置文件
  直接执行crm命令进行交互式修改配置文件,交互式输入的内容被记录在配置文件中
  show 显示配置文件
  commit提交
  如果添加资源时出错,首先进入resource,将添加的资源stop,然后进入cofigure,delete错误的资源           
pacemaker+corosync+iscsi实现mfsmaster的高可用
[root@server4 corosync]# crm
crm(live)# configure 
crm(live)configure# show
node server4
node server7
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
crm(live)configure# commit 
crm(live)configure# quit
bye
[root@server4 corosync]# crm_verify -LV
           

在将MFS系统服务交由集群接管之前,需建立一个虚拟IP(VIP),VIP对外为master节点,当集群里某个master节点资源宕机,则服务通过VIP将资源迁移到另一个master节点,对client来说,丝毫没有感觉。

# 添加配置vip资源
[root@server4 corosync]# crm
crm(live)# configure 
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=172.25.254.100 op monitor interval=1min
crm(live)configure# commit 
crm(live)configure# show
node server4
node server7
primitive vip ocf:heartbeat:IPaddr2 \
    params ip="172.25.254.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 corosync]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:76:8c:2e brd ff:ff:ff:ff:ff:ff
    inet 172.25.254.4/24 brd 172.25.254.255 scope global eth0
    inet 172.25.254.100/24 brd 172.25.254.255 scope global secondary eth0
[root@server7 corosync]# crm_mon   #开启监控
           
pacemaker+corosync+iscsi实现mfsmaster的高可用
# 在添加资源时命令写错的解决方法
[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            
# 配置存储:
[root@server8 ~]# yum install scsi-* -y
[root@server4 ~]# yum install iscsi-* -y
[root@server7 ~]# yum install iscsi-* -y

[root@server8 ~]# vim /etc/tgt/targets.conf 
 38 <target iqn.2018-03.com.example:server.target1>
 39     backing-store /dev/vdb
 40 </target>
[root@server8 ~]# /etc/init.d/tgtd start
Starting SCSI target daemon:                               [  OK  ]

# server7和server4都进行下面的操作
[root@server7 corosync]# iscsiadm -m discovery -t st -p 172.25.254.8  #发现172。25。254。8共享出来的磁盘
Starting iscsid:                                           [  OK  ]
172.25.254.8:3260,1 iqn.2018-03.com.example:server.target1
[root@server7 corosync]# iscsiadm -m node -l  #登陆
Logging in to [iface: default, target: iqn.2018-03.com.example:server.target1, portal: 172.25.254.8,3260] (multiple)
Login to [iface: default, target: iqn.2018-03.com.example:server.target1, portal: 172.25.254.8,3260] successful.
[root@server7 corosync]# fdisk -l  #查看本地磁盘分区,共享磁盘已经存在本地,并以sda形式存在。
Disk /dev/sda: 8589 MB, 8589934592 bytes
64 heads, 32 sectors/track, 8192 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

# 只在server4或者server7上任一个上面划分分区和做文件系统,因为是共享磁盘,所以另一台主机也会同步到分区文件系统信息。
[root@server4 mfs]# fdisk /dev/sda
[root@server4 mfs]# cat /proc/partitions 
   8        1    8388592 sda1
[root@server4 mfs]# mkfs.ext4 /dev/sda1

[root@server7 corosync]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
64 heads, 32 sectors/track, 8192 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xbc55d1d5

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1        8192     8388592   83  Linux
[root@server7 corosync]# partprobe 
[root@server7 corosync]# blkid 
/dev/sda1: UUID="66c873bc-6d23-4a93-9e96-9059d1ffaab0" TYPE="ext4"            
# 将/var/lib/mfs/* 所有数据移到网络磁盘/dev/sda1中去,然后将其挂载到/var/lib/mfs
[root@server4 ~]# 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=30s 
crm(live)configure# property no-quorum-policy="ignore" # 默认结点数若只有一个,表示集群不存在,忽视
crm(live)configure# commit            
# 修改启动脚本
 2213 ?        S<     0:01 mfsmaster start
 2215 pts/0    R+     0:00 ps ax
# moosefs-master在不正常结束时,下一次是无法直接开启的。前面有介绍到一种命令行方法。接下来介绍修改启动服务脚本的方法。
[[email protected] ~]# kill -9 2213
[[email protected] ~]# /etc/init.d/moosefs-master start
Starting mfsmaster:                                        [FAILED]
[[email protected] ~]# cd /var/lib/mfs/
[[email protected] mfs]# ls
changelog.5.mfs  changelog.7.mfs    metadata.mfs.back.1  stats.mfs
changelog.6.mfs  metadata.mfs.back  metadata.mfs.empty

[[email protected] mfs]# vim /etc/init.d/moosefs-master 
 29 start () {
 30     echo -n $"Starting $prog: "
 31     $prog start >/dev/null 2>&1
 32     if [ $? -ne 0 ];then
 33     $prog -a > /dev/null 2>&1 && success || failure
 34     fi
 35     RETVAL=$?
 36     echo
 37     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
 38     return $RETVAL
 39 }
# 测试:
[[email protected] mfs]# /etc/init.d/moosefs-master start
Starting mfsmaster:                                        [  OK  ]
[[email protected] mfs]# scp /etc/init.d/moosefs-master server7:/etc/init.d/           
# 添加启动服务资源(脚本)
[root@server4 corosync]# crm
crm(live)# configure 
crm(live)configure# primitive mfsmaster lsb:moosefs-master op monitor interval=30s 
crm(live)configure# commit            
# 创建组,将vip mfsdata mfsmaster三个资源绑在一起,这样他们三个就只能同时存在一台主机上。绑定顺序即是启动顺序。
[root@server4 corosync]# crm
crm(live)# configure 
crm(live)configure# group mfsgroup vip mfsdata mfsmaster
crm(live)configure# commit            
# 本次部署采用外部fence ,fence是C/S架构,在fence服务端节点需要安装如下三个软件包。
[root@foundation56 ~]# yum install -y fence-virtd.x86_64 fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64
安装好之后使用命令fence_virtd -c进入交互式界面配置fence文件,在配置时需要注意的是选择接口(interface)时选主机之间通信的网卡。
[root@foundation56 Desktop]# mkdir /etc/cluster # 默认不存在cluster;
服务端和客户端之间通过key文件进行通信,key文件默认不存在,需要手动生成并拷贝到所有客户端节点。节点默认没有/etc/cluster目录,需自己建立
[root@foundation56 ~]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key
[root@foundation56 ~]# systemctl start fence_virtd.service 

# 在mfsmaster端(server4,server7)安装fence_virt服务
[root@server4 ~]# yum install fence-virt -y
[root@server7 etc]# stonith_admin -I
 fence_xvm
 fence_virtd
 fence_virt
 fence_pcmk
 fence_legacy
5 devices found

# 添加fence资源
# 首先将fence服务交由集群。由于外部fence只能识别domain,所以需要将domain与hostname绑定,并每隔30s监控一次。
[root@server4 ~]# crm
crm(live)# configure 
crm(live)configure# crm(live)configure# property stonith-enabled=true
crm(live)configure# primitive vmfence stonith:fence_xvm params pcmk_host_map="server4:server4;server7:server7" op monitor interval=30s
crm(live)configure# commit            
# 配置文件总集:
[[email protected] ~]# crm
crm(live)# configure 
crm(live)configure# show
node server4
node server7 \
    attributes standby="off"
primitive mfsdata ocf:heartbeat:Filesystem \
    params device="/dev/sda1" directory="/var/lib/mfs" fstype="ext4" \
    op monitor interval="1min"
primitive mfsmaster lsb:moosefs-master \
    op monitor interval="1min"
primitive vip ocf:heartbeat:IPaddr2 \
    params ip="172.25.254.100" \
    op monitor interval="1min"
primitive vmfence stonith:fence_xvm \
    params pcmk_host_map="server4:server4;server7:server7" \
    op monitor interval="1min"
group mfsgroup vip mfsdata mfsmaster
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="true" \
    no-quorum-policy="ignore"

           

测试:查看此时vip等在server4主机上,将其毙掉或者standby,此时,所有的资源会转移到server7主机上。同时,由于有fence的存在,毙掉的主机会自动重启,但需要手动重启corosync加入集群。

pacemaker+corosync+iscsi实现mfsmaster的高可用
[root@server4 ~]# crm node standby           
pacemaker+corosync+iscsi实现mfsmaster的高可用
[root@server4 ~]# crm node online           

mfsgroup 和 vmfence资源总不会主动在一台主机上:原因?

pacemaker+corosync+iscsi实现mfsmaster的高可用
pacemaker+corosync+iscsi实现mfsmaster的高可用

继续阅读