how-to create a high-availability mysql setup with corosync pacemaker and drbd on ubuntu

前言

坑无处不有。对各个组件大家都是仁者见仁智者见智。

各个组件的工作原理适用场景就不在一 一阐述。
……
待续
……
环境准备
Corosync 安装与配置
Pacemaker 安装与配置
DRBD 安装与配置
MySQL 安装与配置
Crm 资源管理

系统结构

环境准备

$cat /etc/issue
Ubuntu 14.04.4 LTS \n \l

$uname  -r
4.2.0-27-generic

[Both]
$grep ‘10\|20‘ /etc/hosts
172.16.9.10 eva.suzf.net  eva
172.16.9.20 cali.suzf.net cali

ssh互信

eva
  ssh-keygen -t rsa -P ‘‘
  ssh-copy-id -i .ssh/id_rsa.pub cali

cali
  ssh-keygen -t rsa -P ‘‘
  ssh-copy-id -i .ssh/id_rsa.pub eva

Selinux
Ubuntu 默认没有 安装,跳过
sudo service iptables stop

Corosync 安装与配置

[Both]
sudo apt-get update
sudo apt-get install corosync -y

修改配置文件和生成认证文件

$grep -v "^.*#\|^$" /etc/corosync/corosync.conf
totem {
  version: 2
  token: 3000
  token_retransmits_before_loss_const: 10
  join: 60
  consensus: 3600
  vsftype: none
  max_messages: 20
  clear_node_high_bit: yes
  secauth: off
  threads: 0
  rrp_mode: none
  interface {
        member{
            memberaddr: 172.16.9.10
        }
        member{
            memberaddr: 172.16.9.20
        }
    ringnumber: 0
    bindnetaddr: 172.16.9.0
    mcastaddr: 226.94.1.1
    mcastport: 5405
  }
}
amf {
  mode: disabled
}
quorum {
  provider: corosync_votequorum
  expected_votes: 1
}
aisexec {
        user:   root
        group:  root
}
logging {
        fileline: off
        to_stderr: yes
        to_logfile: no
        to_syslog: yes
  syslog_facility: daemon
        debug: off
        timestamp: on
        logger_subsys {
                subsys: AMF
                debug: off
                tags: enter|leave|trace1|trace2|trace3|trace4|trace6
        }
}

同步文件到 cali 节点

rsync -av corosync.conf cali:/etc/corosync/

认证文件

corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy (bits = 152).
#遇到这个情况,表示电脑的随机数不够,各位朋友可以不停的随便敲键盘,或者安装软件也可以生成随机数

把认证文件也复制到cali主机上

rsync -av authkey cali:/etc/corosync/

开启服务

cat /etc/default/corosync
# start corosync at boot [yes|no]
START=yes

[both]
sudo service corosync start

Pacemaker 安装配置

[Both]
sudo apt-get-install pacemaker -y
sudo service pacemaker start

查看集群中的节点信息

$sudo crm status
Last updated: Wed Jun 29 14:35:21 2016
Last change: Mon Jun 27 16:18:55 2016 via crmd on eva
Stack: corosync
Current DC: cali (739248404) - partition with quorum
Version: 1.1.10-42f2063
2 Nodes configured
0 Resources configured

Online: [ cali eva ]

DRBD 安装与配置

创建一个新的磁盘分区

[Only on node]
@eva ~]$sudo fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x56c8d4fc.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-81788927, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-81788927, default 81788927):
Using default value 81788927

Command (m for help): p

Disk /dev/sdb: 41.9 GB, 41875931136 bytes
255 heads, 63 sectors/track, 5091 cylinders, total 81788928 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x56c8d4fc

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    81788927    40893440   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

sudo pvcreate  /dev/sdb1
sudo vgcreate  vol2 /dev/sdb1

sudo lvcreate  -L 3G -n mysql-drbd vol2
# sudo mkfs.ext4 /dev/vol2/mysql-drbd #这里不需要格式化

安装drbd和修改配置文件

[both]
sudo apt-get install drbd8-utils -y

ubuntu14.4.04 kernel中编译的 drbd module 版本是 8.4.5,
而官方trusty所提供的drbd8-utils的版本只到8.4.4, 只能手动编译了 详见
http://suzf.net/thread-0628-918.html

