drbd+corosync实现高可用mysql

前提:

本配置共有两个测试节点,分别node1和node2,相的IP地址分别为202.207.178.6和202.207.178.7,管理节点202.207.178.8,对node1和node2进行配置。此时已经配置好drbd,并且可以正常工作了!

(为避免影响,先关闭防火墙和SElinux,DRBD相关配置详见http://10927734.blog.51cto.com/10917734/1867283)

一、安装corosync

1、先停止drbd服务,并禁止其开机自动启动

主节点:

[[email protected] ~]# umount /mydata/

[[email protected] ~]# drbdadm secondary mydrbd

[[email protected] ~]# service drbd stop

[[email protected] ~]# chkconfig drbd off

从节点:

[[email protected] ~]# service drbd stop

[[email protected] ~]# chkconfig drbd off

2、安装相关软件包

[[email protected] ~]# for I in {1..2}; do ssh node$I ‘mkdir /root/corosync/‘; scp *.rpm node$I:/root/corosync; ssh node$I ‘yum -y --nogpgcheck localinstall /root/corosync/*.rpm‘; done

(将heartbeat-3.0.4-2.el6.i686.rpm和heartbeat-libs-3.0.4-2.el6.i686.rpm复制到主目录下进行)

[[email protected] ~]# for I in {1..2}; do ssh node$I ‘yum -y install cluster-glue corosync            libesmtp pacemaker pacemaker-cts‘; done

3、创建所需日志目录

[[email protected] corosync]# mkdir /var/log/cluster

[[email protected] ~]# mkdir /var/log/cluster

4、配置corosync,(以下命令在node1上执行),并尝试启动

# cd /etc/corosync

# cp corosync.conf.example corosync.conf

接着编辑corosync.conf,添加如下内容:

修改以下语句:

bindnetaddr: 202.207.178.0 #网络地址,节点所在的网络地址段

secauth: on #打开安全认证

threads: 2 #启动的线程数

to_syslog: no (不在默认位置记录日志)

添加如下内容,定义pacemaker随corosync启动,并且定义corosync的工作用户和组:

service {

ver:  0

name: pacemaker

}

aisexec {

user: root

group: root

}

生成节点间通信时用到的认证密钥文件:

# corosync-keygen

将corosync和authkey复制至node2:

# scp -p corosync.conf authkey  node2:/etc/corosync/

尝试启动,(以下命令在node1上执行):

# service corosync start

注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动

# ssh node2 ‘/etc/init.d/corosync start‘

5、测试是否正常

查看corosync引擎是否正常启动:

# grep -e "Corosync Cluster Engine" -e "configuration file"     /var/log/cluster/corosync.log

输出以下内容:

Oct 23 00:38:06 corosync [MAIN  ] Corosync Cluster Engine (‘1.4.7‘): started and ready to provide service.

Oct 23 00:38:06 corosync [MAIN  ] Successfully read main configuration file ‘/etc/corosync/corosync.conf‘

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

# grep TOTEM /var/log/cluster/corosync.log

输出如下内容:

Oct 23 00:38:06 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).

Oct 23 00:38:06 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).

Oct 23 00:38:06 corosync [TOTEM ] The network interface [202.207.178.6] is now up.

Oct 23 00:39:35 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

检查启动过程中是否有错误产生:

# grep ERROR: /var/log/messages | grep -v unpack_resources

查看pacemaker是否正常启动:

# grep pcmk_startup /var/log/cluster/corosync.log

输出如下内容:

Oct 23 00:38:06 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized

Oct 23 00:38:06 corosync [pcmk  ] Logging: Initialized pcmk_startup

Oct 23 00:38:06 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is:     4294967295

Oct 23 00:38:06 corosync [pcmk  ] info: pcmk_startup: Service: 9

Oct 23 00:38:06 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1

使用如下命令查看集群节点的启动状态:

# crm_mon

Last updated: Tue Oct 25 17:28:10 2016          Last change: Tue Oct         25 17:21:56 2016 by hacluster via crmd on node1

Stack: classic openais (with plugin)

Current DC: node1 (version 1.1.14-8.el6_8.1-70404b0) - partition with         quorum

2 nodes and 0 resources configured, 2 expected votes

Online: [ node1 node2 ]

从上面的信息可以看出两个节点都已经正常启动,并且集群已经处于正常工作状态。

二、配置资源及约束

1、安装crmsh软件包:

pacemaker本身只是一个资源管理器,我们需要一个接口才能对pacemker上的资源进行定义与管理,而crmsh即是pacemaker的配置接口,从pacemaker 1.1.8开始,crmsh 发展成一个独立项目,

