您的位置:首页 > 运维架构 > 网站架构

Corosync+pacemaker实现基于drbd分散式存储的mysql高可用集群

2012-05-16 16:35 681 查看
前提:

1.两台服务器HA1.coolinuz.com别名为HA1,HA2.coolinuz.com别名HA2

2.IP地址HA1:192.168.0.73,HA2:192.168.0.76

3.系统平台为:RHEL5.4 x86

准备工作:

1、修改本地的Hosts文件,使两节点能够互相解析:

[root@HA1 ~]# vim /etc/hosts





[root@HA1 ~]# scp /etc/hosts HA2:/etc/


2、建立双机互信,为后面的高可用集群两节点传递信息时所用

HA1:

[root@HA1 ~]# ssh-keygen -t rsa

[root@HA1 ~]# ssh-copy-id -i .ssh/id_rsa.pub HA2


在HA2上执行相同操作:

[root@HA2 ~]# ssh-keygen -t rsa

[root@HA2 ~]# ssh-copy-id -i .ssh/id_rsa.pub HA1


验证双机互信是否配置成功:









一、安装drbd

drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于此版本的话,你只需要安装管理工具即可;否则,

需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。这里笔者内核版本为2.6.18-164.el5,因此需要下载内核模块和用户空间的管理工具下载地址:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/

1、安装drbd

Ps:所有的安装包我都存放在家目录下的tmp目录中:

[root@HA1 tmp]# yum localinstall -y --nogpgcheck drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm

2、配置drbd

复制样例配置文件到/etc下

[root@HA1 tmp]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/

配置drbd全局配置参数

[root@HA2 ha]# vim /etc/drbd.d/global_common.conf









3、为drbd准备一块大小相同的分区,不要创建文件系统(不要格式化)

具体步骤不在赘述,笔者这里,在HA1上准备的是一块5G大小的分区,编号为/dev/sdb1,在HA2上准备的也是一块5G大小的分区,编号为/dev/sdb1

4、定义一个资源,内容如下:[root@HA2 ha]# vim /etc/drbd.d/mysql.res





5、同步两节点的配置文件以及资源文件

[root@HA1 tmp]# scp -r /etc/drbd.* HA2:/etc/

6、初始化资源,在两节点上分别执行:

[root@HA1 ~]# drbdadm create-md mysql









7、启动服务,在两节点上分别执行:

[root@HA1 ~]# service drbd start

[root@HA2 ~]# service drbd start


8、查看启动状态:









9、将其中一个节点设置为Primary,在要设置为Primary的节点上执行如下命令:

[root@HA1 ~]# drbdadm -- --overwrite-data-of-peer primary mysql

观察同步过程:

[root@HA1 ~]# watch -n 1 'drbd-overview'

















Ps:如果分区较大,同步的过程会需要较长一段时间。

10、在/dev/drbd0上创建文件系统

[root@HA1 ~]# mke2fs -j /dev/drbd0

[root@HA1 ~]# mkdir /mysql

[root@HA1 ~]# ssh HA2 mkdir /mysql

[root@HA1 ~]# mount /dev/drbd0 /mysql/


11、切换Primary和Secondary节点,确保drbd配置成功

[root@HA1 ~]# umount /mysql/

[root@HA1 ~]# drbdadm secondary mysql

[root@HA2 ~]# drbdadm primary mysql

[root@HA1 ~]# drbd-overview






[root@HA2 ~]# drbd-overview






二、安装Mysql

为简化实验的的复杂性,这里使用mysql解压安装版本

1、添加mysql的运行用户

[root@HA1 ~]# groupadd -r mysql

[root@HA1 ~]# useradd -g mysql -r -s /sbin/nologin mysql


HA2上执行同样的操作

2、将Primary和Secondary节点重新切换回来

[root@HA2 ~]# drbdadm secondary mysql

[root@HA1 ~]# drbdadm primary mysql


Ps:这一步不是必要的,只是习惯性喜欢将HA1设为Primary

3、创建mysql的数据目录

[root@HA1 ~]# mount /dev/drbd0 /mysql/

[root@HA1 ~]# mkdir /mysql/data

[root@HA1 ~]# chown -R mysql.mysql /mysql/data/


4、安装mysql

[root@HA1 tmp]# tar xvf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local/

[root@HA1 tmp]# cd /usr/local/

[root@HA1 local]# ln -sv mysql-5.5.24-linux2.6-i686 mysql

[root@HA1 local]# cd mysql

[root@HA1 mysql]# cp support-files/my-large.cnf /etc/my.cnf

[root@HA1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@HA1 mysql]# chkconfig --add mysqld


Ps:在节点HA2上执行同样的上述操作;

节点HA1:

[root@HA1 mysql]# chown -R mysql.mysql .

[root@HA1 mysql]# vim /etc/my.cnf






[root@HA1 mysql]# scp /etc/my.cnf HA2:/etc/

