基于DRBD实现MySQL高可用
2012-12-01 19:08
369 查看
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 's@\(HOSTNAME=\).*@\1node2.test.com@g'
hostname node2.test.com
Node3:
sed -i 's@\(HOSTNAME=\).*@\1node3.test.com@g'
hostname node3.test.com
2、双方可以解析彼此的主机名:2节点都要配置
3、建立双机互信:2节点上都要配置
4、时间同步:
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,修改为对应以下内容
定义一个资源mydrbd;
配置的文件全部同步到另外一个节点之上
初始化资源并启动服务(2节点都要配置)
查看启动状态
查看状态,同步已经开始
将当前节点设置为主节点
再次查看状态
当前节点已经是主节点
对drbd设备进行格式化(只能在主节点上进行)
一切配置完成就可以挂载使用了
三、安装配置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用户
挂载drbd设备
配置mysql
初始化mysql
提供脚本和配置文件
编辑两个文件,在里面添加
提供mysql的路径
一切配置完毕,启动mysql服务
service mysqld start
进入mysql,手动创建一个数据库(方便后续测试)
退出mysql,并关闭服务,不让其开机自动启动
切换主备节点,在另一个节点上配置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
修改配置文件:
生成节点间通信时用到的认证密钥文件:
将corosync.conf和authkey复制至另一节点:
分别为两个节点创建corosync生成的日志所在的目录:
接下来就可以启动corosync服务了
五、定义资源
首先定义高可用集群的一些属性
接下来定义drbd资源
定义文件系统资源
定义资源约束
查看刚定义的资源的状态
定义IP资源及与其相关的约束
查看状态
这时就可以看到资源在node3 上已经启动起来了,进入mysql测试能否正常运行,可以的话一个简单的基于DRBD的mysql高可用就完工了!!
测试高可用资源能否实现故障转移,接下来可以手动将node3 故障:
看到资源转移成功,说明高可用集群构建成功!!
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 's@\(HOSTNAME=\).*@\1node2.test.com@g'
hostname node2.test.com
Node3:
sed -i 's@\(HOSTNAME=\).*@\1node3.test.com@g'
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-keygen -t rsa -P "" ssh-copy-id -i /root/.ssh/id_rsa.pub dr2 root@node3
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-----
查看状态,同步已经开始
[root@node2 ~]# drbd-overview 0:mydrbd SyncTarget Secondary/Secondary Inconsistent/UpToDate C r----- [=>..................] sync'ed: 13.9% (4120/4776)M
将当前节点设置为主节点
drbdsetup /dev/drbd0 primary –o
再次查看状态
[root@node2 ~]# 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-keygen
将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
看到资源转移成功,说明高可用集群构建成功!!
相关文章推荐
- 基于drbd&&corosync实现高可用mysql
- CentOS5.8 HA集群之Corosync + Pacemaker + DRBD + MySQL实现MySQL高可用
- 基于Corosync+Pacemaker+DRBD实现MySQL高可用集群
- ysql+heartbeat+DRBD+LVS实现mysql高可用
- 基于DRBD实现高可用MariaDB
- Linux集群之corosync+pacemaker+drbd实现MySQL高可用
- corosync + pacemaker + drbd 实现mysql存储的高可用(一)
- 基于Corosync+Pacemaker+DRBD 实现高可用(HA)的MariaDB集群
- heartbeat+drbd+mysql实现MySQL高可用
- 基于DRBD实现数据库高可用
- ysql+heartbeat+DRBD+LVS实现mysql高可用
- Corosync+Pacemaker+DRBD实现MySQL的高可用
- Mysql+DRBD+Heartbeat 实现mysql高可用的双击热备(DRBD篇)
- corosync+pacemaker+drbd+mysql实现mysql高可用
- 基于MHA和Galera Cluster实现MySQL高可用
- heartbeat+drbd+mysql:实现最廉价的高可用组合
- Corosync+Pacemaker+DRBD实现MySQL的高可用 推荐
- MySQL高可用方案:基于MHA实现的自动故障转移群集
- Corosync+pacemaker实现基于drbd分散式存储的mysql高可用集群
- 基于corosync/openais+NFS实现MYSQL的高可用