koflover 发表于 2018-10-2 11:07:05

构建DRBD模型的MySQL高可用(HA)集群

  一、DRBD
  在架构MySQL高可用集群之前,有必要先介绍一下什么是DRBD,以及DRBD的原理和其工作方式
  1、什么是DRBD
  DRBD (Distributed Replicated Block Device,分布式复制块设备)是由内核模块和相关脚本而构成,用以构建高可用性的集群。其实现方式是通过网络来镜像整个设备,是一个跨主机的镜像,所以可以把DRBD理解为是一种网络RAID1。
  2、DRBD原理
  每个设备(drbd 提供了不止一个设备)都有一个状态,可能是‘主’状态,也可能是‘从’状态。但是在使用时,主从一定不要同时挂载使用。因为,对于任何一个客户机挂载一个块级别设备以后,它们对于数据和元数据管理是在内存中实现的,然后定期存储到硬盘上去;二者的挂载操作都在内存中进行,所以是看不到对方的操作的。在这种情况下,就会发生资源争用,导致文件系统崩溃。
  既然这样,每当一个节点挂了的话,启不是还要手动去提升另一个节点为主节点?所以,要想实现同时挂载使用,就只能在集群的高可用模型下使用,因为集群支持分布式文件锁,当A节点持有锁时,可以通知给B节点,这也就意味着他们要依靠高可用集群的信息层才可以做双主,这也正是今天要使用的方式。在主节点上,应用程序应能运行和访问drbd设备(/dev/drbd*)。每次写入都会发往本地磁盘设备和从节点设备中。从节点只能简单地把数据写入它的磁盘设备上。 读取数据通常在本地进行。 如果主节点发生故障,心跳(heartbeat或corosync)将会把从节点转换到主状态,并启动其上的应用程序。
  3、DRBD的复制模式

  (1)异步(协议A)
  只需发给本地的TCP/IP协议栈,并发送到本地发送队列,准备发送,即返回
  (2)半同步(协议B)
  发送到对方的TCP/IP协议栈并返回
  (3)同步(协议C)
  复制写到对方磁盘才返回
  二、环境准备(两台做同样操作,只在node1上演示)
  1、操作系统及主机
  CentOS 6.5 x86_64平台
  node1.shuishui.com    172.16.7.100
  node2.shuishui.com    172.16.7.200
  2、修改两台主机的主机名,保证主机名与uname -n的显示结果一至
# uname -n  
node1.shuishui.com
  3、配置节点互相解析
# vim /etc/hosts  
172.16.7.100 node1.shuishui.com node1
  
172.16.7.200 node2.shuishui.com node2
  4、时间同步
# ntpdate 172.16.0.1  5、配置SSH双机互信
# ssh-keygen -t rsa -P ''  
# ssh-copy-id -i .ssh/id_rsa.pub root@node2
  6、所需软件
corosync      #直接yum安装  
pacemaker   #直接yum安装
  
crmsh-1.2.6-4.el6.x86_64.rpm             #pacemaker的配置接口
  
pssh-2.3.1-2.el6.x86_64.rpm            #crmsh的依赖包
  
mariadb-10.0.10-linux-x86_64.tar.gz      #二进制格式MariaDB
  
drbd-8.4.3-33.el6.x86_64.rpm      #drbd管理工具
  
drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm   #drbd内核模块
  7、硬盘准备
  为了配置DRBD,在node1和node2上各准备一块大小相同的硬盘/dev/sdb。如果你的/dev/sda有足够空间,创建分区就可以
  三、配置corosync
  1、安装软件包
  我把上面第6步所需要的软件都放到了/root下,所以直接yum一下安装
# yum -y install corosync  
# yum -y install pacemaker
  
# yum -y install *.rpm
  drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。
  目前适用CentOS 5的drbd版本主要有8.0、8.2、8.3三个版本,其对应的rpm包的名字分别为drbd, drbd82和drbd83,对应的内核模块的名字分别为kmod-drbd, kmod-drbd82和kmod-drbd83。而适用于CentOS 6的版本为8.4,其对应的rpm包为drbd和drbd-kmdl,但在实际选用时,要切记两点:drbd和drbd-kmdl的版本要对应;另一个是drbd-kmdl的版本要与当前系统的内容版本相对应。各版本的功能和配置等略有差异;我们实验所用的平台为x86_64且系统为CentOS 6.5,因此需要同时安装内核模块和管理工具。我们这里选用最新的8.4的版本(drbd-8.4.3-33.el6.x86_64.rpm和drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm),下载地址为ftp://rpmfind.net/linux/atrpms/
  2、配置corosync