[root@HA1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mysql/data/


节点HA2:

[root@HA1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@HA1 mysql]# chkconfig --add mysqld

[root@HA2 mysql]# chown -R root.mysql .


Ps:由于只有能在drbd的Primary节点上才能挂载,因此只在挂载了drbd的节点上进行初始化mysql;切勿两节点都进行初始化操作;

5、分别在两节点上启动Mysql,验证基于drbd的mysql是否均能启动

节点HA1:

[root@HA1 mysql]# service mysqld start





[root@HA1 mysql]# service mysqld stop

[root@HA1 mysql]# umount /mysql/

[root@HA1 mysql]# drbdadm secondary mysql


节点HA2:

[root@HA2 mysql]# drbdadm primary mysql

[root@HA2 mysql]# mount /dev/drbd0 /mysql/

[root@HA2 mysql]# service mysqld start






由此可见基于的drbd的mysql在两节点上启动均正常

取消drbd和Mysql的开启启动,将其定义为高可用集群的资源,并且停止其服务

# service mysqld stop

# umount /mysql

# service drbd stop

# chkconfig mysqld off

# chkconfig drbd off


三、安装corosync+pacemaker

安装corosync+pacemaker需要安装以下软件包:

cluster-glue、cluster-glue-libs、heartbeat、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs

下载地址:http://clusterlabs.org/rpm/下载符合自己平台架构的软件包

1、安装这些软件包:

Ps:我将所有的软件包下载至ha目录中

[root@HA1 ha]# yum localinstall -y --nogpgcheck ./*.rpm

[root@HA2 ha]# yum localinstall -y --nogpgcheck ./*.rpm


2、配置corosync:

[root@HA1 ha]# cd /etc/corosync/

[root@HA1 corosync]# cp corosync.conf.example corosync.conf

[root@HA1 corosync]# vim /etc/corosync.conf





[root@HA1 corosync]# corosync-keygen #生成集群节点之间认证的密钥

[root@HA1 corosync]# scp -p corosync.conf authkey HA2:/etc/corosync/
#为HA2节点提供相同的配置文件和密钥文件

[root@HA1 corosync]# mkdir /var/log/cluster

[root@HA1 corosync]# ssh HA2 mkdir /var/log/cluster


3、启动corosync

[root@HA1 corosync]# service corosync start

[root@HA1 corosync]# ssh HA2 service corosync start

[root@HA1 corosync]# grep -e "Corosync Cluster Engine" -e "configuration file"
/var/log/cluster/corosync.log

#查看服务是否正常启动





[root@HA1 corosync]# grep TOTEM /var/log/cluster/corosync.log

#查看初始化成员节点通知是否正常发出





[root@HA1 corosync]# grep pcmk_startup /var/log/cluster/corosync.log

#查看pacemaker是否正常启动





节点HA1启动正常,同样方法检测节点HA2启动是否正常



[root@HA1 corosync]# crm status


#查看集群节点的启动情况





四、定义集群服务:

1、设置集群的工作属性

[root@HA1 corosync]# crm

crm(live)configure# property stonith-enabled=false

#关闭stonith设备检测,如果具有stonith设备不必执行该项

crm(live)configure# property no-quorum-policy=ignore

#关闭法定投票人数策略,如果是多节点集群则不必关闭法定投票人数策略

crm(live)configure# rsc_defaults resource-stickiness=100

#定义全局资源粘性值

crm(live)configure# show




2、定义drbd资源,接受corosync的调度

crm(live)configure# primitive drbd0 ocf:linbit:drbd params drbd_resource=mysql op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s op start timeout=240s op stop timeout=100s

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# ms MS-drbd drbd0 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(live)# status





3、定义文件系统资源

crm(live)configure# primitive FS ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/mysql fstype=ext3 op start timeout=60s op stop timeout=60s

crm(live)configure# verify

crm(live)configure# commit

crm(live)# status





4、定义mysql为一个资源,接受corosync的调度

crm(live)configure# primitive Mysql-server lsb:mysqld

crm(live)configure# verify

crm(live)configure# commit

crm(live)# status





Mysql启动失败,因为drbd的Primary节点在HA1上挂载,mysql在节点HA2上启动自然启动不起来

5、设置资源约束,规定启动顺序

crm(live)configure# colocation drbd-fs-mysql INFINITY: MS-drbd FS Mysql-server

#定义资源约束,将所有资源捆绑在一起,使其只能处于一个节点上,此处也可以讲这三个资源定义为一个group,同样可以实现colocation的效果

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# order drbd-fs-mysql-after mandatory: MS-drbd FS Mysql-server

#定义启动顺序:DRBD资源,文件系统资源,Mysql服务资源

crm(live)configure# verify

crm(live)configure# commit

crm(live)configure# show





crm(live)configure# status





6、测试资源流转

[root@HA1 corosync]# crm node standby

[root@HA2 ha]# crm status





到此Corosync+pacemaker基于drbd分散式存储的mysql高可用集群已经实现,以上内容在您实现过程中出现了任何问题,欢迎在此交流;并请各位大虾们予以批评指正,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息