corosync+pacemaker+drbd+mysql来实现mysql的高可用和数据的同步

实现拓扑图:

实验流程:

    先对两主机安装上corosync和pacemaker

    两主机安装drbd服务,并且设置好drbd的组设备

    选择drbd主节点上,进行数据库的初始化

    进行资源的定义和配置

    测试

实验前,我们还需要做一些准备工作:

1、时间必须保持同步

  使用ntp服务器

2、节点必须名称互相通信

   解析节点名称

   /etc/host

   集群中使用的主机名为`uname -n`表示的主机名;

3、ping node

   仅偶数节点才需要;

4、ssh密钥认证进行通信;

实验步骤:

安装corosync和pacemaker:

yum install corosync pacemaker -y

配置corosync,同时让pacemaker在corosync以插件的方式运行:

vim /etc/corosync/corosync.conf

compatibility: whitetank

totem {
        version: 2
        secauth: off
        threads: 0
        interface {
                ringnumber: 0
                bindnetaddr: 172.16.100.0
                mcastaddr: 226.94.1.1
                mcastport: 5405
                ttl: 1
        }
}
service {
        ver: 0
        name: pacemaker
}
aisexec {
        user: root
        group: root
}

logging {
        fileline: off
        to_stderr: no
        to_logfile: yes
        to_syslog: yes
        logfile: /var/log/cluster/corosync.log
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
        }
}

amf {
        mode: disabled
}

为corosync服务提供密钥文件:

corosync-keygen

然后,我们需要把这些配置都要往另一个主机上配置一次。

安装drbd,并且进行全局配置和配置drbd组资源的定义:

这里说明一下,我已经把分区准备好了,且容量一样,分区为/dev/sdb1

rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm(这个包的后缀要与你uanme -r的一致)