# cd /etc/corosync/  
# cp corosync.conf.example corosync.conf
  (1)修改corosync的配置文件,增加service段和aisexec段
compatibility: whitetank  
totem {
  version: 2
  secauth: off      #安全认证
  threads: 0
  interface {
  ringnumber: 0
  bindnetaddr: 172.16.7.0      #绑定网络地址
  mcastaddr: 230.100.100.7       #心跳信息传递的组播地址
  mcastport: 5405                #多播端口
  ttl: 1
  }
  
}
  
logging {
  fileline: off
  to_stderr: no
  to_logfile: yes            #是否写入日志文件
  to_syslog: no
  logfile: /var/log/cluster/corosync.log    #cluster这个目录如果没有的话,需手动创建
  debug: off
  timestamp: on
  logger_subsys {
  subsys: AMF
  debug: off
  }
  
}
  
amf {
  mode: disabled
  
}
  
service {
  ver:0
  name:pacemaker            #定义corosync在启动时自动启动pacemaker
  
}
  
aisexec {                         #表示启动corosync的ais功能,以哪个用户的身份运行
  user:root
  group:root
  
}
  (2)生成密钥文件
  对于corosync而言,各节点之间通信需要安全认证,所以需要安全密钥,生成后会自动保存至当前目录下,命名为authkey,权限为400。我在《corosync+pacemaker实现web集群高可用》:http://nmshuishui.blog.51cto.com/1850554/1399811 这篇博文中使用的是随机数方法生成密钥,有时它熵池中的随机数不够用,所以生成速度会相当慢,所以今天这里就不使用随机数生成了,而是使用伪随机数生成,但是这种方法不安全,请慎用
# mv /dev/random /dev/h  
# ln /dev/urandom /dev/random
  
# corosync-keygen
  
# rm /dev/random
  
# mv /dev/h /dev/random
  (3)将corosync.conf和生成的authkey传到node2上
# scp -p authkey corosync.conf node2:/etc/corosync/  3、启动corosync并检查配置
  请参考这里:《corosync+pacemaker实现web集群高可用》:http://nmshuishui.blog.51cto.com/1850554/1399811
# service corosync start  
Starting Corosync Cluster Engine (corosync):               
  
# ssh node2 "service corosync start"
  
Starting Corosync Cluster Engine (corosync):
  4、查看集群状态
# crm status  
Last updated: Wed Apr 23 14:44:11 2014
  
Last change: Wed Apr 23 14:44:07 2014 via crmd on node1.shuishui.com

  
Stack:>  
Current DC: node1.shuishui.com - partition with quorum
  
Version: 1.1.10-14.el6-368c726
  
2 Nodes configured, 2 expected votes
  
0 Resources configured
  
Online: [ node1.shuishui.com node2.shuishui.com ]#node1,node2都在线
  四、配置DRBD
  1、配置/etc/drbd.d/global-common.conf
global {  usage-count no;    #是否让linbit公司收集目前drbd的使用情况
  # minor-count dialog-refresh disable-ip-verification
  
}
  
common {
  protocol C;
  handlers {
  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;
  }
  startup {
  #wfc-timeout 120;
  #degr-wfc-timeout 120;
  }
  disk {
  on-io-error detach;          # 同步错误的做法是分离
  #fencing resource-only;
  }
  net {
  cram-hmac-alg "sha1";         #加密算法为sha1
  shared-secret "mydrbdlab";    #加密key
  }
  syncer {
  rate 500M;                  #同步速率
  }
  
}
  2、定义一个资源
