尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

手把手教你搭建Moosefs的高可用集群,一并解决脑裂问题

手把手教你搭建Moosefs的高可用集群,一并解决脑裂问题 目录一.Moosefs高可用集群1.1简单介绍1.2搭建Moosefs高可用集群1.2.1准备工作1.2.2安装软件并启动服务1.2.3配置hacluster用户1.2.4完成集群管理配置1.2.5添加集群资源1.2.6创建资源组1.2.7测试二解决集群中的脑裂问题2.1简单介绍2.2创建SBD共享裸磁盘2.3完成SBD的配置2.4初始化SBD头部文件2.5启用SBD stonish隔离2.6集群激活fense一.Moosefs高可用集群1.1简单介绍1.说明Moosefs的高可用架构实际上是MasterServer的高可用实现。当Moosefs集群中的Master节点出现故障时由另一个Master节点接管保证业务的正常运行。需要注意的是社区版本的高可用架构需要我们自己手动搭建而pro版本的高可用架构中默认含有高可用但是pro版为商用版本需要花钱购买才可使用2.工作机制简单来说Master节点会每隔1s或2s向备用Master节点发送心跳信号如果备用节点收不到主Master的心跳信号则会认为Master节点已经宕机这时它会自动接管服务。同时需要明确的一点是在高可用集群中Mfsmatser的IP不再固定在某一台主机IP上而是放在虚拟的VIP上。当发生VIP漂移时Mfsmaster也一并转移到另一台主机上。3.高可用软件的选择这里我们选择pacemaker软件因为它的高可用可以作用到具体的服务上而非单纯的主机的高可用切换。1.2搭建Moosefs高可用集群1.2.1准备工作1.新开一台虚拟机并在上面安装moosefs-master服务用于充当备用master步骤请看手把手教你部署Moosefs这篇文章高可用集群的组成2台MasterServer2台ChunkServer1台Client192.168.7.191server1MasterServer(主)192.168.7.192server2ChunkMaster192.168.7.193server3ChunkServer192.168.7.194server4Client192.168.7.195server5MasterServer备192.168.7.200mfsmasterDNS域名解析VIP2.先暂停掉moosefs-master和moosefs-chunkserver服务防止干扰systemctl stop moosefs-master systemctl stop moosefs-chunkserver3.将mfsmaster解析到VIP上vim /etc/hosts说明所有节点上都要完成域名解析4.启用moosefs的高可用软件仓库cd /etc/yum.repos.d vim rocky-addons.repo说明该仓库是rocky linux的附加组件仓库里面包含如高可用软件包等多功能软件包。需要我们手动进入启用仓库默认是关闭状态1.2.2安装软件并启动服务yum install -y pacemaker corosync pcs fence-agents #安装软件 systemctl enable --now pcsd #启动服务1.2.3配置hacluster用户id hacluster #查看用户是否存在 passwd hacluster #设置密码hacluster是伴随 HACluster创建的一个专用系统用户作为集群的管理账号执行集群中的管理操作1.2.4完成集群管理配置1.完成server1和server5间的节点认证pcs host auth server1 server5 #建立通信通道2.创建集群pcs cluster setup mycluster server1 server5说明mycluster集群名server1,server5集群中的节点需要提前完成认证3.启动集群并设置开机自启pcs cluster start --all #启动集群中的所有节点 pcs cluster enable --all #设置开机自启4.绕过安全限制方便我们在测试时正常启动两个节点都要执行命令pcs property set stonith-enabledfalse #禁用 STONITH pcs property set no-quorum-policyignore #忽略集群的法定票数 pcs status #查看集群状态 pcs resource cleanup #如果集群状态没更新可以用这条命令刷新一下说明STONITH它是Pacemaker集群的核心保护机制。当集群中检测到一个节点故障时会通过STONITH设备强制关闭或者重启该节点确保故障节点不会出现脑裂或者访问共享资源。如果没有硬件设备STONITH集群将无法启动因此我们在测试环境中要禁用他。Quorum集群通过投票来判断自身的健康情况一般只有超过集群一半的节点认为该节点正常它才会正常工作。如果节点数不足如2节点集群中1台宕机集群会进入“无法定票数”状态并自动停止所有资源以防止“脑裂”。我们目前只有两个节点因此需要忽略他保证集群的正常运行。如果不做设置会出现以下错误1.2.5添加集群资源1.添加VIPpcs resource create vip ocf:heartbeat:IPaddr2 ip192.168.7.200 op monitor interval30s pcs status说明Onlineserver1,server5vip主机VIP服务资源且已加入2.配置共享磁盘ISCSI说明由与Mfsmaster会不停变化如果数据只存在于当前主机的话当VIP发生漂移时数据无法一起传递过去会造成数据不一致。因此我们需要将主节点和备用节点的master数据存储到同一个磁盘下。具体说明这里我会在client上创建一个ISCSI远程仓库用于充当主节点和备节点的数据存放地这里是测试环境正式生产上还是推荐大家新开一台主机专门用来存储数据2.1在client端新建一个硬盘2.2创建分区并完成格式化fdisk /dev/nvme0n1 #创建新分区选择你新加入的那块硬盘 mkfs.xfs /dev/nvme0n1p1 #完成格式化2.3完成ISCSI服务端的配置2.3.1下载软件yum install -y target #安装软件iscsi的服务端2.3.2搭建仓库targetlic #编辑文件 /backstores/block create my_disk /dev/nvme0n1p1 #创建块存储对象 /iscsi create iqn.2026-08.com.example:storage1 #创建iSCSI目标 /iscsi/iqn.2026-08.com.example:storage1/tpg1/luns create /backstores/block/my_disk /iscsi/iqn.2026-08.com.example:storage1/tpg1/acls create iqn.2026-08.com.example:demokey #创建客户认证1 /iscsi/iqn.2026-08.com.example:storage1/tpg1/acls create iqn.2026-08.com.example:demokey2 #创建客户认证2 exit #退出说明这里我创建了两个证书是为了给两个主机配置认证。当然两台主机使用一个认证也是可以运行的但可能会出现挂载错误的情况会在你的虚拟机上弹出警报同时PCS集群开机挂载时也会出现问题。因此我们为每一个主机配置一个专门的证书也更加安全2.4完成ISCSI的客户端配置两个主机都要做说明ISCSI的客户端指的是两个moose-master主机2.4.1安装软件并启动服务yum install -y iscsi-initiator-utils systemctl enable --now iscsid2.4.2添加认证证书vim /etc/iscsi/initatorname.iscsi #添加证书文件 systemctl restart iscsid #重启服务使文件生效说明给两个主机配置两个不同的证书2.4.3远程连接硬盘iscsiadm -m discovery -t st -p 192.168.7.184 #发现远程硬盘 iscsiadm -m node -l #连接硬盘2.4.4检查是否连接硬盘fdisk -l2.5挂载服务端的硬盘一个Master做即可说明这里手动挂载主要是为了测试硬盘能否正常使用以及完成第一次连接的配置。后面我们会将挂载交给pcs集群去做而无须手动操作注意我这里的ISCSI的客户端硬盘是:/dev/sdb记得要用fdisk -l查看你当前远程挂载的设备不要盲目跟我使用一样的设备名导致挂载错盘2.5.1手动挂载mount /dev/sdb /mnt #手动挂载 df #查看设备 chown mfs.mfs /mnt #确保权限 chown mfs.mfs /var/lib/mfs2.5.2复制配置文件cd /var/lib/mfs #进入mfs数据目录 cp -p * /mnt #将目录下的所有数据全部复制到挂载目录下保留权限2.5.3查看数据是否存在以及权限是否正确cd /mnt ll2.5.5手动卸载umount /dev/sdb /mnt #手动卸载2.6添加mfsdata和mfsmaster服务pcs resource create mfsdata ocf:heartbeat:Filesystem device/dev/sdb directory/var/lib/mfs fstypexfs op monitor interval1min #添加 mfsdata 服务每隔1min刷新一次状态 pcs resource create mfsmaster systemd:moosefs-master op monitor interval30s #添加mfsmaster服务每隔30s刷新一次状态 pcs status说明查看集群状态三个资源均已被添加但是三个资源并不属于一个主机控制当主机宕机时某些资源可能无法正常启动。因此我们需要创建一个资源组将这三个资源放进同一个组里这样他们才会受一台主机控制出现以下问题说明你的文件权限不对修复方法赋权cd /var/lib/mfs chown mfs.mfs -R . #赋权 chmod 2775 /var/lib/mfs1.2.6创建资源组说明创建一个名为mfscluster的资源组将vip,mfsdata,mfsmaster这三个资源加入同一个资源组让这三个资源受同一个主机所控制pcs resource group add mycluster vip mfsdata mfsmaster说明这三个资源的输入顺序表示集群启动资源时他们三个资源的启动顺序1.2.7测试说明当前集群部署在server1上我们暂时关闭server1节点观察它能否在server5上运行pcs node standby #暂停节点 pcs node unstandby #恢复节点二解决集群中的脑裂问题2.1简单介绍1.说明脑裂问题指的是当主节点和备节点中间的心跳信号被阻断时双方都认为对方挂掉后开始抢夺master的节点控制权。因此解决该问题可以让一个虚拟机正常关机或者重启不再抢夺master。2.工作机制当两台主机中认为对方已经挂掉后强制使主观认为的挂掉的虚拟机进行重启或者关机预防脑裂问题的发生2.2创建SBD共享裸磁盘说明以下操作均在wondows端进行1.在windows 端创建一个空目录用来存放磁盘2.进入VM的软件安装目录找到vmware0vdiskmanager.exe程序并复制它的程序路径3.在cmd使用该程序创建一块磁盘放到你的新建目录下D:\software\VM_workstation\vmware-vdiskmanager.exe -c -s 1GB -a lsilogic -t 2 E:\vm\sbd.vmdk #这里的空间大小只要100MB就可以了4.在两台高可用的Master节点上添加新的硬盘5.进入硬盘的高级设置说明这里必须清除掉所有的镜像否则无法设置独立磁盘6.进入虚拟机的目录修改 虚拟机的.vmx文件说明该设置是为了避免主机启动时警报磁盘正在被使用7.完成磁盘的引导说明有时新加入的磁盘会顶掉系统磁盘作为系统的引导盘导致启动不了虚拟机。这时我们需要对他进行设置将系统盘放到第一位去引导系统启动调高系统盘的优先级2.3完成SBD的配置说明两台机子都要完成1.查看硬盘的名字fdisk -l #查看磁盘2.查看磁盘的id用磁盘的id来定位磁盘不怕找错cd /dev/disk/by-id ll说明因为两个机子共用一个磁盘因此磁盘的id是相同的3.安装所需软件dnf install -y sbd fence-agents-all4.加载加密狗模块modprobe softdog #加载模块 echo softdog /etc/modules-load.d/softdog.conf #开机自动加载 cat /etc/modules-load.d/softdog.conf ls /dev/watchdog2.4初始化SBD头部文件说明这里一定要确认磁盘正确否则会损坏磁盘的所有数据仅用一个节点即可sbd -d /dev/disk/by-id/scsi-36000c29xxxxxxx create sbd -d /dev/disk/by-id/scsi-36000c29xxxxxxx dump #校验数据2.5启用SBD stonish隔离pcs stonith sbd enable device/dev/disk/by-id/scsi-36000c29xxxxxxx watchdog/dev/watchdog #启用pcs 一键配置 fence_sbd pcs cluster stop --all pcs cluster start --all pcs stonith create sbd-fence fence_sbd devices/dev/disk/by-id/scsi-36000c29a7f07fd31eb9b9c60af0cb51e op monitor interval30s timeout20s op start timeout20s op stop timeout20s #手动创建资源pcs stonith config #查看stonith配置2.6集群激活fensepcs property set stonith-enabledtrue pcs status
返回列表