mysql+drbd+corosync+pacemaker实现mysql高可用

mysql+drbd实现高可用


dbrd可以实现数据的同步,drbd一般是一主一从,所有的读写操作,挂载只能在主节点上进行。drbd主从节点可以调换。
通过corosync+pacemaker实现drbd主从点挂掉后能自动切换到从节点上,实现故障转移继续提供服务。
因此可以将mysql的数据放置到drbd数据块上。


环境:
系统:centos6.6 x86_64
主机: node3.exmaple.com node4.example.com 
IP: node3 eth0:192.168.18.13 eth1:10.0.0.13 
node4 eth0:192.168.18.14 eth1:10.0.0.14 
VIP eth0:1 192.168.18.144 
备注:
eth1用于2个节点间心跳信息的传递
2个节点上各有一块5G的/dev/sdb磁盘用于drbd

软件包:mysql5.6.21通用二进制包,corosync1.4.7,pacemaker1.1.12,crmsh2.1,drbd8.4.3


一、配置环境
备注:在2个节点间进行同样操作
1、 关闭防火墙、selinux
#service iptables stop 
#chkconfig iptables off

将selinux改为disabled

2、2个节点间时间同步
#ntpdate ntpdate ntp.sjtu.edu.cn

3、2个节点间建立主机互信

#vim /etc/hosts 添加节点间名称解析
192.168.18.13 node3.example.com node3
192.168.18.14 node4.example.com node4

# ssh-keygen -t rsa 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in y.
Your public key has been saved in y.pub.
The key fingerprint is:
cb:0b:f4:48:bf:4c:86:6d:92:a2:5d:5d:1e:48:cd:59 root@node3.example.com
The key's randomart image is:
+--[ RSA 2048]----+
|            E    |
|         o o     |
|        . +      |
|       . .       |
|      o S o      |
|     o X + .     |
|    . B @ .      |
|   o o B o       |
|  . .   +        |
+-----------------+
#ssh-copy-id -i /root/.ssh/id_rsa.pub node4

二、安装配置corosync+pacemaker (2个节点)
1、yum安装corosync、pacemaker、crmsh
#yum -y install corosync pacemaker crmsh 
备注:如果想安装更高版本的corosync、pacemaker、crmsh,需要配置yum源
[hacluster]
name=HA cluster
baseurl=http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/
enabled=1
gpgcheck=0

2、配置corosync
#cd /etc/corosync/
#cp corosync.conf.example corosync.conf
#vim corosync.conf
compatibility: whitetank
totem { //心跳信息传递层
version: 2 //版本
secauth: on //是否开启集群间安全认证,需要通过corosync-keygen创建密钥
threads: 0 //0表示不限制集群间的线程数
interface { //定义心跳信息传递的接口
ringnumber: 0
bindnetaddr: 10.0.0.0 //绑定的网络地址,网络号
mcastaddr: 226.95.1.1 //多播地址,采用多播的方式,可以有其他选择,如单播、广播
mcastport: 5405 //端口
ttl: 1 //生存周期
}
}
logging { //集群信息日志
fileline: off //常用于debug
to_stderr: no //是否输出错误到前端显示
to_logfile: yes //是否启用日志文件
logfile: /var/log/cluster/corosync.log //集群日志文件
to_syslog: no //是否启用syslog来记录日志,不用启用,因为上面已经定义了日志文件
debug: off //debug用途
timestamp: on //s是否开启时间戳
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode:disabled
}
service {
name: pacemaker //使pacemaker作为corosync的插件,当corosync启动时pacemaker也会被启用
ver: 0
}
aisexec {
user: root
group: root
}
3、生成集群节点间认证密钥
#mv /dev/random /dev/random.bak
#ln -sv /dev/urandom /dev/random 
#corosync-keygen 
此时在corosync目录下会生成authkey文件

4、将corosync配置文件及认证密钥传递到另一节点
#scp corosync.conf authkey node4:/etc/corosync/


5、启动corosync查看相关信息
#service corosync start
#ssh node4 'service corosync start' 

5.1 查看corosync引擎是否正常启动
#grep -e "Corosync Cluster Engine" -e "Configuration file" /var/log/cluster/corosync.log 

5.2 查看初始化成员节点通知是否正常发出
#grep TOTEM /var/log/cluster/corosync.log 

5.3 检查启动过程是否有错误产生(可忽略)。
#grep ERROR /var/log/cluster/corosync.log 
备注:此时会报有stonith错误,因为corosync默认启动stonith功能,稍后会配置禁用此功能。

5.4 查看pacemaker是否正常启动
#grep pcmk_startup /var/log/cluster/corosync.log 

5.5 查看集群状态
#crm_mon 或#crm status 
备注:查看节点是否online,并看下DC是哪个节点。另外,会显示 0 resources configured ,因为集群中暂没配置任何资源,接下来使用pacemaker配置资源。


