目录

  • 参考文档
  • 理论概述
    • DRBD
    • 架构
    • NFS
  • 架构部署
    • 部署DRBD
    • 部署heartbeat
    • 部署NFS及配合heartbeat
    • nfs切记要挂载到别的机器上不要为了省事,省机器

参考文档

https://blog.51cto.com/732233048/1669417

CentOS 7下安装配置Heartbeat高可用集群_服务器应用_Linux公社-Linux系统门户网站
https://www.linuxidc.com/Linux/2019-02/157123.htm

NFS自动挂载_服务器应用_Linux公社-Linux系统门户网站
https://www.linuxidc.com/Linux/2013-05/84777.htm

1 NFS高可用解决方案之DRBD+heartbeat搭建 - 温柔易淡 - 博客园
https://www.cnblogs.com/liaojiafa/p/6129499.html

Linux HA集群之DRBD详解(较全面)

构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
https://www.cnblogs.com/liaojiafa/p/6118425.html

RHEL/CentOS/Fedora各种源(EPEL、Remi、RPMForge、RPMFusion)配置 - AderStep - CSDN博客
https://blog.csdn.net/gatieme/article/details/71056309

CentOS7.5搭建Heartbeat+DRBD+NFS高可用共享存储-聆听未来-51CTO博客
https://blog.51cto.com/kerry/2309747?source=dra

error while loading shared libraries解决办法 - xiangxianghehe的博客 - CSDN博客
https://blog.csdn.net/xiangxianghehe/article/details/79051782

使用heartbeat需要了解的。。 - 学习中间件调优管理监控的专栏 - CSDN博客
https://blog.csdn.net/big1980/article/details/9915547

理论概述

本案例只是,为搭建MySQL集群做准备,并无MySQL

DRBD

DRBD(distributed replicated block device分布式复制块设备)是一个基于软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。DRBD是镜像块设备,是按数据位镜像成一样的数据块

DRBD可以部署在如下类的底层设备上: 1、一个磁盘,或者是磁盘的某一个分区; 2、一个soft raid 设备; 3、一个LVM的逻辑卷; 4、一个EVMS(Enterprise Volume Management System,企业卷管理系统)的卷; 5、其他任何的块设备。

工作原理

DRBD需要运行在各个节点上,且是运行在节点主机的内核中,所以DRBD是内核模块,在Linux2.6.33版本起开始整合进内核。

DRBD工作的位置在文件系统的buffer Cache和磁盘调度器之间

如上图左节点为活跃节点实线箭头,有节点为备用节点虚线箭头。 左节点接收到数据法网内核的数据通路,DRBD在数据通路中注册钩子检查数据(类似ipvs)当检测到接收的数据是发往自己管理的存储位置,程序会复制另一份,一份存储到本机的DRBD存储设备,另一份就发给TCP/IP协议栈,通过网络传输到另一台节点上TCP/IP协议栈;另一台节点上运行的DRBD模块同样在数据通路上监测数据,当检测到传输过来的数据时,运行存储机制,存储到本机DRBD存储设备的对应位置。

如果左节点宕机,在高可用集群中右节点成为活跃节点,并且会接收到左节点宕机的信号,接受数据先保存到本地,左节点恢复上线之后,再把左节点宕机后右节点变动的 数据镜像到左节点。 每个设备(drbd 提供了不止一个设备)都有一个状态,可能是‘主’状态或‘从’态。在主节点上,应用程序应能运行和访问drbd设备(/dev/drbd)。每次写入会发往本地磁盘设备和从节点设备中。从节点只能简单地把数据写入它的磁盘设上。 读取数据通常在本地进行。如果主节点发生故障,心跳(heartbeat或corosync)将会把从节点转换到主状态,并启动其上的应用程序。(如果您将它和无日志FS 一起使用,则需要运行fsck)。如果发生故障的节点恢复工作,它就会成为新的从节点,而且必须使自己的内容与主节点的内容保持同步。

复制协议 镜像过程完成之后还需要返回成功或失败的回应信息。回应信息可以在传输过程中的不同位置返回

