1、环境
server4:172.25.17.104 | mfs-master 调度器 |
server5:172.25.17.105 | mfs-master 调度器 |
server6:172.25.17.106 | chunkserver 后端存储 |
server7:172.25.17.107 | chunkserver 后端存储 |
server8:172.25.17.108 | 共享存储 |
foundation17.ilt.example.com: | mfs-client 测试 |
2、配置
server4,server5:
yum源:
[rhel7.3]
name='rhel7.3'
baseurl=http://172.25.17.250/rhel7.3
gpgcheck=0
[high]
name='high'
baseurl=http://172.25.17.250/rhel7.3/addons/HighAvailability
gpgcheck=0
[mfs]
name='mfs'
baseurl=http://172.25.17.250/mfs
gpgcheck=0
mfs中的包:
moosefs-cgi-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cgiserv-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-cli-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-master-3.0.103-1.rhsystemd.x86_64.rpm
moosefs-metalogger-3.0.103-1.rhsystemd.x86_64.rpm
安装:
yum install moosefs-master moosefs-metalogger moosefs-cli moosefs-cgiserv moosefs-cgi -y
yum install pcs pacemaker corosync -y
server6
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
yum install moosefs-chunkserver
id mfs
创建共享
vim /etc/mfs/mfshdd.cfg
/mnt/chunk1
mkdir /mnt/chunk1g
#修改权限
chown mfs.mfs /mnt/chunk1
添加解析:
vim /etc/hosts
172.25.17.100 mfsmaster vip
systemctl start moosefs-chunkserver
server7
moosefs-chunkserver-3.0.103-1.rhsystemd.x86_64.rpm
yum install moosefs-chunkserver
id mfs
创建共享
vim /etc/mfs/mfshdd.cfg
/mnt/chunk1
mkdir /mnt/chunk1g
#修改权限
chown mfs.mfs /mnt/chunk1
添加解析:
vim /etc/hosts
172.25.17.100 mfsmaster vip
systemctl start moosefs-chunkserver
foundation17.ilt.example.com:客户端
moosefs-client-3.0.103-1.rhsystemd.x86_64.rpm
yum install moosefs-client
设置挂在点
vim /etc/mfs/mfsmount.cfg
/mnt/mfs
添加解析:
vim /etc/hosts
172.25.17.100 mfsmaster vip(后边创建的vip)
mfsmount 挂载
cd /mnt/mfs
mkdir dir1
mkdir dir2
mfssetgoal -r 1 dir1/ 设置副本数为1
cp /etc/passwd dir1/
mfsfileinfo dir1/passwd 查看文件详细信息,只有一个副本,在server6上
cp /etc/passwd dir2/
mfsfileinfo dir2/passwd 查看文件详细信息,两个副本,server6和server7上各一个
关掉server6上边的chunkserver
systemctl stop moosefs-chunkserver
mfsfileinfo dir1/passwd 因为这个数据只有一份,存储在了server6上边,所以没有数据
mfsfileinfo dir2/passwd 这个数据存储了里两份,server7上的数据还在
开启server6上的chunkserver之后,数据恢复
当文件很大的时候,mfs-master会将它分成小块存储到不同的chunk-server上边
dd if=/dev/zero of=dir1/file1
mfsfileinfo dir1/file1 至少分成两块存储到不同的节点,因为只能有一个副本,所以只存一份
dd if=/dev/zero of=dir2/file2 至少分成两块,每块两个副本,存储到不同的节点,所以当一个chunkserver挂掉之后,file2数据仍然完整
mfsfileinfo dir2/file2
关掉server6上边的chunkserver
systemctl stop moosefs-chunkserver
mfsfileinfo dir1/file1 因为这个数据只有一份,一部分存储在了server6上边,所以数据不完整
mfsfileinfo dir2/file2 这个数据存储了里两份,server7上的两个数据块都还在,所以数据是完整的
开启server6上的chunkserver之后,file1数据恢复
恢复误删的数据:
rm -rf dir1/passwd
mfsgettrashtime . ###查看数据被删除后所保留的时间
mdkir /mnt/mfsmeta 进行恢复数据目录的建立
mfsmount -m /mnt/mfsmeta 进行数据恢复目录的挂载
cd /mnt/mfsmeta/trash 进入到所有删除数据存放目录
find -name *name* 进行删除数据的查找
mv ./004/00000004\|dir1\|passwd undel/ 进行数据的恢复
3、创建mfs高可用集群
注意做好各个主机之间的解析
1)、server4和server5之间做好免密
server4:
ssh-keygen
ssh-copy-id server5
2)、server4和server5启动服务
cp /etc/corosync/corosync.conf.example corosync.conf
vim /etc/corosync/corosync.conf
totem {
version: 2
crypto_cipher: none
crypto_hash: none
interface {
ringnumber: 0
bindnetaddr: 172.25.17.0
mcastaddr: 239.255.1.1
mcastport: 5405
ttl: 1
}
}
service {
name: pacemaker
ver: 0
}
systemctl start corosync 心跳检测
systemctl start moosefs-master
systemctl start pcsd 资源管理
3)、创建集群用户授权
server4和server5:
server4和server5的用户名和密码保持一致
echo westos | passwd --stdin hacluster
4)、认证
pcs cluster auth server4 server5
5)、创建集群
pcs cluster setup --name mycluster server4 server5
6)、启动集群,会有报错
pcs cluster start --all
pcs status 查看集群状态
7)、解决报错
crm verify -LV
重新查看集群状态
pcs status
查看集群节点信息:
pcs status nodes
#检查配置,有报错
crm_verify -L -V
#更改属性,禁用STONITH
pcs property set stonith-enabled=false
#再次检查,没有报错
crm_verify -L -V
#查看状态
pcs status
#查看corosync是否正常
corosync-cfgtool -s
#查看corosync状态
pcs status corosync
8)、创建vip
##创建vip,pacemaker会自动部署服务到节点
pcs resource create vip ocf:heartbeat:IPaddr2
ip=172.25.17.100 cidr_netmask=32 op monitor interval=30s
#查看,创建成功
ip a
#查看监控
crm_mon
9)、测试
浏览器中访问vip:172.25.17.100:9425,查看监控
关掉master节点服务,vip自动漂移
pcs cluster stop master节点域名
在slave节点上查看监控
crm_mon
在slave节点上查看ip
ip a
故障恢复
pcs cluster start 故障节点的服务
查看监控
crm_mon
到此MFS的高可用就配置好了,当master出故障时,backup-master会立刻接替master的工作,保证客户端可以正常得到服务。但master恢复时不会与backup_MFSmaster竞争资源,保证了用户服务的稳定性。
4、磁盘共享
server8:
[root@server8 mfs]# yum install -y targetcli
[root@server8 mfs]# systemctl start target
[root@server8 mfs]# targetcli
/> cd backstores/block
/backstores/block> create my_disk1 /dev/vda
/backstores/block> cd ../../iscsi
/iscsi> create iqn.2019-08.com.example:server8
/iscsi> cd iqn.2019-08.com.example:server8/tpg1/luns
/iscsi/iqn.20...er2/tpg1/luns> create /backstores/block/my_disk1
/iscsi/iqn.20...er2/tpg1/luns> cd ../acls
/iscsi/iqn.20...er2/tpg1/acls> create iqn.2019-08.com.example:client
/iscsi/iqn.20...er2/tpg1/acls> exit
server4,server5:格式化只需要执行一次
yum install -y iscsi-* 安装iscsi的客户端
vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-08.com.example:client
iscsiadm -m discovery -t st -p 172.25.17.108 查找共享设备
iscsiadm -m node -l 登陆共享设备
查看共享磁盘
fdisk -l
创建分区并且格式化
fdisk /dev/sdb
mkfs.xfs /dev/sdb1
挂载
mount /dev/sdb1 /mnt/
cd /var/lib/mfs/
cp -p * /mnt/
cd /mnt/
ls
changelog.10.mfs changelog.3.mfs metadata.crc metadata.mfs.back.1 stats.mfs
changelog.1.mfs changelog.9.mfs metadata.mfs metadata.mfs.empty
cd /var/lib/mfs/
ls
changelog.10.mfs changelog.3.mfs metadata.crc metadata.mfs.back.1 stats.mfs
changelog.1.mfs changelog.9.mfs metadata.mfs metadata.mfs.empty
chown mfs.mfs /mnt/
cd
umount /mnt/
mount /dev/sdb1 /var/lib/mfs/
systemctl start moosefs-master
创建集群的存储资源
server4:
创建集群存储资源:
pcs resource create mfsdata ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mfs fstype=xfs op monitor interval=30s
创建集群的mfs启动:
pcs resource create mfsd systemd:moosefs-master op monitor interval=1min
创建集群资源工作组,让集群资源工作在一个节点上如vip,filesystem等
pcs resource group add mfsgroup vip mfsdata mfsd
测试:发现所有资源全部工作在server4上边
pcs cluster stop server4 关掉server4,查看高可用
5、添加fence
server4,server5安装fence-virt
mkdir /etc/cluster
yum install -y fence-virt
pcs stonith list 列出stonith设备
foundation17.ilt.example.com:客户端
yum install -y fence-virtd
fence_virtd -c
Interface [virbr0]: br0 ##注意br0需要修改,其余回车即可
随即截取一个密钥,注意密钥名是不能随意的
dd if=/dev/urandom of=fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000241822 s, 529 kB/s
ls
fence_xvm.key
scp fence_xvm.key server4:/etc/cluster/
scp fence_xvm.key server5:/etc/cluster/
systemctl start fence_virtd.service
如果无法开启fence,那么可能是你缺少了几个模块
yum install -y fence-virtd-libvirt.x86_64 fence-virtd-multicast.x86_64 fence-virtd-serial.x86_64
server4:添加fence
pcs stonith create vmfence fence_xvm pcmk_host_map="server4:server4,server5:server5" op monitor interval=1min
注意这里的映射关系是虚拟机的名字(qcow2文件名和主机名
pcs property set stonith-enabled=true 开启stonith设备
测试;
server4奔溃掉:
echo c > /proc/sysrq-trigger
server5:
pcs status 查看状态