基于DRBD+Corosync+Pacemaker的NFS主备节点高可用方案

1 前言

在部署EOS时,由于相同内容的文件在多个机器单独存储存在冗余且不方便管理,引入了NFS。而NFS默认是单Server多Client的,存在NFS Server单点故障的问题,因此需要实现NFS主备节点高可用方案。

在baidu和google搜了很多资料,最终定的方案是基于DRBD+Corosync+Pacemaker实现NFS主备节点高可用。

2 参考资料

2.1 NFS相关

2.2 Linux高可用相关

2.3 DRBD相关

2.4 Corosync&Pacemaker相关

2.5 Heartbeat相关

2.6 Keepalived相关

2.7 Rsync+Inotify相关

2.8 Linux LVM相关

2.9 其它

3 技术对比

3.1 Heartbeat/Corosync VS. Keepalived

Heartbeat和Corosync类似,都属于消息层(Messaging Layer),提供心跳检测等功能。它们主要用于面向集群(Cluster-Oriented)的产品,确保一个共享资源最多在一处呈现(ensure that a shared resource will be present at *at most* one place),这对共享文件系统和磁盘来说很重要。它们被设计为在切换节点时在一个节点关闭一项服务,并在另一个节点启动服务。因此,共享资源不会被并发访问(concurrently accessed)。

Keepalived主要用于面向网络(Network-Oriented)的产品,确保一个共享IP至少在一处呈现(ensure that a shared IP address will be present at *at least* one place),它无关服务或资源。它不会尝试启动或关闭一项服务,而是根据某些条件抉择哪一个节点更适合提供服务。因此,它更适合于路由冗余(redundant routers)、防火墙(firewalls)以及代理(proxies),而不是磁盘矩阵(disk arrays)或文件系统(filesystems)。一般使用Nginx + Keepalived + LVS 来实现高可用负载均衡。

3.2 Heartbeat VS. Corosync

 

Heartbeat

Corosync

社区活跃度

从2010年之后,就不再继续维护

仍然处于活跃期

配置复杂度

非常容易进行配置,第一次配置可能只需要几分钟

有一定的复杂度,需要一点耐心

管理资源的灵活性

只能为所有的资源配置一个主服务

允许为不同的资源组配置不同的主服务

资源粘连性

在主服务server1当机之后,切换到从服务节点server2;

还会把之前的主节点server1继续放入从属节点列表之内

会剔除出现问题的节点

配置文件的版本管理

需手动

自行处理配置文件的同步问题

分组管理

只支持2个节点

支持多个节点的集群,支持把资源进行分组,按照组进行资源的管理,

设置主服务,自行进行启停

Heartbeat已不再维护,将来会逐步弃用。

Corosync技术更新,设计更好,和Heartbeat比起来支持更多的PaceMaker特性,是未来的消息层(Messaging Layer)技术趋势。

3.3 DRBD VS. Rsync+Inotify

都有人用,无定论,为了降低部署和维护的复杂度,采用DRBD替代Rsync和Inotify的组合,可能更何时(需要时间证明)。

4 方案说明

经过前述分析,我们采用DRBD + Corosync + PaceMaker + NFS来实现NFS高可用。如下图所示:

其中:

  • DRBD针对分区进行文件监测,实时自动同步文件变化;
  • Corosync负责主备节点工作状态监测,配合Pacemaker进行资源调度等;
  • Pacemaker负责接收Corosync消息,关闭故障主节点服务,启动备节点服务;
  • NFS Server Master 对外提供NFS服务,NFS Server Slave为备节点。NFS Server双节点在Pacemaker中注册虚拟IP(VIP),对NFS Client提供NFS服务。

下图为磁盘、分区、目录等结构关系:

如上图,当业务需要,磁盘控件不足时,首先判断VG是否有剩余空间,有则补充给LV,没有则再新增磁盘、分区、新增PV,再扩展进VG中,最后补充给LV,即可完成磁盘动态扩展。

5 部署

5.1 准备工作

5.1.1 环境说明

机器

192.168.1.52

192.168.1.100

系统

CentOS7 Linux node2.micserver 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

磁盘

两台机器各新增4G磁盘一块

NFS VIP

192.168.1.234

5.1.2 关闭防火墙&SELinux

//52 & 100机器均执行
[root@micserver2 ~]# systemctl status firewalld  // 查看防火墙状态
[root@micserver2 ~]# systemctl stop firewalld   // 关闭防火墙
[root@micserver2 ~]# systemctl disable firewalld // 关闭开机启动
[root@micserver2 ~]#
[root@micserver2 ~]#
[root@micserver2 ~]# getenforce  // 查看SELinux状态
[root@micserver2 ~]# setenforce 0 // 关闭SELinux
[root@micserver2 ~]# vim /etc/selinux/config  // 编辑文件,修改如下:
SELINUX=enforcing改为SELINUX=disabled

5.1.3 节点名称

配置/etc/hosts文件:

52 & 100机器均执行

[root@micserver2 ~]# hostname       // 查看主机hostname

[root@micserver2 ~]# vim /etc/hosts  //编辑文件,新增如下(格式ip hostname):

192.168.1.52 micserver2.node4

192.168.1.100node2.micserver

5.1.4 时间同步

已同步。

5.2 DRBD

DRBD用于同步磁盘数据。

机器磁盘准备一个干净的LVM分区(如/dev/mapper/drbdVG-drbdLV),DRBD虚拟一个/dev/drbdN(如/dev/drbd0)分区,与LVM分区映射。

DRBD主备节点新增一个目录(如/drbdDir),挂载/dev/drbd0分区。

DRBD主备模式下同一时刻只有一个机器挂载。

5.2.1 查看磁盘和分区情况

52 & 100机器均执行

[root@micserver2 ~]# fdisk -l  // 查看机器原有磁盘和分区情况

 

磁盘 /dev/sda:268.4 GB, 268435456000 字节,524288000 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000948f4

 

   设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     2099199     1048576   83  Linux

