您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
构建DRBD模型的MySQL高可用(HA)集群
 
火龙果软件    发布于 2014-06-10
 

一、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的显示结果一至

[root@node1 ~]# uname -n
node1.shuishui.com

3、配置节点互相解析

[root@node1 ~]# vim /etc/hosts
172.16.7.100 node1.shuishui.com node1
172.16.7.200 node2.shuishui.com node2

4、时间同步

[root@node1 ~]# ntpdate 172.16.0.1

5、配置SSH双机互信

[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# 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一下安装

[root@node1 ~]# yum -y install corosync
[root@node1 ~]# yum -y install pacemaker
[root@node1 ~]# 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

[root@node1 ~]# cd /etc/corosync/
[root@node1 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 这篇博文中使用的是随机数方法生成密钥,有时它熵池中的随机数不够用,所以生成速度会相当慢,所以今天这里就不使用随机数生成了,而是使用伪随机数生成,但是这种方法不安全,请慎用

[root@node1 corosync]# mv /dev/random /dev/h
[root@node1 corosync]# ln /dev/urandom /dev/random
[root@node1 corosync]# corosync-keygen
[root@node1 corosync]# rm /dev/random
[root@node1 corosync]# mv /dev/h /dev/random

(3)将corosync.conf和生成的authkey传到node2上

[root@node1 corosync]# scp -p authkey corosync.conf node2:/etc/corosync/

3、启动corosync并检查配置

请参考这里:《corosync+pacemaker实现web集群高可用》:http://nmshuishui.blog.51cto.com/1850554/1399811

[root@node1 ~]# service corosync start
Starting Corosync Cluster Engine (corosync): [ OK ]
[root@node1 ~]# ssh node2 "service corosync start"
Starting Corosync Cluster Engine (corosync): [ OK ]

4、查看集群状态

[root@node1 ~]# 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: classic openais (with plugin)
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、定义一个资源

[root@node1 drbd.d]# 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将刚才配置的文件全部同步至另外一个节点

[root@node1 drbd.d]# scp /etc/drbd.d/* node2:/etc/drbd.d/

4、在两个节点上初始化已定义的资源并启动服务(只在node1上演示)

(1)初始化资源(两个节点都需执行)

[root@node1 ~]# 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)启动服务(两个节点都需执行)

[root@node1 ~]# service drbd start

(3)查看启动状态

[root@node1 ~]# 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命令来查看

[root@node1 ~]# drbd-overview
0:mariadb/0 Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

从上面的信息中可以看出此时两个节点均牌Secondary状态,因此需要将一个节点设为Primary

(4)设置node1为主节点

[root@node1 ~]# drbdadm primary --force mariadb

此时再来使用drbd-overview命令来查看状态,可以发现数据同步过程已经开始

[root@node1 ~]# drbd-overview
0:mariadb/0 SyncSource Primary/Secondary UpToDate/Inconsistent C r---n-
[================>...] sync'ed: 88.8% (2304/20476)M

5)等待数据同步完成再次查看状态

[root@node1 ~]# drbd-overview
0:mariadb/0 Connected Primary/Secondary UpToDate/UpToDate C r-----

此时可以发现节点已经成实时状态,且节点已经有了主次

5、创建文件系统

文件系统的挂载只能在Primary节点进行,因此,也只有在设置了主节点后才能对drbd设备进行格式化:

[root@node1 ~]# mke2fs -j -L DRBD /dev/drbd0
[root@node1 ~]# mkdir /mnt/drbd
[root@node1 ~]# mount /dev/drbd0 /mnt/drbd/
[root@node1 ~]# ls /mnt/drbd/
lost+found #挂载成功

6、切换Primary和Secondary节点

对主Primary/Secondary模型的drbd服务来讲,在某个时刻只能有一个节点为Primary,因此,要切换两个节点的角色,只能在先将原有的Primary节点设置为Secondary后,才能将原来的Secondary节点设置为Primary:

(1)在切换前,我们先往/mnt/drbd中拷个文件

[root@node1 drbd]# cp /etc/fstab .
[root@node1 drbd]# ls
fstab lost+found

(2)降级node1

再降级时一定要先卸载再降级

[root@node1 ~]# umount /mnt/drbd/             #先卸载
[root@node1 ~]# drbdadm secondary mariadb #再降级
[root@node1 ~]# drbd-overview #降级成功
0:mariadb/0 Connected Secondary/Secondary UpToDate/UpToDate C r-----

(3)提升node2

[root@node2 ~]# drbdadm primary mariadb    #提升node2
[root@node2 ~]# drbd-overview #node2已经成为主节点
0:mariadb/0 Connected Primary/Secondary UpToDate/UpToDate C r-----
[root@node2 ~]# mkdir /mnt/drbd #创建目录并挂载
[root@node2 ~]# mount /dev/drbd0 /mnt/drbd

(4)查看此前在主节点上复制到此设备的文件是否存在

[root@node2 ~]# ls /mnt/drbd
fstab lost+found #确实存在,没有问题

到此,DRBD配置结束

五、MySQL配置安装说明

这里为什么要详细讲解MySQL的配置安装呢?因为你的MySQL的数据目录需要安装在DRBD中;我在实验的过程中就是忘了挂载DRBD,而把数据目录没能安装在DRBD中,造成了不小的麻烦,所以还是要再介绍一下子!

1、创建mysql用户mysql组(node1和node2都操作)

[root@node1 local]# groupadd -g 306 mysql
[root@node1 local]# useradd -u 306 -g mysql -s /sbin/nologin -M mysql

2、解压mysql(node1和node2都操作)

[root@node1 ~]# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/
[root@node1 ~]# cd /usr/local/
[root@node1 local]# ln -sv mariadb-10.0.10-linux-x86_64/ mysql
`mysql' -> `mariadb-10.0.10-linux-x86_64/'
[root@node1 local]# chown -R mysql.mysql mysql/*

3、将node1的DRBD设置为主节点并挂载

[root@node1 ~]# drbd-overview
0:web/0 Connected Primary/Secondary UpToDate/UpToDate C r-----
[root@node1 ~]# mkdir /mydata
[root@node1 ~]# mount /dev/drbd0 /mydata/
[root@node1 ~]# cd /mydata/
[root@node1 mydata]# mkdir data
[root@node1 mydata]# chown -R mysql.mysql /mydata/data/
[root@node1 mydata]# mkdir binlogs
[root@node1 mydata]# chown -R mysql.mysql binlogs/
[root@node1 mydata]# ll
total 24
drwxr-xr-x 2 mysql mysql 4096 Apr 23 21:37 binlogs
drwxr-xr-x 2 mysql mysql 4096 Apr 23 21:37 data
drwx------ 2 root root 16384 Apr 23 16:26 lost+found

4、提供mysql配置文件

[root@node1 ~]# cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
[root@node1 ~]# vim /etc/my.cnf
#增加下面这一行
datadir = /mydata/data
#修改二进制日志路径
log-bin=/mydata/binlogs/master-bin

5、初始化mysql

[root@node1 data]# /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/us

6、提供服务脚本

[root@node1 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

7、启动并测试mysql

[root@node1 ~]# service mysqld start
Starting MySQL. SUCCESS!
[root@node1 ~]# /usr/local/mysql/bin/mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
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上

[root@node1 ~]# scp /etc/my.cnf node2:/etc/
my.cnf 100% 4940 4.8KB/s 00:00
[root@node1 ~]# scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d/
mysqld

9、关闭mysql并设置为开机不启动

[root@node1 ~]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@node1 data]# chkconfig mysqld off

10、设置node2为主节点,并挂载测试

[root@node1 ~]# umount /mydata/
[root@node1 ~]# drbdadm secondary mariadb
[root@node1 ~]# drbd-overview
0:mariadb/0 Connected Secondary/Secondary UpToDate/UpToDate C r-----
======================================================================
[root@node2 ~]# drbdadm primary mariadb
[root@node2 ~]# drbd-overview
0:mariadb/0 Connected Primary/Secondary UpToDate/UpToDate C r-----
[root@node2 ~]# mkdir /mydata/
[root@node2 ~]# mount /dev/drbd0 /mydata/
[root@node2 ~]# ll /mydata/
total 24
drwxr-xr-x 2 mysql mysql 4096 Apr 23 21:46 binlogs
drwxr-xr-x 5 mysql mysql 4096 Apr 23 21:46 data
drwx------ 2 root root 16384 Apr 23 16:26 lost+found

11、启动并测试node2上的mysql

[root@node2 mydata]# service mysqld start
Starting MySQL.. SUCCESS!
[root@node2 mydata]# /usr/local/mysql/bin/mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
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并设置为开机不启动

[root@node2 ~]# service mysqld stop
Shutting down MySQL. SUCCESS!
[root@node2 ~]# chkconfig mysqld off

六、配置高可用集群资源

1、停止DRBD服务并设置为开机不启动,将由CRM管理

[root@node1 ~]# service drbd stop
[root@node1 ~]# chkconfig drbd off
[root@node1 ~]# ssh node2 "service drbd stop"
[root@node1 ~]# ssh node2 "chkconfig drbd off"

2、定义全局属性,设置没有法定票数的行为和禁用stonith

至于为什么这样做,详细说明在我的上一篇高可用博文里

[root@node1 ~]# 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# classes
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

查看当前集群的运行状态

[root@node1 ~]# 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: classic openais (with plugin)
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 [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

查看此刻集群中资源的运行状态

[root@node1 ~]# 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: classic openais (with plugin)
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 [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

查看此刻集群中资源的运行状态

[root@node1 ~]# 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: classic openais (with plugin)
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 [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是否可以正常登录

[root@node1 ~]# /usr/local/mysql/bin/mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
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

查看此刻集群中的资源运行状态

[root@node1 ~]# 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: classic openais (with plugin)
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 [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.%.%' identified by 'test';
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

[root@node1 ~]# mysql -u test -h 172.16.7.1 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
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、故障模拟

[root@node1 ~]# crm node standby
[root@node1 ~]# 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: classic openais (with plugin)
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 [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

[root@node1 ~]# mysql -u test -h 172.16.7.1 -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
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)集群获得完美成功!

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训


MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...