# vim mariadb.res  
resource mariadb {
  on node1.shuishui.com {
  device/dev/drbd0;
  disk    /dev/sdb;
  address 172.16.7.100:7789;
  meta-disk internal;
  }
  on node2.shuishui.com {
  device/dev/drbd0;
  disk    /dev/sdb;
  address 172.16.7.200:7789;
  meta-disk internal;
  }
  
}
  
~
  3、同步配置文件到node2
  第2步中的资源文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点
# scp /etc/drbd.d/* node2:/etc/drbd.d/  4、在两个节点上初始化已定义的资源并启动服务(只在node1上演示)
  (1)初始化资源(两个节点都需执行)
# drbdadm create-md mariadb  这一步会出现如下报错,不需理会,直接忽略
Writing meta data...  
initializing activity log
  
NOT initializing bitmap
  
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
  
New drbd meta data block successfully created.
  
lk_bdev_save(/var/lib/drbd/drbd-minor-0.lkbd) failed: No such file or directory
  (2)启动服务(两个节点都需执行)
# service drbd start  (3)查看启动状态
# cat /proc/drbd  
version: 8.4.3 (api:1/proto:86-101)
  
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00
  0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C 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:20970844
  也可以使用drbd-overview命令来查看
# drbd-overview  0:mariadb/0Connected Secondary/Secondary Inconsistent/Inconsistent C r-----
  从上面的信息中可以看出此时两个节点均牌Secondary状态,因此需要将一个节点设为Primary
  (4)设置node1为主节点
# drbdadm primary --force mariadb  此时再来使用drbd-overview命令来查看状态,可以发现数据同步过程已经开始
# drbd-overview  0:mariadb/0SyncSource Primary/Secondary UpToDate/Inconsistent C r---n-
  [================>...] sync'ed: 88.8% (2304/20476)M
  (5)等待数据同步完成再次查看状态
# drbd-overview  0:mariadb/0Connected Primary/Secondary UpToDate/UpToDate C r-----
  此时可以发现节点已经成实时状态,且节点已经有了主次
  5、创建文件系统
  文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:
# mke2fs -j -L DRBD /dev/drbd0  
# mkdir /mnt/drbd
  
# mount /dev/drbd0 /mnt/drbd/
  
# ls /mnt/drbd/
  
lost+found                     #挂载成功
  6、切换Primary和Secondary节点
  对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能将原来的Secondary节点设置为Primary:
  (1)在切换前,我们先往/mnt/drbd中拷个文件
# cp /etc/fstab .  
# ls
  
fstablost+found
  (2)降级node1
  再降级时一定要先卸载再降级
# umount /mnt/drbd/             #先卸载  
# drbdadm secondary mariadb   #再降级
  
# drbd-overview               #降级成功
  0:mariadb/0Connected Secondary/Secondary UpToDate/UpToDate C r-----
  (3)提升node2
# drbdadm primary mariadb    #提升node2  
# drbd-overview            #node2已经成为主节点
  0:mariadb/0Connected Primary/Secondary UpToDate/UpToDate C r-----
  
# mkdir /mnt/drbd            #创建目录并挂载
  
# mount /dev/drbd0 /mnt/drbd
  (4)查看此前在主节点上复制到此设备的文件是否存在
# ls /mnt/drbd  
fstablost+found            #确实存在,没有问题
  到此,DRBD配置结束
  五、MySQL配置安装说明
   这里为什么要详细讲解MySQL的配置安装呢?因为你的MySQL的数据目录需要安装在DRBD中;我在实验的过程中就是忘了挂载DRBD,而把数据目录没能安装在DRBD中,造成了不小的麻烦,所以还是要再介绍一下子!
  1、创建mysql用户mysql组(node1和node2都操作)
# groupadd -g 306 mysql  
# useradd -u 306 -g mysql -s /sbin/nologin -M mysql
  2、解压mysql(node1和node2都操作)
# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/  
# cd /usr/local/
  
# ln -sv mariadb-10.0.10-linux-x86_64/ mysql
  
`mysql' -> `mariadb-10.0.10-linux-x86_64/'
  
# chown -R mysql.mysql mysql/*
  3、将node1的DRBD设置为主节点并挂载
# drbd-overview  0:web/0Connected Primary/Secondary UpToDate/UpToDate C r-----
  
# mkdir /mydata
  