/dev/sda2         2099200   524287999   261094400   8e  Linux LVM

 

磁盘 /dev/mapper/cl-root:253.4 GB, 253403070464 字节,494927872 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/cl-swap:14.0 GB, 13954449408 字节,27254784 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

[root@micserver2 ~]#

52 & 100机器均执行

[root@micserver2 ~]# df -h       //查看挂载情况

文件系统             容量  已用  可用 已用% 挂载点

/dev/mapper/cl-root  236G   15G  222G    7% /

devtmpfs             7.8G     0  7.8G    0% /dev

tmpfs                7.8G   38M  7.8G    1% /dev/shm

tmpfs                7.8G  8.5M  7.8G    1% /run

tmpfs                7.8G     0  7.8G    0% /sys/fs/cgroup

/dev/sda1           1014M  272M  743M   27% /boot

tmpfs                1.6G     0  1.6G    0% /run/user/0

[root@micserver2 ~]#

52 & 100机器均执行

[root@micserver2 ~]# pvs   //查看pv信息

  PV         VG Fmt  Attr PSize    PFree

  /dev/sda2  cl lvm2 a--  <249.00g    0

[root@micserver2 ~]# vgs   //查看vg信息

  VG #PV #LV #SN Attr   VSize    VFree

  cl   1   2   0 wz--n- <249.00g    0

[root@micserver2 ~]# lvs    //查看lv信息

  LV   VG Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  root cl -wi-ao---- 236.00g                                                   

  swap cl -wi-ao---- <13.00g                                                   

[root@micserver2 ~]#

5.2.2 新增LVM分区

5.2.2.1 新增磁盘

通过vSphere Client给两台服务器虚拟机各新增一块磁盘。

5.2.2.2 新增LVM分区

使用刚刚新增的磁盘建立新的LVM分区,首先新建基本分区。

52 & 100机器均执行

[root@micserver2 ~]# fdisk -l

 

磁盘 /dev/sda:268.4 GB, 268435456000 字节,524288000 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000948f4

 

   设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     2099199     1048576   83  Linux

/dev/sda2         2099200   524287999   261094400   8e  Linux LVM

 

磁盘 /dev/sdb:4294 MB, 4294967296 字节,8388608 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节          //此/dev/sdb即新增的磁盘

 

 

磁盘 /dev/mapper/cl-root:253.4 GB, 253403070464 字节,494927872 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/cl-swap:14.0 GB, 13954449408 字节,27254784 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

52 & 100机器均执行

[root@micserver2 ~]# fdisk /dev/sdb      //开始对新磁盘建立分区

欢迎使用 fdisk (util-linux 2.23.2)。

 

更改将停留在内存中,直到您决定将更改写入磁盘。

使用写入命令前请三思。

 

Device does not contain a recognized partition table

使用磁盘标识符 0x86f49d58 创建新的 DOS 磁盘标签。

 

命令(输入 m 获取帮助):m      //查看帮助

命令操作

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   g   create a new empty GPT partition table

   G   create an IRIX (SGI) partition table

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)

 

命令(输入 m 获取帮助):

52 & 100机器均执行

命令(输入 m 获取帮助):n       //新增一个分区

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): p             //新增基本分区

分区号 (1-4,默认 1):            //分区号,默认值直接回车

起始 扇区 (2048-8388607,默认为 2048)://默认值直接回车

将使用默认值 2048

Last 扇区, +扇区 or +size{K,M,G} (2048-8388607,默认为 8388607)://默认值直接回车

将使用默认值 8388607

分区 1 已设置为 Linux 类型,大小设为 4 GiB

 

命令(输入 m 获取帮助):

52 & 100机器均执行

命令(输入 m 获取帮助):w      //保存修改

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

正在同步磁盘。

[root@micserver2 ~]# fdisk -l    //查看是否生效

 

磁盘 /dev/sda:268.4 GB, 268435456000 字节,524288000 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000948f4

 

   设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     2099199     1048576   83  Linux

/dev/sda2         2099200   524287999   261094400   8e  Linux LVM

 

磁盘 /dev/sdb:4294 MB, 4294967296 字节,8388608 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x86f49d58

// 可以看到新增的基本分区

   设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     8388607     4193280   83  Linux

 

磁盘 /dev/mapper/cl-root:253.4 GB, 253403070464 字节,494927872 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/cl-swap:14.0 GB, 13954449408 字节,27254784 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

[root@micserver2 ~]#

下面开始LVM分区。

52 & 100机器均执行

[root@micserver2 ~]# pvs   //查看原有pv信息

  PV         VG Fmt  Attr PSize    PFree

  /dev/sda2  cl lvm2 a--  <249.00g    0

[root@micserver2 ~]# pvcreate /dev/sdb1     //新增pv

  Physical volume "/dev/sdb1" successfully created.

[root@micserver2 ~]#

[root@micserver2 ~]#

[root@micserver2 ~]#

[root@micserver2 ~]# pvs          //查看新的pv信息

  PV         VG Fmt  Attr PSize    PFree

  /dev/sda2  cl lvm2 a--  <249.00g     0

  /dev/sdb1     lvm2 ---    <4.00g <4.00g

[root@micserver2 ~]#

52 & 100机器均执行

[root@micserver2 ~]# vgs          //查看原有vg信息

  VG #PV #LV #SN Attr   VSize    VFree

  cl   1   2   0 wz--n- <249.00g    0

[root@micserver2 ~]# vgcreate drbdvg /dev/sdb1       //新增vg

  Volume group "drbdvg" successfully created

[root@micserver2 ~]# vgs          //查看新的vg信息

  VG     #PV #LV #SN Attr   VSize    VFree

  cl       1   2   0 wz--n- <249.00g     0

  drbdvg   1   0   0 wz--n-   <4.00g <4.00g

[root@micserver2 ~]#

52 & 100机器均执行