DRBD有如下3种模式:
协议A:异步复制协议。本地写成功后立即返回,数据放在发送buffer中,可能丢失。
协议B:内存同步(半同步)复制协议。本地写成功并将数据发送到对方后立即返回,如果双机掉电,数据可能丢失。
协议C:同步复制协议。本地和对方写成功确认后返回。如果双机掉电或磁盘同时损坏,则数据可能丢失。
在使用时,一般用协议C。由于协议C是本地和对方写成功时再认为写入成功,因此会有一定时延。

修改 drbd 配置文件

@eva ~]$uname  -n
eva

$pwd
/etc/drbd.d

$cat global_common.conf
global {
  usage-count no;
}
common {
  protocol C;
  startup {
    wfc-timeout 10;
    degr-wfc-timeout 1;
    outdated-wfc-timeout 1;
  }
}

$cat mysql-drbd.res
resource mysql-drbd {

  protocol  C;
  device    /dev/drbd0;
  disk      /dev/vol2/mysql-drbd;
  meta-disk internal;

  net {
    cram-hmac-alg sha1;
    shared-secret "mysql-drbd";
    #allow-two-primaries;
  }

  syncer {
    verify-alg crc32c;
    rate 1000M;
  }

  on eva {
    address 172.16.9.10:7789;
  }

  on cali {
    address 172.16.9.20:7789;
  }

}

同步brbd配置文件到 cali 节点

