mysql双主环境搭建corosync+drbd+mysql

一、搭建环境

2台虚拟机

操作系统centos6.3

二、ip地址规划

node1   172.30.82.45

node2      172.30.82.58

VIP        172.30.82.61

三、注意:

1、设置各个节点间的时间同步,ntpdate 172.30.82.254 &>/dev/null

2、基于hosts文件实现能够互相用主机名访问,修改/etc/hosts文件

172.30.82.45node1

172.30.82.58node2

node1上执行:

ssh-keygen -t rsa -P ""

ssh-copy-id -i ~/.ssh/id_rsa.pub  node2

node2上执行:

ssh-keygen -t rsa -P ""

ssh-copy-id -i ~/.ssh/id_rsa.pub  node1

3、确保uname -n结果与主机名相同

4、清空iptatables规则

iptabesl -L;chkconfig iptabels off

5、关闭selinux,setenfroce 0

四、安装相关软件

yum update -y  
pssh-2.3.1-4.1.x86_64.rpm crmsh-2.1-1.6.x86_64.rpm  python-pssh-2.3.1-4.1.x86_64.rpm下载地址
http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/x86_64/
yum install corosync pacemaker –y
yum install -y python-dateutil python-lxml redhat-rpm-config cluster-glue cluster-glue-libs resource-agents
yum --nogpgcheck localinstall pssh-2.3.1-4.1.x86_64.rpm crmsh-2.1-1.6.x86_64.rpm  python-pssh-2.3.1-4.1.x86_64.rpm
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm   
ssh node2 ‘rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm‘   
ssh node2 ‘yum update -y‘   
yum install drbd84-utils kmod-drbd84 -y   
ssh node2 ‘yum install drbd84-utils kmod-drbd84 -y‘
modprobe drbd
ssh node2 ‘modprobe drbd‘

五、修改配置文件

1、拷贝配置文件

cp /etc/corosync.conf.example /etc/corosync.conf

2、生成autokeys文件

 corosync-keygen

3、修改corosync.conf

totem {
        version: 2
        secauth: off                              #是否开启秘钥认证
        threads: 0                                #发送集群节点认证信息使用的进程数
        interface {
                ringnumber: 0                     #为避免冗余环路设定的所在的网络接口
                bindnetaddr: 172.30.82.0          #集群所在网络
                mcastaddr: 239.238.16.1           #集群通告组播地址
                mcastport: 5405                   #服务端口
                ttl: 1
        }
}
logging {
        fileline: off					          #日志是否打印行号
        to_stderr: no                             #是否输出标准错误(到显示器)
        to_logfile: yes                           #定义日志
        logfile: /var/log/corosync.log           
        to_syslog: no                             #是否开启系统日志
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}
service {                                         #服务启动时启动pacemaker
        ver: 0
        name: pacemaker
}

修改drbd配置文件

drbd有3个配置文件/etc/drbd.conf主配置文件,主配置文件包含了

/etc/drbd.d/global_common.conf,drdb启动配置文件

/etc/drbd.d/mydrdb.res(此文件需自己创建),drdb资源配置文件