[root@micserver2 ~]# vgdisplay       //查看vg详细信息,重点是多少可用PE,后面要用

  --- Volume group ---

  VG Name               cl

  System ID            

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  3

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                2

  Open LV               2

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               <249.00 GiB

  PE Size               4.00 MiB

  Total PE              63743

  Alloc PE / Size       63743 / <249.00 GiB

  Free  PE / Size       0 / 0  

  VG UUID               knkWYT-cobv-RkBj-Gil6-O2RM-THUm-7i44VQ

  

  --- Volume group ---

  VG Name               drbdvg

  System ID            

  Format                lvm2

  Metadata Areas        1

  Metadata Sequence No  1

  VG Access             read/write

  VG Status             resizable

  MAX LV                0

  Cur LV                0

  Open LV               0

  Max PV                0

  Cur PV                1

  Act PV                1

  VG Size               <4.00 GiB

  PE Size               4.00 MiB

  Total PE              1023                //总共1023个PE

  Alloc PE / Size       0 / 0  

  Free  PE / Size       1023 / <4.00 GiB      //可用1023个PE

  VG UUID               B6WSXC-fiCH-Pc6a-EH43-msvs-VvDu-uyc00F

  

[root@micserver2 ~]# lvs           //查看原有lv信息

  LV   VG Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  root cl -wi-ao---- 236.00g                                                   

  swap cl -wi-ao---- <13.00g                                                   

[root@micserver2 ~]#

[root@micserver2 ~]#

[root@micserver2 ~]# lvcreate -n drbdlv -l 1023 drbdvg    //新增lv,填入1023个PE

  Logical volume "drbdlv" created.

[root@micserver2 ~]# lvs    //查看新的lv信息

  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  root   cl     -wi-ao---- 236.00g                                                    

  swap   cl     -wi-ao---- <13.00g                                                   

  drbdlv drbdvg -wi-a-----  <4.00g                                                   

[root@micserver2 ~]#

分区类型需要手动修改为Linux LVM,避免以后维护时对分区类型误解。

52 & 100机器均执行

[root@micserver2 ~]# fdisk -l           //查看分区信息

 

磁盘 /dev/sdb:4294 MB, 4294967296 字节,8388608 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x86f49d58

//可以看到类型是Linux,需要改为实际的Linux LVM

   设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     8388607     4193280   83  Linux

 

磁盘 /dev/sda:268.4 GB, 268435456000 字节,524288000 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000948f4

 

   设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     2099199     1048576   83  Linux

/dev/sda2         2099200   524287999   261094400   8e  Linux LVM

 

磁盘 /dev/mapper/cl-root:253.4 GB, 253403070464 字节,494927872 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/cl-swap:14.0 GB, 13954449408 字节,27254784 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/drbdvg-drbdlv:4290 MB, 4290772992 字节,8380416 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

[root@micserver2 ~]# fdisk /dev/sdb      //准备修改

欢迎使用 fdisk (util-linux 2.23.2)。

 

更改将停留在内存中,直到您决定将更改写入磁盘。

使用写入命令前请三思。

 

命令(输入 m 获取帮助):m      //查看帮助

命令操作

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   g   create a new empty GPT partition table

   G   create an IRIX (SGI) partition table

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)

命令(输入 m 获取帮助):p       //查看分区信息

 

磁盘 /dev/sdb:4294 MB, 4294967296 字节,8388608 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x86f49d58

 

   设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     8388607     4193280   83  Linux

 

命令(输入 m 获取帮助):t        //修改

已选择分区 1                            //只有一个分区,自动选择

Hex 代码(输入 L 列出所有代码):L        //查看类型代码

 

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris       

 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-

 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-

 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-

 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx        

 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据

 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .

 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具     

 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt        

 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问      

 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O       

 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor     

 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs       

 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT           

 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/

10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC 

11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor     

12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor     

14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要      

16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS   

17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE

18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动

1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep       

1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT           

1e  隐藏的 W95 FAT1 80  旧 Minix      

Hex 代码(输入 L 列出所有代码):8e             //输入8e,即Linux LVM

已将分区“Linux”的类型更改为“Linux LVM”

 

命令(输入 m 获取帮助):w             //保存修改

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

 

WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.

The kernel still uses the old table. The new table will be used at

the next reboot or after you run partprobe(8) or kpartx(8)

正在同步磁盘。

[root@micserver2 ~]#

[root@micserver2 ~]#

[root@micserver2 ~]# fdisk -l           //查看修改结果

 

磁盘 /dev/sdb:4294 MB, 4294967296 字节,8388608 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x86f49d58

//修改成功

   设备 Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048     8388607     4193280   8e  Linux LVM

 

磁盘 /dev/sda:268.4 GB, 268435456000 字节,524288000 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

磁盘标签类型:dos

磁盘标识符:0x000948f4

 

   设备 Boot      Start         End      Blocks   Id  System

/dev/sda1   *        2048     2099199     1048576   83  Linux

/dev/sda2         2099200   524287999   261094400   8e  Linux LVM

 

磁盘 /dev/mapper/cl-root:253.4 GB, 253403070464 字节,494927872 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/cl-swap:14.0 GB, 13954449408 字节,27254784 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

 

磁盘 /dev/mapper/drbdvg-drbdlv:4290 MB, 4290772992 字节,8380416 个扇区

Units = 扇区 of 1 * 512 = 512 bytes

扇区大小(逻辑/物理):512 字节 / 512 字节

I/O 大小(最小/最佳):512 字节 / 512 字节

 

[root@micserver2 ~]#

5.2.3 DRBD安装

从ELREPO下载kmod-drbd84和drbd84-utils两个包。

52 & 100机器均执行

[root@micserver2 ~]#rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

[root@micserver2 ~]#rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

[root@micserver2 ~]#yum install -y kmod-drbd84 drbd84-utils

5.2.4 DRBD配置

在52机器修改配置文件,scp发送到100机器。

52 机器执行

[root@micserver2 ~]# cat /etc/drbd.conf      //查看主配置文件,不需要修改

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

 

include "drbd.d/global_common.conf";

