您的位置:首页 > 运维架构 > 网站架构

moosefs+corosync+pacemaker+iscsi高可用集群文件系统

2017-03-04 10:05 453 查看
集群技术主要分为三类:
高可用:(High Available Cluster) :Heartbeat corosync pacemaker keepalived
负载均衡:(Load balancing Cluster):lvs nginx haproxy
高性能计算(High Performance Computing):Beowulf

mfs+ha:moosefs+corosync+pacemaker+iscsi高可用集群文件系统

mfs的优点:
通用文件系统,不需要修改上层应用可以在线扩容,体系架构可伸缩,可扩容部署简单可以任意设置冗余程度可在指定的时间内回收删除的文件可以提供netapp等商业存储的的快照特性提供网络监控接口提高读写效率提高海量小文件的读写效率劣势:
master的单点故障体系架构存储文件的总数有可预见的上限。 本文提供corosync的双机热备实现高可用,使用iscsi提供双机存储,并通过crm对相关资源进行整理。
pacemaker具有监测并恢复节点和服务器级别的故障
不需要共享存储
资源无关,任何能用脚本控制的资源都可以为其服务
支持集群
有crm命令行管理工具。

corosync和pacemaker都由红帽6.5内核提供,修改本地yum源,加入高可用资源点。

机器配置:server1/2 高可用 server3/4 chunkserver server5 client

1、配置高可用
安装corosync和pacemaker
[root@server1 x86_64]# yum install -y pacemaker
[root@server1 x86_64]# yum install corosync -y

修改corosync的配置文件

totem {
version: 2
secauth: off
threads: 3
interface {
ringnumber: 0
bindnetaddr: 172.25.28.0//网关
mcastaddr: 226.94.1.1//多播地址,根据多播协议确定的
mcastport: 5406//端口,不要和别人冲突
ttl: 1
}
}

logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug:offtimestamp: onlogger_subsys { subsys: AMF debug: off } }amf {
mode: disabled}service {
name:pacemaker//corosync支持pacemaker服务 ver:0//pacemaker与corosync一起启动 }

yum install crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm -y

进入crm命令行进行资源添加和管理

由于是用虚拟机模拟,所以使用的是fence_virtd服务,添加fence,需要在真机安装
fence-virt.x86_64,然后使用fence-virtd -c 生成fence_xvm.key
然后通过dd if=/dev/urandom of=fence_xvm.key bs =128 count=1 复制一串随机数,然后向server1和server2发送
在虚拟机的客户端安装fence-virt
此时,就可以通过vmfence控制虚拟机了
使用stonith-admin -I 如果查看到fence_xvm即成功
node server1.example.com
node server2.example.com
primitive vip ocf:heartbeat:IPaddr2 \
params cidr_netmask="24" ip="172.25.28.100"
primitive vmfence stonith:fence_xvm
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" \
no-quorum-policy="ignore"

2、
mfs的共享存储: 共享存储使用iscsi进行:server5提供磁盘的共享安装 [root@server5 ~]# yum install scsi-* -y [root@server5 ~]# vim /etc/tgt/targets.conf <target iqn.2017-03.com.example:server.target1> backing-store /dev/vdb initiator-address 172.25.28.1 initiator-address 172.25.28.2 </target> 在server1/2上安装[root@server1 ~]# yum install -y iscsi-*
登陆共享磁盘
[root@server2 ~]# iscsiadm -m discovery -t st -p 172.25.28.5
Starting iscsid: [ OK ]
172.25.28.5:3260,1 iqn.2017-03.com.example:server.target1
[root@server2 ~]# iscsiadm -m node -l
Logging in to [iface: default, target: iqn.2017-03.com.example:server.target1, portal: 172.25.28.5,3260] (multiple)
Login to [iface: default, target: iqn.2017-03.com.example:server.target1, portal: 172.25.28.5,3260] successful.
使用fdisk -l 发现/dev/sda即为成功
对sda进行磁盘分区,格式化为ext4
尝试挂载,能挂载成功,并在写入数据后双侧同步即成功

3、配置mfs

下载:mfs源码包,
libpcap-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm
moosefs-3.0.80-1.tar.gz
libpcap-devel-1.4.0-4.20130826git2dbcaa1.el6.x86_64.rpm
由于要进行双机热备,所以使用rpmbuild生成rpm包比较方便,
安装rpm-build
使用rpmbuild moosefs-3.0.80-1.tar.gz -tb
它会提示报错:
error: File /root/mfs/moosefs-3.0.80-1.tar.gz does not appear to be a specfile.
执行:
[root@server1 mfs]# ln -s moosefs-3.0.80-1.tar.gz moosefs-3.0.80.tar.gz
然后继续执行
[root@server1 mfs]# rpmbuild moosefs-3.0.80-1.tar.gz -tb
缺少的开发包下载并安装,然后会在
[root@server1 ~]# cd /root/rpmbuild/RPMS/
安装
[root@server1 x86_64]# rpm -ivh moosefs-cgi-3.0.80-1.x86_64.rpm moosefs-cgiserv-3.0.80-1.x86_64.rpm//提供网页cgi接口包 moosefs-cli-3.0.80-1.x86_64.rpm//命令行执行包 moosefs-master-3.0.80-1.x86_64.rpm//master包

将scsi共享并在server1/2上发现的磁盘挂载到/va/lib/mfs/下
修改/var/lib/mfs/的所属主为mfs.mfs
启动mfsmaster mfscgiserv
此时可以在网页上通过9425端口访问到mfs的内容。
登陆页面后,他会提示没有找到mfsmaster,这是由于没有mfsmaster host解析的原因
在不使用高可用的情况下,可以将解析添加到对应的主机后边,如果使用高可用,那么可以将解析添加到vip后边

由于pacemaker控制资源需要使用脚本进行,所以要编写mfs的启动脚本
mfs的启动脚本在//root/rpmbuild/BUILD/moosefs-3.0.80/rpm/rh中有相应的模版
12 # Source function library.
13 . /etc/init.d/functions

21 # Check that networking is up.
22 [ "${NETWORKING}" == "no" ] && exit 0
23 [ -x "/usr/sbin/mfsmaster" ] || exit 1
24 [ -r "/etc/mfs/mfsexports.cfg" ] || exit 1
29 start () {
30 echo -n $"Starting $prog: "
31 $prog -a >/dev/null 2>&1 && success || failure //使用-a选项可以恢复意外停止进程导致的无法启动msmaster。
32 RETVAL=$?

使用service mfsd start或service mfsd stop成功即为OK

4、将mfsd 加入pacemaker
crm(live)configure# primitive mfs lsb:mfsd op monitor interval=1min
crm(live)configure# group vip_with_mfsd vip mfs
commit
通过server2的监控可以看到正常的工作
Online: [ server1.example.com server2.example.com ]

vmfence (stonith:fence_xvm): Started server2.example.com
Resource Group: vip_with_mfsd
vip (ocf::heartbeat:IPaddr2):Started server1.example.com
mfs (lsb:mfsd): Started server1.example.com

将磁盘文件系统加入pacemaker
crm(live)configure# primitive mfsdate ocf:heartbeat:Filesystem params device=/dev/sda1 directory=/var/lib/mfs/ fstype=ext4 op monitor interval=1min
crm(live)configure# group mfs_with_data vip mfsdate mfs

禁止资源回切:
crm(live)configure# rsc_defaults resource-stickiness=100

5、继续配置mfs,实现

mfs文件系统mfschunk和client的添加

为server3和server4添加硬盘:
格式化,挂载到一个挂载点
然后将挂载点写入/etc/mfs/mfshdd.cfg中,启动mfschunkserver 即可
然后在网页的9245可以看到磁盘的挂载情况

6、安装客户端:

在server5上安装

[root@server5 ~]# yum install -y moosefs-client-3.0.80-1.x86_64.rpm

创建一个挂载点
[root@server5 mnt]# mfsmount /mnt/mfs -H mfsmaster

在mfs中创建两个目录用来做测试:dir1 dir2

[root@server5 mfs]# mfssetgoal -r 1 dir1///指定此目录中的文件的备份数量,默认是2
dir1/:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0

[root@server5 dir1]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.499389 s, 210 MB/s
[root@server5 dir1]# ls
bigfile
[root@server5 dir1]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.28.4:9422 (status:VALID)
chunk 1: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.28.3:9422 (status:VALID)
[root@server5 dir2]# dd if=/dev/zero of=bigfile bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.529634 s, 198 MB/s
[root@server5 dir2]# mfsfileinfo bigfile
bigfile:
chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
copy 1: 172.25.28.3:9422 (status:VALID)
copy 2: 172.25.28.4:9422 (status:VALID)
chunk 1: 0000000000000004_00000001 / (id:4 ver:1)
copy 1: 172.25.28.3:9422 (status:VALID)
copy 2: 172.25.28.4:9422 (status:VALID)

在server1的master下,可以使用文本工具mfscli -SHD进行文本查看。

误删撤回:

所有的资源记录都在master上,mfs为已经删除的文件保留一个恢复时间:
使用
[root@server5 dir2]# mfsgettrashtime -H .
.: 86400
如果要恢复误删操作,那么要将master的元数据挂载到客户端上,然后进行。

[root@server5 mfs]# mkdir mfsmeta
[root@server5 mfs]# mfsmount -m /mnt/mfs/mfsmeta/ -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@server5 mfs]# cd mfsmeta/
在mfsmeta中执行find命令,找到删除的文件后,将其移到undel中即可恢复。
[root@server5 mfsmeta]# ls
sustained trash
[root@server5 mfsmeta]# cd trash/
[root@server5 trash]# find -name **passwd**
./006/00000006|dir2|passwd
[root@server5 trash]# mv ./006/00000006\|dir2\|passwd undel/
回到原来的位置,就会发现文件已经恢复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  moosefs corosync pacemaker