• corosync+packmaker+drbd+nfs高可用存储


    一.  环境部署:

    服务器地址主机名服务器角色
    192.168.188.223centosnode1主服务器
    192.168.188.226centosnode2从服务器

    二.  配置drbd,主从节点配置要同步:

    1.  配置drbd主配置文件和资源文件:

    1. [root@centosnode1 ~]# cd /usr/local/drbd-utils/etc/drbd.d/
    2. ##配置drbd全局配置
    3. [root@centosnode1 drbd.d]# vim global_common.conf
    4. global {
    5. usage-count no;
    6. }
    7. common {
    8. net {
    9. protocol C;
    10. }
    11. }
    12. ##配置drbd资源配置
    13. [root@centosnode1 drbd.d]# vim nfs.res ##该文件文件名一定要以.res结尾
    14. resource nfs { ##nfs是资源名,一定要与文件名一致
    15. disk /dev/sdc; ##磁盘目录
    16. device /dev/drbd0; ##设备目录
    17. meta-disk internal; ##磁盘元数据
    18. on centosnode1 {
    19. address 192.168.188.223:7789;
    20. }
    21. on centosnode2 {
    22. address 192.168.188.226:7789;
    23. }
    24. }

    2.  创建drbd元数据:

    1. ##创建元数据
    2. [root@centosnode1 drbd.d]# drbdadm create-md nfs
    3. [root@centosnode1 drbd.d]# drbdadm up nfs ##激活nfs资源,主从节点同步
    4. [root@centosnode1 drbd.d]# drbdadm role nfs ##查看资源角色
    5. Secondary ##Secondary表示是从节点
    6. ##查看启动后生成的伪文件,下载的rpm包该文件可以看到数据同步的百分比进度
    7. [root@centosnode1 drbd.d]# cat /proc/drbd
    8. version: 9.1.5 (api:2/proto:110-121)
    9. GIT-hash: f41bc23cec1e919932ce35947f1b4e67d9e6db74 build by root@centosnode1, 2022-09-08 11:54:41
    10. Transports (api:17): tcp (9.1.5)
    11. ##查看连接状态:下载的rpm包没有该命令
    12. [root@centosnode1 drbd.d]# drbd-overview.pl
    13. NOTE: drbd-overview will be deprecated soon.
    14. Please consider using drbdmon.
    15. 0:nfs/0 Connected(2*) Secondary(2*) Incons/Incons
    16. ##将centosnode1节点强制设为主节点,只配置主节点
    17. [root@centosnode1 ~]# drbdadm primary --force nfs
    18. ##查看资源连接状态:
    19. [root@centosnode1 ~]# drbdadm cstate nfs
    20. ##查看当前节点资源的角色
    21. [root@centosnode1 ~]# drbdadm role nfs
    22. ##查看本地和对等节点磁盘的状态
    23. [root@centosnode1 ~]# drbdadm dstate nfs

    将centosnode1节点强制设为主节点后,需要等待主从节点同步信息,可以通过drbd-overview.pl 命令来查看同步状态,直至状态为下图所示,就是同步完成。

     3.  格式化并挂载磁盘:

    1. ##在主节点格式化并挂载
    2. [root@centosnode1 ~]# mkfs.xfs /dev/drbd0
    3. ##在主从节点上都创建挂载目录
    4. [root@centosnode1 ~]# mkdir /data1
    5. ##在主节点上临时挂载
    6. [root@centosnode1 ~]# mount /dev/drbd0 /data1

    补充:手动管理drbd:

    1. ##将备用节点nfs资源升级,使其为主节点
    2. [root@centosnode2 ~]# drbdadm primary nfs
    3. ##将主用节点nfs资源降级,使其为从节点
    4. [root@centosnode1 ~]# drbdadm secondary nfs
    5. ##卸载挂载目录
    6. [root@centosnode1 ~]# umount /data1

    4.  安装并配置nfs:

    1. [root@centosnode1 ~]# yum install rpcbind nfs-utils
    2. ##nfs配置,主从节点都要配置
    3. [root@centosnode1 ~]# vim /etc/exports
    4. /data1 192.168.188.0/24 (rw,sync)
    5. ##主从节点启动nfs服务
    6. [root@centosnode1 ~]# systemctl restart rpcbind
    7. [root@centosnode1 ~]# systemctl restart nfs

    三.  安装并配置pacemaker和corosync:

    1.  安装pacemaker之前,首先要配置主从节点ssh的免密钥登录:

    1. [root@centosnode1 ~]# ssh-keygen -f ~/.ssh/id_rsa -P '' -q
    2. [root@centosnode1 ~]# ssh-copy-id centosnode1
    3. [root@centosnode1 ~]# ssh-copy-id centosnode2

    2.  yum安装corosync和pacemaker:

    [root@centosnode1 ~]# yum install corosync pacemaker -y

    3.  安装pacemaker的管理工具pcs,并设置pcs的开机自启:

    1. [root@centosnode1 ~]# yum install pcs -y
    2. [root@centosnode1 ~]# systemctl enable pcsd.service --now

    4.  安装完软件后会自动生成一个用户hacluster 但是没有密码 因此要赋予密码:

    [root@centosnode1 ~]# echo "123456" | passwd --stdin hacluster

    5.  进行节点验证 以下操作都只在centosnode1节点

    1. ##进行节点验证
    2. 语法:pcs cluster auth 节点1 节点2 ...
    3. [root@centosnode1 ~]# pcs cluster auth centosnode1 centosnode2

    6.  创建集群:

    1. 语法:pcs cluster setup --name 集群名 集群节点
    2. [root@centosnode1 ~]# pcs cluster setup --name nfscluster centosnode1 centosnode2

    7.  当集群创建完后 会自动生成一个corosync.conf文件 其中包含集群节点的配置信息:

    1. [root@centosnode1 ~]# cat /etc/corosync/corosync.conf
    2. totem {
    3. version: 2
    4. cluster_name: nfscluster
    5. secauth: off
    6. transport: udpu
    7. }
    8. nodelist {
    9. node {
    10. ring0_addr: centosnode1
    11. nodeid: 1
    12. }
    13. node {
    14. ring0_addr: centosnode2
    15. nodeid: 2
    16. }
    17. }
    18. quorum {
    19. provider: corosync_votequorum
    20. two_node: 1
    21. }
    22. logging {
    23. to_logfile: yes
    24. logfile: /var/log/cluster/corosync.log
    25. to_syslog: yes
    26. }

    8.  开启集群:

    1. ##分别开启集群中的单个节点
    2. [root@centosnode1 ~]# pcs cluster start centosnode1
    3. [root@centosnode1 ~]# pcs cluster start centosnode2
    4. ##开启集群中全部节点
    5. [root@centosnode1 ~]# pcs cluster start --all
    6. ##设置集群全部节点的开机自启
    7. [root@centosnode1 ~]# pcs cluster enable --all

    9.  查看集群中信息:

    1. ##查看节点自身状态
    2. [root@centosnode1 ~]# corosync-cfgtool -s
    3. Printing ring status.
    4. Local node ID 1
    5. RING ID 0
    6. id = 192.168.188.223
    7. status = ring 0 active with no faults
    8. ##查看集群中全部节点的状态
    9. [root@centosnode1 ~]# corosync-cmapctl | grep members
    10. runtime.totem.pg.mrp.srp.members.1.config_version (u64) = 0
    11. runtime.totem.pg.mrp.srp.members.1.ip (str) = r(0) ip(192.168.188.223)
    12. runtime.totem.pg.mrp.srp.members.1.join_count (u32) = 1
    13. runtime.totem.pg.mrp.srp.members.1.status (str) = joined
    14. runtime.totem.pg.mrp.srp.members.2.config_version (u64) = 0
    15. runtime.totem.pg.mrp.srp.members.2.ip (str) = r(0) ip(192.168.188.226)
    16. runtime.totem.pg.mrp.srp.members.2.join_count (u32) = 1
    17. runtime.totem.pg.mrp.srp.members.2.status (str) = joined
    18. ##查看集群状态
    19. [root@centosnode1 ~]# pcs status
    20. Cluster name: nfscluster
    21. WARNINGS:
    22. No stonith devices and stonith-enabled is not false
    23. Stack: corosync
    24. Current DC: centosnode2 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
    25. Last updated: Thu Sep 8 18:05:37 2022
    26. Last change: Thu Sep 8 18:01:40 2022 by hacluster via crmd on centosnode2
    27. 2 nodes configured
    28. 0 resource instances configured
    29. Online: [ centosnode1 centosnode2 ]
    30. No resources
    31. Daemon Status:
    32. corosync: active/enabled
    33. pacemaker: active/enabled
    34. pcsd: active/enabled

    10.  没有Fencing设备时,禁用STONITH自检功能:

    [root@centosnode1 ~]# pcs property set stonith-enabled=false

    11.  改变集群前,建议查看当前配置的合法性:

    [root@centosnode1 ~]# crm_verify -L -V

    12.  添加资源VIP:

    1. ##列出可用的标准资源
    2. [root@centosnode1 ~]# pcs resource standards
    3. ##查看资源的提供者
    4. [root@centosnode1 ~]# pcs resource providers
    5. ##查找包含指定内容的资源
    6. [root@centosnode1 ~]# pcs resource list | grep -i ip
    7. ##查看指定资源的用法
    8. [root@centosnode1 ~]# pcs resource describe ocf:heartbeat:IPaddr2
    9. ##设置名为ClusterIP的vip资源
    10. 语法:pcs resource create 自定义集群名 资源名 ip=vip cidr_netmask=子网掩码
    11. [root@centosnode1 ~]# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.188.100 cidr_netmask=24

    13.  创建nfsserver资源:

    1. 语法:pcs resource create 自定义集群名 资源名 nfs_ip=vip
    2. [root@centosnode1 ~]# pcs resource create NfsShare
    3. ocf:heartbeat:nfsserver nfs_ip=192.168.188.100

    14.  将VIP和nfs-server.service集群绑定在同一台服务器上,即配置主机约束:

    [root@centosnode1 ~]# pcs constraint colocation add ClusterIP with NfsShare INFINITY

    15.  配置资源的顺序约束,即服务的启动顺序:

    1. ##ClusterIP集群要比NfsShare集群先启动
    2. [root@centosnode1 ~]# pcs constraint order ClusterIP then NfsShare

    16.  设置服务器优先级,使服务优先运行在哪台服务器上,即位置约束:

    1. ##优先级默认为0
    2. [root@centosnode1 ~]# pcs constraint location NfsShare prefers centosnode1=50

    17.  查看资源一致性的状态:

    [root@centosnode1 ~]# pcs constraint

    18.  查看优先级:

    [root@centosnode1 ~]# crm_simulate -sL

    四.  创建drbd设备集群:

    1.  生成 drbd_cfg 文件,将配置导入文件,再推送文件提交配置:

    1. ##pcs cluster cib 文件名
    2. [root@centosnode1 ~]# pcs cluster cib drbd_cfg

    2.  配置drbd集群,并将配置导入drbd配置文件:

    1. ##使用-f选项,将配置保存到drbd_cfg文件
    2. [root@centosnode1 ~]# pcs -f drbd_cfg resource create NfsData ocf:linbit:drbd
    3. drbd_resource=nfs(drbd的资源名) drbdconf="/usr/local/drbd-utils/etc/drbd.conf"
    4. (drbd配置文件) op monitor interval=60s
    5. [root@centosnode1 ~]# pcs -f drbd_cfg resource master NfsDataClon NfsData master-max=1
    6. master-node-max=1 clone-max=2 clone-node-max=1 notify=true

    3.  查看drbd_cfg中配置:

    [root@centosnode1 ~]# pcs -f drbd_cfg resource show

     4.  对所有更改改到满意后,通过将drbd_cfg文件推送到实时CIB中来一次提交所有更改:

    [root@centosnode1 ~]# pcs cluster cib-push drbd_cfg --config

    注意:通过pacemaker来管理时,不能将drbd启动起来。

    5.  再查看 Pacemaker 的状态 查看Pacemaker 是否启动:

    [root@centosnode1 ~]# pcs status

    五.  创建文件系统集群:

    1.  生成 drbd_cfg 文件,将配置导入文件,再推送文件提交配置:

    [root@centosnode1 ~]# pcs cluster cib fs_cfg

    2.  修改文件系统配置文件:

    1. [root@centosnode1 ~]# pcs -f fs_cfg resource create NfsFs ocf:heartbeat:Filesystem
    2. device="/dev/drbd0"(设备路径) directory="/data1"(挂载点) fstype="xfs"

    3.  设置NfsFs和NfsDataClon资源在Master服务器上:

    1. [root@centosnode1 ~]# pcs -f fs_cfg constraint colocation add NfsFs with
    2. NfsDataClon INFINITY with-rsc-role=Master

    4.  设置NfsFs(nfs集群服务)和NfsDataClon(drbd集群服务)资源的启动顺序:

    1. ##NfsDataClon的启动要在NfsFs之前启动
    2. [root@centosnode1 ~]# pcs -f fs_cfg constraint order promote NfsDataClon then start NfsFs

    5.  让Nfs集群和NfsShare在同一台服务器上:

    [root@centosnode1 ~]# pcs -f fs_cfg constraint colocation add NfsShare with NfsFs INFINITY

    6.  设置NfsShare和NfsFs资源的启动顺序:

    1. ##NfsFs要在NfsShare之前启动
    2. [root@centosnode1 ~]# pcs -f fs_cfg constraint order NfsFs then NfsShare

    7.  查看fs_cfg中配置

    [root@centosnode1 ~]# pcs -f fs_cfg resource show

     8.  对所有更改满意后,通过将fs_cfg文件推送到实时CIB中来一次提交所有更改:

    [root@centosnode1 ~]# pcs cluster cib-push fs_cfg --config

    9.  再查看 Pacemaker 的状态 查看Pacemaker配置是否生效:

    1. [root@centosnode1 ~]# pcs status
    2. ##查看资源之间关系
    3. [root@centosnode1 ~]# pcs constraint show

     六:测试集群是否配置成功:

    1.  停止centosnode1节点的所有集群服务,以此来模拟故障转移:

    1. [root@centosnode1 ~]# pcs cluster stop centosnode1
    2. ##主节点降级,验证资源漂移
    3. [root@centosnode1 ~]# pcs cluster standby centosnode1
    4. [root@centosnode1 ~]# pcs status
    5. ##centosnode1重新上线
    6. [root@centosnode1 ~]# pcs cluster unstandby centosnode1
    7. [root@centosnode1 ~]# pcs status

    2.  在centosnode2节点查看Pacemaker状态:

     3.  在centosnode2节点查看vip是否飘移:

    4.   在centosnode2节点数据是否挂载:

  • 相关阅读:
    如何选择适合的美颜SDK?
    树莓派(以及各种派)使用指南
    Shopee市场爆单难?找准选品逻辑方式
    使用Git进行代码管理基本操作梳理
    工业机器人多物料双姿态循环搬运工艺集成
    领导视角-汇报篇
    go-micro 安装
    Flink自定义网课数据源
    使用ceph-deploy部署Ceph集群
    3.最长连续序列
  • 原文地址:https://blog.csdn.net/NancyLCL/article/details/126772459