Corosync部署MySQL+DRBD高可用服务

介绍篇

高可用集群主要是有两个或者多个节点进行工作,ha基本组成部分包括四个部分:
1、位于最底层的信息和基础架构层(Messaging Layer),主要用于节点之间传递心跳信息,故也称为心跳层。节点之间传递心跳信息可以通过广播,组播,单播等方式。
2、第二层为成员关系(Membership)层,这层最重要的作用是主节点通过cluster consensus menbership service(CCM或者CCS)这种服务由第一层提供的信息,来生产一个完整的成员关系。这层主要实现承上启下的作用,承上->将下层产生的信息生产成员关系图传递给上层以通知各个节点的工作状态;启下->将上层对于隔离某一设备予欲实施。
3、第三层为资源分配层(Resource Allocation),真正实现集群服务的层。在该层中每个节点都运行一个集群资源管理器(CRM,cluster Resource Manager),它能为实现高可用提供核心组件,包括资源定义,属性等。在每一个节点上CRM都维护有一个CIB(集群信息机库 XML文档)和LRM(本地资源管理器)组件。
对于CIB,只有工作在DC(主节点)上的文档是可以修改的,其他CIB都是复制DC上的那个文档而来的。对于LRM,是执行CRM传递过来的在本地执行某个资源的执行和停止的具体执行人.当某个节点发生故障之后,是由DC通过PE(策略引擎)和TE(实施引擎)来决定是否抢夺资源。
4、第四层为资源代理层(Resource Agent),集群资源代理(能够管理本节点上的属于集群资源的某一资源的启动,停止和状态信息的脚本),资源代理分为:LSB(/etc/init.d),OCF(比LSB更专业),Legacy heartbeat(v1版本的资源管理)。

系统环境:

安装篇

准备:

1、配置epel源;

2、配置两节点时间同步;

3、配置两节点/etc/hosts,能使用主机名通信;

4、如果可以,你也可以配置一个ansible批量部署;

一、安装DRBD

DRBD共有两部分组成:内核模块(drbd-kmdl)和用户空间的管理工具(drbd)。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果内核版本高于此版本的话,只需要安装管理工具即可;否则,需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。

由于网上找到很长时间都无法找到“2.6.32-358.el6.x86_64”内核版本的drbd内核模块;所以我们可以使用源码编译安装或者升级kernel后再下载相应内核版本的RPM包进行安装,下面分别进行介绍:

1、源码编译安装drbd;

1)安装用户空间工具:
# cd /tmp
# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.1.tar.gz
# tar xzf drbd-8.4.1.tar.gz
# cd drbd-8.4.1
# ./configure --prefix=/usr/local/drbd --with-km
# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
# make install
# mkdir -p /usr/local/drbd/var/run/drbd
# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d
# chkconfig --add drbd
# chkconfig drbd on
2)安装drbd模块:
# cd drbd
# make clean
# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
# depmod

2、升级内核,RPM包安装;

# yum update kernel
# cat /boot/grub/grub.conf 
    kernel /vmlinuz-2.6.32-431.20.3.el6.x86_64
# init 6
# yum install drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.20.3.el6-8.4.3-33.el6.x86_64.rpm -y

3、准备一个5GB的空白分区

# cat fdisk.sh
#!/bin/bash
fdisk /dev/sdb <<EOF
n
p
1

+5G
w
EOF

二、配置DRBD服务

# cat /etc/drbd.d/global_common.conf
global {
    usage-count no;
common {
    protocol C; // 使用同步协议(A:表示异步;B:表示半同步;C:表示同步。)
    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;
    }
    net {
        cram-hmac-alg    "sha1";
        shared-secret    "asdasdsdfsd";
    }
    syncer {
        rate 200M;
    }
}

# vim /etc/drbd.d/mystore.res
resource mystore {
  on server12.neo.com {
    device    /dev/drbd0;
    disk    /dev/sdb1;
    address    192.168.100.12:7789;
    meta-disk    internal;
    }
  on server13.neo.com {
    device    /dev/drbd0;
    disk    /dev/sdb1;
    address    192.168.100.13:7789;
    meta-disk    internal;
    }
}

# chkconfig --add drbd
# chkconfig drbd off
# drbdadm create-md mystore
# service drbd start

