栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

mfs分布式文件系统—mfs安装、mfs的Storage class 存储类、mfs集群热备份/高可用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mfs分布式文件系统—mfs安装、mfs的Storage class 存储类、mfs集群热备份/高可用

1、MFS安装

官网下载

[root@server1 ~]# curl "http://ppa.moosefs.com/MooseFS-3-el7.repo" > /etc/yum.repos.d/MooseFS.repo   下载mfs仓库
[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# cat MooseFS.repo 
[MooseFS]
name=MooseFS $releasever - $basearch
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el7
gpgcheck=0   不需要校验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MooseFS
enabled=1
[root@server1 yum.repos.d]# yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y  安装
[root@server1 mfs]# vim /etc/hosts  添加解析,将server1设置为master
172.25.50.1  server1 mfsmaster
[root@server1 mfs]# systemctl start moosefs-master  启动
[root@server1 mfs]# systemctl start  moosefs-cgiserv.service  启动

访问:172.25.50.1:9425

在server2上安装moosefs-chunkserver

[root@server1 yum.repos.d]# scp MooseFS.repo server2:/etc/yum.repos.d/ 
[root@server2 ~]# yum install moosefs-chunkserver -y   server2上安装chunkserver
[root@server2 mfs]# vim /etc/hosts   添加解析     
172.25.50.1  server1 mfsmaster
[root@server2 ~]# cd /etc/mfs/   指定存储点      
[root@server2 mfs]# mkdir /mnt/chunk1  创建存储目录   
[root@server2 mfs]# vim mfshdd.cfg   

注意:在生产环境中此目录一定挂载的是一个分区

[root@server2 mfs]# chown mfs.mfs /mnt/chunk1    chunkserver是以mfs用户身份运行的,所以需要给存储目录mfs身份权限    server3进行同样操作
[root@server2 mfs]# systemctl start moosefs-chunkserver   启动

在server3上安装 moosefs-chunkserver

[root@server1 yum.repos.d]# scp MooseFS.repo server3:/etc/yum.repos.d/ 
[root@server3~]# yum install moosefs-chunkserver -y   server2上安装chunkserver
[root@server3 mfs]# vim /etc/hosts   添加解析     
172.25.50.1  server1 mfsmaster
[root@server3 ~]# cd /etc/mfs/ 
[root@server3 mfs]# mkdir /mnt/chunk2
[root@server3 mfs]# vim mfshdd.cfg   

[root@server3 mfs]# chown mfs.mfs /mnt/chunk2  
[root@server3 mfs]# systemctl start moosefs-chunkserver  启动

下载mfs客户端:
为了不多开虚拟机将宿主机作为客户端,客户端系统是redhat8

[root@foundation50 ~]#  curl "http://ppa.moosefs.com/MooseFS-3-el8.repo" > /etc/yum.repos.d/MooseFS.repo  下载mfs仓库
[root@foundation50 ~]# yum install moosefs-client -y  安装客户端
[root@foundation50 ~]# cd /mnt/
[root@foundation50 mnt]# mkdir /mfs
[root@foundation50 mfs]# cd /etc/mfs/
[root@foundation50 mfs]# ls
mfsmount.cfg  mfsmount.cfg.sample
[root@foundation50 mfs]# vim mfsmount.cfg  编辑客户端配置文件

[root@foundation50 mfs]# vim /etc/hosts  添加解析
[root@foundation50 mfs]# 172.25.50.1  server1  mfsmaster
[root@foundation50 mfs]# mfsmount   自动读取刚才我们配置的mfsmount.cfg文件
[root@foundation50 mfs]# df 
mfs#mfsmaster:9421     35622912  2855936  32766976   9% /mnt/mfs   客户端连接的是9421端口
9420端口连接的是chunkserver,9419连接的是原数据服务器
[root@foundation50 ~]# cd /mnt/mfs/
[root@foundation50 mfs]# mkdir dr1    创建目录
[root@foundation50 mfs]# mkdir dr2   创建目录
[root@foundation50 mfs]# mfsgetgoal dr1   查看副本数
dr1: 2   副本数为2
[root@foundation50 mfs]# mfsgetgoal dr2  查看副本数
dr2: 2  副本数为2
[root@foundation50 mfs]# mfssetgoal -r 1 dr1/   设置dr1副本数为1
[root@foundation50 mfs]# cd dr1/
[root@foundation50 dr1]# cp /etc/passwd .   将passwd文件拷贝到dr1里
[root@foundation50 dr1]# cd ..
[root@foundation50 mfs]# cp /etc/fstab dr2/   将fstab文件拷贝到dr2里
[root@foundation50 dr1]# mfsfileinfo passwd   查看具体文件信息
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)   一个副本,存储到server3上
		copy 1: 172.25.50.3:9422 (status:VALID)