include "drbd.d/*.res";

[root@micserver2 ~]#

 

[root@micserver2 ~]# cd /etc/drbd.d             //cd到要修改的配置文件路径

 

[root@micserver2 drbd.d]# cp global_common.conf global_common.conf.orig  //备份

[root@micserver2 drbd.d]# vim global_common.conf          //修改

# DRBD is the result of over a decade of development by LINBIT.

# In case you need professional services for DRBD or have

# feature requests visit http://www.linbit.com

 

global {

       usage-count no;   #是否参与官方数据搜集,yes改为no

 

       # Decide what kind of udev symlinks you want for "implicit" volumes

       # (those without explicit volume <vnr> {} block, implied vnr=0):

       # /dev/drbd/by-resource/<resource>/<vnr>   (explicit volumes)

       # /dev/drbd/by-resource/<resource>         (default for implict)

       #udev-always-use-vnr; # treat implicit the same as explicit volumes   #注释掉

 

       # minor-count dialog-refresh disable-ip-verification

       # cmd-timeout-short 5; cmd-timeout-medium 121; cmd-timeout-long 600;

}

 

common {

        protocol C;           #新增,协议为C

       handlers {

              # These are EXAMPLE handlers only.

              # They may have severe implications,

              # like hard resetting the node under certain circumstances.

              # Be careful when choosing your poison.

              #去掉以下几行注释

               pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

               pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

               local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

              # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

              # split-brain "/usr/lib/drbd/notify-split-brain.sh root";

              # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

              # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";

              # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

              # quorum-lost "/usr/lib/drbd/notify-quorum-lost.sh root";

       }

 

       startup {

              # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb

       }

 

       options {

              # cpu-mask on-no-data-accessible

 

              # RECOMMENDED for three or more storage nodes with DRBD 9:

              # quorum majority;

              # on-no-quorum suspend-io | io-error;

       }

 

       disk {

                on-io-error detach;             #新增

              # size on-io-error fencing disk-barrier disk-flushes

              # disk-drain md-flushes resync-rate resync-after al-extents

                # c-plan-ahead c-delay-target c-fill-target c-max-rate

                # c-min-rate disk-timeout

       }

 

       net {

              # protocol timeout max-epoch-size max-buffers

              # connect-int ping-int sndbuf-size rcvbuf-size ko-count

              # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri

              # after-sb-1pri after-sb-2pri always-asbp rr-conflict

              # ping-timeout data-integrity-alg tcp-cork on-congestion

              # congestion-fill congestion-extents csums-alg verify-alg

              # use-rle

       }

}

 

[root@micserver2 drbd.d]# vim nfsha.res        //新增资源配置文件,服务与文件同名

resource nfsha {           #资源nfsha:NFS高可用

        on micserver2.node4 {         #52机器hostname

            device /dev/drbd0;              #虚拟drbd设备

            disk   /dev/mapper/drbdVG-drbdLV;            #实际LVM磁盘

            address 192.168.1.52:7789;      #ip:port

            meta-disk internal;       #元数据与资源数据存在一起:disk

        }

        on node2.micserver {    #100机器

            device /dev/drbd0;

            disk   /dev/mapper/drbdVG-drbdLV;

            address 192.168.1.100:7789;

            meta-disk internal;

        }

}

 

[root@micserver2 drbd.d]# scp global_common.conf nfsha.res 192.168.1.100:/etc/drbd.d/   //修改后的配置文件拷贝到100机器

root@192.168.1.100's password:

global_common.conf                                                                                                                                           100% 2670     4.8MB/s   00:00   

nfsha.res                                                                                                                                                    100%  399     1.1MB/s   00:00   

[root@micserver2 drbd.d]#

5.2.5 DRBD启动

52 & 100机器均执行

[root@micserver2 ~]# drbdadm create-md nfsha //创建元数据

initializing activity log

initializing bitmap (128 KB) to all zero

Writing meta data...

New drbd meta data block successfully created.

[root@micserver2 ~]#

52 & 100机器均执行

[root@micserver2 ~]# systemctl start drbd    //启动服务

[root@micserver2 ~]# systemctl status drbd  //查看服务状态

● drbd.service - DRBD -- please disable. Unless you are NOT using a cluster manager.

   Loaded: loaded (/usr/lib/systemd/system/drbd.service; disabled; vendor preset: disabled)

   Active: active (exited) since 三 2019-01-16 14:04:50 CST; 2min 9s ago

  Process: 13212 ExecStart=/lib/drbd/drbd start (code=exited, status=0/SUCCESS)

 Main PID: 13212 (code=exited, status=0/SUCCESS)

 

1月 16 11:35:17 micserver2.node4 systemd[1]: Starting DRBD -- please disable. Unless you are NOT using a cluster manager....

1月 16 11:35:17 micserver2.node4 drbd[13212]: Starting DRBD resources: [

1月 16 11:35:17 micserver2.node4 drbd[13212]: create res: nfsha

1月 16 11:35:17 micserver2.node4 drbd[13212]: prepare disk: nfsha

1月 16 11:35:17 micserver2.node4 drbd[13212]: adjust disk: nfsha

1月 16 11:35:17 micserver2.node4 drbd[13212]: adjust net: nfsha

1月 16 11:35:17 micserver2.node4 drbd[13212]: ]

1月 16 14:04:50 micserver2.node4 drbd[13212]: WARN: stdin/stdout is not a TTY; using /dev/console

1月 16 14:04:50 micserver2.node4 drbd[13212]: .

1月 16 14:04:50 micserver2.node4 systemd[1]: Started DRBD -- please disable. Unless you are NOT using a cluster manager..

52 & 100机器均执行

[root@micserver2 ~]# cat /proc/drbd      //查看主备信息

version: 8.4.11-1 (api:1/proto:86-101)

GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Diskless C r-----

ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:4190044

[root@micserver2 ~]# chkconfig drbd on  // 开机启动

52 机器执行

