为了账号安全,请及时绑定邮箱和手机立即绑定

HA专题: Corosync+Pacemaker+drbd实现MySQL高可用

标签:
MySQL


HA专题: Corosync+Pacemaker+drbd实现MySQL高可用

大纲

前言

实验拓扑

实验环境

实验步骤

安装前准备工作

配置DRBD

配置MySQL

配置Corosync+Pacemaker

测试

我遇到的问题

总结

前言

上篇文章我们介绍了drbd的相关原理、编译安装、简单的实现. drbd虽然可以保证数据的可靠性但是我们上次的实现还有很多的缺陷,这次我们将drbd定义为HA集群的一个资源,可以实现让多个节点自动切换drbd的主从模式并结合MySQL实现其数据的高可用

实验拓扑

blob.png

实验环境

wKiom1cOK92QJvwyAAAvNFDqTq0197.png

实验步骤

安装前准备工作

配置一个HA集群的前提需要配置时间同步, 双机互信, 主机名解析 

由于我们以前的博文已经讲解过如何配置:可以查看HA配置准备工作

配置DRBD

过程不做说明, 看我的上篇博客HA专题: 编译安装并配置DRBD

做成DRBD的设备为/dev/sdb1, 两个节点sdb1都为10G

这里教大家一个小技巧, 使用fdisk非交互分区

1. 创建一个分区文件如下, 输入交互式分区按顺序的命令

    [root@node1 ~]# cat sdb

        n

        p

        1

        1

        10G

        w

2. 使用输入重定向, 如下即可完成

    [root@node1 ~]# fdisk /dev/sdb < sdb 

[root@node1 ~]# yum groupinstall "Development Tools" "Server Platform Development" --nogpgcheck -y

[root@node1 ~]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz

[root@node1 ~]# tar xf drbd-8.4.4.tar.gz -C /usr/src/

[root@node1 ~]# cd /usr/src/drbd-8.4.4/