协议A
异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点
协议B
内存同步(半同步)复制协议。一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘
协议C
同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个群集节点的流行模式,但I / O吞吐量依赖于网络带宽
一般使用协议C,但选择C协议将影响流量,从而影响网络时延。为了数据可靠性,我们在生产环境使用时须慎重选项使用哪一种协议简而言之:
A:数据一旦写入磁盘并发送到本地TCP/IP协议栈,就认为完成了写入操作
B:数据一旦到达对等节点的TCP/IP协议栈,即收到接受确认就认为完成了写入操作
C:数据一旦到达对等节点的磁盘,即收到写入确认就认为完成了写入操作
协议A性能最好,C数据可靠性最高

架构

Mysql+heartbeat+drbd+lvs是一套成熟的集群解决方案在现在多数企业里面,通过heartbeat+DRBD完成Mysql的主节点写操作的高可用性,通过Mysql+lvs实现Mysql数据库的主从复制和Mysql读写的负载均衡。这个方案在读写方面进行了分离,融合了写操作的高可用和读操作的负载均衡。

NFS

NFS作为业界常用的共享存储方案,被众多公司采用。使用NFS作为共享存储,为前端WEB server提供服务,主要存储网页代码以及其他文件。

  • 常用同步技术
  1. rsync+inotify实现文件同步
  2. 借助DRBD,实现文件同步
    但是以上方案都没有实现高可用,只是实现了两者数据同步。但是业务要求NFS服务器必须是高可用,所以我们在第二种同步方案的基础上,在结合heartbeat来实现高可用。

架构部署

采用MySQL读写分离的方案;而读写之间的数据同步采用MySQL的单项或者双向复制技术实现。 MySQL写操作采用基于heartbeat+DRBD+MySQL搭建高可用集群;读操作普遍采用基于LVS+keepalived搭建高可用扩展集群方案

本案例中暂时没部署MySQL,实现思路:dbmaster和dbbackup两台机器,分别安装nfs,heartbeat,dbmaster,DRBD。

  • nfs可以另找一台服务器搭建专门用为共享存储。
  • nfs的控制权交给了heartbeat。

架构拓扑

环境 全部都是Centos 7.5 系统
主机名|IP|担任角色
--|--|--
dbmaster|192.168.111.3|drbd主,nfs server,heartbeat主
dbbackup|192.168.111.4|drbd被,heartbeat被
VIP|192.168.111.100
nfs客户端|192.168.111.5|挂载VIP共享的目录测试

部署DRBD

  1. 所有主机配置hosts并且改为对应的主机名
  2. 所有主机保持网络状况的良好通信
  3. 所有主机安装最新的epel源
  4. DRBD这两台各自分别添加了1GB硬盘供DRBD使用
  5. 同步时间
[root@localhost ~]# vim /etc/hosts192.168.111.7 lvsmaster       192.168.111.8 lvsbackup192.168.111.3 dbmaster192.168.111.4 dbbackup192.168.111.5 dbslave1192.168.111.6 dbslave2[root@dbmaster yum.repos.d]# uname -r
3.10.0-862.el7.x86_64
#这是旧的[root@dbbackup ~]# yum install kernel* -y[root@dbbackup ~]# reboot[root@localhost ~]# uname -r
3.10.0-957.12.1.el7.x86_64
#这是新的drbd                  397041  0
libcrc32c              12644  4 xfs,drbd,nf_nat,nf_conntrack
[root@dbbackup ~]# yum install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm -y[root@dbbackup ~]# yum -y install drbd84-utils kmod-drbd84
#安装DRBD
[root@localhost ~]# modprobe drbd
#不出意外这样就OK了
[root@localhost ~]# lsmod |grep -i drbd
  • 分区
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0x7ce5781e 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):n
Partition type:p   primary (0 primary, 0 extended, 4 free)e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):
将使用默认值 2097151
分区 1 已设置为 Linux 类型,大小设为 1023 MiB命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。#以上关于DRBD和分区的操作在111.3和111.4机器上重复操作,master和backup分区大小一致。
  • 修改配置文件