[root@micserver2 ~]# drbdadm -- --overwrite-data-of-peer primary nfsha // 设为主节点

[root@micserver2 ~]# cat /proc/drbd      //查看主备信息

version: 8.4.11-1 (api:1/proto:86-101)

GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

    ns:5028864 nr:0 dw:0 dr:5029776 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:257103004

       [>....................] sync'ed:  2.0% (251076/255988)M

       finish: 1:44:35 speed: 40,960 (33,976) K/sec

// 出现正在同步时,等待其100%结束。

[root@micserver2 ~]# mkfs.ext4 /dev/drbd0  //设置文件系统格式

[root@micserver2 ~]# mkdir /drbdDir     //新建本地目录

[root@micserver2 ~]# mount /dev/drbd0 /drbdDir      //挂载

[root@micserver2 ~]# cp /etc/drbd.d/nfsha.res /drbdDir    //拷贝一个文件到该目录

模拟52机器宕机,切换主备&卸载分区:

52 机器执行

[root@micserver2 ~]# umount /drbdDir  //卸载

[root@micserver2 ~]# drbdadm secondary nfsha //切为备节点

 

100机器执行

[root@node2 drbdDir]# drbdadm primary nfsha //切为主节点

[root@node2 drbdDir]# mount /dev/drbd0 /drbdDir   //挂载

[root@node2 drbdDir]# cd /drbdDir //cd到/drbdDir目录

[root@node2 drbdDir]# ls                 //查看文件nfsha.res是否备份过来

5.3 Corosync+Pacemaker

5.3.1 安装

5.3.1.1 安装corosync&pacemaker

52 & 100机器均执行

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

5.3.1.2 安装crm

从以下地址下载相关RPM包并安装:

http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/noarch/

52 & 100机器均执行

[root@micserver2 ~]# yum install python-dateutil python-lxml -y

[root@micserver2 ~]# rpm -ivh crmsh-3.0.0-6.2.noarch.rpm crmsh-scripts-3.0.0-6.2.noarch.rpm python-parallax-1.0.1-29.1.noarch.rpm python-pssh-2.3.1-7.4.noarch.rpm

5.3.2 corosync配置

52 机器执行

[root@micserver2 ~]# cd /etc/corosync    // cd到配置文件目录

[root@micserver2 etc/corosync]# cp corosync.conf.example corosync.conf    // 复制模板文件,或直接拷贝以下内容

[root@micserver2 ~]# vim corosync.conf

totem {

       version: 2

 

       crypto_cipher: none

       crypto_hash: none

 

       interface {

              ringnumber: 0

              bindnetaddr: 192.168.1.0

              mcastport: 5405

       }

        transport: udpu

}

service {

        name: pacemaker

}

logging {

       fileline: off

       to_stderr: no

       to_logfile: yes

       logfile: /var/log/cluster/corosync.log

       to_syslog: yes

       debug: off

       timestamp: on

       logger_subsys {

              subsys: QUORUM

              debug: off

       }

}

amf {

     mode: disabled

}

aisexec {

      user: root

      greoup: root

}

quorum {

       provider: corosync_votequorum

        expected_votes: 2

        two_nodes: 1

}

nodelist {

        node {

            nodeid: 1

            ring0_addr: 192.168.1.52

            name: micserver2.node4

        }

        node {

            nodeid: 2

            ring0_addr: 192.168.1.100

            name: node2.micserver

        }

}

5.3.3 创建通信认证文件

各节点之间通信需要安全认证,需要安全密钥,生成后会自动保存至当前目录下,命名为authkey,权限为400。

52机器执行

[root@micserver2 corosync]# corosync-keygen

[root@micserver2 corosync]# scp -p authkey corosync.conf 192.168.1.100:/etc/corosync/

5.3.4 启动

52 & 100机器均执行

[root@micserver2 ~]# systemctl status corosync  // 检查corosync状态

[root@micserver2 ~]# systemctl start corosync   // 启动corosync

[root@micserver2 ~]# systemctl status corosync  // 检查corosync状态

[root@micserver2 ~]#

[root@micserver2 ~]# systemctl status pacemaker // 检查pacemaker状态

[root@micserver2 ~]# systemctl start pacemaker  // 启动pacemaker

[root@micserver2 ~]# systemctl status pacemaker // 检查pacemaker状态

[root@micserver2 ~]#

[root@micserver2 ~]# chkconfig corosync on  // 开机启动

[root@micserver2 ~]# chkconfig pacemaker on  // 开机启动

5.3.5 查看状态

[root@micserver2 ~]# crm status

Stack: corosync

Current DC: micserver2.node4 (version 1.1.19-8.el7_6.2-c3c624ea3d) - partition with quorum

Last updated: Thu Jan 17 16:01:00 2019

Last change: Thu Jan 17 15:58:55 2019 by hacluster via crmd on micserver2.node4

 

2 nodes configured

0 resources configured

 

Online: [ micserver2.node4 node2.micserver ]

 

No resources

 

[root@micserver2 ~]#

5.3.6 查看端口占用

[root@micserver2 ~]# netstat -tunlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   

tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd          

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1136/sshd          

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1368/master        

tcp6       0      0 :::2375                 :::*                    LISTEN      1139/dockerd        

tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd          

tcp6       0      0 :::22                   :::*                    LISTEN      1136/sshd          

tcp6       0      0 ::1:25                  :::*                    LISTEN      1368/master        

udp        0      0 127.0.0.1:323           0.0.0.0:*                           778/chronyd        

udp        0      0 192.168.1.52:5405     0.0.0.0:*                           3671/corosync      

udp        0      0 192.168.1.52:38244    0.0.0.0:*                           3671/corosync      

udp        0      0 192.168.1.52:46683    0.0.0.0:*                           3671/corosync      

udp6       0      0 ::1:323                 :::*                                778/chronyd

5.3.7 查看日志

[root@micserver2 ~]# cd /var/log/cluster/

[root@micserver2 cluster]# ls