vim /etc/drbd.d/global_common.conf 配置drbd全局配置文件
global {
        usage-count no;        # minor-count dialog-refresh disable-ip-verification}

common {
        protocol C;
        handlers {                # These are EXAMPLE handlers only.
                # They may have severe implications,
                # like hard resetting the node under certain circumstances.
                # Be careful when chosing your poison.

                # local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }

        startup {                # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
        }

        options {                # cpu-mask on-no-data-accessible
        }

        disk {                # size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
                # disk-drain md-flushes resync-rate resync-after al-extents
                # c-plan-ahead c-delay-target c-fill-target c-max-rate
                # c-min-rate disk-timeout
                on-io-error detach;
        }

        net {                # protocol timeout max-epoch-size max-buffers unplug-watermark
                # connect-int ping-int sndbuf-size rcvbuf-size ko-count
                # allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
                # after-sb-1pri after-sb-2pri always-asbp rr-conflict
                # ping-timeout data-integrity-alg tcp-cork on-congestion
                # congestion-fill congestion-extents csums-alg verify-alg
                # use-rle
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }
        syncer {
                rate 1000M;
}
}

配置drbd组资源的配置文件:

vim /etc/drbd.d/mysqldata.res
resource mysqldata {
        on www.bwei.com {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 172.16.100.1:7789;
                meta-disk internal;
}
        on www2.bwei.com {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 172.16.100.5:7789;
                meta-disk internal;
}


}

drbdadm create-md mysqldata

启动drbd服务:

service drbd start

我们查看drbd的状态:

[root@www drbd.d]# drbd-overview 
  0:mysqldata/0  Connected Secondary/Secondary Inconsistent/Inconsistent C r-----

我们把一个节点设置成主节点:

  [root@www drbd.d]# drbdadm -- --overwrite-data-of-peer primary mysqldata

  [root@www drbd.d]# drbd-overview 
  0:mysqldata/0  Connected Primary/Secondary UpToDate/UpToDate C r-----

把这个分区进行格式化:

mke2fs -t ext4 /dev/drbd0

创建mysql的数据目录:

 mkdir /data
 mount /dev/drbd0 /data
 mkdir /data/mysql

提供mysql的用户和组,把数据目录的属主和属组改为mysql:

 [root@www ~]# groupadd -r mysql -g 360[root@www ~]# useradd mysql -g mysql -u 360 -r [root@www ~]# chown mysql:mysql /data/mysql/

接着,我们开始进行数据的初始化:

[root@www ~]# tar xf mariadb-10.0.10-linux-x86_64.tar.gz -C /usr/local/

[root@www local]# ln -sv mariadb-10.0.10-linux-x86_64 mysql
`mysql' -> `mariadb-10.0.10-linux-x86_64'

[root@www local]# mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql/

[root@www local]# cp mysql/support-files/my-huge.cnf /etc/my.cnf 
cp: overwrite `/etc/my.cnf'? y
[root@www local]# vim /etc/my.cnf 
[mysqld]
datadir = /data/mysql

[root@www local]# cp mysql/support-files/mysql.server /etc/init.d/mysqld
[root@www local]# chkconfig --add mysqld
[root@www local]# chkconfig mysqld off
[root@www local]# service mysqld start
Starting MySQL..                                           [  OK  ]
[root@www local]# mysql/bin/mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.0.10-MariaDB-log MariaDB Server

Copyright (c) 2000, 2014, Oracle, SkySQL Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

我们的mysql已经做好了,注意另一个主机也是需要mysql的配置文件和启动脚本,不需要再进行mysql的初始化了。

下面我们需要安装crmsh进行资源配置文件的定义:

rpm -ivh crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm

service corosync start

crm
crm(live)# configurecrm(live)configure# property no-quorum-policy=ignorecrm(live)configure# property stonith-enabled=falsecrm(live)configure# verify crm(live)configure# commitcrm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mysqldata op monitor interval=30 role=Master timeout=30 op monitor interval=40 role=Slave timeout=30 op start timeout=240 op stop timeout=100crm(live)configure#primitive mysqlfs ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/data/mysql fstype=ext4 op start timeout=60 op stop timeout=60crm(live)configure# primitive mysqld lsb:mysqldcrm(live)configure# primitive mysqlvip ocf:heartbeat:IPaddr params ip=172.16.100.4crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=truecrm(live)configure# colocation mysqld_with_mysqlfs inf: mysqld mysqlfscrm(live)configure# crm(live)configure# crm(live)configure# order mysqlfs_after_ms_mysqldrbd inf: ms_mysqldrbd:promote mysqlfs:startcrm(live)configure# order mysqld_after_mysqlfs inf: mysqlfs mysqldcrm(live)configure# commitcrm(live) status
Last updated: Thu Nov  5 05:29:23 2015Last change: Thu Nov  5 05:26:49 2015 via cibadmin on www.bwei.com
Stack: classic openais (with plugin)
Current DC: www2.bwei.com - partition with quorum
Version: 1.1.10-14.el6-368c7262 Nodes configured, 2 expected votes5 Resources configured


Online: [ www.bwei.com www2.bwei.com ]

 mysqlfs        (ocf::heartbeat:Filesystem):    Started www.bwei.com 
 mysqlvip       (ocf::heartbeat:IPaddr):        Started www.bwei.com 
 Master/Slave Set: ms_mysqldrbd [mysqldrbd]
     Masters: [ www.bwei.com ]
     Slaves: [ www2.bwei.com ]
 mysqld (lsb:mysqld):   Started www.bwei.com

这里看出,我们的服务已经配置完毕!!

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-11-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

CentOS 7下配置本地yum源及yum客户端

Linux下对于软件包的管理使用rpm管理方式。直接使用rpm包管理工具来进行rpm包的安装,升级,卸载时,对于最让人头疼的莫过与包之间的依赖关系。yum作为一...

49140
来自专栏农夫安全

中间件漏洞详解

前言 所属的类别 web服务器:IIS、Apache、nginx、tomcat、weblogic、websphere等。 web中间件:apache tomca...

63280
来自专栏battcn

一起来学SpringBoot | 第二十四篇:数据库管理与迁移(Liquibase)

目前 SpringBoot 支持较好的两款工具分别是 flyway、 liquibase,支持 sql script,在初始化数据源之后执行指定的 脚本代码或者...

25820
来自专栏小夜博客

星光互联Linux系统挂载硬盘

411110
来自专栏Java后端技术栈

使用Generic Webhook Trigger插件实现Jenkins+WebHooks(码云)持续集成

我们在开发的时候,特别是前后端分离的时候,前端需要我们后端提供的API接口,可能需要每次有一个接口的变动都需要重新部署到dev环境上,例如:最常见的Git工作流...

31430
来自专栏SpringSpace.cn

基于Spring Boot 2.0 及MongoDB 3.6.2 实现的简单文件共享服务器 顶

近期研究学习Spring Boot 2.0及MongoDB期间,尝试用Reactive模式实现了一个简单的文件共享服务器,可用于家庭及小型组织内部的文件共享,目...

32020
来自专栏jiajia_deng

RESTful API 调试工具 insomnia

14750
来自专栏无所事事者爱嘲笑

parcel 中小型项目打包工具

19630
来自专栏乐沙弥的世界

Percona XtraDB Cluster(PXC)掉电无法正常启动

办公室掉电,PXC集群环境无法启动,也就是说整个集群的状态处于丢失的情形。因此需要采取强制的方式来进行,见下面的描述。

10320
来自专栏云计算教程系列

如何在Ubuntu 16.04上的Jenkins中设置持续集成管道

Jenkins是一个开源的自动化服务器,目的是能够自动执行持续集成和交付软件所涉及的重复性技术任务。凭借强大的插件生态系统,Jenkins可以处理各种工作负载,...

12830

扫码关注云+社区

领取腾讯云代金券