# mount /dev/drbd0 /mydata/
  
# cd /mydata/
  
# mkdir data
  
# chown -Rmysql.mysql /mydata/data/
  
# mkdir binlogs
  
# chown -R mysql.mysql binlogs/
  
# ll
  
total 24
  
drwxr-xr-x 2 mysql mysql4096 Apr 23 21:37 binlogs
  
drwxr-xr-x 2 mysql mysql4096 Apr 23 21:37 data
  
drwx------ 2 rootroot16384 Apr 23 16:26 lost+found
  4、提供mysql配置文件
# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf  
# vim /etc/my.cnf
  
#增加下面这一行
  
datadir = /mydata/data
  
#修改二进制日志路径
  
log-bin=/mydata/binlogs/master-bin
  5、初始化mysql
# /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/usr/local/mysql --user=mysql  6、提供服务脚本
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld  7、启动并测试mysql
# service mysqld start  
Starting MySQL. SUCCESS!
  
# /usr/local/mysql/bin/mysql
  
Welcome to the MariaDB monitor.Commands end with ; or \g.

  
Your MariaDB connection>  
Server version: 10.0.10-MariaDB-log MariaDB Server
  
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
MariaDB [(none)]> show databases;
  
+--------------------+
  
| Database         |
  
+--------------------+
  
| information_schema |
  
| mysql            |
  
| performance_schema |
  
| test               |
  
+--------------------+
  8、将配置好的配置文件和脚本复制到node2上
# scp /etc/my.cnf node2:/etc/  
my.cnf                                                100% 4940   4.8KB/s   00:00
  
# scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d/
  
mysqld                                                100%   11KB11.4KB/s   00:00
  9、关闭mysql并设置为开机不启动
# service mysqld stop  
Shutting down MySQL. SUCCESS!
  
# chkconfig mysqld off
  10、设置node2为主节点,并挂载测试
# umount /mydata/  
# drbdadm secondary mariadb
  
# drbd-overview
  0:mariadb/0Connected Secondary/Secondary UpToDate/UpToDate C r-----
  
======================================================================
  
# drbdadm primary mariadb
  
# drbd-overview
  0:mariadb/0Connected Primary/Secondary UpToDate/UpToDate C r-----
  
# mkdir /mydata/
  
# mount /dev/drbd0 /mydata/
  
# ll /mydata/
  
total 24
  
drwxr-xr-x 2 mysql mysql4096 Apr 23 21:46 binlogs
  
drwxr-xr-x 5 mysql mysql4096 Apr 23 21:46 data
  
drwx------ 2 rootroot16384 Apr 23 16:26 lost+found
  11、启动并测试node2上的mysql
# service mysqld start  
Starting MySQL.. SUCCESS!
  
# /usr/local/mysql/bin/mysql
  
Welcome to the MariaDB monitor.Commands end with ; or \g.
  
Your MariaDB connection>  
Server version: 10.0.10-MariaDB-log MariaDB Server
  
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
MariaDB [(none)]> show databases;
  
+--------------------+
  
| Database         |
  
+--------------------+
  
| information_schema |
  
| mysql            |
  
| performance_schema |
  
| test               |
  
+--------------------+
  
4 rows in set (0.01 sec)
  12、关闭node2上的mysql并设置为开机不启动
# service mysqld stop  
Shutting down MySQL. SUCCESS!
  
# chkconfig mysqld off
  六、配置高可用集群资源
  1、停止DRBD服务并设置为开机不启动,将由CRM管理
# service drbd stop  
# chkconfig drbd off
  
# ssh node2 "service drbd stop"
  
# ssh node2 "chkconfig drbd off"
  2、定义全局属性,设置没有法定票数的行为和禁用stonith
  至于为什么这样做,详细说明在我的上一篇高可用博文里
# crm  
crm(live)# configure
  
crm(live)configure# property stonith-enabled=false
  
crm(live)configure# property no-quorum-policy=ignore
  
crm(live)configure# verify
  
crm(live)configure# commit
  3、配置drbd为集群资源
  (1)查看drbd的provider
  提供drbd的RA目前由OCF归类为linbit,其路径为/usr/lib/ocf/resource.d/linbit/drbd,可以使用下面命令查看RA及RAmeta信息