corosync.log  corosync.log-20190114.gz  corosync.log-20190115.gz  corosync.log-20190116.gz  corosync.log-20190117.gz  corosync.log.bak  corosync.log.bak2

[root@micserver2 cluster]# vim corosync.log

5.3.8 pacemaker配置

52 机器执行

[root@micserver2 ~]# crm configure              //进入configure

crm(live)configure# property stonith-enabled=false

crm(live)configure# property no-quorum-policy=ignore

crm(live)configure# rsc_defaults resource-stickiness=100

crm(live)configure#

crm(live)configure# show           //显示配置信息

node 1: micserver2.node4

node 2: node2.micserver

property cib-bootstrap-options: \

       no-quorum-policy=ignore \

       stonith-enabled=false \

       have-watchdog=false \

       dc-version=1.1.19-8.el7_6.2-c3c624ea3d \

       cluster-infrastructure=corosync

rsc_defaults rsc-options: \

       resource-stickness=100 \

       resource-stickiness=100

crm(live)configure# verify          //检查配置是否有效

crm(live)configure# edit             //直接编辑配置文件

crm(live)configure# verify

crm(live)configure# show

node 1: micserver2.node4

node 2: node2.micserver

property cib-bootstrap-options: \

       no-quorum-policy=ignore \

       stonith-enabled=false \

       have-watchdog=false \

       dc-version=1.1.19-8.el7_6.2-c3c624ea3d \

       cluster-infrastructure=corosync

rsc_defaults rsc-options: \

       resource-stickiness=100

crm(live)configure#commit        //提交修改

crm(live)configure#q                  //退出

5.4 NFS

5.4.1 安装

52 & 100机器均执行

[root@micserver2 ~]# rpm -qa | grep nfs              //检查是否已安装

nfs-utils-1.3.0-0.48.el7_4.1.x86_64

libnfsidmap-0.25-17.el7.x86_64

[root@micserver2 ~]# rpm -qa | grep rpcbind      //检查是否已安装

rpcbind-0.2.0-42.el7.x86_64

52 & 100机器均执行

[root@micserver2 ~]# yum -y install nfs-utils rpcbind //如未安装则安装

5.4.2 配置NFS目录

52 & 100机器均执行

[root@micserver2 ~]# vim /etc/exports //配置文件修改

/drbdDir 192.168.1.0/24(rw,no_root_squash,sync)

 

[root@micserver2 ~]# exportfs -r            //使修改生效

5.4.3 启动服务

52 & 100机器均执行

[root@micserver2 ~]# systemctl status nfs

● nfs-server.service - NFS server and services

   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)

   Active: inactive (dead)

[root@micserver2 ~]# systemctl status rpcbind

● rpcbind.service - RPC bind service

   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)

   Active: inactive (dead)

[root@micserver2 ~]# systemctl start rpcbind              //先启动rpcbind再启动nfs

[root@micserver2 ~]# systemctl status rpcbind

● rpcbind.service - RPC bind service

   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; indirect; vendor preset: enabled)

   Active: active (running) since 四 2019-01-17 16:55:43 CST; 5s ago

  Process: 3819 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)

 Main PID: 3820 (rpcbind)

   Memory: 596.0K

   CGroup: /system.slice/rpcbind.service

           └─3820 /sbin/rpcbind -w

 

1月 17 16:55:43 micserver2.node4 systemd[1]: Starting RPC bind service...

1月 17 16:55:43 micserver2.node4 systemd[1]: Started RPC bind service.

[root@micserver2 ~]#

[root@micserver2 ~]#

[root@micserver2 ~]# systemctl start nfs

[root@micserver2 ~]# systemctl status nfs

● nfs-server.service - NFS server and services

   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)

   Active: active (exited) since 四 2019-01-17 16:55:56 CST; 4s ago

  Process: 3847 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)

  Process: 3841 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)

  Process: 3837 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)

 Main PID: 3847 (code=exited, status=0/SUCCESS)

   Memory: 0B

   CGroup: /system.slice/nfs-server.service

 

1月 17 16:55:56 micserver2.node4 systemd[1]: Starting NFS server and services...

1月 17 16:55:56 micserver2.node4 systemd[1]: Started NFS server and services.

[root@micserver2 ~]#

[root@micserver2 ~]# chkconfig nfs on  // 开机启动

52 & 100机器均执行

[root@micserver2 ~]# rpcinfo -p localhost     //查看端口信息

   program vers proto   port  service

    100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

    100005    1   udp  20048  mountd

    100005    1   tcp  20048  mountd

    100005    2   udp  20048  mountd

    100005    2   tcp  20048  mountd

    100005    3   udp  20048  mountd

    100005    3   tcp  20048  mountd

    100024    1   udp  53063  status

    100024    1   tcp  35692  status

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100227    3   tcp   2049  nfs_acl

    100003    3   udp   2049  nfs

    100003    4   udp   2049  nfs

    100227    3   udp   2049  nfs_acl

    100021    1   udp  37232  nlockmgr

    100021    3   udp  37232  nlockmgr

    100021    4   udp  37232  nlockmgr

    100021    1   tcp  39224  nlockmgr

    100021    3   tcp  39224  nlockmgr

    100021    4   tcp  39224  nlockmgr

[root@micserver2 ~]#

5.4.4 注册Pacemaker资源

以下为crm primitive创建资源的命令说明,进入crm configure后输入help或?即可查看,具体子项查看方式:help primitive。

primitive <rsc> {[<class>:[<provider>:]]<type>|@<template>}

  [description=<description>]

  [[params] attr_list]

  [meta attr_list]

  [utilization attr_list]

  [operations id_spec]

    [op op_type [<attribute>=<value>...] ...]

 

attr_list :: [$id=<id>] [<score>:] [rule...]

             <attr>=<val> [<attr>=<val>...]] | $id-ref=<id>

id_spec :: $id=<id> | $id-ref=<id>

op_type :: start | stop | monitor

52机器执行