[root@foundation50 mfs]# cd dr2/		
[root@foundation50 dr2]# mfsfileinfo fstab     查看具体文件信息
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.2:9422 (status:VALID)     有两个副本
		copy 2: 172.25.50.3:9422 (status:VALID)

[root@server3 ~]# systemctl stop moosefs-chunkserver   当我们停掉server3的chunkserver
[root@foundation50 dr2]# mfsfileinfo fstab  发现两个副本的还可以用
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.2:9422 (status:VALID)
[root@foundation50 dr2]# cd ..
[root@foundation50 mfs]# cd dr1/    
[root@foundation50 dr1]# mfsfileinfo passwd   发现一个副本就不可以使用了
passwd:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		no valid copies !!!
注:只要集群中master不出问题,chunkserver停止开启后数据不会丢失

扩容chunkserver
再开启一台虚拟机server4,作为chunkserver

[root@server2 yum.repos.d]# scp MooseFS.repo server4:/etc/yum.repos.d/    将server2配置过的MooseFS软件仓库给server4拷贝一份
[root@server4 ~]# yum install moosefs-chunkserver -y   安装chunkserver
[root@server4 ~]# vim /etc/hosts  添加解析
 172.25.50.1  server1   mfsmaster
 [root@server4 ~]# mkdir /mnt/chunk3   创建存储目录
 [root@server4 ~]# chown mfs.mfs /mnt/chunk3/   给mfs用户写入权限
[root@server4 ~]# vim /etc/mfs/mfshdd.cfg   最后一行,添加存储路经
/mnt/chunk3/ 
[root@server4 ~]# systemctl start moosefs-chunkserver  启动

[root@foundation50 isos]# cd /mnt/mfs/
[root@foundation50 mfs]# cd dr1/
[root@foundation50 dr1]# dd if=/dev/zero of=bigfile bs=1M count=200   压测,每块chunk默认64M,200M需要四个
[root@foundation50 dr1]# mfsfileinfo bigfile    只有一个副本,分为四个块,读取数据需要四个快一起读取,其中一个坏了数据就不完整了
bigfile:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		copy 1: 172.25.50.3:9422 (status:VALID)
	chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
		copy 1: 172.25.50.4:9422 (status:VALID)
	chunk 2: 0000000000000005_00000001 / (id:5 ver:1)
		copy 1: 172.25.50.2:9422 (status:VALID)
	chunk 3: 0000000000000006_00000001 / (id:6 ver:1)
		copy 1: 172.25.50.4:9422 (status:VALID)

删除文件如何撤销

[root@foundation50 dr1]# rm -f passwd 
[root@foundation50 dr1]# mfsgettrashtime .    查看回收时间
.: 86400
[root@foundation50 ~]# cd /mnt/
[root@foundation50 mnt]# mkdir mfsmeta  创建原数据目录
[root@foundation50 mnt]# mfsmount -m /mnt/mfsmeta/   -m表示挂载原数据。挂载原数据到/mnt/mfsmeta/ 目录
[root@foundation50 mnt]# cd /mnt/mfsmeta/
[root@foundation50 mfsmeta]# ls
sustained  trash
[root@foundation50 mfsmeta]# cd trash/   删除的文件都在这个目录里面
[root@foundation50 trash]# find -name *passwd*  查找刚才删除的passwd
./004/00000004|dr1|passwd    passwd 所在目录
[root@foundation50 trash]# cd 004/  
[root@foundation50 004]# ls
'00000004|dr1|passwd'   undel
[root@foundation50 004]# mv 00000004|dr1|passwd undel/   将passwd文件移动到undel
[root@foundation50 004]# cd /mnt/mfs
[root@foundation50 mfs]# cd dr1/
[root@foundation50 dr1]# ls
bigfile  passwd     删除的passwd文件已经恢复
2、mfs读写原理