[root@dbmaster ~]# vim /etc/drbd.conf
#include "drbd.d/global_common.conf";
#注释掉这行,避免和我们自己写的配置产生冲突。include "drbd.d/*.res";include "drbd.d/*.cfg";
[root@localhost ~]# vim /etc/drbd.d/drbd_basic.cfg global {usage-count yes;#是否参与DRBD使用者统计,默认为yes,yes or no都无所谓 }common {syncer { rate 30M; }}#设置主备节点同步的网络速率最大值,默认单位是字节,我们可以设定为兆resource r0 {#r0为资源名,我们在初始化磁盘的时候就可以使用资源名来初始化。protocol C;#使用 C 协议。handlers {pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f ";  pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt ";local-io-error "echo o > /proc/sysrq-trigger ; halt -f";fence-peer "/usr/lib4/heartbeat/drbd-peer-outdater -t 5";pri-lost "echo pri-lst. Have a look at the log file.mail -s 'Drbd Alert' root";split-brain "/usr/lib/drbd/notify-split-brain.sh root";out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";}net {cram-hmac-alg "sha1";shared-secret "MySQL-HA";#drbd同步时使用的验证方式和密码信息}disk {on-io-error detach;fencing resource-only;# 使用DOPD(drbd outdate-peer deamon)功能保证数据不同步的时候不进行切换。}startup {wfc-timeout 120;degr-wfc-timeout 120;}device /dev/drbd0;#这里/dev/drbd0是用户挂载时的设备名字,由DRBD进程创建on dbmaster {#每个主机名的说明以on开头,后面是hostname(必须在/etc/hosts可解析)disk /dev/sdb1;#使用这个磁盘作为drbd的磁盘/dev/drbd0。address 192.168.111.3:7788;#设置DRBD的监听端口,用于与另一台主机通信meta-disk internal;#drbd的元数据存放方式}on dbbackup {disk /dev/sdb1;address 192.168.111.4:7788;meta-disk internal;}}
  • drbd报错
[root@dbmaster ~]# drbdadm create-md r0
WARN:You are using the 'drbd-peer-outdater' as fence-peer program.If you use that mechanism the dopd heartbeat plugin program needsto be able to call drbdsetup and drbdmeta with root privileges.You need to fix this with these commands:chgrp haclient /lib/drbd/drbdsetup-84chmod o-x /lib/drbd/drbdsetup-84chmod u+s /lib/drbd/drbdsetup-84chgrp haclient /usr/sbin/drbdmetachmod o-x /usr/sbin/drbdmetachmod u+s /usr/sbin/drbdmetamd_offset 1072689152
al_offset 1072656384
bm_offset 1072623616Found xfs filesystem1047552 kB data area apparently used1047484 kB left usable by current configurationDevice size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either* use external meta data (recommended)* shrink that filesystem first* zero out the device (destroy the filesystem)
Operation refused.Command 'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40

应该是该分区有残留的文件

  • 解决