//通过crm操作pacemaker,创建pacemaker资源:NFS VIP

crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=192.168.1.234 cidr_netmask=24 op monitor interval=30s timeout=20s on-fail=restart

crm(live)configure# verify

52机器执行

//创建DRBD主、备资源

crm(live)configure# primitive drbd ocf:linbit:drbd params drbd_resource=nfsha op monitor role=Master interval=20 timeout=30 op monitor role=Slave interval=30 timeout=30 op start timeout=240 op stop timeout=100

52机器执行

//DRBD主备模式设置

crm(live)configure# ms ms_drbd drbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

//NFS主备资源

primitive storefs ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/drbdDir fstype=ext4 op start timeout=60s op stop timeout=60s op monitor interval=30s timeout=40s on-fail=restart

 

crm(live)configure# verify

crm(live)configure# show

node 1: micserver2.node4

node 2: node2.micserver

primitive drbd ocf:linbit:drbd \

       params drbd_resource=nfsha \

       op monitor role=Master interval=20 timeout=30 \

       op monitor role=Slave interval=30 timeout=30 \

       op start timeout=240 interval=0 \

       op stop timeout=100 interval=0

primitive storefs Filesystem \

       params device="/dev/drbd0" directory="/drbdDir" fstype=ext4 \

       op start timeout=60s interval=0 \

       op stop timeout=60s interval=0 \

       op monitor interval=30s timeout=40s on-fail=restart

primitive vip IPaddr \

       params ip=192.168.1.234 cidr_netmask=24 \

       op monitor interval=30s timeout=20s on-fail=restart

ms ms_drbd drbd \

       meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

property cib-bootstrap-options: \

       no-quorum-policy=ignore \

       stonith-enabled=false \

       have-watchdog=false \

       dc-version=1.1.19-8.el7_6.2-c3c624ea3d \

       cluster-infrastructure=corosync

rsc_defaults rsc-options: \

       resource-stickiness=100

crm(live)configure#

52机器执行

crm(live)configure# group g_nfsha vip storefs      //VIP与NFS绑定成组

crm(live)configure# verify

52机器执行

crm(live)configure# colocation c_g_nfsha inf: g_nfsha ms_drbd:Master    //NFS约束于DRBD主节点

crm(live)configure# verify

52机器执行

crm(live)configure# colocation storefs_with_drbd_master inf: g_nfsha ms_drbd:Master

crm(live)configure# verify

52机器执行

crm(live)configure# order o_g_nfsha inf: ms_drbd:promote g_nfsha:start

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# q

bye

[root@micserver2 ~]#

52 & 100机器均执行

[root@micserver2 ~]# crm status

Stack: corosync

Current DC: node2.micserver (version 1.1.19-8.el7_6.2-c3c624ea3d) - partition with quorum

Last updated: Thu Jan 17 18:10:29 2019

Last change: Thu Jan 17 18:09:53 2019 by root via cibadmin on micserver2.node4

 

2 nodes configured

4 resources configured

 

Online: [ micserver2.node4 node2.micserver ]

 

Full list of resources:

 

 Master/Slave Set: ms_drbd [drbd]

     Masters: [ micserver2.node4 ]

     Slaves: [ node2.micserver ]

 Resource Group: g_nfsha

     vip (ocf::heartbeat:IPaddr):  Started micserver2.node4

     storefs  (ocf::heartbeat:Filesystem):   Started micserver2.node4

 

[root@micserver2 ~]#

5.4.5 NFS客户端

52机器执行

[root@node1 ~]# rpm -qa | grep nfs

nfs-utils-1.3.0-0.54.el7.x86_64

libnfsidmap-0.25-19.el7.x86_64

[root@node1 ~]# yum -y install nfs-utils

 

[root@node1 ~]# showmount -e 192.168.1.234      //显示NFS VIP 的可用挂载点

Export list for 192.168.1.234:

/drbdDir 192.168.1.0/24

[root@node1 ~]# mkdir /clientNFSDir

[root@node1 ~]# mount -t nfs 192.168.1.234:/drbdDir /clientNFSDir

[root@node1 ~]# cd /clientNFSDir/

[root@node1 clientNFSDir]# ls

node-v8.9.3-linux-x64.tar  README.md

[root@node1 clientNFSDir]#

6 常见报错

6.1 启动Corosync报错

提示使用systemctl status corosync 和 journalctl -xe查看日志。

发现显示:No ring0_addr specified for node

6.1.1 原因分析

配置文件拼写错误,node中ring0_addr写成了ring0_add。

6.1.2 解决方式

配置文件node中ring0_add改为ring0_addr。

6.2 drbdadm create-md nfsha失败

[root@micserver2 ~]# drbdadm create-md nfsha

modinfo: ERROR: Module drbd not found.

modinfo: ERROR: Module drbd not found.

open(/dev/mapper/drbdvg-drbdlv) failed: Device or resource busy

 

Exclusive open failed. Do it anyways?

[need to type 'yes' to confirm] no

 

open(/dev/mapper/drbdvg-drbdlv) failed: Device or resource busy

 

Exclusive open failed. Do it anyways?

[need to type 'yes' to confirm]

 

Operation canceled.

Command 'drbdmeta 0 v09 /dev/mapper/drbdvg-drbdlv internal create-md 1' terminated with ex

[root@micserver2 ~]#

6.2.1 原因分析

drbd创建服务时,对于的disk(/dev/mapper/drbdvg-drbdlv)必须是干净的,不可以挂载、不可以有文件系统。因此,在DRBD安装前准备分区时不要对LVM分区进行mkfs格式化和挂载(mount)。

6.2.2 解决方式

对于已经格式化的情况,先卸载,再去格式化:

[root@micserver2 ~]# umount /drbddir

[root@micserver2 ~]# dd if=/dev/zero of=/dev/mapper/drbdvg-drbdlv bs=1M count=1

6.3 DRBD启动失败

Jan 16 13:37:29 node1.micserver systemd[1]: Starting DRBD -- please disable. Unless you are NOT using a cluster manager....