【1】客户端向元数据服务器发出读请求。
【2】元数据服务器把所需数据存放的位置(Chunk Server 的 IP 地址和 Chunk 编号) 告知客户端。
【3】客户端向已知的 Chunk Server 请求发送数据。
【4】Chunk Server 向客户端发送数据。

3、MFS写入数据的处理过程

【1】客户端向元数据服务器发送写入请求。
【2】元数据服务器与 Chunk Server 进行交互(只有当所需的分块 Chunks 存在的时候才进行这个交互),但元数据服务器只在某些服务器创建新的分块Chunks,创建成功后由Servers 告知元数据服务器操作成功
【3】元数据服务器告知客户端, 可以在哪个 Chunk Server 的哪些 Chunks 写入数据。
【4】客户端向指定的 Chunk Server 写入数据
【5】该 Chunk Server 与其他 Chunk Server 进行数据同步
【6】 数据同步成功
【7】同步成功后 Chunk Server 告知客户端数据写入成功。
【8】客户端告知元数据服务器本次写入完毕。
功后 Chunk Server 告知客户端数据写入成功。
【8】客户端告知元数据服务器本次写入完毕。

4、mfs的Storage class 存储类

添加标签

[root@server2 ~]# vim /etc/mfs/mfschunkserver.cfg

[root@server2 ~]# systemctl reload moosefs-chunkserver.service   重启服务
[root@server3 ~]# vim /etc/mfs/mfschunkserver.cfg

[root@server3 ~]# systemctl reload moosefs-chunkserver.service  重启服务
[root@server4 ~]# vim /etc/mfs/mfschunkserver.cfg

[root@server4 ~]# systemctl reload moosefs-chunkserver.service  重启服务

创建存储类

[root@foundation50 ~]# cd /mnt/mfs
[root@foundation50 mfs]# cd dr1/
[root@foundation50 dr1]# mfsscadmin create A,B classAB  创建存储类,是在A和B上创建的
storage class make classAB: ok
[root@foundation50 dr1]# mfsscadmin list  查看
1
2
3
4
5
6
7
8
9
classAB    此为自己创建的存储类
[root@foundation50 dr1]# mfsscadmin create B,C classBC   创建存储类,在B和C上
storage class make classBC: ok
[root@foundation50 dr1]# mfsscadmin list 
1
2
3
4
5
6
7
8
9
classAB  
classBC  此为自己创建的存储类

数据迁移:数据存储A、B上,迁移到B、C上

[root@foundation50 ~]# cd /mnt/mfs
[root@foundation50 mfs]# ls
dr1  dr2
[root@foundation50 mfs]# cd dr2/
[root@foundation50 dr2]# mfsfileinfo fstab  
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.2:9422 (status:VALID)     数据在A、B上
		copy 2: 172.25.50.3:9422 (status:VALID)
[root@foundation50 dr2]# mfssetsclass classBC fstab   把classBC存储类设置到fstab
fstab: storage class: 'classBC'
[root@foundation50 dr2]# mfsfileinfo fstab 
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.3:9422 (status:VALID)   此时数据迁移到BC上
		copy 2: 172.25.50.4:9422 (status:VALID)

多区域数据迁移:

[root@server2 ~]#  vim /etc/mfs/mfschunkserver.cfg  

[root@server2 ~]# systemctl reload moosefs-chunkserver.service   重载服务
[root@server3 ~]# vim /etc/mfs/mfschunkserver.cfg    