crm(live)ra#>
lsb
  
ocf / heartbeat linbit pacemaker
  
service
  
stonith
  
crm(live)ra# list ocf linbit
  
drbd
  (2)配置drdb资源
  drbd需要同时运行在两个节点上,但只能有一个节点(primary/secondary模型)是Master,而另一个节点为Slave;因此,它是一种比较特殊的集群资源,其资源类型为多态(Multi-state)clone类型,即主机节点有Master和Slave之分,且要求服务刚启动时两个节点都处于slave状态。
crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mariadb op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s op start timeout=240s interval=0 op stop timeout=100s interval=0  
crm(live)configure#
  
crm(live)configure# master MS_mysqldrbd mysqldrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
  
crm(live)configure#
  
crm(live)configure# show mysqldrbd
  
primitive mysqldrbd ocf:linbit:drbd \
  params drbd_resource="mariadb" \
  op monitor role="Master" interval="50s" timeout="30s" \
  op monitor role="Slave" interval="60s" timeout="30s" \
  op start timeout="240s" interval="0" \
  op stop timeout="100s" interval="0"
  
crm(live)configure# show MS_mysqldrbd
  
ms MS_mysqldrbd mysqldrbd \
  meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
  
crm(live)configure# verify
  
crm(live)configure# commit
  查看当前集群的运行状态
# crm status  
Last updated: Wed Apr 23 18:20:46 2014
  
Last change: Wed Apr 23 18:15:38 2014 via cibadmin on node1.shuishui.com

  
Stack:>  
Current DC: node1.shuishui.com - partition with quorum
  
Version: 1.1.10-14.el6-368c726
  
2 Nodes configured, 2 expected votes
  
2 Resources configured
  
Online: [ node1.shuishui.com node2.shuishui.com ]
  Master/Slave Set: MS_mysqldrbd
  Masters: [ node1.shuishui.com ]
  Slaves: [ node2.shuishui.com ]
  从上面的信息可以看出,此时的drbd服务的Primary节点在node1.shuishui.com上,Secondary节点为node2.shuishui.com。当然,也可以在node2上使用如下命令验证当前主机是否已经成为mariadb资源的Slave节点
drbdadm role mariadb  4、配置文件系统资源
  为Primary节点上的mariadb资源创建自动挂载的集群服务:
  MS_mysqldrbd的Master节点即为drbd服务mariadb资源的Primary节点,此节点的设备/dev/drbd0可以挂载使用,且在某集群服务的应用当中也需要能够实现自动挂载。假设我们这里的mariadb资源是为mysql服务器集群提供数据目录的共享文件系统,其需要挂载至/mydata(此目录需要在两个节点都已经建立完成)目录。
  此外,此自动挂载的集群资源需要运行于drbd服务的Master节点上,并且只能在drbd服务将某节点设置为Primary以后方可启动。因此,还需要为这两个资源建立排列约束和顺序约束。
crm(live)configure# primitive mysqlstore ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mydata" fstype="ext4" op monitor interval=40s timeout=40s op start timeout=60s interval=0 op stop timeout=60s interval=0  
crm(live)configure#
  
crm(live)configure# verify
  
crm(live)configure# colocation mysqlstore_with_MS_mysqldrbd inf: mysqlstore MS_mysqldrbd:Master               #排列约束:drbd要与主节点永远在一起
  
crm(live)configure# order mysqlstore_after_MS_mysqldrbd mandatory: MS_mysqldrbd:promote mysqlstore:start      #drbd先提升,再挂载
  
crm(live)configure# verify
  
crm(live)configure# commit
  查看此刻集群中资源的运行状态
# crm status  
======================================================
  
Last updated: Wed Apr 23 19:07:27 2014
  
Last change: Wed Apr 23 18:55:52 2014 via cibadmin on node1.shuishui.com

  
Stack:>  
Current DC: node1.shuishui.com - partition with quorum
  
Version: 1.1.10-14.el6-368c726
  
2 Nodes configured, 2 expected votes
  
3 Resources configured
  
=======================================================
  
Online: [ node1.shuishui.com node2.shuishui.com ]
  