rsync  -av ./* cali:/etc/drbd.d/

初始化drbd的资源并启动
drbd 创建资源之前不需要讲分区格式化
如果已经格式化请执行下面操作

dd if=/dev/zero of=/dev/vol2/mysql-drbd bs=1M count=1

创建DRBD 资源

@eva ~]$sudo drbdadm create-md mysql-drbd
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.

@eva ~]$sudo service drbd start
* Starting DRBD resources                                                                                                                      [
create res: mysql-drbd
prepare disk: mysql-drbd
adjust disk: mysql-drbd
adjust net: mysql-drbd
]
[ OK ]

Cali 节点操作

sudo drbdadm create-md mysql-drbd
sudo service drbd start

格式化分区

@eva ~]$sudo drbdadm primary --force mysql-drbd
@eva ~]$sudo cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
srcversion: 5A4F43804B37BB28FCB1F47
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate B r-----
ns:0 nr:0 dw:0 dr:728 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:3145596

@eva ~]$sudo mke2fs -t ext4 /dev/drbd0
mke2fs 1.42.9 (4-Feb-2014)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
196608 inodes, 786399 blocks
39319 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

@eva ~]$sudo mkdir -p       /data/mysql-drbd/
@eva ~]$sudo chown -R mysql /data/mysql-drbd/
@eva ~]$sudo chgrp -R mysql /data/mysql-drbd/
@eva ~]$sudo chmod -R 755   /data/mysql-drbd/

Mysql 安装与配置

安装Mysql 修改数据目录

[Both]
sudo apt-get install mysql-server -y

#vim /etc/my.cnf
datadir = /data/mysql-drbd

# grep data -B 2 /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/data/mysql-drbd/ r,
/data/mysql-drbd/** rwk,
sudo service apparmor restart

在其中一个node 初始化数据

@eva ~]$sudo mysql_install_db --user=mysql --datadir=/data/mysql-drbd/
@eva ~]$sudo service mysql start

在eva上创建一个测数据库

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| eva                 |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
+---------------------+
5 rows in set (0.00 sec)

mysql> system hostname
eva

停掉mysql服务,卸载drbd挂载的目录

# Eva
sudo service mysql stop
sudo umount /dev/drbd0
sudo drbdadm  secondary mysql-drbd  #把此节点改为drbd的备用节点

挂载到 Cali, 验证数据是否同步

# Cali
sudo drbdadm  primary mysql-drbd   #把此节点改为drbd的主节点
sudo chown -p       /data/mysql-drbd/
sudo chown -R mysql /data/mysql-drbd/
sudo chgrp -R mysql /data/mysql-drbd/
sudo chmod -R 755   /data/mysql-drbd/
sudo mount /dev/drbd0 /data/mysql-drbd

sudo service mysql start   #此节点上不用初始化数据库,直接开启服务即可

查看数据是否同步

@cali ~]$sudo mysql -e "show databases;"
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| eva                 |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
+---------------------+

@eva ~]$sudo cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
srcversion: 5A4F43804B37BB28FCB1F47
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate B r-----
ns:159000 nr:2400 dw:161400 dr:8738 al:38 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

@cali ~]$sudo cat /proc/drbd
version: 8.4.5 (api:1/proto:86-101)
srcversion: 5A4F43804B37BB28FCB1F47
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate B r-----
ns:2388 nr:159000 dw:161388 dr:7602 al:6 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

@cali ~]$sudo service drbd  status
drbd driver loaded OK; device status:
version: 8.4.5 (api:1/proto:86-101)
srcversion: 5A4F43804B37BB28FCB1F47
m:res         cs         ro                 ds                 p  mounted           fstype
0:mysql-drbd  Connected  Primary/Secondary  UpToDate/UpToDate  B  /data/mysql-drbd  ext4

其中第一行为DRBD的版本信息,第二行为DRBD开发都最后提交源码的时间点。
第三行就是DRBD的状态信息了:
cs: connection status 连接状态
ro: role 角色,本机角色/远程主机角色(注:旧版本DRBD为st)
ds: data status 数据同步状态,本机状态/远程主机状态(由于示例没有设置主备,因此两边的状态都显示Incosistent)
C 使用的同步协议

Crm  资源管理
需要定义集群资源而mysql、drbd都是集群的资源,由集群管理的资源开机是一定不能够自行启动的。

关闭mysql的服务 卸载drbd分区 和 drbd的服务, 设置mysql 开机禁止启动

=== CRM CMD START ===
# verify 验证配置是否正确
# commit 提交配置

sudo crm configure
# 定义drbd的资源(提供drbd的资源代理RA由OCF类别中的linbit提供)
property stonith-enabled=false
property no-quorum-policy=ignore
primitive p_mysql_drbd ocf:linbit:drbd params drbd_resource=mysql-drbd op monitor role=Master interval=10 timeout=20  op monitor  role=Slave interval=20 timeout=20 op start timeout=240 op stop timeout=100

# 定义drbd的主从资源
ms m_mysql_drbd p_mysql_drbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

# 定义文件系统资源和约束关系
primitive p_fs_mysql_data ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/data/mysql-drbd" fstype="ext4" op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60
colocation c_mysql_drbd inf: p_fs_mysql_data m_mysql_drbd:Master
order o_mysql_drbd mandatory: m_mysql_drbd:promote p_fs_mysql_data:start

# 定义vip资源、mysql服务的资源约束关系
primitive p_mysql_vip ocf:heartbeat:IPaddr2 params ip="172.16.9.33" cidr_netmask="24" op monitor interval="30s"

primitive p_mysqld ocf:heartbeat:mysql params binary="/usr/sbin/mysqld" config="/etc/mysql/my.cnf" datadir="/data/mysql-drbd" pid="/var/run/mysqld/mysqld.pid" socket="/var/run/mysqld/mysqld.sock" log="/var/log/mysql/error.log" op start interval="0" timeout="120" op stop interval="0" timeout="120" op monitor interval="10" timeout="30" depth="0"

colocation c_mysql_with_data inf:  p_mysqld p_fs_mysql_data
order o_drbd_before_mysql mandatory: p_fs_mysql_data:start  p_mysqld:start

colocation p_mysql_vip_with_mysql inf: p_mysql_vip  p_mysqld
order o_mysql_vip_before_mysql mandatory: p_mysql_vip  p_mysqld
commit
=== CRM CMD END ===

在线查看当前配置

crm(live)configure# show
node $id="739248394" eva attributes standby="off" maintenance="off"
node $id="739248404" cali attributes standby="off" maintenance="off"
primitive p_fs_mysql_data ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/data/mysql-drbd" fstype="ext4" op monitor interval="40" timeout="40" op start timeout="60" interval="0" op stop timeout="60" interval="0"
primitive p_mysql_drbd ocf:linbit:drbd params drbd_resource="mysql-drbd" 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"
primitive p_mysql_vip ocf:heartbeat:IPaddr2 params ip="172.16.9.33" cidr_netmask="24" op monitor interval="30s"
primitive p_mysqld ocf:heartbeat:mysql params binary="/usr/sbin/mysqld" config="/etc/mysql/my.cnf" datadir="/data/mysql-drbd" pid="/var/run/mysqld/mysqld.pid" socket="/var/run/mysqld/mysqld.sock" log="/var/log/mysql/error.log" op start interval="0" timeout="120" op stop interval="0" timeout="120" op monitor interval="10" timeout="30" depth="0"
ms m_mysql_drbd p_mysql_drbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
location cli-prefer-p_mysql_vip p_mysql_vip inf: eva
colocation c_mysql_drbd inf: p_fs_mysql_data m_mysql_drbd:Master
colocation c_mysql_with_data inf: p_mysqld p_fs_mysql_data
colocation p_mysql_vip_with_mysql inf: p_mysql_vip p_mysqld
order o_drbd_before_mysql inf: p_fs_mysql_data:start p_mysqld:start
order o_mysql_drbd inf: m_mysql_drbd:promote p_fs_mysql_data:start
order o_mysql_vip_before_mysql inf: p_mysql_vip p_mysqld
property $id="cib-bootstrap-options" stonith-enabled="false" no-quorum-policy="ignore" dc-version="1.1.10-42f2063" cluster-infrastructure="corosync"

验证

可以看到第一次 资源全部在 eva 这个节点上

当 eva 节点设为 standby 可以看到资源全部迁移到 cali 节点

~~~ END made in suzf.net ~~~

License: Attribution-NonCommercial-ShareAlike 4.0 International
 本文出自 Suzf Blog。 如未注明,均为 SUZF.NET 原创。
 转载请注明:http://suzf.net/thread-0630-927.html

drbd, Mysql

时间: 2025-01-11 16:52:38

how-to create a high-availability mysql setup with corosync pacemaker and drbd on ubuntu的相关文章

corosync+pacemaker and drbd实现mysql高可用集群

DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的,另外的节点是不可读的,连挂载都不可能,只有一个节点是主的,其它节 点都是从的.当做为主主架构时,需要达到几个条件,1.在高可用集群中启用DRBD;  2. 启用分布式文件锁功能,即需要把磁盘格式化为集群文件系统(如GFS2,OCFS2等):3. 把DRBD做成资源. 数据的存储过程: 当某个进程存

High availability MySql

一.High availability Cluster 高可用集群是保证服务稳定运行,给用户一种服务从未中断过的感觉,从而达到服务的高可用性.例如我们的网站后台做了高可用性集群,当我们的一台web服务器宕机后,另一台web服务器立马接管它的服务,替代它的位置,实现用户访问网站时感觉网站从未中断过服务一般. 最近一段时间有几个门户网站都出现了系统崩溃,服务中断的事情,例如某易,某宝,某程:造成用户一时无法登陆其网站访问,损失无法估计,所以对于一个需要24小时不间断提供服务的网站来讲,高可用性集群是

MySQL+DRBD+Corosync+Pacemaker CentOS6.5版

一.DRBD部分配置 1.安装环境说明 node1       192.168.110.141 node2       192.168.110.142 Node1: # sed -i '[email protected]\(HOSTNAME=\).*@\[email protected]' /etc/sysconfig/network # hostname node1.pancou.com # vim /etc/hosts 192.168.110.141 node1.pancou.com nod

How To Move a MySQL Data Directory to a New Location on Ubuntu 16.04

16 How To Move a MySQL Data Directory to a New Location on Ubuntu 16.04 PostedJuly 21, 2016 62.1kviews MYSQL BLOCK STORAGE STORAGE UBUNTU UBUNTU 16.04 Introduction Databases grow over time, sometimes outgrowing the space on the file system. You can a

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

#################################################################                       服务器架构                         ##    ############################################################服务器:vm_test1:        网卡: eth0 192.168.1.213 用于外网通信        网卡: eth1

corosync+pacemaker+drbd+mysql

一.环境 系统:CentOS 6.4x64最小化安装 node1    192.168.3.61    node1.test.com node2    192.168.3.62    node2.test.com vip     192.168.3.63 二.基础配置 a.配置ssh互信 node1: [[email protected] ~]# ssh-keygen  [[email protected] ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email 

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

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

Corosync+Pacemaker+DRBD+Mysql高可用HA配置

操作系统: CentOS 6.6 x64,本文采用rpm方式安装corosync+pacemaker+drbd,采用二进制版本安装mysql-5.6.29.本文是在Corosync+Pacemaker+DRBD+NFS高可用实例配置基础上进行配置修改,然后进行测试的安装过程. 一.双机配置 1. app1,app2配置hosts文件,以及主机名. [[email protected] soft]# vi /etc/hosts   127.0.0.1   localhost localhost.l

Corosync+Pacemaker+MySQL+DRBD(二)

上接Corosync+Pacemaker+MySQL+DRBD(一)http://9124573.blog.51cto.com/9114573/1768076 ⑶布署corosync+pacemaker ◆安装软件包 pacemaker依赖corosync,安装pacemaker包会连带安装corosync包 yum -y install pacemaker [[email protected] ~]# yum -y install pacemaker;ssh [email protected]