[root@server3 ~]# systemctl reload moosefs-chunkserver   重载服务
[root@server4 ~]#  vim /etc/mfs/mfschunkserver.cfg 

[root@server4 ~]# systemctl reload moosefs-chunkserver   重启
[root@foundation50 dr2]# mfsscadmin create AS,BS class2S  创建存储类,在AS、BS上
storage class make class2S: ok
[root@foundation50 dr2]# mfsscadmin list
1
2
3
4
5
6
7
8
9
classAB
classBC
class2S   创建存储类成功
[root@foundation50 dr2]#  mfsfileinfo fstab    
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)    查看当前数据在server3和server4上
		copy 1: 172.25.50.3:9422 (status:VALID)
		copy 2: 172.25.50.4:9422 (status:VALID)
[root@foundation50 dr2]# mfssetsclass class2S fstab     把class2S存储类设置到fstab
fstab: storage class: 'class2S'
[root@foundation50 dr2]# mfsfileinfo fstab   查看文件详细信息
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.2:9422 (status:VALID)     数据由原来的server3、server4迁移到了server2和server3上
		copy 2: 172.25.50.3:9422 (status:VALID)

将热数据迁移到温数据
[root@foundation50 dr2]# mfsscadmin create BH,CH class2H  创建存储类,在BH,CH上
storage class make class2H: ok 
[root@foundation50 dr2]# mfssetsclass class2H fstab 
fstab: storage class: 'class2H'
[root@foundation50 dr2]# mfsfileinfo fstab 
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.3:9422 (status:VALID)     由server2、server3,迁移到server3、server4
		copy 2: 172.25.50.4:9422 (status:VALID)

[root@server3 ~]#  vim /etc/mfs/mfschunkserver.cfg  

[root@server3 ~]# systemctl reload moosefs-chunkserver.service  重启服务
[root@foundation50 dr2]# mfsscadmin create -C 2AS -K AS,BS -A BH,CH -d 7 class7d
storage class make class7d: ok
[root@foundation50 dr2]# mfssetsclass class7d fstab 
fstab: storage class: 'class7d'
[root@foundation50 dr2]# mfsfileinfo fstab 
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
		copy 1: 172.25.50.2:9422 (status:VALID)
		copy 2: 172.25.50.3:9422 (status:VALID)

5 、mfs集群热备份/高可用

实验前准备:server1、server2做高可用,先将erver2上数据移走

[root@foundation50 dr2]# mfssetsclass classBC fstab   将classBC存储类设置到fstab文件上
fstab: storage class: 'classBC'
[root@foundation50 dr2]# mfsfileinfo fstab  查看文件信息
fstab:
	chunk 0: 0000000000000002_00000001 / (id:2 ver:1)  
		copy 1: 172.25.50.3:9422 (status:VALID)     数据由server2、server3迁移到server3、server4上
		copy 2: 172.25.50.4:9422 (status:VALID)
[root@server2 ~]# systemctl reload moosefs-chunkserver.service   重载chunkserver
[root@server2 ~]# systemctl stop moosefs-chunkserver.service   停掉server2上的chunkserver	
[root@foundation50 ~]# umount /mnt/mfs  手工卸载

如果内核崩溃,没有正常停止,该怎么办?

[root@server1 mfs]# kill -9 3857  强制删除master进程,没有正常停止
[root@server1 mfs]# cd /var/lib/mfs/  进入原数据目录
[root@server1 mfs]# ll
-rw-r----- 1 mfs mfs     120 May 28 00:08 metadata.crc
-rw-r----- 1 mfs mfs    3969 May 28 00:08 metadata.mfs.back    一般正常停止back会被回收,此时back没有正常回收
-rw-r----- 1 mfs mfs    3969 May 27 23:53 metadata.mfs.back.1   一般正常停止back会被回收,此时back没有正常回收
-rw-r--r-- 1 mfs mfs       8 Aug 10  2021 metadata.mfs.empty
-rw-r----- 1 mfs mfs 4984552 May 28 00:08 stats.mfs
[root@server1 mfs]# systemctl start moosefs-master  此时再启动,无法启动报错
Job for moosefs-master.service failed because the control process exited with error code. See "systemctl status moosefs-master.service" and "journalctl -xe" for details.
[root@server1 mfs]# mfsmaster -a   用此命令就可以恢复
[root@server1 mfs]# mfsmaster stop   停止master
[root@server1 mfs]# ll
-rw-r----- 1 mfs mfs    3969 May 28 00:33 metadata.mfs   此时back就被正常回收