-------------------------------------------------------
  Master/Slave Set: MS_mysqldrbd
  Masters: [ node1.shuishui.com ]
  Slaves: [ node2.shuishui.com ]
  mysqlstore (ocf::heartbeat:Filesystem):    Started node1.shuishui.com
  5、配置mysql资源
crm(live)configure# primitive mysqld lsb:mysqld op monitor interval=20s timeout=20s on-fail=restart  
crm(live)configure#
  
crm(live)configure# colocation mysqld_with_mysqlstore inf: mysqld mysqlstore
  
crm(live)configure#
  
crm(live)configure# verify
  
crm(live)configure#
  
crm(live)configure# order mysqlstore_before_mysqld inf: mysqlstore:start mysqld:start
  
crm(live)configure#
  
crm(live)configure# verify
  
crm(live)configure#
  
crm(live)configure# commit
  查看此刻集群中资源的运行状态
# crm status  
========================================================
  
Last updated: Wed Apr 23 22:10:46 2014
  
Last change: Wed Apr 23 20:52:58 2014 via cibadmin on node1.shuishui.com

  
Stack:>  
Current DC: node1.shuishui.com - partition with quorum
  
Version: 1.1.10-14.el6-368c726
  
2 Nodes configured, 2 expected votes
  
4 Resources configured
  
========================================================
  
Online: [ node1.shuishui.com node2.shuishui.com ]
  Master/Slave Set: MS_mysqldrbd
  Masters: [ node1.shuishui.com ]
  Slaves: [ node2.shuishui.com ]
  mysqlstore (ocf::heartbeat:Filesystem):    Started node1.shuishui.com
  mysqld (lsb:mysqld):   Started node1.shuishui.com
  测试mysql是否可以正常登录
# /usr/local/mysql/bin/mysql  
Welcome to the MariaDB monitor.Commands end with ; or \g.

  
Your MariaDB connection>  
Server version: 10.0.10-MariaDB-log MariaDB Server
  
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
MariaDB [(none)]> show databases;
  
+--------------------+
  
| Database         |
  
+--------------------+
  
| information_schema |
  
| mysql            |
  
| performance_schema |
  
| test               |
  
+--------------------+
  6、配置VIP资源
crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=172.16.7.1 cidr_netmask=16 op monitor interval=20s timeout=20s on-fail=restart  
crm(live)configure#
  
crm(live)configure# colocation vip_with_mysqld inf: vip mysqld
  
crm(live)configure#
  
crm(live)configure# order vip_before_mysqld inf: vip mysqld
  
crm(live)configure#
  
crm(live)configure# verify
  
crm(live)configure# commit
  查看此刻集群中的资源运行状态
# crm status  
=======================================================
  
Last updated: Wed Apr 23 22:33:13 2014
  
Last change: Wed Apr 23 22:31:13 2014 via cibadmin on node1.shuishui.com

  
Stack:>  
Current DC: node1.shuishui.com - partition with quorum
  
Version: 1.1.10-14.el6-368c726
  
2 Nodes configured, 2 expected votes
  
5 Resources configured
  
=======================================================
  
Online: [ node1.shuishui.com node2.shuishui.com ]
  Master/Slave Set: MS_mysqldrbd
  Masters: [ node1.shuishui.com ]
  Slaves: [ node2.shuishui.com ]
  mysqlstore (ocf::heartbeat:Filesystem):    Started node1.shuishui.com
  mysqld (lsb:mysqld):   Started node1.shuishui.com
  vip    (ocf::heartbeat:IPaddr):    Started node1.shuishui.com
  7、最后再显示一下所有的配置结果
node node1.shuishui.com  
node node2.shuishui.com
  
primitive mysqld lsb:mysqld \
  op monitor interval="20s" timeout="20s" on-fail="restart"
  
primitive mysqldrbd ocf:linbit:drbd \
  params drbd_resource="mariadb" \
  op monitor role="Master" interval="50s" timeout="30s" \
  op monitor role="Slave" interval="60s" timeout="30s" \
  op start timeout="240s" interval="0" \
  op stop timeout="100s" interval="0"
  