Jan 16 13:37:29 node1.micserver drbd[13092]: Can not load the drbd module.

Jan 16 13:37:29 node1.micserver systemd[1]: drbd.service: main process exited, code=exited, status=5/NOTINSTALLED

Jan 16 13:37:29 node1.micserver systemd[1]: Failed to start DRBD -- please disable. Unless you are NOT using a cluster manager..

Jan 16 13:37:29 node1.micserver systemd[1]: Unit drbd.service entered failed state.

Jan 16 13:37:29 node1.micserver systemd[1]: drbd.service failed.

6.3.1 原因分析

内核版本过低,不支持kmod-drbd84和drbd84-utils。

6.3.2 解决方式

切换或升级内核版本到3.10.0-957.1.3.el7.x86_64内核版本。

6.4 挂载DRBD失败

mkfs.ext4: Wrong medium type while trying to determine filesystem size

6.4.1 原因分析

备节点不可以挂载。

6.5 DRBD启动失败,Disk分配失败

adjust disk: nfsha:failed(apply-al:1)

6.5.1 原因分析

可能是磁盘有脏数据,在52机器执行”drbdadm create-md nfsha”后,再调用”systemctl start drbd”,过20秒在100执行”drbdadm create-md nfsha”后,再调用”systemctl start drbd”,52会出现上述错误。

6.5.2 解决方式

52&100机器均先停止服务“systemctl stop drbd”,然后52&100机器分别执行”drbdadm create-md nfsha”,出现下述提示时输入”yes”

[root@micserver2 ~]# drbdadm create-md nfsha

You want me to create a v08 style flexible-size internal meta data block.

There appears to be a v09 flexible-size internal meta data block

already in place on /dev/mapper/drbdVG-drbdLV at byte offset 268431257600

 

Valid v09 meta-data found, convert to v08?

[need to type 'yes' to confirm] yes

 

Writing meta data...

New drbd meta data block successfully created.

然后52&100机器分别执行“systemctl start drbd”,解决。

6.6 NFS客户端写无权限

[root@node1 clientNFSDir]# cp ~/pssh-2.3.1-7.4.noarch.rpm /clientNFSDir/

cp: cannot create regular file ‘/clientNFSDir/pssh-2.3.1-7.4.noarch.rpm’: Permission denied

[root@node1 clientNFSDir]#

6.6.1 原因分析

配置NFS路径时指定了all_squash,导致客户端访问时账户名被转为无权限的非root用户。

[root@micserver2 ~]# vim /etc/exports

/drbdDir 192.168.1.0/24(rw,no_root_squash,sync,all_squash)

6.6.2 解决方式

[root@micserver2 ~]# vim /etc/exports

/drbdDir 192.168.1.0/24(rw,no_root_squash,sync)

[root@micserver2 ~]# exportfs -a

[root@micserver2 ~]# systemctl restart nfs

 

[root@node1 clientNFSDir]# cp ~/pssh-2.3.1-7.4.noarch.rpm /clientNFSDir/

[root@node1 clientNFSDir]# cp ~/python-pssh-2.3.1-7.4.noarch.rpm /clientNFSDir/

[root@node1 clientNFSDir]# ls

node-v8.9.3-linux-x64.tar  pssh-2.3.1-7.4.noarch.rpm  python-pssh-2.3.1-7.4.noarch.rpm  README.md

[root@node1 clientNFSDir]#

[root@micserver2 ~]# cd /drbdDir/

[root@micserver2 drbdDir]# ls

node-v8.9.3-linux-x64.tar  pssh-2.3.1-7.4.noarch.rpm  python-pssh-2.3.1-7.4.noarch.rpm  README.md

6.7 NFS服务端主备切换后,NFS客户端无法挂载

[root@node1 ~]# showmount -e 192.168.1.100

Export list for 192.168.1.100:

/setup/nfs/lsbcmccdb  *

/setup/nfs/blockchain *

[root@node1 ~]# cd /clientNFSDir

-bash: cd: /clientNFSDir: Stale file handle

[root@node1 ~]#

6.7.1 原因分析

无法挂载,showmount不显示。

100机器被切换为NFS主节点后,查看/etc/exports文件,发现没有/drbdDir 192.168.1.0/24(rw,no_root_squash,sync)。主备节点NFS配置文件都要加。

6.7.2 解决方式

[root@node2 ~]# vim /etc/exports

[root@node2 ~]#

[root@node2 ~]#

[root@node2 ~]# exportfs -a

6.8 双节点重启后,cat /proc/drbd互相显示对方Unknown

[root@micserver2 ~]# cat /proc/drbd

version: 8.4.11-1 (api:1/proto:86-101)

GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----

    ns:0 nr:0 dw:4 dr:2121 al:1 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:28

[root@micserver2 ~]#

[root@node2 ~]# cat /proc/drbd

version: 8.4.11-1 (api:1/proto:86-101)

GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55

 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown   r-----

    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:8

[root@node2 ~]#

6.8.1 原因分析

对于DRBD主备节点互相Unknown,一个节点显示StandAlone,一个节点显示StandAlone或WFConnection,就是脑裂,需要手动恢复。

查看日志:/var/log/message会有“Split-Brain detected but unresolved, dropping connection!”提示。

6.8.2 解决方式

手动在希望丢弃其数据的节点执行:

[root@node2 drbdDir]# drbdadm -- --discard-my-data connect all

 

手动在希望保留其数据的节点执行:

[root@micserver2 ~]# drbdadm connect nfsha

7 联想

此次研究,学到了很多新知识。但是还有很多可以拓展的方向,先记下来后续再研究。

  • Corosync&Pacemaker&DRBD&NFS更高级的使用技巧
  • Linux基础知识,包括磁盘、分区、网络等
  • Rsync+Inotify
  • 其它文件共享技术
  • 负载均衡,ZooKeeper等技术

转载于:https://my.oschina.net/u/4069047/blog/3005181

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值