如何防止内核崩溃,造成无法启动的情况?

[root@server1 mfs]# systemctl status moosefs-master.service  查看启动脚本路经
● moosefs-master.service - MooseFS Master server
   Loaded: loaded (/usr/lib/systemd/system/moosefs-master.service; disabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-05-28 00:37:24 CST; 2s ago

[root@server1 mfs]# systemctl daemon-reload  重载
[root@server1 mfs]# kill -9 3965  此时强制删除master进程
[root@server1 mfs]# systemctl start moosefs-master  此时再次启动就可以正常启动了

在server2上安装moosefs-master

[root@server2 ~]# systemctl stop moosefs-chunkserver.service  停止chunkserver
[root@server2 ~]# yum install moosefs-master -y   安装master
5、1要做双机热备份必须要让server1和server2上master数据同步

用iscs设备共享同步数据

内存有限我们不单独开虚拟机,在server3上添加一块磁盘
[root@server3 ~]# fdisk -l   查看磁盘
Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors  多出了一块我们刚才添加的磁盘
[root@server3 ~]# yum install targetcli -y   安装
[root@server3 ~]# systemctl start  target.service  启动
[root@server3 ~]# targetcli  
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> ls
o- / ..................................................................... [...]
  o- backstores .......................................................... [...]
  | o- block .............................................. [Storage Objects: 0]
  | o- fileio ............................................. [Storage Objects: 0]
  | o- pscsi .............................................. [Storage Objects: 0]
  | o- ramdisk ............................................ [Storage Objects: 0]
  o- iscsi ........................................................ [Targets: 0]
  o- loopback ..................................................... [Targets: 0]
/> cd /backstores/
/backstores> cd block 
/backstores/block> ls
o- block .................................................. [Storage Objects: 0]
/backstores/block> create mydisk /dev/vdb  创加存储名
Created block storage object mydisk using /dev/vdb.
/backstores/block> ls
o- block .................................................. [Storage Objects: 1]
  o- mydisk ........................ [/dev/vdb (10.0GiB) write-thru deactivated]
    o- alua ................................................... [ALUA Groups: 1]
      o- default_tg_pt_gp ....................... [ALUA state: Active/optimized]
/backstores> cd ..
/> cd /iscsi 
/iscsi> create iqn.2022-06.org.westos:target  创建外部共享
Created target iqn.2022-06.org.westos:target.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> cd iqn.2022-06.org.westos:target/tpg1/
/iscsi/iqn.20...s:target/tpg1> ls
o- tpg1 ................................................. [no-gen-acls, no-auth]
  o- acls ............................................................ [ACLs: 0]
  o- luns ............................................................ [LUNs: 0]
  o- portals ...................................................... [Portals: 1]
    o- 0.0.0.0:3260 ....................................................... [OK]
/iscsi/iqn.20...s:target/tpg1> cd acls 
/iscsi/iqn.20...get/tpg1/acls> ls
o- acls .............................................................. [ACLs: 0]
/iscsi/iqn.20...get/tpg1/acls> create iqn.2022-06.org.westos:client    创建访问控制
Created Node ACL for iqn.2022-06.org.westos:client
[root@server1 ~]# yum install -y iscsi-*  安装iscsi客户端
[root@server1 ~]# vim /etc/iscsi/initiatorname.iscsi  将创建的访问控制添加到此文件里
InitiatorName=iqn.2022-06.org.westos:client
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.50.3
172.25.50.3:3260,1 iqn.2022-06.org.westos:target
[root@server1 ~]# iscsiadm -m discovery -t st -p 172.25.50.3
172.25.50.3:3260,1 iqn.2022-06.org.westos:target
[root@server1 ~]# iscsiadm -m node -l   登陆
Logging in to [iface: default, target: iqn.2022-06.org.westos:target, portal: 172.25.50.3,3260] (multiple)
Login to [iface: default, target: iqn.2022-06.org.westos:target, portal: 172.25.50.3,3260] successful.
[root@server1 ~]# fdisk -l 查看设备
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors  多出了一个设备,这个设备就是在srever3上输出的vdb10g的设备
[root@server1 ~]# fdisk /dev/sda  创建分区
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x360a447e.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-20971519, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): 
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 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
Disk label type: dos
Disk identifier: 0x360a447e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    20971519    10484736   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server1 ~]# mkfs.xfs /dev/sda1   格式化
[root@server1 mfs]# systemctl stop moosefs-master.service   停掉server1上master服务
[root@server1 ~]# mount /dev/sda1 /mnt/  将设备挂载到mnt上
[root@server1 ~]# cd /var/lib/mfs/    master原数据目录
changelog.11.mfs  changelog.16.mfs  changelog.22.mfs   metadata.mfs.back.1
changelog.12.mfs  changelog.17.mfs  changelog.8.mfs    metadata.mfs.empty
changelog.13.mfs  changelog.18.mfs  changelog.9.mfs    stats.mfs
changelog.14.mfs  changelog.19.mfs  metadata.crc
changelog.15.mfs  changelog.21.mfs  metadata.mfs.back   
[root@server1 mfs]# cp -p * /mnt/   需要把srevre1上的master原数据拷贝到/mnt里,来共享数据,达到server1、server2数据一致的目的   -p表示保留权限拷贝
[root@server1 mnt]# ll -d .  查看mnt目录的权限
drwxr-xr-x 2 root root 4096 May 29 02:11 .
[root@server1 mnt]# ll -d /var/lib/mfs/
drwxr-xr-x 2 mfs mfs 4096 May 29 02:07 /var/lib/mfs/  由于mfs目录权限是需要mfs写入的,mnt写不进去
[root@server1 mnt]# chown mfs.mfs /mnt/  
[root@server1 ~]# umount /mnt/ 卸载

