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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

前提:
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
目录
相关文章
|
21天前
|
SQL 存储 关系型数据库
MySQL Cluster集群安装及使用
MySQL Cluster集群安装及使用
|
1天前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL版集群版本支持库表恢复功能的版本要求是什么?
【5月更文挑战第13天】PolarDB MySQL版集群版本支持库表恢复功能的版本要求是什么?
7 0
|
5天前
|
存储 关系型数据库 MySQL
MySQL是怎样存储数据的?
MySQL是怎样存储数据的?
|
8天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)
|
16天前
|
关系型数据库 分布式数据库 数据库
VLDB顶会论文解读 | PolarDB MySQL高性能强一致集群核心技术详解
在VLDB2023会议上,阿里云瑶池数据库团队的论文介绍了PolarDB-SCC,这是一个创新的云原生数据库系统,确保了低延迟的全局强一致读取。PolarDB-SCC解决了传统主从架构中只读节点可能返回过期数据的问题,实现了在不影响性能的情况下提供强一致性。通过重新设计的主从信息同步机制、线性Lamport时间戳和细粒度修改跟踪,以及利用RDMA优化的日志传输,PolarDB-SCC已经在PolarDB中成功应用超过一年,成为业界首个无感知全局一致性读的云原生数据库解决方案。
66787 0
|
21天前
|
监控 关系型数据库 MySQL
MySQL高可用集群之MySQL-MMM
MySQL高可用集群之MySQL-MMM
|
21天前
|
存储 监控 关系型数据库
MySQL高可用性之MySQL+DRBD+Heartbeat
MySQL高可用性之MySQL+DRBD+Heartbeat
|
1月前
|
存储 SQL 分布式计算
搭建Mysql Cluster集群实现高可用
搭建Mysql Cluster集群实现高可用
19 0
|
4天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
13 0
|
2天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
19 3
mysql 设置环境变量与未设置环境变量连接数据库的区别