环境设置
server1和server2作为可以互换的master
server3和server4作为Chunkserver
在server2上安装moosefs-master,并且更改启动脚本,加-a参数,防止异常退出再开启
配置集群
配置yum源
yum源的地址就在磁盘挂载里面的addons
[kiosk@foundation80 rhel7.6]$ ls
addons EULA GPL isolinux media.repo repodata RPM-GPG-KEY-redhat-release
EFI extra_files.json images LiveOS Packages RPM-GPG-KEY-redhat-beta TRANS.TBL
[kiosk@foundation80 rhel7.6]$ ls addons/
HighAvailability ResilientStorage
将这两个路径加到yum配置里
[rhel7.6]
name=rhel7.6
baseurl=http://172.25.254.250/rhel7.6
gpgcheck=0
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.254.250/rhel7.6/addons/HighAvailability
gpgcheck=0
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.254.250/rhel7.6/addons/ResilientStorage
gpgcheck=0
保存退出,可以yum repolist就是成功了,然后给其他几台主机也都配置yum源
配置集群软件
在server1和server2上安装集群所需的软件
yum install -y pacemaker corosync pcs
#安装完之后会生成一个用户
id hacluster
uid=189(hacluster) gid=189(haclient) groups=189(haclient)
配置ssh免密
[root@server1 ~]# ssh-keygen
#对自己和server2都进行加密
[root@server1 ~]# ssh-copy-id server1
[root@server1 ~]# ssh-copy-id server2
配置集群
在server1上
[root@server1 ~]# systemctl start pcsd
[root@server1 ~]# systemctl enable pcsd
#给hacluster用户设立密码
[root@server1 ~]# passwd hacluster
Changing password for user hacluster.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
在server2上进行同样的操作
然后进行主机认证
[root@server1 ~]# pcs cluster auth server1 server2
Username: hacluster #认证使用的用户就是hacluster
Password: #密码是刚才设置的密码
server1: Authorized
server2: Authorized
建立自定义集群
[root@server1 ~]# pcs cluster setup --name mycluster server1 server2 #指定server1和server2建立集群名字是mycluster
[root@server1 ~]# pcs cluster start --all #在所有节点上开启集群
[root@server1 ~]# pcs cluster enable --all #设置开机自启
[root@server1 ~]# pcs status #查看集群的状态
Cluster name: mycluster #指定的集群名称
WARNINGS:
No stonith devices and stonith-enabled is not false
Stack: corosync
Current DC: server1 (version 1.1.19-8.el7-c3c624ea3d) - partition with quorum
Last updated: Wed May 27 00:02:37 2020
Last change: Tue May 26 23:58:40 2020 by hacluster via crmd on server1
2 nodes configured #节点数量
0 resources configured #配置的资源数量,暂时没有
Online: [ server1 server2 ] #server1和server2是在线的
No resources
Daemon Status: #集群开启时以下几个服务必须都是开启的
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
#也可以使用下面的方法查看
[root@server1 ~]# pcs status corosync
Membership information
----------------------
Nodeid Votes Name
1 1 server1 (local)
2 1 server2
查看状态的出现的warning是因为当前我们没有设置faces,这个的作用是当主节点出现问题时,有它去裁定如果主节点无法正常运作,就会去释放主节点资源,转移到另一个成为主节点的主机上。取消警告的方法
[root@server1 ~]# pcs property set stonith-enabled=false #取消开机启动
[root@server1 ~]# pcs property set no-quorum-policy=ignore #投票策略设为忽视,当投票的主机没反应时忽略它
再去使用pcs stat查看集群状态就没有警告了
配置集群资源
配置集群的vip,使用这个vip对外设置开放的访问地址
[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.254.100 cidr_netmask=32 op monitor interval=30s
[root@server1 ~]# pcs resource show #查看资源
vip (ocf::heartbeat:IPaddr2): Started server1 #配置的vip在server1上,可以在server1上使用ip a查看是否真的存在
资源配置的情况可以在集群里的其他主机上使用控制台查看到
[root@server2 ~]# crm_mon #控制台
Stack: corosync
Current DC: server1 (version 1.1.19-8.el7-c3c624ea3d) - partition with quorum
Last updated: Thu May 28 16:52:53 2020
Last change: Thu May 28 16:48:06 2020 by root via cibadmin on server1
2 nodes configured
1 resource configured
Online: [ server1 server2 ]
Active resources:
vip (ocf::heartbeat:IPaddr2): Started server1
当我们关闭集群里的server1时
[root@server1 ~]# pcs cluster stop server1
server1: Stopping Cluster (pacemaker)...
server1: Stopping Cluster (corosync)...
在server2的控制台里可以看到vip就会切换到server上了
当server1再次打开时,vip也不会再回到server1上的,保证服务的稳定性
集群配置服务
配置apache服务
当vip在server1上时,在server1、server2上安装apache,并配置默认发布页
[root@server1 ~]# yum install -y httpd
[root@server1 ~]# echo server1 > /var/www/html/index.html
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# echo server2 > /var/www/html/index.html
在server1上创建apache资源,名称设为apache,执行启动httpd,设置监视器每分钟查看一次信息
[root@server1 ~]# pcs resource create apache systemd:httpd op monitor interval=1min
#创建完资源后集群会自动去开启httpd,在server2上
[root@server1 ~]# pcs resource show
vip (ocf::heartbeat:IPaddr2): Started server1
apache (systemd:httpd): Started server2
但是这里存在问题就是,开启的apache服务和vip主机不在同一台主机上,这里就需要建立资源组,将vip和apache放在一起
[root@server1 ~]# pcs resource group add apache_group vip apache
[root@server1 ~]# pcs resource show #创建完资源组,就同时都在server1上里
Resource Group: apache_group
vip (ocf::heartbeat:IPaddr2): Started server1
apache (systemd:httpd): Starting server1
这样配置完后使用在其他客户端上也可以看到访问了
[root@foundation80 ~]# curl 172.25.254.100
server1
配置共享磁盘
使用另一台主机server3,来进行磁盘共享,在server3上添加一块磁盘,这里我添加了一块1Gb的磁盘
在server3上配置集群的服务端,安装软件
[root@server3 ~]# yum install -y targetcli
[root@server3 ~]# targetcli
/> backstores/block create my_disk1 /dev/vdb #/dev/vdb就是我添加的磁盘
/> iscsi/ create iqn.2020-05.com.example:server3
/> iscsi/iqn.2020-05.com.example:server3/tpg1/
/> iscsi/iqn.2020-05.com.example:server3/tpg1/luns create /backstores/block/my_disk1
/> iscsi/iqn.2020-05.com.example:server3//tpg1/acls create iqn.2020-05.com.example:client
server3这个共享磁盘的服务端配置好,然后去配置server1和server2去使用磁盘的客户端。
[root@server1 ~]# yum install -y iscsi-* #安装软件
[root@server1 ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2020-05.com.example:client #改写为刚在server3上创建的名称
[root@server1 ~]# systemctl start iscsid
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.254.3 #命令可以发现这个设备
172.25.254.3:3260,1 iqn.2020-05.com.example:server3
[root@server1 ~]# iscsiadm -m node -l #登陆设备
[root@server1 ~]# fdisk -l #然后可以查看到多了一块1Gb的磁盘设备
Disk /dev/sda: 1073 MB, 1073741824 bytes, 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
[root@server1 ~]# fdisk /dev/sda #因为这块磁盘当前没有分区,进行分区使用,只分一个即可
[root@server1 ~]# mkfs.xfs /dev/sda1 #格式化文件系统
server2上进行同样的配置,server2上就不需要进行后面的磁盘分区和格式化了,因为server1上已经为这块磁盘进行了操作,我们登陆之后看到的就是分好区的磁盘
创建共享资源
首先将sda1挂载到/mnt/,然后将/var/lib/mfs里的数据都复制到挂载点里,并对挂载点进行chown mfs.mfs 的操作,这样我们就将mfs的数据文件放在了共享磁盘里,可以通过它的挂载启动moosefs-master服务
[root@server1 ~]# mount /dev/sda1 /mnt
[root@server1 ~]# cp -p /var/lib/mfs/* /mnt/
[root@server1 ~]# chown mfs.mfs /mnt
[root@server1 ~]# umount /mnt
[root@server1 ~]# mount /dev/sda1 /var/lib/mfs
[root@server1 ~]# systemctl start moosefs-master #测试服务是否可以通过共享磁盘的资源开启
[root@server1 ~]# systemctl stop moosefs-master #测试完关闭服务
创建集群资源
[root@server1 ~]# pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s
#建立动作时文件系统,通过挂载sda1,文件格式是xfs,监控间隔30s
[root@server1 ~]# pcs resource create mfsd systemd:moosefs-master op monitor interval=30s
#创建开启moosefs-master的资源
[root@server1 ~]# pcs resource delete apache #删除之前的apache资源
[root@server1 ~]# pcs resource group add mfsgroup vip mfsdata mfsd #将三个资源添加在一个组里,这样就会开启在一个主机上
[root@server1 ~]# pcs resource show
Resource Group: mfsgroup
vip (ocf::heartbeat:IPaddr2): Started server1
mfsdata (ocf::heartbeat:Filesystem): Started server1
mfsd (systemd:moosefs-master): Started server1
配置fence节点
在server1和server2上安装fence,并创建fence的key目录
[root@server2 ~]# yum install -y fence-virt #因为使用的是虚拟机,所以安装这个包
[root@server2 ~]# mkdir /etc/cluster
找另一台主机作为fence的主机,这里我使用的是真机操,安装以下3个包
[root@foundation80 ~]# yum install -y fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 fence-virtd.x86_64
配置fence,在fence节点上执行操作
[root@foundation80 ~]# fence_virtd -c
#这里的选择操作都直接回车确认即可
Interface [virbr0]: br0 #除了这个接口选择,使用你自己设置的桥接接口
Replace /etc/fence_virt.conf with the above [y/N]? y #最后的确认输入y
[root@foundation80 ~]# mkdir /etc/cluster #创建key的目录
[root@foundation80 ~]# cd /etc/cluster
[root@foundation80 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1 #使用随机数生成key
#将这个key发送给server1和server2
[root@foundation80 cluster]# scp fence_xvm.key server1:/etc/cluster/
[root@foundation80 cluster]# scp fence_xvm.key server2:/etc/cluster/
[root@foundation80 cluster]# systemctl status fence_virtd.service #开启服务
[root@foundation80 cluster]# netstat -ntulp | grep fence #查看开启的udp端口
udp 0 0 0.0.0.0:1229 0.0.0.0:* 15198/fence_virtd
配置资源
[root@server1 ~]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:test1;server2:test2" op monitor interval=1min
#server1:test1,server1是主机名,test1是虚拟机名
[root@server1 ~]# pcs property set stonith-enable=true #设置自启
[root@server1 ~]# crm_verify -L -V #检测是否有错误
测试
使用 pcs resource show 可以看到其他资源都开启在serve1上,只有 fence开启在server2上,关闭server1服务转移到到server2上,但是再开启server1后fence会开启在server1上。
然后使server2异常退出测试fence能否使server2重启
[root@server2 ~]# echo c > /proc/sysrq-trigger #使server2内核崩溃,相当于服务器异常
这时server2就会重启,重启后fence会开启在serve2上了。
配置mariadb服务
操作前需要删除之前的集群资源,只留下fence资源
[root@server1 ~]# pcs resource delete vip
Attempting to stop: vip... Stopped
[root@server1 ~]# pcs resource delete mfsdata
Attempting to stop: mfsdata... Stopped
[root@server1 ~]# pcs resource delete mfsd
Attempting to stop: mfsd... Stopped
在server1和server2上安装mariadb-server
清空共享磁盘里的内容
挂载磁盘到/var/lib/mysql,挂载之后再进行一次目录内的清空操作否则mariadb重启时会报错,测试开启没有问题关闭mariadb,取消挂载
[root@server1 ~]# mount /dev/sda1 /var/lib/mysql/
[root@server1 ~]# chown mysql.mysql /var/lib/mysql/
[root@server1 ~]# rm -fr /var/lib/mysql/*
[root@server1 ~]# systemctl start mariadb.service
创建资源
#vip资源
[root@server1 ~]# pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.254.100 cidr_netmask=32 op monitor interval=30s
#挂载目录资源
[root@server1 ~]# pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
#服务启动资源
[root@server1 ~]# pcs resource create mariadb systemd:mariadb op monitor interval=1min
#建立资源组,保持资源运行在同一主机上
[root@server1 ~]# pcs resource group add mysql_group vip mysql_data mariadb
测试,当资源都运行在server1上时,异常关闭server1,可以在server2通过crm-mon监控看到服务会转移到server2上