三、安装配置drbd(2个节点)
1、编译安装drbd-8.4.3
#tar xf drbd-8.4.3.tar.gz
#cd drbd-8.4.3
# ./configure --prefix=/usr/local/drbd --with-km 
备注:--with-km是启用内核模块 
# make KDIR=/usr/src/kernels/2.6.32-504.1.3.el6.x86_64
备注:KDIR,内核源码路径需要根据系统实际情况修改
#make install 
#mkdir -p /usr/local/drbd/var/run/drbd 
#cp /usr/local/drbd/etc/rc.d/drbd /etc/rc.d/init.d/ 
#chkconfig --add drbd 
#chkconfig drbd off 

安装drbd模块
#cd /root/soft/drbd-8.4.3/drbd 
#make clean 
#make KDIR=/usr/src/kernels/2.6.32-504.1.3.el6.x86_64
#cp drbd.ko /lib/modules/2.6.32-504.1.3.el6.x86_64/kernel/lib/ 
#modprobe drbd 
查看模块是否加载成功
[root@node1 ~]# lsmod |grep drbd
drbd                  310236  4 
libcrc32c               1246  1 drbd
有这2个说明模块加载成功

备注:在另一节点上进行同样操作


2、配置drbd配置文件
drbd的配置文件在/usr/local/drbd/etc目录下的drbd.conf文件以及drbd.d目录下的global_common.conf配置文件
# cat drbd.conf //定义drbd启动读取哪些配置文件
# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";

# grep -v '#' global_common.conf|grep -v '^$' //定义全局属性
global {
usage-count no;
}
common {
handlers {
pri-on-incon-degr "/usr/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/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/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
}
options {
}
disk {
on-io-error detach; //配置IO错误处理策略为分离
}
net {
cram-hmac-alg "sha1";
shared-secret "drbdmysqltest";
}
syncer {
rate 10M;
}
}

# ln -sv /usr/local/drbd/lib/drbd /usr/lib/drbd 

添加drbd路径,以便使用drbd-overview命令
#echo "PATH=$PATH:/usr/local/drbd/sbin" >> /etc/profile.d/drbd.sh 
#chmod +x /etc/profile.d/drbd.sh 
#source /etc/profile.d/drbd.sh 

3、准备磁盘
将2个节点上的/dev/sdb进行分区,/dev/sdb1,此时不用格式化 

4、定义drbd的mysql资源
在drbd.d目录下新建一个mysql.res文件,如下:
[root@node3 drbd.d]# cat mysql.res 
resource mysql { //资源名为mysql
device /dev/drbd0; //指定设备文件
disk /dev/sdb1; //指定磁盘
meta-disk internal;
on node3.example.com { //定义节点
address 192.168.18.13:7789;
}

on node4.example.com { 
address 192.168.18.14:7789;
}
}


5、将dbrd配置文件复制一份到另一节点上
#scp drbd.d/* node4:/usr/local/drbd/etc/drbd.d/ 

6、分别在节点上初始化资源
#drbdadm create-md mysql 

7、在2个节点上分别启动drbd服务
#service drbd start 

查看资源同步状态
#drbd-overview
此时2个节点均为secondary级别

选择一个节点,启动初始化,并定义为primary主节点
#drbdadm -- --overwrite-data-of-peer primary mysql 

此时查看将会发现node3为主节点,在此节点上格式化/dev/drbd0为mysql做准备

四、安装配置mysql
1、只在drbd主节点上进行格式化操作
#mkfs.ext4 /dev/drbd0


2、分别在2个node上创建/mydata目录
#mkdir /mydata 

3、在主节点上挂载/dev/drbd0 
#mount /dev/drbd0 /mydata 
#mkdir /mydata/data 

4、安装mysql5.6.21 (2个节点上)
#tar xf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
#cd /usr/local/
#ln -sv mysql-5.6.21-linux-glibc2.5-x86_64 mysql 

# groupadd mysql
#useradd -r -g mysql mysql
创建mysql组,mysql系统用户
#cd mysql
#chown -R mysql.mysql *

初始化mysql
#./scripts/mysql_install_db --no-defaults --datadir=/mydata/data/ --user=mysql
# cp support-files/mysql.server /etc/init.d/mysqld
#chmod +x /etc/init.d/mysqld
#mv my.cnf /mydata/
#chown -R mysql.mysql /mydata 
#chgrp root /mydata/my.cnf 
#chmod 644 /mydata/my.cnf 
#chmod 775/mydata/data 

编辑my.cnf 
[mysqld]
basedir=/usr/local/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
server_id=1
log-bin=mysql
binlog_format=mixed
datadir=/mydata/data
socket=/tmp/mysql.sock
innodb_file_per_table=ON
pid_file=/var/run/mysqld.pid
autocommit=OFF
transaction-isolation=REPEATABLE-READ

#touch /var/run/mysqld.pid 
#chmod 660 /var/run/mysqld.pid 
#chown mysql.mysql /var/run/mysqld.pid 

启动mysql服务,查看是否成功
#service mysqld start 
#chkconfig mysqld off 
#chkconfig drbd off 

5、 卸载/dev/drbd0,drbd降级 
#service mysqld stop 
#drbdadm secondary mysql 