[root@dbmaster ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00339429 秒,309 MB/秒
[root@dbmaster ~]# drbdadm create-md r0--==  Thank you for participating in the global usage survey  ==--
The server's response is:you are the 14097th user to install this version
WARN:You are using the 'drbd-peer-outdater' as fence-peer program.If you use that mechanism the dopd heartbeat plugin program needsto be able to call drbdsetup and drbdmeta with root privileges.You need to fix this with these commands:chgrp haclient /lib/drbd/drbdsetup-84chmod o-x /lib/drbd/drbdsetup-84chmod u+s /lib/drbd/drbdsetup-84chgrp haclient /usr/sbin/drbdmetachmod o-x /usr/sbin/drbdmetachmod u+s /usr/sbin/drbdmetainitializing activity log
initializing bitmap (32 KB) to all zero
Writing meta data...
New drbd meta data block successfully created.
success
#使用dd命令清空,然后再执行
  • 进一步配置
[root@dbmaster ~]# systemctl start drbd.service
[root@dbbackup ~]# systemctl enable drbd.service
#启动服务#如报错,试试如下,不报错跳过这步
[root@dbmaster ~]# groupadd haclient
[root@dbmaster ~]# chgrp haclient /lib/drbd/drbdsetup-84
[root@dbmaster ~]# chmod o-x /lib/drbd/drbdsetup-84
[root@dbmaster ~]# chmod u+s /lib/drbd/drbdsetup-84
[root@dbmaster ~]# chgrp haclient /usr/sbin/drbdmeta
[root@dbmaster ~]# chmod o-x /usr/sbin/drbdmeta
[root@dbmaster ~]# chmod u+s /usr/sbin/drbdmeta
#以上这几个操作,找了很多资料都没有提到要做,还特意提醒不用做,可能环境不同吧,不做一直报错[root@dbmaster ~]# drbdadm primary --force r0
#主上操作
[root@dbmaster ~]# drbdadm role r0
Primary/Secondary
#查看状态[root@dbbackup ~]# drbdadm role r0
Secondary/Primary
#backup机器查看状态[root@dbbackup ~]# drbdadm dstate r0
UpToDate/UpToDate
#查看数据同步状态,如上为一致,还有Inconsistent状态为数据不一致正在同步
  • 挂载DRBD磁盘
现在dbmaster上操作
[root@dbmaster ~]# mkfs.ext4 /dev/drbd0
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 261871 blocks
13093 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 32768, 98304, 163840, 229376Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成[root@dbmaster ~]# mkdir /nfs
[root@dbmaster ~]# mount /dev/drbd0 /nfs现在是dbbackup上操作,主要是检测备端是否能够正常挂载和使用:[root@dbmaster ~]# umount /nfs
#主上将设备卸载
[root@dbmaster ~]# drbdadm secondary all
#切换为被状态[root@dbbackup ~]# drbdadm primary r0
#被设为主状态
[root@dbbackup ~]# mkdir /nfs
[root@dbbackup ~]# mount /dev/drbd0 /nfs[root@dbbackup ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  4.5G   13G   27% /
devtmpfs                devtmpfs  470M     0  470M    0% /dev
tmpfs                   tmpfs     487M     0  487M    0% /dev/shm
tmpfs                   tmpfs     487M   14M  473M    3% /run
tmpfs                   tmpfs     487M     0  487M    0% /sys/fs/cgroup
/dev/sr0                iso9660   4.2G  4.2G     0  100% /media/cdrom
/dev/sda1               xfs      1014M  251M  764M   25% /boot
tmpfs                   tmpfs      98M     0   98M    0% /run/user/0
/dev/drbd0              ext4      991M  2.6M  922M    1% /database再按相同的方法将状态切换回来

好的,这下简单测试了下,先告一段落

部署heartbeat

  • 安装cluster-glue

[root@dbmaster ~]# ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa
[root@dbmaster ~]# ssh-copy-id root@dbbackup
#ssh免密认证[root@dbbackup ~]# yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc -y
#两机同样操作安装依赖[root@dbbackup ~]# useradd -g haclient hacluster安装包下载
下载软件包:Reusable-Components-glue、resource-agents、heartbeat
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2019年资料/2月/26日/CentOS 7下安装配置Heartbeat高可用集群/
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm[root@dbmaster ~]# tar -jxvf glue.tar.bz2
#我这是改名之后的,原来的是一串数字
[root@dbmaster ~]# cd Reusable-Cluster-Components-glue--0a7add1d9996/
[root@dbmaster Reusable-Cluster-Components-glue--0a7add1d9996]# ./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
echo $?
cd ..
  • 安装resource-agents

[root@dbbackup ~]# tar zxf resource-agents-3.9.6.tar.gz
[root@dbbackup ~]# cd resource-agents-3.9.6/
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
echo $?
cd ..
  • 安装heartbeat

[root@dbmaster ~]# tar jxf heartbeat.bz2
#该名称是我后来改过的
[root@dbmaster ~]# cd Heartbeat-3-0-958e11be8686/./bootstrap
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
echo $?[root@dbbackup ~]# mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
[root@dbbackup ~]# cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/[root@dbmaster ~]# cp Heartbeat-3-0-958e11be8686/doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/
#拷贝配置文件[root@dbmaster Heartbeat-3-0-958e11be8686]# chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
#该权限必须为600
#以上安装两台机器一样
  • 配置文件
[root@dbmaster ~]# vim /usr/local/heartbeat/etc/ha.d/haresources
#末尾添加如下
dbmaster IPaddr::192.168.111.100/24/ens32 drbddisk::r0 Filesystem::/dev/drbd0::/nfs::ext4 killnfsd
#dbmaster IPaddr::192.168.111.10/24/ens32主机名 后跟虚拟IP地址、接口
#drbddisk::r0管理drbd资源的名称
#Filesystem::/dev/drbd0::/nfs::ext4 renfsd文件系统::挂载的目录及格式::后跟renfsd资源脚本[root@dbmaster ~]# cp /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/
#两台一样[root@dbmaster ~]# echo "pkill -9 nfs; systemctl restart nfs; exit 0" > /usr/local/heartbeat/etc/ha.d/resource.d/killnfsd
#编辑nfs脚本文件killnfsd ,killnfsd 脚本文件的作用,
#drbd主备切换时,若nfs没有启动,则此脚本会把nfs启动
#drbd主备切换时,若nfs已启动,则此脚本会重启nfs服务,因为NFS服务切换后,必须重新mount一下nfs共享出来的目录,否则会出现stale NFS file handle的错误[root@dbmaster ~]# chmod +x /usr/local/heartbeat/etc/ha.d/resource.d/drbddisk
[root@dbmaster ~]# chmod +x /usr/local/heartbeat/etc/ha.d/resource.d/killnfsd [root@dbmaster resource.d]# pwd
/usr/local/heartbeat/etc/ha.d/resource.d
[root@dbmaster resource.d]#  ll drbddisk Filesystem killnfsd IPaddr
-rwxr-xr-x 1 root root 3162 5月  14 15:43 drbddisk
-rwxr-xr-x 1 root root 1923 5月  14 10:15 Filesystem
-rwxr-xr-x 1 root root 2297 5月  14 10:15 IPaddr
-rwxr-xr-x 1 root root   57 5月  14 15:41 killnfsd
#必须要有这四个脚本,有的是自带,有的是复制,有的自己写,上面已经说明而且必须要有执行权限。

[root@dbmaster ~]# vim  /usr/local/heartbeat/etc/ha.d/ha.cf
#修改主配置文件(去掉注释或修改值)
logfile /var/log/ha-log
#指定heartbeat日志文件的位置
logfacility     local0
#利用系统日志打印日志
keepalive 1
# 心跳发送时间间隔
deadtime 5# 备用节点5s内没有检测到master机的心跳,确认对方故障
warntime 2
# 警告2次
initdead 10
# 守护进程启动30s后,启动服务资源。
udpport 694
#设定集群节点间的通信协议及端口为udp694监听端口(该端口可以修改)
ucast ens32 192.168.111.4
# 另一台主机节点eth0的地址,注意是另一台。
auto_failback off
#当primary节点切换到secondary节点之后,primary节点恢复正常,不进行切回操作,因为切换一次mysql master成本很高。
node    dbmaster
node    dbbackup
# 定义两个节点的主机名,一行写一个。
ping 192.168.111.2
#两个IP的网关
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
#使用这个脚本去侦听对方是否还活着(使用的是ICMP报文检测)[root@dbmaster ~]# vim /usr/local/heartbeat/etc/ha.d/authkeys
#认证文件auth 1#表示使用id为2的验证 下边需要定义一个2的验证算法1 sha1 HA_DB#口令(HISHA1)随便给 主从配置相同即可

dbdackup也是同样的安装方法,配置文件直接scp过去就可以了,然后修改

[root@dbmaster ~]# scp -r /usr/local/heartbeat/etc/ha.d/{authkeys,haresources,ha.cf} root@dbbackup:/usr/local/heartbeat/etc/ha.d/
[root@dbbackup ha.d]# vim /usr/local/heartbeat/etc/ha.d/ha.cf
ucast ens32 192.168.111.3
#把backup节点上ha.cf配置文件中ucast中IP改为对方[root@dbmaster ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/[root@dbmaster ~]# ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/
#2机器将这些库文件链接过去,要不启动报错
May 13 13:09:27 dbmaster heartbeat: [86183]: ERROR: Illegal directive [ucast] in /usr/local/heartbeat/etc/ha.d/ha.cf

部署NFS及配合heartbeat

[root@dbbackup ~]# yum -y install  nfs-utils nfs-utils-lib nfs4-acl-tools
#dbmaster和dbbackup安装
[root@dbmaster ~]# vim /etc/exports/nfs    192.168.111.0/255.255.255.0(rw,sync,no_root_squash)
#设置nfs共享目录,权限,网段
[root@dbmaster ~]# systemctl restart rpcbind#启动顺序一定是rpcbind->nfs,否则有可能出现错误
#在这里nfs不需要启动,它由heartbeat控制[root@dbmaster ~]# systemctl start heartbeat
[root@dbmaster ~]# systemctl enable heartbeat
#最多等一两分钟VIP肯定出来,否则查看日志
[root@dbmaster ~]# ip a | grep inet
#主上查看inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host inet 192.168.111.3/24 brd 192.168.111.255 scope global noprefixroute ens32inet 192.168.111.100/24 brd 192.168.111.255 scope global secondary ens32:0
#到了这,VIP肯定要出来,可以稍等会,观察下日志。如果出错,上面可能哪一步没有到位
[root@dbmaster ~]# mount | grep drbd
/dev/drbd0 on /nfs type ext4 (rw,relatime,data=ordered)
#这个也已经根据配置自动挂载[root@dbbackup ~]# showmount -e 192.168.111.100
Export list for 192.168.111.100:
/nfs 192.168.111.0/255.255.255.0
#查看VIP共享的目录
  • 配置nfs自动挂载
[root@localhost ~]# mkdir /nfs
[root@localhost ~]# mount 192.168.111.100:/nfs/ /nfs/
#客户端测试
[root@localhost ~]# echo "192.168.111.100:/nfs /nfs nfs defaults,soft,intr 0 0" >> /etc/fstab
[root@localhost ~]# tail -1 /etc/fstab
192.168.111.100:/nfs /nfs nfs defaults,soft,intr 0 0
#Nfs是类型
#soft参数是为了向用户输出错误信息
#intr参数为了解决当网络出现故障时,我们可以通过按下ctrl+c组合键来终止操作
  • 验证:接下来我们在主上把nfs服务关掉,模拟故障,看VIP是否切换主机
[root@dbmaster ~]# systemctl stop nfs
[root@dbmaster ~]# systemctl status nfs
● nfs-server.service - NFS server and servicesLoaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)Drop-In: /run/systemd/generator/nfs-server.service.d└─order-with-mounts.confActive: inactive (dead) since 二 2019-05-14 18:21:09 CST; 6s agoProcess: 61802 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)Process: 61799 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)Process: 61797 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)Main PID: 60625 (code=exited, status=0/SUCCESS)5月 14 16:35:58 dbmaster systemd[1]: Starting NFS server and services...
5月 14 16:35:58 dbmaster systemd[1]: Started NFS server and services.
5月 14 18:21:09 dbmaster systemd[1]: Stopping NFS server and services...
5月 14 18:21:09 dbmaster systemd[1]: Stopped NFS server and services.