pacemaker中不再提供。crmsh提供了一个命令行的交互接口来对Pacemaker集群进行管理,它具有更强大的管理功能,同样也更加易用,在更多的集群上都得到了广泛的应用,类似软件还有 pcs;

在/etc/yum.repo.d/ 下的配置文件中添加以下内容

[ewai]

name=aaa

baseurl=http://download.opensuse.org/repositories/network:/ha-            clustering:/Stable/CentOS_CentOS-6/

enabled=1

gpgcheck=0

# yum clean all

# yum makecache

[[email protected] yum.repos.d]# yum install crmsh

2、检查配置文件有无语法错误,并进行相关配置

crm(live)configure# verify

我们里可以通过如下命令先禁用stonith:

# crm configure property stonith-enabled=false

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

crm(live)configure# commit

配置不具备法定票数的处理方式:

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

crm(live)configure# verify

crm(live)configure# commit

配置资源粘性,使资源更愿意留在当前节点

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

crm(live)configure# verify

crm(live)configure# commit

3、配置资源

定义一个名为mysqldrbd的资源:

(interval:定义监控的时间间隔)

crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mydrbd op start timeout=240 op stop timeout=100 op monitor role=Master interval=20 timeout=30 op monitor role=Slave interval=30 timeout=30

crm(live)configure# verify

定义一个名为ms_mysqldrbd的主从类型的资源:

指明是mysqldrbd的克隆,master-max=1:定义最多出现1个主资源,master-node-max=1:主资源在同一时刻只能出现在一个节点上,clone-max=2:定义最多有两个克隆资源,clone-node-max:定义在每个节点上只能启动1个克隆资源

crm(live)configure# ms ms_mysqldrbd mysqldrbd 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

4、测试

[[email protected] ~]# crm status

Last updated: Sun Oct 23 13:05:43 2016 Last change: Sun Oct 23         13:03:52 2016 by root via cibadmin on node1

Stack: classic openais (with plugin)

Current DC: node1 (version 1.1.14-8.el6_8.1-70404b0) - partition with         quorum

2 nodes and 2 resources configured, 2 expected votes

Online: [ node1 node2 ]

Full list of resources:

Master/Slave Set: ms_mysqldrbd [mysqldrbd]

Masters: [ node1 ]

Slaves: [ node2 ]

[[email protected] ~]# drbd-overview

0:mydrbd  Connected Primary/Secondary UpToDate/UpToDate C r-----

[[email protected] ~]# crm node standby

[[email protected] ~]# crm status

Last updated: Sun Oct 23 13:06:30 2016 Last change: Sun Oct 23             13:06:25 2016 by root via crm_attribute on node1

Stack: classic openais (with plugin)

Current DC: node1 (version 1.1.14-8.el6_8.1-70404b0) - partition with         quorum

2 nodes and 2 resources configured, 2 expected votes

Node node1: standby

Online: [ node2 ]

Full list of resources:

Master/Slave Set: ms_mysqldrbd [mysqldrbd]

Masters: [ node2 ]

Stopped: [ node1 ]

[[email protected] ~]# crm node online

[[email protected] ~]# crm status

Last updated: Sun Oct 23 13:07:00 2016 Last change: Sun Oct 23         13:06:58 2016 by root via crm_attribute on node1

Stack: classic openais (with plugin)

Current DC: node1 (version 1.1.14-8.el6_8.1-70404b0) - partition with         quorum

2 nodes and 2 resources configured, 2 expected votes

Online: [ node1 node2 ]

Full list of resources:

Master/Slave Set: ms_mysqldrbd [mysqldrbd]

Masters: [ node2 ]

Slaves: [ node1 ]

服务正常!

5、配置一个文件系统资源,使DRBD自动挂载,并配置排列约束,使此资源和主节点在一起;同时配置一个顺序约束,实现先启动drbd,再启动mystor

crm(live)configure# primitive mystore ocf:Filesystem params device=/dev/drbd0               directory=/mydata fstype=ext4 op start timeout=60 op stop               timeout=60

crm(live)configure# verify

crm(live)configure# colocation mystore_with_ms_mysqldrbd inf: mystore                   ms_mysqldrbd:Master

crm(live)configure# order mystore_after_ms_mysqldrbd mandatory:                       ms_mysqldrbd:promote mystore:start

crm(live)configure# verify

crm(live)configure# commit

测试:

[[email protected] ~]# crm node standby

[[email protected] ~]# crm status

Last updated: Sun Oct 23 13:45:26 2016 Last change: Sun             Oct 23 13:45:20 2016 by root via crm_attribute on node2

Stack: classic openais (with plugin)

Current DC: node2 (version 1.1.14-8.el6_8.1-70404b0) - partition             with quorum

2 nodes and 3 resources configured, 2 expected votes