在某一节点上将其提升为主节点,然后格式化,挂载测试;

[[email protected] ~]# drbdadm primary --force mystore //第一次将节点提升为主时必须使用--force; 
而后再次查看状态,可以发现数据同步过程已经开始:
[[email protected] ~]# drbd-overview 
  0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r---- 
    [============>.......] sync‘ed: 66.2% (172140/505964)K delay_probe: 35
[[email protected] ~]# mkfs.ext4 /dev/drbd0
[[email protected] ~]# mount /dev/drbd0 /mydata
[[email protected] ~]# mkdir /mydata/data
[[email protected] ~]# umount /mydata
[[email protected] ~]# drbdadm secondary mystore
[[email protected] ~]# drbdadm primary mystore
[[email protected] ~]# mount /dev/drbd0 /mydata
[[email protected] ~]# ls /mydata
data  lost+found

三、安装Corosync

由于在el6系统的CentOS/RHEL中官方己将crm交互式命令行界面去除了,所以我们需要去互联网上去下载crmsh软件包;

# yum install corosync pacemaker -y 
# yum install crmsh -y

四、配置Corosync服务

# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
# cat /etc/corosync/corosync.conf
compatibility: whitetank
totem {
    version: 2
    secauth: on
    threads: 0
    interface {
        ringnumber: 0
        bindnetaddr: 192.168.100.0
        mcastaddr: 226.94.112.12
        mcastport: 5405
        ttl: 1
    }
}
logging {
    fileline: off
    to_stderr: no
    to_logfile: yes
    to_syslog: no
    logfile: /var/log/cluster/corosync.log
    debug: off
    timestamp: off
    logger_subsys {
        subsys: AMF
        debug: off
    }
}
amf {
    mode: disabled
}
service {
    ver: 0
    name: pacemaker
}

# corosync-keygen
# scp -p /etc/corosync/{corosync.conf,authkey} server13:/etc/corosync/
# chkconfig --add corosync
# chkconfig corosync off

五、安装mysql

二进制源码安装