如何把/dev/sda1 这个设备共享到server2上
[root@server2 ~]# yum install iscsi-* -y  安装相同的客户端
[root@server2 ~]# vim /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2022-06.org.westos:client
[root@server2 ~]# iscsiadm -m discovery -t st -p 172.25.50.3
172.25.50.3:3260,1 iqn.2022-06.org.westos:target
[root@server2 ~]# iscsiadm -m node -l   登陆
[root@server2 ~]# fdisk -l   查看设备
Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors      sda已经在serevr2上查看了
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048    20971519    10484736   83  Linux      sda1已经在server2上查看了
[root@server2 ~]# mount /dev/sda1 /var/lib/mfs  此时我们将sda1里的数据(也就是serevr1上master原数据)挂载到server2的master原数据目录,这样server1、server2 上的数据就保持一致了
[root@server2 ~]# vim /usr/lib/systemd/system/moosefs-master.service     

[root@server2 ~]# systemctl daemon-reload
[root@server2 ~]# systemctl start moosefs-master 启动,能启动说明数据同步成功
5.2 安装高可用套件
[root@server1 mnt]# cd /etc/yum.repos.d/  配置yum源
[root@server1 yum.repos.d]# vim dvd.repo 
[dvd]
name=rhel7.6
baseurl=http://172.25.254.50/rhel7.6
gpgcheck=0