我在主被两台机器上查看debug日志,没有任何变动

[root@dbbackup ~]# cd /nfs#我在挂载了VIP的机器上查看共享目录能否使用,卡死终端

总结下原因:heartbeat没有监控到nfs的服务状态,它自身想当然的认为,只有heartbeat服务出故障,才切VIP。

解决:我们将nfs,和heartbeat服务做一个捆绑,类似于事物性质。即nfs出问题,heartbeat也要宕掉。这里通过脚本实现。

[root@dbmaster ~]# vim /opt/monitornfs.shwhile true
dodrbdstatus=`cat /proc/drbd 2> /dev/null  | grep ro | tail -n1 | awk -F':' '{print $4}' | awk -F'/' '{print $1}'`nfsstatus=`systemctl status nfs&>/dev/null ; echo $?`if [ -z  $drbdstatus ];thensleep 10continueelif [ $drbdstatus == 'Primary' ];thenif [ $nfsstatus -ne 0 ];thensystemctl start nfs &> /dev/nullnewnfsstatus=`systemctl status nfs&>/dev/null ; echo $?`if [ $newnfsstatus -ne 0 ];thensystemctl stop heartbeat#尝试开启之后若还是不行,则关掉heartbeatfififisleep 5
done[root@dbmaster ~]# chmod +x /opt/monitornfs.sh
[root@dbmaster ~]# nohup /opt/monitornfs.sh &
#以上关于脚本操作,在dbbackup上重复
  • 测试