/etc/drbd.d/global_common.conf  
#global配置段
global {
        usage-count no;
		#装机量统计
}
#common配置段,该配置段不是必须的,但可以用来设定多个resource共有的选项,以减少重复性工作。该配置段中又包含如下配置段:disk、net、startup、syncer和handlers
common {
        protocol C;
		#为保证数据同步安全drbd有3种协议
		#protocol A  异步复制协议,数据写入本地磁盘,且拷贝数据进入本地tcp缓存区,认为主节点的本地操作完成,这种模式,在发生强制故障转移的时候可能发生数据丢失的现象。协议A常用在长距离复制环境中。当它和DRBD代理结合使用的时候,它成为一个有效的灾难恢复解决方案。
		#protocol B  内存同步复制协议,本地磁盘写入完成,且拷贝数据到达对等节点的内存缓存区,认为主节点本地写操作完成。如果节点同时停电,主节点的数据存储将发生不可逆的损坏,大部分最近在主节点中写入完成的数据可能会丢失。
		#protocol C #同步复制协议,只有当本地磁盘和远程磁盘都确认写入完成时,就认为在主节点的本地写操作完成。结果,即使一个节点崩溃,也不会丢失任何数据。唯一丢失数据的可能是两个节点同时崩溃。
        handlers {

                pri-on-incon-degr "/usr/local/drbd/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                pri-lost-after-sb "/usr/local/drbd/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                local-io-error "/usr/local/drbdlib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
        }

        startup {
        }

        options {
        }
#disk配置段,该配置段用来精细地调节drbd底层存储的属性,这是一个非常重要的配置段,如果底层设备(磁盘)发生了错误或损坏,该配置段将按照设定的策略发生作用
	#detach:发生I/O错误的节点将放弃底层设备,以diskless mode继续工作。在diskless mode下,只要还有网络连接,drbd将从secondarynode读写数据,而不需要failover,
	该策略导致一定的损失,但好处也很明显,drbd服务不会中断。官方推荐和默认策略
        disk {
                on-io-error detach;
        }

        net {
        }
#syncer配置段,该配置段用来更加精细地调节服务的同步进程
	#rate:设置同步时的速率,所谓有效可用带宽,是指网络带宽和磁盘读写速度中的最小者,官方提示速率的设定,最好设为有效可用带宽的30%
        syncer {
                rate 1000M;
        }
}

/etc/drbd.d/mydrbd.res 配置文件说明
resource mydrbd {
		定义资源名
        on node1 {
                device          /dev/drbd1;
				#node1节点上drdb设备为/dev/drbd1,我的理解,这是drdb用来截获内存缓存数据的虚拟设备
                disk            /dev/magevg/magelv;
				#lvm磁盘设备
                address         172.30.82.45:7789;
				#drbd运行地址及端口
                meta-disk       internal;
				#元数据是否卸载本地
        }
        on node2 {
                device          /dev/drbd1;
                disk            /dev/magevg/magelv;
                address         172.30.82.58:7789;
                meta-disk       internal;
        }
}

配置完成后将corosync 及drbd的配置文件拷贝到另一节点

scp /etc/{corosync.conf,corosync-keygen} node2:/etc/
scp /etc/drbd.d/{global_common.conf,mydrdb.res} node2:/etc/drbd.d

六、启动服务并测试

a、drbd服务启动及测试

1)在node1,node2上分别创建lvm磁盘设备

fdisk /dev/sdb1
n
p
1
+500M
t
8e
w
/dev/sdb2 同上
pvcreate /dev/sdb{1,2}
vgcreate -s 16M magevg /dev/sdb{1,2}
pvcreate -L 992M -n magelv magevg

2)初始化资源,启动服务,在Node1和Node2上分别执行:

# drbdadm create-md mydrdb
/etc/init.d/drbd start

3)查看启动状态:

[[email protected]]# cat /proc/drbd 
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2015-05-27 23:04:23
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1060184

两个节点都是 Secondary/Secondary 状态

也可以通过如下命令查看drbd状态

[[email protected] sbin]# drbd-overview 
0:mydrbd/0  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

4)将node1节点设置为Primary,执行如下命令:

[[email protected] sbin]# drbdadm  -- --overwrite-data-of-peer primary mydrbd

查看状态,可以发现数据同步过程开始

[[email protected] sbin]# drbd-overview 
0:mydrbd/0  SyncSource Primary/Secondary UpToDate/Inconsistent C r---n- 
[====>...............] sync‘ed: 26.3% (782680/1060184)K

数据同步完成

[[email protected] sbin]# drbd-overview 
0:web  Connected Primary/Secondary UpToDate/UpToDate C r----
drbd 处于主从状态Primary/Secondary

5)创建文件系统:

文件系统只能在primary节点上挂载,因此只能在主节点上对drbd设备格式化

mkfs -t ext4 /dev/drbd1
mkdir /mnt/drbd
mount /dev/drbd1 /mnt/drbd

在drbd设备上新建测试文件

touch /mnt/drbd/{a,b,c}

6)切换primary和secondary节点

对pri/sec模型的drbd,在某一时刻只能由一个节点为primary,因此要切换两个节点角色,只能将原来的primary节点设置为secondary后,才能将原来的secondary节点设置为primary:

umount /mnt/drbd
drbdadm  secondary mydrbd

主节点上查看drbd状态:

[[email protected] ~]# drbd-overview 
0:mydrbd/0  Connected Secondary/Secondary UpToDate/UpToDate C r-----

从节点上查看drbd状态:

[[email protected] ~]# drbd-overview 
0:mydrbd/0  Connected Secondary/Secondary UpToDate/UpToDate C r-----

让从节点成为主节点,drbd8.4第一次设置某节点成为主节点的命令:

[[email protected] var]# drbdadm  primary --force mydrbd

若不是第一次将从节点设为主节点可以使用如下命令:

drbdadm primary mydrbd
mount /dev/drbd1 /mnt/drbd

查看挂载设备文件

[[email protected] drbd]# ll /mnt/drbd
-rw-r--r--  1 root  root     0 6?   4 16:20 a
-rw-r--r--  1 root  root     0 6?   4 16:20 b
-rw-r--r--  1 root  root     0 6?   4 16:20 c

DRBD启动测试已经完成

卸载文件系统,降级node2到secondary状态,为高可用准备

umount /mnt/drbd
[[email protected] sbin]# drbdadm secondary mydrbd

在node1,node2上分别执行

chkconfig drbd off

b、corosync 启动测试

1)在node1上执行

service corosync start
ssh node2 ‘service corosync start‘

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

查看corosync引擎是否正常启动

[[email protected] corosync]#  grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/corosync.log 
May 19 23:11:05 corosync [MAIN  ] Corosync Cluster Engine exiting with status 0 at main.c:2055.
May 19 23:11:46 corosync [MAIN  ] Corosync Cluster Engine (‘1.4.7‘): started and ready to provide service.
May 19 23:11:46 corosync [MAIN  ] Successfully read main configuration file ‘/etc/corosync/corosync.conf‘

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

[[email protected] corosync]# grep  TOTEM  /var/log/corosync.log 
May 19 19:59:44 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
May 19 19:59:44 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
May 19 19:59:44 corosync [TOTEM ] The network interface [172.30.82.45] is now up.
May 19 19:59:44 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

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

[[email protected] corosync]# # grep ERROR: /var/log/corosync.log

查看pacemaker是否正常启动:

May 19 23:11:46 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
May 19 23:11:46 corosync [pcmk  ] Logging: Initialized pcmk_startup
May 19 23:11:46 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
May 19 23:11:46 corosync [pcmk  ] info: pcmk_startup: Service: 9
May 19 23:11:46 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1

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

[[email protected] corosync]# crm status
Last updated: Wed May 20 00:10:38 2015
Last change: Tue May 19 22:49:50 2015
Stack: classic openais (with plugin)
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
2 Resources configured
Online: [ node1 node2 ]

七、安装mysql数据库到/mnt/drdb下,在node1、node2上执行,注意配置文件的一致性

tar -zxvf mysql-5.1.41.tar.gz
cd mysql-5.1.41
./configure --prefix=/mnt/drbd/mysqld
make && make install
cp /mnt/drbd/mysqld/share/mysql/my-huge.cnf  /etc/my.cnf
useradd -s /sbin/nologin mysql
/mnt/drbd/mysqld/bin/mysql_install_db --basedir=/mnt/drbd/mysqld --datadir=/mnt/drbd/mysqld/data --user=mysql
chown  -R mysql.root /mnt/drbd/mysqld
scp /mnt/drbd/mysqld/share/mysql/mysql.server /etc/init.d
chkconfig --add mysqld
chkconfig mysqld off

八、集群资源配置

crm(live)configure# property stonith-enabled=false
定义不启用stonith设备

crm(live)configure# property no-quorum=ignore
当一台高可用服务不可用,集群的默认的仲裁机制为ignore(集群是2台服务器的必须使用此选项)

crm(live)configure# rsc_defaults resource-stickiness=100
定义默认的资源粘性

crm(live)configure#primitive mysqldrbd  ocf:linbit:drbd params drbd_resource=mydrbd op start timeout=240 op stop timeout=100 op monitor role=node1 interval=20 timeout=30 op monitor role=node2 interval=30 timeout=30
说明:mysqldrbd 定义一个集群资源,集群资源的代理是ocf下linbit提供的drbd服务,drbd服务要提供本身的资源mydrbd,资源名定义为drbd_resource,op是对drbd的一些动作、监控的时间限定,role指定了资源的所在主机的角色
定义drbd的高可用,首先定义drbd为基本资源,之后定义drbd为克隆的主从资源
注意:这里只有linbit没有beartbeat,corosync1.4以前的版本有heartbeat