primitive mysqlstore ocf:heartbeat:Filesystem \
  params device="/dev/drbd0" directory="/mydata" fstype="ext4" \
  op monitor interval="40s" timeout="40s" \
  op start timeout="60s" interval="0" \
  op stop timeout="60s" interval="0"
  
primitive vip ocf:heartbeat:IPaddr \
  params ip="172.16.7.1" cidr_netmask="16" \
  op monitor interval="20s" timeout="20s" on-fail="restart"
  
ms MS_mysqldrbd mysqldrbd \
  meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
  
colocation mysqld_with_mysqlstore inf: mysqld mysqlstore
  
colocation mysqlstore_with_MS_mysqldrbd inf: mysqlstore MS_mysqldrbd:Master
  
colocation vip_with_mysqld inf: vip mysqld
  
order mysqlstore_after_MS_mysqldrbd inf: MS_mysqldrbd:promote mysqlstore:start
  
order mysqlstore_before_mysqld inf: mysqlstore:start mysqld:start
  
order vip_before_mysqld inf: vip mysqld
  
property $id="cib-bootstrap-options" \
  dc-version="1.1.10-14.el6-368c726" \
  cluster-infrastructure="classic openais (with plugin)" \
  expected-quorum-votes="2" \
  stonith-enabled="false" \
  no-quorum-policy="ignore"
  七、测试mysql高可用集群
  1、授权可远程登录的网段及用户
MariaDB [(none)]>
  
MariaDB [(none)]> grant all on *.* to 'test'@'172.16.%.%'>  
Query OK, 0 rows affected (0.00 sec)
  
MariaDB [(none)]> flush privileges;
  
Query OK, 0 rows affected (0.00 sec)
  2、远程客户端测试
  使用虚拟IP:172.16.7.1远程登录mysql服务器,客户端IP是:172.16.7.10
# mysql -u test -h 172.16.7.1 -p  
Enter password:
  
Welcome to the MariaDB monitor.Commands end with ; or \g.

  
Your MariaDB connection>  
Server version: 10.0.10-MariaDB-log MariaDB Server
  
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
MariaDB [(none)]> show databases;
  
+--------------------+
  
| Database         |
  
+--------------------+
  
| information_schema |
  
| mysql            |
  
| performance_schema |
  
| test               |
  
+--------------------+
  
4 rows in set (0.00 sec)
  3、故障模拟
# crm node standby  
# crm status
  
Last updated: Wed Apr 23 22:51:10 2014
  
Last change: Wed Apr 23 22:51:02 2014 via crm_attribute on node1.shuishui.com

  
Stack:>  
Current DC: node1.shuishui.com - partition with quorum
  
Version: 1.1.10-14.el6-368c726
  
2 Nodes configured, 2 expected votes
  
5 Resources configured
  
Node node1.shuishui.com: standby
  
Online: [ node2.shuishui.com ]
  Master/Slave Set: MS_mysqldrbd
  Masters: [ node2.shuishui.com ]          #node2已经自动切换为Master且所有资源已切换到node2上
  Stopped: [ node1.shuishui.com ]
  mysqlstore (ocf::heartbeat:Filesystem):    Started node2.shuishui.com
  mysqld (lsb:mysqld):   Started node2.shuishui.com
  vip    (ocf::heartbeat:IPaddr):    Started node2.shuishui.com
  4、再次在远程客户端登录VIP:172.16.7.1
# mysql -u test -h 172.16.7.1 -p  
Enter password:
  
Welcome to the MariaDB monitor.Commands end with ; or \g.

  
Your MariaDB connection>  
Server version: 10.0.10-MariaDB-log MariaDB Server
  
Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
MariaDB [(none)]> show databases;
  
+--------------------+
  
| Database         |
  
+--------------------+
  
| information_schema |
  
| mysql            |
  
| performance_schema |
  
| test               |
  
+--------------------+
  
4 rows in set (0.05 sec)
  远程客户端访问mysql服务器毫无压力,根本意识不到节点已经自动切换到node2上。
  搭建基于DRBD模型的MySQL高可用(HA)集群获得完美成功!


页: [1]
查看完整版本: 构建DRBD模型的MySQL高可用(HA)集群