Node node2: standby

Online: [ node1 ]

Full list of resources:

Master/Slave Set: ms_mysqldrbd [mysqldrbd]

Masters: [ node1 ]

Stopped: [ node2 ]

mystore (ocf::heartbeat:Filesystem): Started node1

[[email protected] yum.repos.d]# ls /mydata/

fsy  lost+found

此时测试,一切正常!

三、安装Mysql(先在主节点上,后在从节点上)

1.将下载好的压缩包解压至/usr/local,并进入此目录

#tar xf mysql-5.5.52-linux2.6-i686.tar.gz -C /usr/local

#cd /usr/local/

2.为解压后的目录创建一个链接,并进入此目录

#ln -sv mysql-5.5.52-linux2.6-i686 mysql

#cd mysql

3.创建MySQL用户(使其成为系统用户)和MySQL组

#groupadd -r -g 306 mysql

#useradd -g 306 -r -u 306 mysql

4.使mysql下的所有文件都属于mysql用户和mysql组

#chown -R mysql:mysql /usr/local/mysql/*

5.创建数据目录,并使其属于mysql用户和mysql组,其他人无权限

#mkdir /mydata/data

#chown -R mysql:mysql /mydata/data/

#chmod o-rx /mydata/data/

6.准备就绪,开始安装

#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

7.安装完成后为了安全,更改/usr/local/mysql下所有文件的权限

#chown -R root:mysql /usr/local/mysql/*

8.准备启动脚本,并禁止其开机自动启动

#cp support-files/mysql.server /etc/init.d/mysqld

#chkconfig --add mysqld

#chkconfig mysqld off

9.编辑数据库配置文件

#cp support-files/my-large.cnf /etc/my.cnf

#vim /etc/my.cnf,修改和添加以下内容:

thread_concurrency =2(因为我的CPU数为1,所以线程数改为2)

datadir = /mydata/data

10.启动mysql

# service mysqld start

# /usr/local/mysql/bin/mysql

11.测试是否正常

mysql> show databases;

mysql> CREATE DATABASE mydb;

mysql> show databases;

12.关闭主节点上的mysql服务,使从节点变为主节点,安装mysql

[[email protected] mysql]# service mysqld stop

[[email protected] mysql]# crm node standby

[[email protected] mysql]# crm node online

13.将下载好的压缩包解压至/usr/local,并进入此目录

#tar xf mysql-5.5.52-linux2.6-i686.tar.gz -C /usr/local

#cd /usr/local/

14.为解压后的目录创建一个链接,并进入此目录

#ln -sv mysql-5.5.52-linux2.6-i686 mysql

#cd mysql

15.创建MySQL用户(使其成为系统用户)和MySQL组

#groupadd -r -g 306 mysql

#useradd -g 306 -r -u 306 mysql

16.使mysql下的所有文件都属于root用户和mysql组

#chown -R root:mysql /usr/local/mysql/*

17.准备启动脚本,并禁止其开机自动启动

#cp support-files/mysql.server /etc/init.d/mysqld

#chkconfig --add mysqld

#chkconfig mysqld off

18.编辑数据库配置文件

#cp support-files/my-large.cnf /etc/my.cnf

#vim /etc/my.cnf,修改和添加以下内容:

thread_concurrency =2(因为我的CPU数为1,所以线程数改为2)

datadir = /mydata/data

19.启动mysql

# service mysqld start

# /usr/local/mysql/bin/mysql

20.测试是否正常

mysql> show databases;

发现有mydb数据库!

测试成功!

四、配置mysql资源

1、停止主节点上的mysql服务

# service mysqld stop

2、定义主资源

crm(live)configure# primitive mysqld lsb:mysqld

crm(live)configure# verify

3、定义资源约束

定义排列约束,使mysqld和mystore在一起

crm(live)configure# colocation mysqld_with_mystore inf: mysqld                       mystore

crm(live)configure# verify

定义顺序约束,使mystore先启动,mysqld后启动

crm(live)configure# order mysqld_after_mystore mandatory: mystore                       mysqld

crm(live)configure# verify

crm(live)configure# commit

4、测试

1)在主节点上连接mysql,并创建数据库

mysql> CREATE DATABASES hellodb;

mysql> show databases;

2)节点切换(主节点上)

# crm node standby

# crm node online

3)在原来的从节点(及现在的主节点上测试)

mysql> show databases;

发现有hellodb数据库!

测试成功!

至此,drbd+corosync的高可用mysql配置完成!

欢迎批评指正!

时间: 2024-07-30 13:48:16

drbd+corosync实现高可用mysql的相关文章

mysql+drbd+corosync实现高可用mysql