crm(live)configure#ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
说明:ms定义mysqldrbd为主从资源,资源名为ms_mysqldrbd,主从资源一定是克隆类型的,meta对克隆资源的限定
master-max=1 最多个克隆资源被提升为主资源状态(只能由一个克隆资源被提升为主资源)
master-node-max=1  运行主资源的有几个节点(运行主资源的必须只有一个节点)
clone-max=2 一个资源克隆了几份,集群有几个节点就克隆几份
clone-node-max=1 每个节点最多可以运行几个克隆资源
notify=ture 发生故障是否向管理员发起通告

crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/mnt/drbd fstype=ext4 op start timeout=60 op stop timeout=60
定义集群文件系统的存储资源,通过ocf下heartbeat下的Filesystem代理,params指定文件系统的参数,device要挂载的硬件,directory挂载目录,op挂载时间超时设置

crm(live)configure# colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:node1
colocation排列约束指定资源之间的粘合,约束名为mystore_with_ms_mysqldrbd(可以随便起名)
inf: 资源约束分数为正无穷,永远在一起
mystore 与 ms_mysqldrbd 在一起,ms_mysqldrbd 为参照的对象(也就是说它是主体)

crm(live)configure# order mystore_after_ms_mysqldrbd mandatory: ms_mysqldrbd:promote mystore:start
order 定义资源的启动顺序名mystore_after_ms_mysqldrbd 
mandatory: 强制启动顺序
ms_mysqldrbd:promote 先启动 mystore:start 后启动

crm(live)configure# primitive mysqld lsb:mysqld
定义数据库服务资源

crm(live)configure#colocation mysqld_with_mystore inf: mysqld mystore
定义数据库资源约束,数据库服务要与文件系统在一起
crm(live)configure#order mysqd_after_mystore Mandatory: mystore mysqld
数据库运行在文件系统之后

约束关系可以通过xml文件分析查看
crm(live)configure#show xml 

crm(live)configure#primitive params ip=172.30.82.42 nic=eth0 cidr_netmask=255.255.255.0
定义一个虚拟ip集群资源
crm(live)configure#crm(live)configure#colocation myip_with_ms_mysqldrdb inf: ms_mysqldrbd:Master myip
定义虚拟ip要与主资源运行在一起

九、资源自动切换

node1上执行
[[email protected] mysql]# crm status
Last updated: Thu Jun  4 17:02:13 2015
Last change: Thu Jun  4 16:19:45 2015
Stack: classic openais (with plugin)
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
5 Resources configured

Online: [ node1 node2]

 Master/Slave Set: ms_mysqldrbd [mysqldrbd]
     Masters: [ node1 ]
     Stopped: [ node2 ]
 mystore        (ocf::heartbeat:Filesystem):    Started node1 
 mysqld (lsb:mysqld):   Started node1
 myip	(ocf::heartbeat:IPaddr): 			Started node1

测试是否可以连接数据库

 mysql -uroot -h172.30.82.61
 show databases;

切换节点:

[[email protected] mysql]# crm node standby
[[email protected] drbd]# crm status
Last updated: Thu Jun  4 17:09:03 2015
Last change: Thu Jun  4 17:08:58 2015
Stack: classic openais (with plugin)
Current DC: node1 - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
5 Resources configured

Node node1: standby
Online: [ node2 ]

 Master/Slave Set: ms_mysqldrbd [mysqldrbd]
     Masters: [ node2 ]
     Stopped: [ node1 ]
 mystore        (ocf::heartbeat:Filesystem):    Started node2 
 mysqld (lsb:mysqld):   Started node2 
 myip	(ocf::heartbeat:IPaddr): 			Started node2

测试是否可以连接数据库

 mysql -uroot -h172.30.82.61
 show databases;

申明,学了马哥教育视频最终完成了这篇博客,因为环境不同所以在软件安装及配置上遇到了很多麻烦,感悟是看会了与做对了差距不是一点点

时间: 2024-09-29 06:53:37

mysql双主环境搭建corosync+drbd+mysql的相关文章

MySQL双主环境复制延时故障处理