[HighAvailability]
name=rhel7.6 HighAvailability
baseurl=http://172.25.254.50/rhel7.6/addons/HighAvailability
gpgcheck=0
[root@foundation50 isos]# cd /mnt/pub/docs/mfs/
[root@foundation50 mfs]# evince Pacemaker-1.1-Clusters_from_Scratch-en-US.pdf &  查看高可用文档
[root@server1 yum.repos.d]# yum install -y pacemaker pcs psmisc policycoreutils-python  安装集群套件
[root@server1 yum.repos.d]# scp dvd.repo server2:/etc/yum.repos.d/  拷贝软件仓库到server2上
[root@server1 ~]# systemctl start pcsd.service  启动集群管理工具
[root@server1 ~]# systemctl enable pcsd.service  设置开机自启
[root@server2 ~]# systemctl enable --now  pcsd.service    设置开机自启
为了方便在server1、serevr2上做免密
[root@server1 ~]# ssh-keygen 
[root@server1 ~]# ssh-copy-id server2
[root@server1 ~]# echo westos | passwd --stdin hacluster  给此用户设置密码
[root@server1 ~]# ssh server2 'echo westos | passwd --stdin hacluster'   在server2上同样给此用户设置密码
[root@server1 ~]# pcs cluster auth server1 server2  验证这两个节点
Username: hacluster
Password: 
server1: Authorized
server2: Authorized
[root@server1 ~]# pcs cluster setup --name mycluster server1 server2   用验证成功的两个节点创建集群
[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    有警告,需要把这个禁掉
[root@server1 ~]# pcs property set stonith-enabled=false  禁掉
5.3 将mfs迁移到高可用集群平台上

[root@server1 ~]# pcs resource create  vip ocf:heartbeat:IPaddr2 ip=172.25.50.100 cidr_netmask=32  op monitor interval=30s   创建vip资源   cidr_netmask=32表示子网掩码  op monitor interval=30s 表示每隔30s对资源进行监控
[root@server1 ~]# pcs status  查看集群状态


测试:

[root@server1 ~]# pcs node standby  让server1节点处于休息状态
[root@server1 ~]# pcs status 

[root@server1 ~]#  pcs node unstandby   让server1节点重新加入集群

将文件系统资源加入集群
[root@server1 ~]# pcs resource describe ocf:heartbeat:Filesystem  查看管理文件系统参数,那些参数是必须要添加的
[root@server1 ~]# pcs resource create mfsdate  ocf:heartbeat:Filesystem device=/dev/sda1 directory=/var/lib/mfs fstype=xfs op monitor interval=60s 
fstype=xfs  表示文件系统格式
directory=/vae/lib/mfs  表示挂载点
op monitor interval=60s   表示每隔60s监控一次
[root@server1 ~]# pcs status  查看集群状态,mfsdate资源已经迁移到集群server1上

[root@server1 ~]# pcs resource create mfsmaster systemd:moosefs-master op monitor interval=60s   创建服务
[root@server1 ~]# pcs status  

[root@server1 ~]# pcs resource group add hagroup  vip mfsdate mfsmaster  添加一个hagroup组,然后把 vip mfsdate mfsmaster这三个都添加进来
[root@server1 ~]# pcs status  ,全部都调整在server2上

[root@server2 ~]# pcs node standby  此时让server2休眠
[root@server2 ~]# pcs status 

[root@server2 ~]# pcs node unstandby   当server2重新开启 

[root@server1 ~]# vim /etc/hosts
172.25.50.100 mfsmaster    添加解析
[root@server2 ~]# vim /etc/hosts
172.25.50.100 mfsmaster    添加解析
[root@server3 ~]# vim /etc/hosts
172.25.50.100 mfsmaster    添加解析
[root@server4 ~]# vim /etc/hosts
172.25.50.100 mfsmaster    添加解析
[root@foundation50 dr2]# vim /etc/hosts
172.25.50.100 mfsmaster    添加解析

当内核崩溃,网卡出现故障就需要重启系统,但是集群没有这个重启功能
fence可以管理电源接口

[root@foundation50 isos]# fence_virtd -c  fence配置
Module search path [/usr/lib64/fence-virt]: 

Available backends:
    libvirt 0.3
Available listeners:
    tcp 0.1
    serial 0.4
    multicast 1.2

Listener modules are responsible for accepting requests
from fencing clients.

Listener module [multicast]:           回车

The multicast listener module is designed for use environments
where the guests and hosts may communicate over a network using
multicast.

The multicast address is the address that a client will use to
send fencing requests to fence_virtd.

Multicast IP Address [225.0.0.12]:   回车

Using ipv4 as family.

Multicast IP Port [1229]:   回车

Setting a preferred interface causes fence_virtd to listen only
on that interface.  Normally, it listens on all interfaces.
In environments where the virtual machines are using the host
machine as a gateway, this *must* be set (typically to virbr0).
Set to 'none' for no interface.

Interface [virbr0]:   回车

The key file is the shared key information which is used to
authenticate fencing requests.  The contents of this file must
be distributed to each physical host and virtual machine within
a cluster.

Key File [/etc/cluster/fence_xvm.key]:  回车

Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.

Backend module [libvirt]:   回车

The libvirt backend module is designed for single desktops or
servers.  Do not use in environments where virtual machines
may be migrated between hosts.

Libvirt URI [qemu:///system]:   回车

Configuration complete.

=== Begin Configuration ===
backends {
	libvirt {
		uri = "qemu:///system";
	}

}

listeners {
	multicast {
		port = "1229";
		family = "ipv4";
		interface = "virbr0";
		address = "225.0.0.12";
		key_file = "/etc/cluster/fence_xvm.key";
	}

}

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

=== End Configuration ===
Replace /etc/fence_virt.conf with the above [y/N]? y
[root@foundation50 isos]# mkdir /etc/cluster  创建
[root@foundation50 cluster]# dd if=/dev/urandom of=fence_xvm.key bs=128 count=1   表示取一个128字节的随机数当密钥用, urandom表示随机数设备
[root@foundation50 cluster]# systemctl start fence_virtd.service 启动fence_virtd
[root@foundation50 cluster]# netstat -anulp | grep :1229   
udp        0      0 0.0.0.0:1229            0.0.0.0:*                           30547/fence_virtd     监听udp的1229端口

server1、server2如何连接fence设备
[root@server1 ~]# stonith_admin -I   查看server1上是否有连接的fence设备
No devices found
[root@server1 ~]# yum install fence-virt -y   安装fence客户端
[root@server1 ~]# stonith_admin -I   
 fence_xvm
 fence_virt
2 devices found
[root@server2 ~]# yum install fence-virt -y  安装fence客户端
[root@server2 ~]#  stonith_admin -I   查看是否fence设备
 fence_xvm  虚拟机fence
 fence_virt   
2 devices found
[root@server1 ~]# stonith_admin -M -a fence_xvm
需要校验,服务端已经设置好了/etc/cluster/fence_xvm.key 这个key来校验,不是谁都可以给电源接口发请求的
[root@server1 ~]# mkdir /etc/cluster     所以都需要创建key的目录
[root@server2 ~]# mkdir /etc/cluster    所以都需要创建key的目录
[root@foundation50 cluster]# scp fence_xvm.key server1:/etc/cluster    客户端需要读这个key,所以将服务端的key拷贝给客户端,路经保持一样
[root@foundation50 cluster]# scp fence_xvm.key server2:/etc/cluster

集群如何调用fence
[root@server1 cluster]# pcs stonith describe fence_xvm   查看描述
[root@server1 cluster]# pcs stonith create vmfence fence_xvm pcmk_host_map="server1:vm1;server2:vm2" op monitor interval=60s   
pcmk_host_map="server1:vm1;server2:vm2"  表示映射,主机名在前,虚拟机名在后

[root@server1 cluster]# pcs  resource cleanup vmfence   清理资源,再次添加
Cleaned up vmfence on server2
Cleaned up vmfence on server1
Waiting for 2 replies from the CRMd.. OK
[root@server1 cluster]# pcs status

[root@server1 cluster]# pcs property set stonith-enabled=true

[root@server1 cluster]# pcs property set stonith-enabled=true   把之前禁掉的stonith激活

fence测试:
此时当我们对虚拟机server1使用命令---->echo c> /proc/sysrq-trigger (模拟内核崩溃)
的时候,它会进行重启并且添加在可用节点中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/941250.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号