设为首页 收藏本站
查看: 734|回复: 0

[经验分享] DRBD+HEARTBEAT+MYSQL实践过程

[复制链接]

尚未签到

发表于 2018-10-4 10:12:01 | 显示全部楼层 |阅读模式
  ### 知识补充,一定要看哦:
  工作原理:指定heartbeat服务器作为主服务器,则另外一台将自动成为热备服务器,然后热备服务器上的配置heartbeat守护程序来监听来自主服务器的心跳,如果热备服务器在指定时间内未监听到来自主服务器的心跳,就会启动故障转移程序,并取得主服务器上的相关资源及服务的所有权,阶梯主服务器继续提供不间断服务从而达到资源及服务高可用性的目的。
  和keepalived服务器一样,heartbeat高可用是服务器级别的,不是服务级别的。
  heartbeat切换的常见条件:
  1、服务器宕机
  2、heartbeat服务本身故障
  3、心跳连接故障(心跳线坏了,网卡,驱动坏了,ip配置及冲突问题 ,心跳线间连接的设备故障(网卡鸡交换机),仲裁的机器出问题)
  服务故障不会导致切换。可以通过服务宕机 把heartbeat服务停掉
  心跳连接:
  heartbeat主机之间通信的一些常用的可行方法:
  1、串行电缆,通过交换机等网络设备连接
  2、一根以太网电缆两网卡直连(交叉线)
  3、以台网电缆,通过交换机等网络设备连接(增加交换机故障点,同时线路不是专用心跳线,容易受其他数据传输的影响。导致心跳报文发送问题)
  裂脑:
  由于两台高可用服务器之间在指定时间内,无法相互检测到对方心跳而各自启动故障转移功能,取得了资源及服务的所有权,而此时的两台高可用服务都还存活着并在正常运行,这样会导致同一个IP或者服务在两端同时启动二发生冲突的严重问题,最严重问题是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这样可能会导致服务器两端的数据不一致或造成数据丢失,为脑裂,分区集群或者大脑垂直分割
  HEARTBEAT消息类型:
  心跳消息:150字节的数据包,可能是单播,广播或多播方式控制心跳
  集群转换消息:ip-request主服务器请求接管资源ip-request-resp:得到请求后,背机回复主机信息(可以人工控制或者参数控制)
  重传请求:
  心跳控制消息都使用UDP协议发送到ha.cf文件指定的任意端口或指定的多播地址
  heartbeat是通过IP地址接管和ARP广播进行故障转移的
  ARP广播,在主服务器故障时,备用节点接管资源后,会立即强制更新所有客户端本地的ARP表(清除失败服务器的VIP和MAC地址的解析记录)
  ######测试过程看测试报告
  1、操作前准备:两台机器各加一块10G的硬盘及配置网卡IP
  主IP:em1:192.168.28.28   从IP:em1:192.168.28.29
  M:em2:172.16.0.1/25   S:172.16.0.2/25心跳IP地址(心跳网卡不要配置网关,使用直连线)
  软件版本:drbd-8.4.3.tar.gz
  黄色字体是我们需输入的,绿色字体是我们需看到的信息
  操作步骤如下:
  2、 修改主机名 (两台主机都需操作)
  [root@localhost ~]# vi /etc/hosts

  •   168.28.28  node1
  •   168.28.29  node2
  注:将如上两行添加到hosts文件
  [root@localhost ~]# vi /etc/sysconfig/network
  NETWORKING=yes
  HOSTNAME=node1    ##从机上写node2
  3、 停止IPTABLES:service iptables stop ###避免端口被阻塞,如drbd设置的端口
  4、添加心跳路由:
  主机A上:添加心跳路由/sbin/routeadd -host 172.16.0.2 dev eth2###ip为对端的IP地址(B主机)
  主机B上:添加心跳路由/sbin/route add -host 172.16.0.1dev eth2
  对端的IP地址(A主机)
  永久生效:echo '/sbin/route add -host 172.16.0.2 dev eth1'>>/etc/rc.local  对端##的IP地址(A主机)从备3机上,主一样
  route -n
  5、 MS的DRBD和HEARBEAT的配置文件一模一样
  6、 添加互信,rsa,添加主机之间的互信

  •   为新添加的磁盘sbd分区并格式化, MS都要分区,只要格式一边磁盘即可(mkfs.ext4 /dev/sdb1),
  [root@localhost ~]#fdisk /dev/sdb
  …………
  Command (m for help): n  ##输入n
  Command action
  e   extended
  p   primary partition (1-4)
  p                       ##输入P
  Partition number (1-4): 1       ##输入1
  First cylinder (1-1305, default 1):
  Using default value 1
  Last cylinder, +cylinders or +size{K,M,G}(1-1305, default 1305):
  Using default value 1305
  Command (m for help): w      ##输入w

  The partition table has been>  Calling ioctl() to re-read partition table.
  Syncing disks.
  [root@localhost ~]# ls /dev |grep sdb
  sdb
  sdb1
  [root@localhost ~]# mkfs.ext4 /dev/sdb1
  [root@localhost ~]#mkdir /data ###MS都要添加此目录
  [root@localhost ~]# mount /dev/sdb1 /data
  [root@localhost ~]# df –h          ##可以查看到已挂载上

  Filesystem           >  /dev/sda1              26G  1.2G  24G   5% /
  tmpfs                 244M     0 244M   0% /dev/shm
  /dev/sdb1             9.9G  151M 9.2G   2% /data

  •   安装
  [root@localhost ~]#yum -yinstall flexkernel-headers  ##安装后再安装kernel-devel###这里是个坑,如果直接yum –y kernel后面操作会有问题,不能这么干,需要执行yum update –y kernel 直接匹配当前的内核版本,升级后重启服务器,即可用uname –a 和/usr/src/kernels看到信息是一致的,否则必出问题。
  [root@node1 ~]# cat /proc/version ###查看内核信息
  Linux version 2.6.32-358.el6.x86_64(mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 2013
  [root@node1 ~]#cd /usr/local
  [root@node1local]# tar zxvfdrbd-8.4.3.tar.gz
  [root@node1local]# cd drbd-8.4.3
  [root@node1 drbd-8.4.3]# ./configure--prefix=/usr/local/drbd --with-km   ##--with-km是启用内核模块
  checking for gcc... no
  checking for cc... no
  checking for cl.exe... no
  configure:error: in `/usr/local/drbd-8.4.3':
  configure:error: no acceptable C compiler found in $PATH
  See `config.log' for more details
  注:如出现如上报错,执行如下安装
  [root@node1 drbd-8.4.3]# yum -y install gcc make automakeautoconf  rpm-build
  [root@node1 drbd-8.4.3]# ./configure--prefix=/usr/local/drbd --with-km
  [root@node1 drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
  注意KDIR的路径,这个内核源码路径2.6.32-358.el6.x86_64需要根据自己的系统修改
  [root@node1 drbd-8.4.3]# make install
  [root@node1 drbd-8.4.3]#  mkdir -p /usr/local/drbd/var/run/drbd
  [root@node1 drbd-8.4.3]# cp/usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/
  安装drbd模块
  [root@node1 drbd-8.4.3]# cd drbd
  [root@node1 drbd]# make clean
  rm -rf .tmp_versions Module.markersModule.symvers modules.order
  rm -f *.[oas] *.ko .*NaNd .*.d .*.tmp*.mod.c .*.flags .depend .kernel*
  rm -f compat/*.[oas] compat/.*NaNd
  [root@node1 drbd]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
  [root@node1 drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
  [root@node1 drbd]# modprobe drbd  ##加载drbd模块
  [root@node1 drbd]# lsmod|grep drbd    ##查看模块是否加载成功
  drbd                 325658  0
  libcrc32c               1246  1 drbd
  [root@node1 drbd]# cd /usr/local/drbd/etc/
  [root@node1 etc]# cat drbd.conf      ##查看drbd的主配置文件
  # You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
  include"drbd.d/global_common.conf";
  include"drbd.d/*.res";
  以上可见:主配置文件里面已经包含了全部配置文件和drbd目录下以.res结尾的文件。
  [root@node1 etc]# cd drbd.d/
  [root@node1 drbd.d]# pwd
  /usr/local/drbd/etc/drbd.d
  [root@node1 drbd.d]# ls
  global_common.conf
  [root@node1 drbd.d]# vim global_common.conf    ##修改全局配置文件
  pri-on-incon-degr
  pri-lost-after-sb
  local-io-error
  注:将文件中上面的三行前的#号去掉
  [root@node1 drbd.d]# pwd
  /usr/local/drbd/etc/drbd.d
  [root@node1 drbd.d]# vim drbd.res
  resource r1{
  onnode1 {    ##主机名
  device /dev/drbd0;
  disk /dev/sdb1;  #前面格式化磁盘分区的名字
  address 172.16.0.1:7789;  M心跳IP
  meta-disk internal;
  }
  onnode2 {
  device /dev/drbd0;
  disk /dev/sdb1;   #前面格式化磁盘分区的名字
  address 172.16.0.1:7789; #S心跳IP
  meta-disk internal;
  }
  }
  ##这里写心跳IP地址,不建议写管理IP地址,DRBD数据传输直接通过心跳,速度什么都比通过管理IP的来的快,而且还更稳定 等等。
  [root@node1 drbd.d]# drbdadm create-md r1   ##在node1上初始化资源 如果出现
  ##“no resources defined! ”的错误时,用-c指定需初始化的资源
  ##  drbdadm -c /usr/local/drbd/etc/drbd.d/drbd.res  create-md r1
  --== Thank you for participating in the global usage survey  ==--
  The server's response is:
  you are the 19713th user to install thisversion
  Writing meta data...
  md_offset 10733953024
  al_offset 10733920256
  bm_offset 10733592576
  Found ext3 filesystem
  10482380 kB data area apparently used
  10482024 kB left usable by current configuration

  Device>  would corrupt data and result in
  'access beyond end of device' errors.
  You need to either
  *use external meta data (recommended)
  * shrinkthat 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
  若出现如上错误,这是因为sdb1已经有文件系统了,已经有数据存在了,请执行如下语句,
  [root@node1 drbd.d]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100
  100+0 records in
  100+0 records out
  104857600 bytes (105 MB) copied, 0.197574 s,531 MB/s
  [root@node1 drbd.d]# drbdadm create-md r1  ###执行上面语句后再重新创建drbd设备
  Writing meta data...
  initializing activity log
  NOT initializing bitmap
  New drbd meta data block successfullycreated.
  Success
  [root@node1 drbd.d]# umount /data       ##umount/dev/sdb1设备
  [root@node1 drbd.d]# service drbd restart   ##重启drbd服务
  Stopping all DRBD resources: .
  Starting DRBD resources: [
  create res: r1
  preparedisk: r1
  adjustdisk: r1
  adjust net: r1
  ]
  .#######
  到此DRBD配置完成,若出现一端起来一段还在等待过程,说明配置有问题,若启动DRBD不能同时出现如上信息,说明配置前期工作没做好,如网络或者磁盘,MS操作基本一致
  [root@node1 drbd.d]# netstat -anput|grep 7789      ##查看监听端口,如启动防火墙,需把该端口打开
  tcp  0   0 192.168.28.28:35114    192.168.28.29:7789          ESTABLISHED -
  tcp  0   0 192.168.28.28:7789    192.168.28.29:33549         ESTABLISHED -
  [root@node1 drbd.d]# drbdadm role r1
  Secondary/Secondary
  #### ##第一次启动drbd时,两个drbd节点默认都处于Secondary状态
  由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:
  [root@node1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary all
  第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令drbdadm primary r1(r1是定义资源的角色)或者drbdadm primary all
  在选择的设置主节点的主机上执行该命令
  [root@node1 drbd.d]#  drbdadm cstate r1      ##查看资源的连接状态
  Connected
  资源的连接状态;一个资源可能有以下连接状态中的一种
  StandAlone独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况
  Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的
  Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams
  Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空
  BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空
  NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空
  ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空
  TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空
  WFConnection:等待和对等节点建立网络连接
  WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包
  Connected连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态
  StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS
  StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID
  WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS
  WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID
  WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT
  SyncSource:以本节点为同步源的同步正在进行
  SyncTarget:以本节点为同步目标的同步正在进行
  PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步
  PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步
  VerifyS:以本地节点为验证源的线上设备验证正在执行
  VerifyT:以本地节点为验证目标的线上设备验证正在执行
  [root@node1 drbd.d]# drbdadm role r1   #在主上执行,显示的是主/从。前面为当前节点
  Primary/Secondary
  [root@node2 drbd.d]# drbdadm role r1   ##在从上执行,显示的是从/主,前面为当前节点
  Secondary/Primary
  Parimary 主:资源目前为主,并且可能正在被读取或写入,如果不是双主只会出现在两个节点中的其中一个节点上
  Secondary 次:资源目前为次,正常接收对等节点的更新
  Unknown 未知:资源角色目前未知,本地的资源不会出现这种状态
  [root@node1 drbd.d]#  drbdadm dstate r1  ##查看磁盘状态
  UpToDate/UpToDate
  本地和对等节点的硬盘有可能为下列状态之一:
  Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离
  Attaching:读取无数据时候的瞬间状态
  Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘
  Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态
  Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态
  Outdated:数据资源是一致的,但是已经过时
  DUnknown:当对等节点网络连接不可用时出现这种状态
  Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated
  UpToDate:一致的最新的数据状态,这个状态为正常状态
  [root@node1 drbd.d]# cat /proc/drbd    ##查看同步进度
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by root@node1, 2014-08-2017:03:49
  0:cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
  ns:10482024 nr:0 dw:0 dr:10482688 al:0bm:640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  注: ds是磁盘状态信息
  dw是磁盘写信息
  dr是磁盘读信息
  [root@node1 drbd.d]# ls /dev |grep drbd  ##查看drbd设备
  drbd0
  [root@node1 drbd.d]# mkfs.ext4 /dev/drbd0  ##格式化文件系统(文件格式根据自己的系统环境选择是ext3,还是ext4,可以根据如下命令来判断:
  [root@node2 drbd.d]# df -Th

  Filesystem   Type   >  /dev/sda1    ext4     26G 1.5G   23G   7% /)
  mke2fs 1.41.12 (17-May-2010)
  Filesystem label=
  OS type: Linux

  Block>
  Fragment>
  Stride=0 blocks, Stripe>  655360 inodes, 2620506 blocks
  131025 blocks (5.00%) reserved for the superuser
  First data block=0
  Maximum filesystem blocks=2684354560
  80 block groups
  32768 blocks per group, 32768 fragments pergroup
  8192 inodes per group
  Superblock backups stored on blocks:
  32768, 98304, 163840, 229376, 294912,819200, 884736, 1605632
  Writing inode tables: done
  Creating journal (32768 blocks): done
  Writing superblocks and filesystemaccounting information: done
  This filesystem will be automaticallychecked every 30 mounts or
  180 days, whichever comes first.  Use tune2fs -c or -i to override.
  [root@node1 drbd.d]# mount /dev/drbd0 /data/   ##挂载DRBD资源必须把DRBD设置成MS模式才可以。
  [root@node1 drbd.d]# mkdir /data/test
  [root@node1 drbd.d]# ls /data/
  lost+found  test
  [root@node1 drbd.d]# umount /data/  ##在切换主从节点前,必须先umount
  [root@node1drbd.d]# drbdadm secondaryr1    ##将node1变成备用节点
  [root@node1 drbd.d]# drbdadm role r1 ##查看Node1的角色
  Secondary/Secondary
  [root@node2 drbd.d]# drbdadm primary r1    ##将node2变成主节点
  [root@node2 drbd.d]# drbdadm role r1    ##查看Node2的角色
  Primary/Secondary
  [root@node2 drbd.d]# cat /proc/drbd
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 buildby root@node2, 2014-08-20 18:01:37
  0: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r-----
  ns:0 nr:10779912dw:10779912 dr:664 al:0 bm:640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
  [root@node2 drbd.d]# mount /dev/drbd0 /data/
  [root@node2drbd.d]# ls /data/       ##看到数据同步进来了。
  lost+found test
  下面可以在里面写入数据,umount,从主切换成从,从上切换成主,查看数据的同步情况
  第二节:在两台主机上都安装MYSQL实例,在主的/data目录里安装mysql数据库,进行主从切换,看数据同步情况
  在主节点安装好数据库,数据目录为/data/的目录(为DRBD的挂载目录),配置文件存放在/etc/my.cnf下。备节点只要设置好basedir和my.cnf和主几点一样即可
  1、数据库安装省略,在数据库里建库,建表
  mysql> create database otdb;
  mysql> use otdb;

  mysql> create table t_players (>  mysql> show tables;
  +----------------+
  | Tables_in_otdb |
  +----------------+
  | t_players      |
  +----------------+
  1 row in set (0.00 sec)
  在数据库里添加新表t_players.
  第三节:安装HEARTBEAT
  根据系统的版本下载下应的heartbeat 的rpm包
  [root@node1 ~]# cat /etc/redhat-release

  CentOS>
DSC0000.png

  使用yum安装heartbeat
  yum--enablerepo=epel install heartbeat
  或报错:
  运行yum报错Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
  辑/etc/yum.repos.d/epel.repo,把基础的恢复,镜像的地址注释掉
  #baseurl
  mirrorlist
  改成
  baseurl
  #mirrorlist
  再次执行:
  yum --enablerepo=epel install heartbeat
  [root@node1 local]#cp/usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
  [root@node1 local]#cp/usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
  [root@node1 local]#cp/usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
  [root@node1 local]#vi /etc/ha.d/ha.cf
  debugfile /var/log/ha-debug
  logfile/var/log/ha-log
  logfacilitylocal0
  keepalive 2
  deadtime 30
  warntime 10
  initdead     120
  udpport 694
  mcast eth1 255.0.0.181 694 1 0 ##心跳广播方式,
  这里需要特别说明的是,我在这里遇到两个问题,
  1) ha.cf里面的心跳信息传播方式如果选择ucast会有如下报错导致服务启动不 了,在网上查资料说是内核得升级才能解决问题:
  Mar 17 14:34:59 node3.xxx.com heartbeat: [24573]: ERROR: glib: ucast:error setting option SO_REUSEPORT(w): Protocol not available
  Mar 17 14:34:59 node3.xxx.com heartbeat: [24573]: ERROR:make_io_childpair: cannot open ucast eth0
  2) 在启动heartbeat服务之前,我没有启动drbd服务,导致下面的错误产生:
  ResourceManager(default)[28960]: 2014/03/17_14:49:47 ERROR: Return code 1from /etc/ha.d/resource.d/drbddisk
  碰到如此问题,可以改变检测方式
  Bcast eth0检测
  #使用DRBD,一般都要置为OFF
  auto_failback off
  #PING 网关,不建议PING对端的管理ip或者心跳IP地址,可以开启PING-GROUP1设置多个IP地址,避免单一网络线路检测
  ping192.168.28.254
  node node1
  node node2
  [root@node1 local]#vi /etc/ha.d/authkeys
  auth 1
  1crc
  [root@node1 local]#ll /etc/ha.d/authkeys
  -rw-r--r-- 1 root root 647 Aug 27 17:27 /etc/ha.d/authkeys
  [root@node1 local]# chmod 600/etc/ha.d/authkeys
  禁止随机启动,防止他起在DRBD前面,而要加载/etc/rc.local里面
  [root@node1 local]#chkconfig heartbeat off  (#chkconfig - - list | grep heart 查看)
  [root@node1 local]# chkconfig --list |grep heart
  heartbeat       0:off  1:off   2:off   3:off  4:off   5:off   6:off
  [root@node1 local]# vi /etc/rc.local
  service heartbeat start
  [root@node1 data]#vim/etc/ha.d/haresources  #在节点1上添加如下行
  Node1IPaddr::192.168.28.208/24/eth0:0 drbddisk::r1Filesystem::/dev/drbd0::/data::ext4 mysql
  [root@node2 data]#vim/etc/ha.d/haresources  #在节点2上添加如下行
  Node1IPaddr::192.168.28.208/24/eth0:0 drbddisk::r1Filesystem::/dev/drbd0::/data::ext4 mysql
  上面资源组中的各项含义如下:
  Node1 指当前primary节点名。192.168.28.208 指让heartbeat帮你管理一个server ip,会跟着主节点一起漂移。Drbddisk告诉heartbeat要管理drdb的资源,在这里是r1。Filesystem指告诉heartbeat需要管理文件系统资源,实际上就是执行mount/umount的命令,后面跟的是设备名和mount的目录。Mysql指告诉需要管理mysql
  IPaddr::192.168.28.208/24/eth0:0 设置虚拟IP,
  drbddisk::r1 告诉heartbeat要管理DRBD的资源r1
  Filesystem::/dev/drbd0::/data::ext4 设定需要挂载的DRBD设备采用的文件系统,即执行mount与umount操作
  Mysql 设定要随heartbeat启动的服务
  [root@node1 ~]# service heartbeat start   #DRBD先启动,在主机子上启动heartbeat,再在从机子上启动
  故障解决:
  Heartbeat正常启动,但是日志发现cannot locate resource script ***,进入heartbeat配置文件目录/etc/ha.d/resource.d,查看下是否存在***脚本文件;若不存在,需要建立该脚本文件。一般在相关服务安装后,在系统中会生成相关的脚本文件,可以find命令找到***的脚本文,cp或者ln到/etc/ha.d/resource.d 下即可。注意mysql脚本中用的是my.cnf文件,我们将我们的数据库配置文件设成my.cnf, 这样就不用做任何myql脚本的改动。
  /etc/rc.d/init.d/mysql
  /etc/ha.d/resource.d/drbddisk
  脚本在后面附上
  Heartbeat启动正常后,我们可以看到mysql启动,虚拟IP在主的机子上。
  [root@node1 ~]#ifdown eth0  #在主的机子上断网卡eth0,看VIP漂移到从机子上不
  [root@node2 data]# ip a    ##大致30秒内,看到VIP在从机上,而且MYSQL启动了
  [root@node2 data]# cat /proc/drbd  ##这时会看到两节点的连接状态不一样。称为脑裂
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by root@node2, 2014-08-2018:01:37
  0:cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----
  ns:120 nr:1724 dw:2672 dr:18276 al:10 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:596
  以下是处理方法:
  在现有的从节点上执行:
  [root@node1 ~]# service heartbeat stop   ###也可以不执行
  [root@node1 ~]# drbdadm -- --discard-my-dataconnect r1
  在现在的主节点上执行:
  [root@node2 data]# drbdadm disconnect r1
  r1: Failure: (162) Invalid configurationrequest
  additional info from kernel:
  unknown connection
  Command 'drbdsetup disconnectipv4:192.168.28.29:7789 ipv4:192.168.28.28:7789' terminated with exit code 10
  [root@node2 data]# drbdadm connect r1
  [root@node2 data]# drbdadm primary r1
  [root@node2 data]# cat /proc/drbd
  version: 8.4.3 (api:1/proto:86-101)
  GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by root@node2, 2014-08-2018:01:37
  0:cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDateC r-----
  ns:696 nr:0 dw:2672 dr:18972 al:10 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:0
  在从节点上执行:
  [root@node1 ~]# service heartbeat start
  ###若裂脑出现一个状态是uptodate/dunknow主要是是因为drbd/heartbeat设置自启动的缘故,所以要设置chkconfig drbdoff/heartbeat
  解决脑裂:
  在Slave节点:
  #drbdadm disconnect r2
  #drbdadm -- --discard-my-dataconnect r2
  在主节点操作,连接下即可:
  #drbdadm connect r2
  ###heartbeat的配置文件MS都要一致即可
  检测DRBD+MYSQL+HEARTBEAT架构在数据库停止是否能够自动切换(需要MYSQL检测脚本msyqlmon.sh)
  ##脚本的配置的连接的用户名和密码一定要成TCP/IP方式连接,否则在线上必出问题,此脚本只要在主库后台执行即可。从库可存放一个
  当在运行时候 停止数据库,查看是否会切换到备库上。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-611747-1-1.html 上篇帖子: mysql驱动设置 下篇帖子: mysql 远程连接超时解决办法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表