故障现象生产中的一组MySQL双主(主库A和主库B)+Keepalived高可用单写(主库A),出现B库高延时问题.检查B库复制状态如下图1:(B库的复制状态-图1)问题分析1.和开发人员确认,这组MySQL双主每天有批量的数据导入操作,业务是网站展示前一天股票大盘指数,数据是由脚本批量导入,从而产生了复制延时.2.通过对导数据脚本分析,导数据是对一个表先进行delete后进行insert操作:股指大盘展示数据只保留一天数据,因此确认不需要保留前一天数据,修改脚本先truncate表后inser

Mysql + canal + zookeeper环境搭建

Mysql + canal + zookeeper环境搭建 一.mysql集群搭建 1. mysql基本环境 操作系统: Linux version 2.6.32-431.el6.x86_64 数据库:MySQL Community Server 5.7.20 主节点IP:10.60.81.157 主节点IP:10.60.81.158 从节点IP:10.60.81.159 2. 安装mysql 2.1.官网下载MySQL mysql-5.7.20-1.el6.x86_64.rpm-bundle.

mysql双主安装

mysql双主安装(一) mysql双主安装之mysql软件安装 (两个节点都执行) 一.环境介绍 CentOS7.6+Mysql 8.0.18 二.安装步骤 2.1.环境检查 由于CentOS自带mariadb,在安装mysql时会出现冲突 因而在安装mysql前先卸载mariadb 卸载系统自带mariadb-libs,否则会导致无法安装mysql-community-libs. # rpm -qa|grep mariadb mariadb-libs-5.5.64-1.el7.aarch64

基于keepalived搭建mysql双主高可用

目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能把人肉去恢复故障,既不想引用中间件也不想人肉恢复故障,可以折中选择双主方案,本文将介绍通过keepalived搭建mysql双主方案. 本例中vip为:172.16.0.169,  两台mysql实例服务器ip分别为:172.16.0.1和172.16.0.2 转帖请注明来源: https://my

CentOS-7.5 搭建 MySQL 双主

MySQL双主:两台MySQL服务器互为主从 一.实验环境两台同样配置的CentOS-7.5虚拟机:两台虚机的防火墙+selinux均关闭:两台虚机均可以上外网:master_a:CentOS-1(192.168.218.128)master_b:CentOS-2 (192.168.218.136) 二.安装MySQL服务 1)两台服务器同时安装MySQL服务说明:因为本人之前已经写过"CentOS-7.5 安装 社区版 MySQL-5.7"这样的博文,所以在此就不在做重复性动作了:两

通过KeepAlived搭建MySQL双主模式的高可用集群系统

企业级MySQL集群具备高可用.可扩展.易管理.低成本的特点.下面将介绍企业环境中经常应用的一个解决方案,即MySQL的双主互备架构,主要设计思路是通过MySQL Replication技术将两台MySQL Server互相将对方作为自己的Master,自己又同时作为对方的Slave来进行复制.这样就实现了高可用构架中的数据同步功能,同时,将采用KeepAlived来实现Mysql的自动failover.在这个构架中,虽然两台MySQL Server互为主从,但同一时刻只有一个MySQL Ser

corosync+drbd+mysql实现的高可用

要求: 一.能够在同一网段内直接通信 二.节点名称,要和uname的结果一样,并保证可以根据节点名称解析到节点的IP地址,配置本地/etc/hosts 三.SSH互信通信 四.保证时间同步 环境准备配置: test1,192.168.10.55配置 1.配置IP地址 [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 2.配置主机名 [[email protected] ~]# uname -n [[email

keepalived+mysql双主

       mysql高可用keepalived+mysql双主 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC. 本节主要介绍了利用 keepalived 实现 MySQL 数据库的高可用. Keepalived+mysql双主来实现MySQL-HA,我们必须保证两台MySQL数据库的数据完全一样,基本思路是两台MySQL互为主从关系,通过Keepalived配

MySQL 高可用性之keepalived+mysql双主

生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台MySQL服务器如果其中有一台MySQL服务器挂掉后,另外一台能立马接替其进行工作. MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC. 这里将主要介绍了利用 keepalived 实现 MySQL数据库的高可用. Keepalived+mysql双主来实现MySQL-HA,我们必须保