前提: 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]#[root@HA2 ha]#
|
到此Corosync+pacemaker基于drbd分散式存储的mysql高可用集群已经实现,以上内容在您实现过程中出现了任何问题,欢迎在此交流;并请各位大虾们予以批评指正,谢谢!
本文转自 向阳草米奇 51CTO博客,原文链接:http://blog.51cto.com/grass51/865026,如需转载请自行联系原作者