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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

前提:
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,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 缓存 关系型数据库
MySQL的varchar水真的太深了——InnoDB记录存储结构
varchar(M) 能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。
828 6
MySQL的varchar水真的太深了——InnoDB记录存储结构
|
2月前
|
存储 关系型数据库 MySQL
Mysql高可用|索引|事务 | 调优
Mysql高可用|索引|事务 | 调优
|
3月前
|
存储 缓存 关系型数据库
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
阿里云RDS率先推出新型存储类型通用云盘,提供低延迟、低成本、高持久性的用户体验。
鱼和熊掌如何兼得?一文解析RDS数据库存储架构升级
|
3月前
|
SQL 容灾 关系型数据库
rds容灾与高可用
rds容灾与高可用
28 4
|
3月前
|
关系型数据库 MySQL
电子好书发您分享《MySQL MGR 8.0高可用实战》
电子好书发您分享《MySQL MGR 8.0高可用实战》 电子好书发您分享《MySQL MGR 8.0高可用实战》
89 1
|
26天前
|
SQL 存储 运维
MySQL高可用性:主从复制和集群
MySQL高可用性:主从复制和集群
32 0
|
3月前
|
存储 关系型数据库 MySQL
Mysql 存储大数据量问题
Mysql 存储大数据量问题
88 1
|
29天前
|
关系型数据库 MySQL 数据库
使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤
使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤
59 0
|
1月前
|
SQL 关系型数据库 MySQL
OBCP实践 - 迁移 MySQL 数据到 OceanBase 集群
OBCP实践 - 迁移MySQL数据到OceanBase集群,这是一个涉及到将现有MySQL数据库的数据和表结构迁移到OceanBase分布式数据库集群的实际操作过程。OceanBase是一款高度兼容MySQL协议的分布式数据库产品,支持在线平滑迁移,以便企业用户可以从传统的MySQL数据库平滑迁移到OceanBase,以实现更高的可用性、扩展性和性能。
31 0
|
2月前
|
监控 负载均衡 关系型数据库
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
MySQL技能完整学习列表13、MySQL高级特性——1、分区表(Partitioning)——2、复制(Replication)——3、集群(Clustering)
51 0

推荐镜像

更多