设为首页 收藏本站
查看: 1058|回复: 0

[经验分享] HA专题: Corosync+Pacemaker+drbd实现MySQL高可用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-14 09:49:55 | 显示全部楼层 |阅读模式
大纲
  • 前言
  • 实验拓扑
  • 实验环境
  • 实验步骤

    • 安装前准备工作
    • 配置DRBD
    • 配置MySQL
    • 配置Corosync+Pacemaker

  • 测试
  • 我遇到的问题
  • 总结

前言
上篇文章我们介绍了drbd的相关原理、编译安装、简单的实现. drbd虽然可以保证数据的可靠性但是我们上次的实现还有很多的缺陷,这次我们将drbd定义为HA集群的一个资源,可以实现让多个节点自动切换drbd的主从模式并结合MySQL实现其数据的高可用
实验拓扑
1460545757332669.png
实验环境 QQ截图20160414092922.png
实验步骤
安装前准备工作

    配置一个HA集群的前提需要配置时间同步, 双机互信, 主机名解析
    由于我们以前的博文已经讲解过如何配置:可以查看HA配置准备工作

配置DRBD

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

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

这里教大家一个小技巧, 使用fdisk非交互分区
1. 创建一个分区文件如下, 输入交互式分区按顺序的命令

    [iyunv@node1 ~]# cat sdb
        n
        p
        1
        1
        10G
        w

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

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

[iyunv@node1 ~]# yum groupinstall "Development Tools" "Server Platform Development" --nogpgcheck -y
[iyunv@node1 ~]# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
[iyunv@node1 ~]# tar xf drbd-8.4.4.tar.gz -C /usr/src/
[iyunv@node1 ~]# cd /usr/src/drbd-8.4.4/
[iyunv@node1 drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --sysconf=/etc/ --with-km
[iyunv@node1 drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-573.el6.x86_64/
[iyunv@node1 drbd-8.4.4]# make install
[iyunv@node1 drbd-8.4.4]# cp drbd/drbd.ko /lib/modules/2.6.32-573.el6.x86_64/kernel/lib/
[iyunv@node1 drbd-8.4.4]# depmod
[iyunv@node1 drbd-8.4.4]# modprobe drbd



drbd配置文件如下, 仅供参考
[iyunv@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;
    }
}


资源配置文件如下
[iyunv@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将以上操作重复一遍后, 进行如下操作

[iyunv@node1 drbd-8.4.4]# drbdadm create-md data   #node1上操作
[iyunv@node2 drbd-8.4.4]# drbdadm create-md data   #node2上操作
[iyunv@node1 drbd-8.4.4]# service drbd start       #node1上操作
[iyunv@node2 drbd-8.4.4]# service drbd start       #node2上操作
[iyunv@node1 drbd-8.4.4]# cat /proc/drbd  #查看进度, 等待同步完成
[iyunv@node1 drbd-8.4.4]# drbdadm primary --force data #node1设置为Primary
[iyunv@node1 drbd-8.4.4]# mkfs.ext4 /dev/drbd0  #格式化文件系统为ext4

配置MySQL

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

[iyunv@node1 ~]# service drbd start
[iyunv@node1 ~]# mount /dev/drbd0 /data/  #挂载dbrd设备到/data下
[iyunv@node1 ~]# tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz  -C /usr/local/
[iyunv@node1 local]# ln -sv mysql-5.5.33-linux2.6-x86_64/ mysql
[iyunv@node1 local]# groupadd -r -g 3306 mysql
[iyunv@node1 local]# useradd -g mysql -u 3306 -r mysql
[iyunv@node1 local]# cd mysql
[iyunv@node1 mysql]# ./scripts/mysql_install_db --datadir=/data/ --user=mysql
[iyunv@node1 mysql~]# chown mysql:mysql /data/
[iyunv@node1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[iyunv@node1 mysql]# cp support-files/my-large.cnf /etc/my.cnf  

[iyunv@node1 mysql]# vim /etc/my.cnf   #编辑配置文件, 添加下列字段
datadir = /data
skip_name_resolve = on
innodb_file_per_table = on


测试启动
[iyunv@node1 ~]# service mysqld start
Starting MySQL..                                           [  OK  ]

[iyunv@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配置

[iyunv@node1 ~]# service mysqld stop  #停止MySQL
Shutting down MySQL.                                       [  OK  ]

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

同步MySQL的文件到node2上
[iyunv@node1 local]# rsync -av mysql node2.anyisalin.com:/usr/local/
[iyunv@node1 local]# rsync -av mysql-5.5.33-linux2.6-x86_64 node2.anyisalin.com:/usr/local/
[iyunv@node1 local]# scp /etc/rc.d/init.d/mysqld node2.anyisalin.com:/etc/rc.d/init.d/
[iyunv@node1 local]# scp /etc/my.cnf node2.anyisalin.com:/etc/

注意: 以下操作在node2执行
[iyunv@node2 ~]# drbdadm primary data   #将drbd设置为主模式
[iyunv@node2 ~]# mkdir /data
[iyunv@node2 ~]# mount /dev/drbd0 /data  #挂载
[iyunv@node2 ~]# groupadd -g 3306 -r mysql  #创建MySQL用户
[iyunv@node2 ~]# useradd -u 3306 -g mysql -r mysql  #创建MySQL用户

[iyunv@node2 ~]# service mysqld start  #启动MySQL
Starting MySQL..                                           [  OK  ]

[iyunv@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

[iyunv@node1 ~]# yum install corosync pacemaker crmsh -y --nogpgcheck
[iyunv@node1 ~]# cd /etc/corosync/
[iyunv@node1 corosync]# corosync-keygen
[iyunv@node1 corosync]# chmod 600 authkey

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

[iyunv@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
}


[iyunv@node2 ~]# yum install corosync pacemaker crmsh -y --nogpgcheck
[iyunv@node2 ~]# scp -p node1.anyisalin.com:/etc/corosync/{authkey,corosync.conf} /etc/corosync/


在两个节点上启动corosync
[iyunv@node1 ~]# service corosync start
[iyunv@node1 ~]# ssh node2.anyisalin.com -- /etc/init.d/corosync start

[iyunv@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

1460545794748445.png


连接数据库进行测试

1460545776380515.png

我们先将node1 standby

1460545801391024.png

再次连接数据进行测试

1460545806356879.png

查看drbd的状态

1460545811287070.png

我遇到的问题
这个实验我做了很久, 遇到了很多的问题, 大部分通过自己的排查和Google都解决了, 所以特定写下来希望能够帮助大家排查错误
  • 在CentOS6.X的系统中很可能出现连接不到CIB的问题, 错误提示信息could not establish cib_ro connection: connection refused (111)
    解决方法: 排除是自己的问题之后, 使用互联网上的各种软件仓库之一对pacemaker更新后并重启corosync即可解决
  • 在手动配置DRBD资源前一定配置好DBRD, 如果DRBD的配置有问题会影响整体效果
    我在这里说一下我的问题, 做DRBD的之前我在node2创建分区, 分完后忘记partx -a /dev/sdb,但是很奇怪的是, DRBD竟然配置成功了,并且两个节点都能手动切换主从和挂载, 数据也没问题!!!!, 到了最后做两个节点自动切换资源的时候, 资源总是默认倾向于node1节点并且不能切换到node2, 最后才排查出来并解决



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-203809-1-1.html 上篇帖子: Mysql安装 下篇帖子: mysql5.6,基于GTID的主从同步与延迟复制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表