[[email protected] ~]# # tar xf mysql-5.6.13-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
[[email protected] ~]# # groupadd -g 3306 -r mysql
[[email protected] ~]# # useradd -g mysql -r -d /mydata/data mysql
[[email protected] ~]# # mkdir /mydata
[[email protected] ~]# # ln -s /usr/local/mysql-5.6.13-linux-glibc2.5-x86_64 /usr/local/mysql
[[email protected] ~]# # cd /usr/local/mysql
[[email protected] mysql]# chown -R root.mysql .
[[email protected] mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[[email protected] mysql]# cat my.cnf
datadir = /mydata/data
server_id = 1 
socket = /tmp/mysql.sock
log_bin = mysql.bin
innodb_file_per_table = on
[[email protected] mysql]# cp -p support-files/mysql.server /etc/init.d/mysqld
[[email protected] mysql]# chkconfig --add mysqld
[[email protected] mysql]# chkconfig mysqld off
[[email protected] mysql]# service mysqld start
[[email protected] mysql]# cat /etc/profile.d/mysql.sh
[[email protected] mysql]# . /etc/profile.d/mysql.sh

集群服务资源配置篇


一、配置drbd资源及主从属性

crm(live)configure# primitive drbd ocf:linbit:drbd params drbd_resource=mystore op monitor role=Master interval=10 timeout=30 op monitor role=Slave interval=30 timeout=30 op start timeout=240 op stop timeout=100 on-fail=restart
crm(live)configure# master MS_drbd drbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
crm(live)configure# verify 
crm(live)configure# commit

二、配置文件系统:FS资源

crm(live)configure# primitive FS ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/mydata fstype=ext4 op start timeout=60 op stop timeout=60
crm(live)configure# colocation FS-ON-MS_drbd inf: FS MS_drbd:Master
crm(live)configure# order MS_drbd-before-FS inf: MS_drbd:promote FS:start
crm(live)configure# verify 
crm(live)configure# commit

三、配置mysqld资源

crm(live)configure# primitive mysqld lsb:mysqld op monitor interval=10 timeout=30 on-fail=restart
crm(live)configure# colocation mysqld-ON-FS inf: mysqld FS
crm(live)configure# order FS-before-mysqld inf: FS:start mysqld 
crm(live)configure# verify 
crm(live)configure# commit

四、配置vip

crm(live)configure# primitive vip ocf:heartbeat:IPaddr2 params ip=192.168.100.100 iflabel=1
crm(live)configure# colocation vip-ON-mysqld inf: vip mysqld 
crm(live)configure# order mysqld-before-vip inf: mysqld:start vip 
crm(live)configure# verify 
crm(live)configure# commit

五、验证

node server12.neo.com
node server13.neo.com
primitive FS ocf:heartbeat:Filesystem         params device="/dev/drbd0" directory="/mydata" fstype="ext4"         op start timeout="60" interval="0"         op stop timeout="60" interval="0"
primitive drbd ocf:linbit:drbd         params drbd_resource="mystore"         op monitor role="Master" interval="10" timeout="30"         op monitor role="Slave" interval="30" timeout="30"         op start timeout="240" interval="0"         op stop timeout="100" on-fail="restart" interval="0"
primitive mysqld lsb:mysqld         op monitor interval="10" timeout="30" on-fail="restart"
primitive vip ocf:heartbeat:IPaddr2         params ip="192.168.100.100" iflabel="1"
ms MS_drbd drbd         meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
colocation FS-ON-MS_drbd inf: FS MS_drbd:Master
colocation mysqld-ON-FS inf: mysqld FS
colocation vip-ON-mysqld inf: vip mysqld
order FS-before-mysqld inf: FS:start mysqld
order MS_drbd-before-FS inf: MS_drbd:promote FS:start
order mysqld-before-vip inf: mysqld:start vip
property $id="cib-bootstrap-options"         dc-version="1.1.10-14.el6_5.3-368c726"         cluster-infrastructure="classic openais (with plugin)"         expected-quorum-votes="2"         stonith-enabled="false"         no-quorum-policy="ignore"         last-lrm-refresh="1406251626"
# crm status
Last updated: Fri Jul 25 17:47:17 2014
Last change: Fri Jul 25 17:35:49 2014 via cibadmin on server12.neo.com
Stack: classic openais (with plugin)
Current DC: server12.neo.com - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
5 Resources configured

Online: [ server12.neo.com server13.neo.com ]

 Master/Slave Set: MS_drbd [drbd]
     Masters: [ server12.neo.com ]
     Slaves: [ server13.neo.com ]
 FS    (ocf::heartbeat:Filesystem):    Started server12.neo.com 
 mysqld    (lsb:mysqld):    Started server12.neo.com 
 vip    (ocf::heartbeat:IPaddr2):    Started server12.neo.com

[[email protected] ~]# netstat -tunlp |grep mysqld
tcp        0      0 :::3306                     :::*                        LISTEN      5781/mysqld         
[[email protected] ~]# # ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9c:19:4c brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.12/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.100/24 brd 192.168.100.255 scope global secondary eth0:1
    inet6 fe80::20c:29ff:fe9c:194c/64 scope link 
       valid_lft forever preferred_lft forever

模拟故障,切换主节点为server13.neo.com

crm(live)# node standby server12.neo.com
crm(live)# status
Last updated: Fri Jul 25 17:50:13 2014
Last change: Fri Jul 25 17:49:36 2014 via crm_attribute on server12.neo.com
Stack: classic openais (with plugin)
Current DC: server12.neo.com - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
5 Resources configured

Node server12.neo.com: standby
Online: [ server13.neo.com ]

 Master/Slave Set: MS_drbd [drbd]
     Masters: [ server13.neo.com ]
     Stopped: [ server12.neo.com ]
 FS     (ocf::heartbeat:Filesystem):    Started server13.neo.com 
 mysqld (lsb:mysqld):   Started server13.neo.com 
 vip    (ocf::heartbeat:IPaddr2):       Started server13.neo.com
 
[[email protected] ~]# mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.03 sec)
[[email protected] ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:66:20:47 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.13/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.100/24 brd 192.168.100.255 scope global secondary eth0:1
    inet6 fe80::20c:29ff:fe66:2047/64 scope link 
       valid_lft forever preferred_lft forever

Corosync部署MySQL+DRBD高可用服务

时间: 2024-12-20 06:09:26

Corosync部署MySQL+DRBD高可用服务的相关文章

使用drbd结合corosync实现mysql的高可用集群服务

DRBD:Distributed Replicated Block Dvice 分布式复制块设备,它可以将两个主机的硬盘或者分区做成镜像设备,类似于RAID1的原理,只不过它会将主节点的数据主动通过网络同步到从节点做成镜像,当主节点发生故障,让从节点成为主节点,因为是镜像设备,所以数据不会丢失.corosync在这里的作用就是将drbd通过pacemaker做成高可用服务的资源,以便于主从节点间的自动切换.drbd由于使用各节点之间自身的硬盘设备,因此对于需要共享存储的场景不失为一种节约成本的解

CentOS 6.5环境实现corosync+pacemaker实现DRBD高可用

DRBD (Distributed Replicated Block Device)分布式复制块设备,它是 Linux 平台上的分散式储存系统,通常用于高可用性(high availability, HA)集群中.DRBD 类似磁盘阵列的RAID 1(镜像),只不过 RAID 1 一般配置在一台服务器内,而 DRBD 是通过网络. DRBD Resource:DRBD所具有的几种属性: resource name:可以使用除空白字符外的任意ACSII表中的字符: drbd设备:drbd的设备的访

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置

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

corosync corosync的由来是源于一个Openais的项目,是Openais的一个子 项目,可以实现HA心跳信息传输的功能,是众多实现HA集群软件中之一,heartbeat与corosync是流行的Messaging Layer (集群信息层)工具.而corosync是一个新兴的软件,相比Heartbeat这款很老很成熟的软件,corosync与Heartbeat各有优势,博主就不在这里比较之间的优势了,corosync相对于Heartbeat只能说现在比较流行. pacemaker

drbd与corosync/pacemaker 结合构建高可用mariadb服务

drbd与corosync/pacemaker 结合构建高可用mariadb drbd介绍: 高可用节点之间为了使切换节点时数据一致,不得不使用共享存储,共享存储一般只有两种选择:NAS 和 SAN.NAS是文件系统级别的共享,性能低下,访问也受限制,使用时有诸多不变:SAN块级别共享存储,但又太贵.当资金不足时,就可以考虑drbd. drbd是跨主机的块设备镜像系统,一主一从(两个主机只能有一个能进行写操作,slave主机只能接受master主机传过来的数据).drbd是工作于内核中的,工作时

Heartbeat+drbd+mysql的高可用部署

Heartbeat+drbd+mysql的高可用1.规划    VIP:192.168.1.30    myhost1:        内网IP:192.168.1.11        heartbeat心跳IP:192.168.74.11        drbd传输IP:192.168.223.11    myhost2:        内网IP:192.168.1.12        heartbeat心跳IP:192.168.74.12        drbd传输IP:192.168.22

Heartbeat+Drbd+Mysql主从高可用实现

在上一篇中已经实现了MySQL服务的高可用,MySQL的数据目录放在drbd的共享目录中,并且只有获取到heartbeat资源的VIP才能挂载共享目录,从而启动MySQL服务,但是两端的数据使用drbd同步,保证发生故障时,服务和资源能够从一个节点切换到另外一个节点,下面是一个简略的架构图: 对于MySQL服务,一般在生产环境中都要做主从结构,从而保证数据的完整性,所以这次要在这个架构的前提下,在两个heartbeat节点下再部署一台MySQL从库,而主库是heartbeat集群中的一台(主库的

corosync+pacemaker+crm实现drbd高可用

系统:Centos 7.2 内核3.10.0-327.el7.x86_64      # 内核需要高于2.6.32 Drbd : 192.168.8.111:node1/dev/drdb0 /mydeta 192.168.8.112 : node2 Mysql_vip: 192.168.8.200     #下章实现 # 需要的软件包: mariadb-5.5.53-linux-i686.tar.gz drbd84-utils-8.9.1-1.el7.elrepo.x86_64.rpm kmod

DRBD+Heartbeat+Mysql:配置mysql的高可用

说明: 今天接着研究DRBD的第二个应用,利用DRBD+Heartbeat+Mysql:配置mysql的高可用 环境: [[email protected] ~]# cat /etc/issue CentOS release 6.4 (Final) Kernel \r on an \m [[email protected] ~]# uname -r 2.6.32-358.el6.i686 dbm137 192.168.186.137 dbm137.51.com primary DRBD+Hear