king71 发表于 2019-2-1 09:37:46

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

  

  集群技术主要分为三类:
  高可用:(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 chunkserverserver5 client
  
  1、配置高可用
  安装corosync和pacemaker
  # yum install -y pacemaker
  # 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:off
timestamp: on
logger_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提供磁盘的共享
安装
# yum install scsi-* -y

# vim /etc/tgt/targets.conf


    backing-store /dev/vdb
    initiator-address 172.25.28.1
    initiator-address 172.25.28.2



  在server1/2上安装# yum install-y iscsi-*
  登陆共享磁盘
  # iscsiadm -m discovery -t st -p 172.25.28.5
  Starting iscsid:                                          
  172.25.28.5:3260,1 iqn.2017-03.com.example:server.target1
  # iscsiadm -m node -l
  Logging in to (multiple)
  Login to 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.
  执行:
  # ln -s moosefs-3.0.80-1.tar.gz moosefs-3.0.80.tar.gz
  然后继续执行
  # rpmbuild moosefs-3.0.80-1.tar.gz-tb
  缺少的开发包下载并安装,然后会在
  # cd /root/rpmbuild/RPMS/
  安装
  # 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上安装
  
  # yum install -y moosefs-client-3.0.80-1.x86_64.rpm
  
  创建一个挂载点
  # mfsmount /mnt/mfs -H mfsmaster
  
  在mfs中创建两个目录用来做测试:dir1 dir2
  
  # mfssetgoal -r 1 dir1///指定此目录中的文件的备份数量,默认是2
  dir1/:
   inodes with goal changed:                     1
   inodes with goal not changed:                   0
   inodes with permission denied:                  0
  
  # 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
  # ls
  bigfile
  # 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)
  # 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
  # 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为已经删除的文件保留一个恢复时间:
  使用
  # mfsgettrashtime -H .
  .: 86400
  如果要恢复误删操作,那么要将master的元数据挂载到客户端上,然后进行。
  
  # mkdir mfsmeta
  # mfsmount -m /mnt/mfs/mfsmeta/ -H mfsmaster
  mfsmaster accepted connection with parameters: read-write,restricted_ip
  # cd mfsmeta/
  在mfsmeta中执行find命令,找到删除的文件后,将其移到undel中即可恢复。
  # ls
  sustainedtrash
  # cd trash/
  # find -name **passwd**
  ./006/00000006|dir2|passwd
  # mv ./006/00000006\|dir2\|passwd undel/
  回到原来的位置,就会发现文件已经恢复。
  




页: [1]
查看完整版本: moosefs+corosync+pacemaker+iscsi高可用集群文件系统