RHEL6 node1 192.168.1.7 node2 192.168.1.8 双机互信 进192.168.1.7 # ssh-keygen -t rsa ~/.ssh/id_rsa # ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] 进192.168.1.8 # ssh-keygen -t rsa ~/.ssh/id_rsa # ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] 编辑/

Heartbeat+DRBD实现文件高可用

一.需求分析: 本文结合之前heartbeat与drbd两篇文章,实现磁盘文件高可用.当MySQL01(主数据库服务器)宕机后,MySQL02(备数据库服务器)可以通过heartbeat立刻检测到MySQL01挂了,MySQL02接管VIP,MySQL02的DRBD服务会自动从Secondary切换到Primary状态,然后自动加载DRBD逻辑盘:/dev/drbd0到/data目录,从而实现文件持续在线--即高可用状态:当MySQL01恢复后,VIP返回MySQL01,MySQL01的DRBD

[ Openstack ] Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs 高可用集群

目录 Openstack-Mitaka 高可用之 概述    Openstack-Mitaka 高可用之 环境初始化    Openstack-Mitaka 高可用之 Mariadb-Galera集群部署    Openstack-Mitaka 高可用之 memcache    Openstack-Mitaka 高可用之 Pacemaker+corosync+pcs高可用集群    Openstack-Mitaka 高可用之 认证服务(keystone)    Openstack-Mitaka

《高可用MySQL》1 – Windows环境下压缩版MySQL安装

近日在读O'REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容. Master-Slave这东西吧.在很多公司都是标配.开发中基本天天都用.遇到的问题自然也不少(如主从不同步,Master宕机).但操作权限很有限.有些东西,仅仅有自己看了.做了,才干真正知道原理是什么,也才干更好的去把握. 本文是高可用MySQL的第一篇读书笔记,主要记录Windows环境下压缩版MySQL(基于安装版的傻瓜式安装过程这里不再提及)的安装过程. 1. 从

《高可用MySQL》读书笔记1 – Windows环境下压缩版MySQL安装

近日在读O'REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天天都用,遇到的问题自然也不少(如主从不同步,Master宕机),但操作权限非常有限.有些东西,只有自己看了.做了,才能真正知道原理是什么,也才能更好的去把握. 本文是高可用MySQL的第一篇读书笔记,主要记录Windows环境下压缩版MySQL(基于安装版的傻瓜式安装过程这里不再提及)的安装过程. 1. 从官

drbd+heartbeat+nfs高可用架构搭建

一.客户需求 1.需求描述 有些客户有自己的存储设备,但是并没有集群文件系统服务,所以如果我们多个节点(计算节点)如果想同时使用其中的一个块且要保证高可用的话,就需要我们自己来完成类似集群文件系统的服务组合,在此我们使用的服务组合是:iscsi共享+drbd+heartbeat+nfs. 2.服务说明 Iscsi共享:这里通过iscsi共享服务将存储设备上的存储块共享出去,提供节点(NC1+NC2)使用,此处我们将在iscsi服务短创建两个镜像充当块设备. Drbd   :服务器之间镜像块设备内

《高可用MySQL》读书笔记2 – 单机版MySQL主从配置

这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave,没有任何的热机备份和多slave),该主从结构的基本拓扑图如下所示: 建立基本的主从复制可以总结为以下三个基本步骤: 配置master服务器 配置slave服务器 将slave连接到master 在配置完成之后,我们会做一个简单的测试,测试复制是否正常. 本文所涉及的master和slave服务器均位于同一台单机上,使用不同的端口号区分,基本的环境为:Window 7 旗舰版 32位,MySQL的版本为5.6.21 .上一

《高可用MySQL》2 – 单机版MySQL主从配置

这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave.没有不论什么的热机备份和多slave),该主从结构的基本拓扑图例如以下所看到的: 建立主要的主从复制能够总结为下面三个基本步骤: 配置masterserver 配置slaveserver 将slave连接到master 在配置完毕之后.我们会做一个简单的測试.測试复制是否正常. 本文所涉及的master和slaveserver均位于同一台单机上.使用不同的port号区分,主要的环境为:Window 7 旗舰版 32位.My

MMM高可用MySQL服务集群解决方案

MMM高可用方案简介 MMM(Master-Master Replication Manager for MySQL)主主复制管理器,是一套提供了MySQL主主复制配置的监控.故障迁移和管理的可伸缩的脚本程序.在MMM高可用解决方案中,可以配置双主多从架构,通过MySQL Replication技术可以实现两台MySQL服务器互为主从,并且在任何时候只有一个节点可以写入,避免多节点写入的数据冲突,同时,当可写节点故障时,MMM套件可以立即监控到,然后将服务自动切换到另一个主节点继续提供服务,从而