[root@node1 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --sysconf=/etc/ --with-km

[root@node1 drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-573.el6.x86_64/

[root@node1 drbd-8.4.4]# make install

[root@node1 drbd-8.4.4]# cp drbd/drbd.ko /lib/modules/2.6.32-573.el6.x86_64/kernel/lib/

[root@node1 drbd-8.4.4]# depmod

[root@node1 drbd-8.4.4]# modprobe drbd

drbd配置文件如下, 仅供参考

[root@node1 drbd-8.4.4]# grep -v "[[:space:]]#" /etc/drbd.d/global_common.conf 

global {

    usage-count yes;

}

common {

    handlers {

    }

    startup {

    }

    options {

    }

    disk {

        on-io-error detach;

    }

    net {

        cram-hmac-alg "sha1";

        shared-secret "anyisalin.com";

    }

    syncer {

        rate 1000M;

    }

}

资源配置文件如下

[root@node1 drbd-8.4.4]# cat /etc/drbd.d/data.res 

resource data {

    device /dev/drbd0;

    disk /dev/sdb1;

    meta-disk internal;

    on node1.anyisalin.com {

        address 172.16.1.2:7789;

    }

    on node2.anyisalin.com {

        address 172.16.1.3:7789;

    }

}

node2将以上操作重复一遍后, 进行如下操作

[root@node1 drbd-8.4.4]# drbdadm create-md data   #node1上操作

[root@node2 drbd-8.4.4]# drbdadm create-md data   #node2上操作

[root@node1 drbd-8.4.4]# service drbd start       #node1上操作

[root@node2 drbd-8.4.4]# service drbd start       #node2上操作

[root@node1 drbd-8.4.4]# cat /proc/drbd  #查看进度, 等待同步完成

[root@node1 drbd-8.4.4]# drbdadm primary --force data #node1设置为Primary

[root@node1 drbd-8.4.4]# mkfs.ext4 /dev/drbd0  #格式化文件系统为ext4

配置MySQL

这里通过通用二进制格式进行安装

[root@node1 ~]# service drbd start

[root@node1 ~]# mount /dev/drbd0 /data/  #挂载dbrd设备到/data下

[root@node1 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz  -C /usr/local/

[root@node1 local]# ln -sv mysql-5.5.33-linux2.6-x86_64/ mysql

[root@node1 local]# groupadd -r -g 3306 mysql

[root@node1 local]# useradd -g mysql -u 3306 -r mysql

[root@node1 local]# cd mysql

[root@node1 mysql]# ./scripts/mysql_install_db --datadir=/data/ --user=mysql

[root@node1 mysql~]# chown mysql:mysql /data/

[root@node1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

[root@node1 mysql]# cp support-files/my-large.cnf /etc/my.cnf  

[root@node1 mysql]# vim /etc/my.cnf   #编辑配置文件, 添加下列字段

datadir = /data

skip_name_resolve = on

innodb_file_per_table = on

测试启动

[root@node1 ~]# service mysqld start

Starting MySQL..                                           [  OK  ]

[root@node1 ~]# /usr/local/mysql/bin/mysql

mysql> GRANT ALL  ON *.*  TO anyisalin@'%' IDENTIFIED BY 'passwd';  #创建用户

Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES ;

Query OK, 0 rows affected (0.00 sec)

mysql> CREATE DATABASE TESTDB; #创建测试数据库

Query OK, 1 row affected (0.00 sec)

为node2配置

[root@node1 ~]# service mysqld stop  #停止MySQL

Shutting down MySQL.                                       [  OK  ]

[root@node1 ~]# umount /data/   

[root@node1 ~]# drbdadm secondary data   #将drbd设置为从模式

同步MySQL的文件到node2上

[root@node1 local]# rsync -av mysql node2.anyisalin.com:/usr/local/ 

[root@node1 local]# rsync -av mysql-5.5.33-linux2.6-x86_64 node2.anyisalin.com:/usr/local/

[root@node1 local]# scp /etc/rc.d/init.d/mysqld node2.anyisalin.com:/etc/rc.d/init.d/

[root@node1 local]# scp /etc/my.cnf node2.anyisalin.com:/etc/

注意: 以下操作在node2执行

[root@node2 ~]# drbdadm primary data   #将drbd设置为主模式

[root@node2 ~]# mkdir /data

[root@node2 ~]# mount /dev/drbd0 /data  #挂载

[root@node2 ~]# groupadd -g 3306 -r mysql  #创建MySQL用户

[root@node2 ~]# useradd -u 3306 -g mysql -r mysql  #创建MySQL用户

[root@node2 ~]# service mysqld start  #启动MySQL

Starting MySQL..                                           [  OK  ]

[root@node2 ~]# mysql -uanyisalin -ppasswd  #使用我们刚才创建的用户登录

mysql> SHOW DATABASES;  #刚创建的数据库还在

+---------------------+

| Database            |

+---------------------+

| information_schema  |

| TESTDB              |

| #mysql50#lost+found |

| mysql               |

| performance_schema  |

+---------------------+

5 rows in set (0.00 sec)

以上操作完成后需要关闭MySQL并卸载挂载的文件系统, 并将每个节点的drbd设置为从模式

配置Corosync+Pacemaker

安装及配置过程不做说明, 可以看我以前的文章 AnyISalIn的文章, crmsh可去SUSE官方站点下载SUSE Centos HA

[root@node1 ~]# yum install corosync pacemaker crmsh -y --nogpgcheck 

[root@node1 ~]# cd /etc/corosync/

[root@node1 corosync]# corosync-keygen

[root@node1 corosync]# chmod 600 authkey 

配置文件如下: /etc/corosync/corosync.conf

[root@node1 corosync]# grep -v "[[:space:]]*#" /etc/corosync/corosync.conf

compatibility: whitetank

totem {

    version: 2

    secauth: on

    threads: 0

    interface {

        ringnumber: 0

        bindnetaddr: 172.16.1.0

        mcastaddr: 239.255.1.1

        mcastport: 5405

        ttl: 1

    }

}

logging {

    fileline: off

    to_stderr: no

    to_logfile: yes

    logfile: /var/log/cluster/corosync.log

    to_syslog: no

    debug: off

    timestamp: on

    logger_subsys {

        subsys: AMF

        debug: off

    }

}

service {

   ver: 0

   name: pacemaker

}

aisexec {

  user: root

  group: root

}

[root@node2 ~]# yum install corosync pacemaker crmsh -y --nogpgcheck 

[root@node2 ~]# scp -p node1.anyisalin.com:/etc/corosync/{authkey,corosync.conf} /etc/corosync/

在两个节点上启动corosync

[root@node1 ~]# service corosync start

[root@node1 ~]# ssh node2.anyisalin.com -- /etc/init.d/corosync start

[root@node1 ~]# crm status  #查看节点状态

Last updated: Wed Apr 13 15:07:52 2016

Last change: Wed Apr 13 15:07:22 2016

Stack: classic openais (with plugin)

Current DC: node2.anyisalin.com - partition with quorum

Version: 1.1.11-97629de

2 Nodes configured, 2 expected votes

0 Resources configured

Online: [ node1.anyisalin.com node2.anyisalin.com ]

Full list of resources:

配置资源

crm(live)# configure

crm(live)configure# edit    #配置如下, 仅供参考

node node1.anyisalin.com \

        attributes standby=on

node node2.anyisalin.com \

        attributes standby=off

primitive data_drbd ocf:linbit:drbd \

        params drbd_resource=data \

        op monitor role=Master interval=10s timoue=20s \

        op monitor role=Slave interval=20s timeout=20s \

        op start interval=0 timeout=240 \

        op stop interval=0 timeout=120

primitive myip IPaddr \

        params ip=172.16.1.8

primitive mysql service:mysqld

primitive mysqldatafs Filesystem \

        params device="/dev/drbd0" directory="/data" fstype=ext4 \

        op start interval=0 timeout=60 \

        op stop interval=0 timeout=60

ms MS_data_drbd data_drbd \

        meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

colocation myip_with_mysql inf: myip mysql

order mysql_after_mysqldatafs inf: mysqldatafs mysql

colocation mysql_with_mysqldatafs inf: mysql mysqldatafs

order mysqldatafs_afer_MS_data_drbd inf: MS_data_drbd:promote mysqldatafs:start

colocation mysqldatafs_with_MS_data_drbd inf: mysqldatafs MS_data_drbd:Master

property cib-bootstrap-options: \

        dc-version=1.1.11-97629de \

        cluster-infrastructure="classic openais (with plugin)" \

        expected-quorum-votes=2 \

        stonith-enabled=false \

        last-lrm-refresh=1460541144 \

        no-quorum-policy=ignore

测试

现在node1是Master

blob.png

连接数据库进行测试

blob.png

我们先将node1 standby

blob.png

再次连接数据进行测试

blob.png

查看drbd的状态

blob.png

我遇到的问题

这个实验我做了很久, 遇到了很多的问题, 大部分通过自己的排查和Google都解决了, 所以特定写下来希望能够帮助大家排查错误

在CentOS6.X的系统中很可能出现连接不到CIB的问题, 错误提示信息could not establish cib_ro connection: connection refused (111)


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消