6、在另一节点上验证mysqld服务
备注: 在node4节点上安装mysql时,不需要进行mysql初始化操作
#drbd-overview 
此时查看会发现2个节点均为secondary。将node4升级为primary。

#drbdadm primary mysql 
#mount /dev/drbd0 /mydata 
此时查看/mydata目录下是否有my.cnf级data目录

启动mysqld服务进行验证
#service mysqld start 
#chkconfig mysqld off 
#chkconfig drbd off 

停止mysqld,drbd服务
#service mysqld stop 


#umount /dev/drbd0 
#drbdadm secondary mysql 
#service drbd stop 
备注: 2个节点此时都需要停止mysqld,drbd服务

五、高可用配置
在任一节点进行配置即可。
1、全局属性配置 
#crm configure 
crm(live)configure# property stonith-enabled=false
crm(live)configure# property no-quorum-policy=ignore
备注:由于只有2个节点且没有stonith设备,因此需要禁用stonith功能并且忽视投票策略。

2、定义资源
基本内容:
查看集群支持的资源代理类型(ra)
crm(live)ra# classes
lsb
ocf / heartbeat linbit pacemaker
service
stonith

查看ra下支持的资源
crm(live)ra#list lsb|ocf

查看资源定义方法
crm(live)ra#info ocf:heartbeat:IPaddr2 

备注:考虑有哪些需要被定义的资源,drbd,mysqld,文件系统,vip,drbd主从资源
2.1 定义VIP基本资源
crm(live)configure#primitive myvip ocf:heartbeat:IPaddr \
params ip=192.168.18.144 cidr_netmask=24 nic="eth0:1" \
op monitor interval=20 timeout=20 on-fail=restart
备注:
nic指定VIP运配置在哪块网卡上,本例中配置在eth0的子网卡上。 
op 指定动作 

2.2 定义drbd基本资源
crm(live)configure#primitive mysql_drbd ocf:linbit:drbd \
params drbd_resource=mysql drbdconf="/usr/local/drbd/etc/drbd.conf" \
op monitor role=Master interval=10 timeout=20 \
op monitor role=Slave interval=20 timeout=20 \
op start timeout=240 interval=0 \
op stop timeout=100 interval=0
备注: 
drbd_resource='mysql' :指定drbd资源名称mysql (drbd中定义的资源)
drbdconf="/usr/local/drbd/etc/drbd.conf": 如果是yum安装的drbd此时需要指定drbd配置文件;由于本环境中drbd是编译安装,此时需要指定配置文件路径

由于drbd资源是主从类型,因此需要定义为ms类型资源
2.3 定义drbd主从资源
crm(live)configure#ms ms_mysql_drbd mysql_drbd \
meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

2.4 定义文件系统基本资源
crm(live)configure#primitive  mystore ocf:heartbeat:Filesystem \
params device="/dev/drbd0" directory="/mydata" fstype=ext4 \
op monitor interval=40 timeout=40 \
op start timeout=60 interval=0 \
op stop timeout=60 interval=0

2.5 定义mysqld基本资源
crm(live)configure#primitive mysqld lsb:mysqld \
op monitor interval=20 timeout=20 on-fail=restart

备注:LSB风格的服务均可以使用lsb资源代理(ra)

3、定义约束
crm资源约束有location、colocation、order约束
location:资源对节点的偏好,和资源粘性效果一样
colocation:排序约束,哪些资源运行在一个节点上的可能性
order:顺序约束,资源启动的先后顺序

备注:
资源启动顺序考虑:drbd--->Filesystem--->vip--->mysqld
资源运行同一节点考虑: 所有资源都要运行在一个节点上

3.1 定义位置约束
crm(live)configure#colocation c_mysqld_with_mystore inf: mysqld mystore
crm(live)configure#colocation c_mystore_with_ms_mysql_drbd inf: mystore ms_mysql_drbd:Master
crm(live)configure#colocation c_myvip_with_mysqld inf: myvip mysqld
备注:inf表示正无穷

3.2 定义顺序约束
crm(live)configure#order ms_mysql_drbd_before_mystore Mandatory: ms_mysql_drbd:promote mystore:start
crm(live)configure#order mystore_before_mysqld Mandatory: mystore:start mysqld:start
crm(live)configure#order myvip_before_mysqld Mandatory: myvip mysqld

TPS:
crm(live)configure#verify //进行配置验证
crm(live)configure#commit //提交配置
通过心跳信息进行节点间配置同步
crm(live)configure#show //查看配置
crm(live)configure#edit //以文本形式显示当前配置,可以再次编辑修改
crm(live)configure#bye //退出crmsh

六、查看集群节点间资源分配状态
#crm status 
如果此时显示节点offline,可以使用下面命令启动节点
#crm node online node3.exmaple.com 

查看集群资源
#crm reosurce show 

如果有错误,执行下面命令重新分配资源
#crm resource cleanup mysql_drbd 资源名称

七、测试
如果此时资源均运行在node3节点上,手动将node3节点standby,查看节点是否转移到node4节点
#crm node standby node3.exmaple.com 
#crm status 











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值