基于DRBD实现MySQL高可用
DRBD:分布式复制块设备
DRBD---Distributed Replicated Block Device 是一种基于Linux的软件组件, 它是由内核模块和相关程序而组成的,通过网络镜像促进共享存储系统的替换。也就是说:当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数据可以保证 实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相同的数据,可以继续使用,以达到高可用的目的。
DRBD的工作原理图:
下面我们基于DRBD来实现MySQL高可用的目的
环境:Red Hat Enterprise Linux Server release 5.8
节点1:172.16.9.2 node2.test.com
节点2:172.16.9.3 node3.test.com
配置过程:
一、配置高可用的前提
1、主机名和'uname -n'的结果保持一致
Node2:
sed -i '[email protected]\(HOSTNAME=\).*@\[email protected]'
hostname node2.test.com
Node3:
sed -i '[email protected]\(HOSTNAME=\).*@\[email protected]'
hostname node3.test.com
2、双方可以解析彼此的主机名:2节点都要配置
- vim /etc/hosts
- 172.16.9.2 node2.test.com node2
- 172.16.9.3 node3.test.com node3
3、建立双机互信:2节点上都要配置
- ssh-****** -t rsa -P ""
- ssh-copy-id -i /root/.ssh/id_rsa.pub dr2 [email protected]
4、时间同步:
- date '12011340';ssh node3 'date 12011340'
5、在两节点上分别创建一个磁盘分区以供之后使用(这里不再给出集体步骤)
注:2节点磁盘分区大小必须保持一致
二、安装drbd所需的rpm包
drbd共有两部分组成:内核模块和用户空间的管理工具
内核模块相关包:最新版本:drbd83-8.3.13
管理工具相关包:对应版本:kmod-drbd83-8.3.13
下载地址为:http://mirrors.sohu.com/centos/5.8/extras/i386/RPMS/
rpm -ivh drbd83-8.3.13-2.el5.centos.i386.rpm kmod-drbd83-8.3.13-1.el5.centos.i686.rpm
提供配置文件,将原来的文件覆盖
cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc
配置/etc/drbd.d/global-common.conf,修改为对应以下内容
- global {
- usage-count no;
- # minor-count dialog-refresh disable-ip-verification
- }
- ##########中间没做修改,为默认###############
- disk {
- on-io-error detach;
- #fencing resource-only;
- }
- net {
- cram-hmac-alg "sha1";
- shared-secret "mydrbdlab";
- }
- syncer {
- rate 1000M;
- }
- }
定义一个资源mydrbd;
- resource mydrbd {
- on node2.test.com {
- device /dev/drbd0;
- disk /dev/sda5;
- address 172.16.9.2:7789;
- meta-disk internal;
- }
- on node3.test.com {
- device /dev/drbd0;
- disk /dev/sda5;
- address 172.16.9.3:7789;
- meta-disk internal;
- }
- }
配置的文件全部同步到另外一个节点之上
- scp -r /etc/drbd.* node3:/etc/
初始化资源并启动服务(2节点都要配置)
- drbdadm create-md mydrbd
- service drbd start
查看启动状态
- drbd-overview
- 0:mydrbd Connected Secondary/Secondary Inconsistent/Inconsistent C r-----
查看状态,同步已经开始
- [[email protected] ~]# drbd-overview
- 0:mydrbd SyncTarget Secondary/Secondary Inconsistent/UpToDate C r-----
- [=>..................] sync'ed: 13.9% (4120/4776)M
将当前节点设置为主节点
- drbdsetup /dev/drbd0 primary –o
再次查看状态
- [[email protected] ~]# drbd-overview
- 0:mydrbd Connected Primary/Secondary UpToDate/UpToDate C r-----
当前节点已经是主节点
对drbd设备进行格式化(只能在主节点上进行)
- mke2fs -j -L DRBD /dev/drbd0
一切配置完成就可以挂载使用了
三、安装配置mysql(这些步骤全部在主节点上完成)
这里使用的是绿色版mysql-5.5.28-linux2.6-i686.tar.gz
解压到/usr/local路径下
tar xvf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/
创建挂载drbd设备的目录及mysql用户
- mkdir /data/mydata -pv
- groupadd -r -g 333 mysql
- useradd -r -g 333 -u 333 mysql
- chown -R mysql:mysql /data/mydata
挂载drbd设备
- mount /dev/drbd0 /data/mydata
配置mysql
- cd /usr/local
- ln -sv mysql-5.5.28-linux2.6-i686 mysql
- cd mysql
- chown -R root:mysql .
初始化mysql
- scripts/mysql_install_db --user=myql --datadir=/data/mydata
提供脚本和配置文件
- cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- cp support-files/my-large.cnf /data/mydata/my.cnf
编辑两个文件,在里面添加
- datadir=/data/mydata
提供mysql的路径
- vim /etc/profile.d/mysql.sh
- export PATH=$PATH:/usr/local/mysql/bin
- source /etc/profile.d/mysql.sh #使之生效
一切配置完毕,启动mysql服务
service mysqld start
进入mysql,手动创建一个数据库(方便后续测试)
退出mysql,并关闭服务,不让其开机自动启动
- service mysqld stop
- chkconfig mysqld off
切换主备节点,在另一个节点上配置mysql(注:不必再一次初始化mysql了)
挂载drbd设备,配置mysql过程和第一个节点一样,配置后可以登录mysql看下是否有刚刚创建的数据库;如果一切正常,停止mysql服务,不让其自动启动。
四、配置高可用服务(这里采用corosync + pacemaker)
安装高可用所需要的rpm包:下载地址:http://clusterlabs.org/rpm/
cluster-glue-1.0.6-1.6.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
pacemaker-1.1.5-1.1.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
这里包含所有依赖的包,yum 安装即可:
yum –y localinstall –nogpgcheck *rpm
修改配置文件:
- cd /etc/corosync
- cp corosync.conf.example corosync.conf
- vim corosync.conf
- 添加如下内容
- service {
- ver: 0
- name: pacemaker
- }
- aisexec {
- user: root
- group: root
- }
- 同时将原来内容做下修改:
- secauth: on
- bindnetaddr: 172.16.0.0 #修改为主机所在网段
- to_syslog: no
生成节点间通信时用到的认证**文件:
- corosync-******
将corosync.conf和authkey复制至另一节点:
- scp -r corocync.conf authkey node3:/etc/corosync/
分别为两个节点创建corosync生成的日志所在的目录:
- mkdir /var/log/cluster
- ssh node3 'mkdir /var/log/cluster'
接下来就可以启动corosync服务了
- Service corosync start
- Ssh node3 'service corosync start'
五、定义资源
首先定义高可用集群的一些属性
- crm
- ccrm(live)# configure
- crm(live)configure# property no-quorum-policy=ignore #取消法定票数的机制
- crm(live)configure# property stonith-enabled=false #禁用隔离设备
接下来定义drbd资源
- crm(live)configure# primitive drbd ocf:linbit:drbd params drbd_resource="mydrbd" op start timeout=240 op stop timeout=240
- #根据自己需要定义资源的名字,类型等
- crm(live)configure# master ms_mydrbd drbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
- #master关键字定义主从资源,后面指定资源name,meta 指定额外参选数,master-max指定最多有几个master,
- #master-node-max指定一个节点最多运行几个master,clone-max指定有几个clone资源,
- #clone-node-max指定一个节点最多运行几个clone资源,notify指当出现故障时是否通知对方
定义文件系统资源
- crm(live)configure# primitive myFS ocf:heartbeat:Filesystem params device="dev/drbd0" directory="/data/mydata" fstype="ext3" op start timeout=60 op stop timeout=60
定义资源约束
- crm(live)configure# colocation myFS_on_ms_mydrbd inf: myFS ms_mydrbd:Master
- crm(live)configure# order myFS_after_ms_mydrbd mandatory: ms_mydrbd:promote myFS:start
- #将资源系统和drbd资源绑定在一个节点上,并定义其启动次序
- crm(live)configure# verify
- crm(live)configure# commit
查看刚定义的资源的状态
- crm status
- ============
- Last updated: Mon Nov 12 16:45:35 2012
- Stack: openais
- Current DC: node2.test.com - partition with quorum
- Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
- 2 Nodes configured, 2 expected votes
- 2 Resources configured.
- ============
- Online: [ node3.test.com node2.test.com ]
- Master/Slave Set: ms_mydrbd [drbd]
- Masters: [ node3.test.com ]
- Slaves: [ node2.test.com ]
- myFS (ocf::heartbeat:Filesystem): Started node3.test.com
定义IP资源及与其相关的约束
- crm(live)configure# primitive IP ocf:heartbeat:IPaddr params ip=172.16.66.1
- crm(live)configure# colocation IP_with_ms_mydrbd_master inf: IP ms_mydrbd:Master
查看状态
- crm status
- ============
- Last updated: Mon Nov 12 16:54:25 2012
- Stack: openais
- Current DC: node2.test.com - partition with quorum
- Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
- 2 Nodes configured, 2 expected votes
- 4 Resources configured.
- ============
- Online: [ node3.test.com node2.test.com ]
- Master/Slave Set: ms_mydrbd [drbd]
- Masters: [ node3.test.com ]
- Slaves: [ node2.test.com ]
- myFS (ocf::heartbeat:Filesystem): Started node3.test.com
- MYSQL (lsb:mysqld): Started node3.test.com
- IP (ocf::heartbeat:IPaddr): Started node3.test.com
这时就可以看到资源在node3 上已经启动起来了,进入mysql测试能否正常运行,可以的话一个简单的基于DRBD的mysql高可用就完工了!!
测试高可用资源能否实现故障转移,接下来可以手动将node3 故障:
- crm node standby
- ##等待一会看资源是否转移
- crm(live)# status
- ============
- Last updated: Mon Nov 12 17:09:50 2012
- Stack: openais
- Current DC: node2.test.com - partition with quorum
- Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
- 2 Nodes configured, 2 expected votes
- 4 Resources configured.
- ============
- Node node3.test.com: standby
- Online: [ node2.test.com ]
- Master/Slave Set: ms_mydrbd [drbd]
- Masters: [ node2.test.com ]
- Stopped: [ drbd:1 ]
- myFS (ocf::heartbeat:Filesystem): Started node2.test.com
- MYSQL (lsb:mysqld): Started node2.test.com
- IP (ocf::heartbeat:IPaddr): Started node2.test.com
看到资源转移成功,说明高可用集群构建成功!!
转载于:https://blog.51cto.com/90112526/1076070