[root@dbmaster ~]# systemctl stop nfs
#主节点关掉nfs服务#但是后台的脚本又给他开启了
[root@dbmaster ~]# systemctl stop heartbeat
#VIP切换到备机了

但是nfs客户端的使用并不影响,切换的时候会有轻微的延迟。

nfs切记要挂载到别的机器上不要为了省事,省机器

转载于:https://www.cnblogs.com/joinbestgo/p/10870310.html

CentOS7数据库架构之NFS+heartbeat+DRBD(亲测,详解)相关推荐

  1. CentOS6安装NFS HA架构部署(NFS + Heartbeat + DRBD)

    因业务需求,使用NFS共享服务,为了避免硬件故障导致的服务不可用,使用NFS + Heartbeat + DRBD架构实现NFS高可用.(我当时在测试环境操作的/dev/sdb 有时候写成了/dev/ ...

  2. gogs mysql 报错_linux上Docker安装gogs私服亲测(详解)

    一.前言 有网友问我为什么要使用私服,可能大部分人都不是太懂,网上那么多存储仓库而且好用方便,但是你想过没有如果企业中的项目,放在人家的仓库上这个安全性不是太好,所以说一般企业都会有自己的私服.本章教 ...

  3. mysql的in查询是可以用到索引吗?亲测详解

    一.前言 如题所示,这个问题很早之前就听过了,之前我也是一直以为in查询是用不到索引的.后来陆陆续续看到很多博客,有的说in查询可以用索引,有的说不能用索引,所以博主就越发好奇起来.到底能不能用索引, ...

  4. Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    编者按:HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase.Hive这两个核心工具也随着Hadoop发展变得越来越重要.本文作者张震的博文<Thinking in BigD ...

  5. Thinking in BigData(八)大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

          纯干货:Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解. 通过这一阶段的调研总结,从内部机理的角度详细分析,HDFS.MapReduce.Hbase.H ...

  6. mysql数据库表分区_MySQL数据库之MySQL的分区和分表详解

    本文主要向大家介绍了MySQL数据库之MySQL的分区和分表详解 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1. 分区 MySQL中的分区是指将一个数据表按照某种规则(如时 ...

  7. 备份数据库的expdp语句_Oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍...

    oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍 目 录 1 Oracle数据泵的介绍 3 2 Oracle expdp/impdp参数使用介绍 3 2.1 Or ...

  8. android收藏功能demo,Android使用Realm数据库实现App中的收藏功能(代码详解)

    前 言 App数据持久化功能是每个App必不可少的功能,而Android最常用的数据持久化方式主要有以下的五种方式: 使用SharedPreferences存储数据: 文件存储数据: SQLite数据 ...

  9. mysql如何限制数据修改密码_MySQL_MySQL数据库中修改密码及访问限制设置详解,MySQL是一个真正的多用户、多 - phpStudy...

    MySQL数据库中修改密码及访问限制设置详解 MySQL是一个真正的多用户.多线程SQL数据库服务器.MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序 ...

最新文章

  1. 北大校友“炼丹”分享:OpenAI如何训练千亿级模型?
  2. vue双向绑定原理源码解析
  3. 【效率】几个免费的富文本编辑器,这不完胜付费?
  4. 整合SharePoint MOSS 和SQL Server 2005 reporting service(一)
  5. DotnetCharting控件的破解方法
  6. Page_PreInit在网页传值的应用
  7. PHP删除目录及目录下所有文件
  8. Flash和margue字幕滚动效果
  9. 优秀程序员都有哪些编程习惯?
  10. OpenCV imread读取图片,imshow展示图片,出现cv:Exception at memory location异常
  11. python零基础能学吗-Python真的零基础可以学会吗?
  12. php用手机摇一摇,H5做出手机摇一摇功能的实现步骤
  13. 怎样覆盖之前的html文档,jquery – html文本覆盖自己
  14. 1.卷1(套接字联网API)---简介
  15. [2019杭电多校第四场][hdu6623]Minimal Power of Prime
  16. Cesium:结合天地图实现中文定位
  17. matlab数字信号处理程序,MATLAB数字信号处理 85个案例分析 全书程序
  18. Fedora14 nfs配置 + tiny210 挂载nfs
  19. 山景BP1048使用记录
  20. 《微积分》的本质笔记

热门文章

  1. Linux发行商,能否齐步走?
  2. java jni dll路径_Java中Jni调用DLL文件试验
  3. Aws S3 基础操作
  4. angularjs pdf插件_AngularJS权威教程 PDF扫描版[14MB]
  5. 智能座舱域控制器功能自动化测试方案
  6. 执念斩长河---短期自我发展规划概要
  7. 【STM32学习笔记】(9)——串口通讯(USART)详解
  8. Redis三主三从集群搭建(三台机器)
  9. 【经济学视频课程】需求弹性的推导…
  10. 腾讯在乳腺癌影像AI诊断方向的探索