1. 程式人生 > >corosync+pacemaker+drbd 實現mysql的高可用性

corosync+pacemaker+drbd 實現mysql的高可用性

corosync+pacemaker+drbd 實現mysql的高可用性

一、環境準備

1.操作系統

centos 6.4 (32位)系統要是雙網卡

技術分享

2.配置各節點互相解析

node1:

[[email protected] ~]# uname -n

node1.test.com

[[email protected] ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.31 node1.test.com node1

192.168.1.32 node2.test.com node2

node2:

[[email protected] ~]# uname -n

node2.test.com

[[email protected] ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.31 node1.test.com node1

192.168.1.32 node2.test.com node2

3.配置各節點ssh互信

node1:

[[email protected] ~]# ssh-keygen -t rsa

[[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

node2:

[[email protected] ~]# ssh-keygen -t rsa

[[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

4.配置各節點時間同步

node1:

[[email protected] ~]#hwclock -s

node2:

[[email protected] ~]# hwclock -s

5.各節點關閉防火墻與SELinux

node1:

[[email protected] ~]# service iptables stop

[[email protected] ~]# chkconfig iptables off

[[email protected] ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=disabled

node2:

[[email protected] ~]# service iptables stop

[[email protected] ~]# chkconfig iptables off

[[email protected] ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=disabled

三、Corosync 安裝與配置

1.安裝Corosync

技術分享

node1:

[[email protected] ~]# rpm -ivh corosync-1.4.1-17.el6_5.1.i686.rpm corosynclib-1.4.1-17.el6_5.1.i686.rpm libibverbs-1.1.7-1.el6.i686.rpm

librdmacm-1.0.17-1.el6.i686.rpm lm_sensors-libs-3.1.1-17.el6.i686.rpm net-snmp-libs-5.5-49.el6_5.4.i686.rpm openssl-1.0.1e-16.el6_5.15.i686.rpm

node2:

[[email protected] ~]# rpm -ivh corosync-1.4.1-17.el6_5.1.i686.rpm corosynclib-1.4.1-17.el6_5.1.i686.rpm libibverbs-1.1.7-1.el6.i686.rpm

librdmacm-1.0.17-1.el6.i686.rpm lm_sensors-libs-3.1.1-17.el6.i686.rpm net-snmp-libs-5.5-49.el6_5.4.i686.rpm openssl-1.0.1e-16.el6_5.15.i686.rpm

2.配置Corosync

[[email protected] ~]# cd /etc/corosync/

[[email protected] corosync]# ll

總用量 16

-rw-r--r-- 1 root root 445 5月 15 05:09 corosync.conf.example

-rw-r--r-- 1 root root 1084 5月 15 05:09 corosync.conf.example.udpu

drwxr-xr-x 2 root root 4096 5月 15 05:09 service.d

drwxr-xr-x 2 root root 4096 5月 15 05:09 uidgid.d

[[email protected] corosync]# cp corosync.conf.example corosync.conf

[[email protected] corosync]# vim corosync.conf

[[email protected] corosync]# cat corosync.conf

# Please read the corosync.conf.5 manual page

compatibility: whitetank

totem {

version: 2

secauth: on

threads: 0

interface {

ringnumber: 0

bindnetaddr: 192.168.188.0

mcastaddr: 226.94.10.10

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: on

logger_subsys {

subsys: AMF

debug: off

}

}

amf {

mode: disabled

}

service {

ver: 0

name: pacemaker

}

aisexec {

user: root

group: root

}

3.生成密鑰文件

[[email protected] corosync]# mv /dev/{random,random.bak}

[[email protected] corosync]# ln -s /dev/urandom /dev/random

[[email protected] 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.

Writing corosync key to /etc/corosync/authkey.

[[email protected] corosync]# ll

總用量 24

-r-------- 1 root root 128 8月 17 17:17 authkey

-rw-r--r-- 1 root root 544 8月 17 17:14 corosync.conf

-rw-r--r-- 1 root root 445 5月 15 05:09 corosync.conf.example

-rw-r--r-- 1 root root 1084 5月 15 05:09 corosync.conf.example.udpu

drwxr-xr-x 2 root root 4096 5月 15 05:09 service.d

drwxr-xr-x 2 root root 4096 5月 15 05:09 uidgid.d

4.將node1上配置文件復制到node2上

[[email protected] corosync]# scp -p authkey corosync.conf node2:/etc/corosync/

authkey 100% 128 0.1KB/s 00:00

corosync.conf 100% 542 0.5KB/s 00:00

好了,到這裏corosync配置完成,下面我們配置pacemaker

四、Pacemaker 安裝與配置

1.安裝pacemaker

技術分享

node1:

[[email protected] ~]# rpm -ivh clusterlib-3.0.12.1-59.el6_5.3.i686.rpm libqb-0.16.0-2.el6.i686.rpm pacemaker-1.1.10-14.el6_5.3.i686.rpm pacemaker-cli-1.1.10-14.el6_5.3.i686.rpm pacemaker-cluster-libs-1.1.10-14.el6_5.3.i686.rpm pacemaker-libs-1.1.10-14.el6_5.3.i686.rpm perl-TimeDate-1.16-11.1.el6.noarch.rpm resource-agents-3.9.2-40.el6_5.10.i686.rpm

node2:

[[email protected] ~]# rpm -ivh clusterlib-3.0.12.1-59.el6_5.3.i686.rpm libqb-0.16.0-2.el6.i686.rpm pacemaker-1.1.10-14.el6_5.3.i686.rpm pacemaker-cli-1.1.10-14.el6_5.3.i686.rpm pacemaker-cluster-libs-1.1.10-14.el6_5.3.i686.rpm pacemaker-libs-1.1.10-14.el6_5.3.i686.rpm perl-TimeDate-1.16-11.1.el6.noarch.rpm resource-agents-3.9.2-40.el6_5.10.i686.rpm

2.安裝crmsh

node1:

[[email protected] ~]# rpm -ivh python-pssh-2.3.1-4.1.i686.rpm pssh-2.3.1-4.1.i686.rpm redhat-rpm-config-9.0.3-42.el6.noarch.rpm

crmsh-2.1-1.6.i686.rpm

[[email protected] ~]# crm

Cannot change active directory to /var/lib/pacemaker/cores/root: No such file or directory

crm(live)# help

This is crm shell, a Pacemaker command line interface.

Available commands:

cib manage shadow CIBs

resource resources management

configure CRM cluster configuration

node nodes management

options user preferences

history CRM cluster history

site Geo-cluster support

ra resource agents information center

status show cluster status

help,? show help (help topics for list of topics)

end,cd,up go back one level

quit,bye,exit exit the program

node2上和node1上的操作一樣。

[[email protected] ~]# crm

Cannot change active directory to /var/lib/pacemaker/cores/root: No such file or directory

crm(live)# help

This is crm shell, a Pacemaker command line interface.

Available commands:

cib manage shadow CIBs

resource resources management

configure CRM cluster configuration

node nodes management

options user preferences

history CRM cluster history

site Geo-cluster support

ra resource agents information center

status show cluster status

help,? show help (help topics for list of topics)

end,cd,up go back one level

quit,bye,exit exit the program

3.啟動corosync(註,在配置corosync時,將pacemaker整合進corosync中,corosync啟動的同時也會啟動

pacemaker)

[[email protected] ~]# ssh node2 "service corosync start"

Starting Corosync Cluster Engine (corosync): [確定]

[[email protected] ~]# service corosync start

Starting Corosync Cluster Engine (corosync): [確定]

4.查看啟動信息

(1).查看corosync引擎是否正常啟動

[[email protected] ~]# grep -e "Corosync Cluster Engine" -e "configuration file"

技術分享

(2).查看初始化成員節點通知是否正常發出

技術分享

(3).檢查啟動過程中是否有錯誤產生

技術分享

(4).查看pacemaker是否正常啟動

技術分享

5.查看集群狀態

技術分享

五、DRBD 安裝與配置

1.安裝DRBD

node1:

編譯獲得的RPM包

drbd-8.4.3-2.el6.i686.rpm

drbd-bash-completion-8.4.3-2.el6.i686.rpm

drbd-heartbeat-8.4.3-2.el6.i686.rpm

drbd-km-2.6.32_358.el6.i686-8.4.3-2.el6.i686.rpm

drbd-pacemaker-8.4.3-2.el6.i686.rpm

drbd-udev-8.4.3-2.el6.i686.rpm

drbd-utils-8.4.3-2.el6.i686.rpm

drbd-xen-8.4.3-2.el6.i686.rpm

4)安裝drbd rpm包

[[email protected] ~]#rpm -ivh drbd以上開頭的所有包

查看模塊是否加載成功

[[email protected] ~]# lsmod | grep drbd

drbd 292307 0

libcrc32c 841 1 drbd

[[email protected] ~]#rpm -ivh drbd開頭的所有包

查看模塊是否加載成功

[[email protected] ~]# lsmod | grep drbd

drbd 292307 0

libcrc32c 841 1 drbd

2.配置DRBD

[[email protected] ~]# cat /etc/drbd.d/global_common.conf

global {

usage-count no; #讓linbit公司收集目前drbd的使用情況,yes為參加,我們這裏不參加設置為no

#minor-count dialog-refresh disable-ip-verification

}

common {

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"; #設置加密算法sha1

shared-secret "mydrbdlab"; #設置加密key

}

syncer{

rate 100M;

}

}

3.在node1和node2上新增磁盤如下圖

技術分享

如上圖分一個5G大小的linux分區

4.增加資源

[[email protected] drbd.d]# cat web.res

resource web {

on node1.test.com {

device /dev/drbd0;

disk /dev/sda4;

address 192.168.188.31:7789;

meta-disk internal;

}

on node2.test.com {

device /dev/drbd0;

disk /dev/sda4;

address 192.168.188.32:7789;

meta-disk internal;

}

}

5.同步配置文件到node2’

[[email protected] drbd.d]# scp global_common.conf web.res node2:/etc/drbd.d/

6.node1與node2上初始化資源

node1:

[[email protected] ~]# drbdadm create-md web

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

node2:

[[email protected] ~]# drbdadm create-md web

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfully created.

如果有其他錯誤信息執行dd if=/dev/zero bs=1M count=1 of=/dev/sda4,在執行即可。

7.啟動DRBD

node1:

[[email protected] ~]# service drbd start

node2:

[[email protected] ~]# service drbd start

8.查看一下狀態

node1:

[[email protected] ~]# drbd-overview

0:web/0Connected Secondary/SecondaryInconsistent/InconsistentC r-----

node2:

[[email protected] ~]# drbd-overview

0:web/0Connected Secondary/SecondaryInconsistent/InconsistentC r-----

9.設置node1為主節點

[[email protected] ~]# drbdadm -- --overwrite-data-of-peer primary web

[[email protected] ~]# drbd-overview

0:web/0 Connected Primary/Secondary UpToDate/UpToDate C r-----

10.格式化並掛載

[[email protected] ~]# mkfs.ext4 /dev/drbd0

[[email protected] ~]# mkdir /mydata

[[email protected] ~]# mount /dev/drbd0 /mydata/

[[email protected] ~]# mount

/dev/sda2on / typeext4 (rw)

proc on /proctypeproc (rw)

sysfs on /systypesysfs (rw)

devpts on /dev/ptstypedevpts (rw,gid=5,mode=620)

tmpfs on /dev/shmtypetmpfs (rw)

/dev/sda1on /boottypeext4 (rw)

/dev/sda4on /mydatatypeext4 (rw)

none on /proc/sys/fs/binfmt_misctypebinfmt_misc (rw)

/dev/drbd0on /drbdtypeext4 (rw)

[[email protected] ~]# cd /mydata/

[[email protected] mydata]# cp /etc/inittab /mydata/

[[email protected] mydata]# ll

總用量 20

-rw-r--r-- 1 root root 884 8月 17 13:50 inittab

drwx------ 2 root root 16384 8月 17 13:49 lost+found

[[email protected] mydata]# mkdir data

[[email protected] ~]# ll /mydata/

總用量 20

drwxr-xr-x 4 mysql mysql 4096 10鏈10 21:31 data

-rw-r--r-- 1 root root 884 8月 17 13:50 inittab

drwx------ 2 root root 16384 8月 17 13:49 lost+found

11.設置node2為主節點

[[email protected] ~]# umount /mydata/

[[email protected] ~]# drbdadm secondary web

[[email protected] ~]# drbd-overview

[[email protected] ~]# drbdadm primary web

[[email protected] ~]# drbd-overview

0:web/0Connected Primary/SecondaryUpToDate/UpToDateC r-----

[[email protected] ~]# mkdir /mydata

[[email protected] ~]# mount /dev/drbd0 /mydata/

[[email protected] ~]# ll /mydata/

總用量 20

drwxr-xr-x 4 mysql mysql 4096 10鏈10 21:31 data

-rw-r--r-- 1 root root 884 8月 17 13:50 inittab

drwx------ 2 root root 16384 8月 17 13:49 lost+found

五、數據庫配置

1.把一設為主節點:

[[email protected] ~]# umount /mydata/

[[email protected] ~]# drbdadm secondary web

[[email protected] ~]# drbd-overview

[[email protected] ~]# drbdadm primary web

[[email protected] ~]# drbd-overview

[[email protected] ~]# mount /dev/drbd0 /mydata/

0:web/0Connected Primary/SecondaryUpToDate/UpToDateC r-----

安裝數據庫:yum install -y mysql mysql-server

2.data目錄為mysql的數據存放目錄,故改變其屬主屬組:

# chown -R mysql.mysql /mydata/data/

3.mysql配置文件

# vim /etc/my.cnf

datadir = /mydata/data //數據存放路徑

# scp /etc/my.cnf node2:/etc/

4.啟動服務測試

# service mysqld start

#查看啟動數據目錄文件

[[email protected] data]# pwd

/mydata/data

[[email protected] data]# ls

ibdata1 ib_logfile0 ib_logfile1 mysql test

5.關閉mysqld服務,並保證開機不自動啟動

# service mysqld stop && chkconfig mysqld off

6.node2上不用初始化了,直接掛載

[[email protected] ~]# umount /mydata/

[[email protected] ~]# drbdadm secondary web

[[email protected] ~]# drbd-overview

[[email protected] ~]# drbdadm primary web

[[email protected] ~]# drbd-overview

0:web/0Connected Primary/SecondaryUpToDate/UpToDateC r-----

[[email protected] ~]# mkdir /mydata

[[email protected] ~]# mount /dev/drbd0 /mydata/

[[email protected] data]# pwd

/mydata/data

[[email protected] data]# ls

ibdata1 ib_logfile0 ib_logfile1 mysql test

7.關閉mysqld服務,並保證開機不自動啟動

# service mysqld stop && chkconfig mysqld off

# umount /mydata

六、集群配置

1.corosync默認啟用了stonith,而當前集群並沒有相應的stonith設備,因此此默認配置目前尚不可用,這

可以通過如下命令先禁用stonith

crm configure property stonith-enabled=false

2.對於雙節點的集群來說,我們要配置此選項來忽略quorum,即這時候票數不起作用,一個節點也能正常運

crm configure property no-quorum-policy=ignore

3.關閉drbd設為開機不啟動

[[email protected] ~]# service drbd stop && chkconfig drbd off

[[email protected] ~]# service drbd stop && chkconfig drbd off

4.drbd需要同時運行在兩個節點上,但只能有一個節點(primary/secondary模型)是Master,而另一個節

點為Slave;因此,它是一種比較特殊的集群資源,其資源類型為多狀態(Multi-state)clone類型,即主

機節點有Master和Slave之分,且要求服務剛啟動時兩個節點都處於slave狀態

primitive mysqldrbd ocf:linbit:drbd params drbd_resource="mysql" op monitor role="Master" interval="30s" op monitor role="Slave" interval="31s" op start timeout="240s" op stop timeout="100s"

5.創建master類型的資源,將mydrbd加入

ms MS_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify="true"

6.我們實現將drbd設置自動掛載至/mydata目錄。此外,此自動掛載的集群資源需要運行於drbd服務的

Master節點上,並且只能在drbd服務將某節點設置為Primary以後方可啟動

primitive MysqlFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mydata" fstype="ext4" op start timeout="60s" op stop timeout="60s"

7.mysql資源的定義

primitive myip ocf:heartbeat:IPaddr params ip=192.168.1.100

primitive mysqlserver lsb:mysqld

8.設置約束次序

colocation MysqlFS_with_mysqldrbd inf: MysqlFS MS_mysqldrbd:Master myip mysqlserver

order MysqlFS_after_mysqldrbd inf: MS_mysqldrbd:promote MysqlFS:start

order myip_after_MysqlFS mandatory: MysqlFS myip

order mysqlserver_after_myip mandatory: myip mysqlserver

提交查看狀態:

技術分享

七、常見腦列問題

1.查看主服務器

[[email protected] ~]# service drbd status

drbd driver loaded OK; device status:version: 8.4.3 (api:1/proto:86-101)GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by [email protected], 2013-11-03 00:03:40m:res cs ro ds p mounted fstype1:web StandAlone Primary/Unknown UpToDate/DUnknown r-----

2.查看備服務器

[[email protected] ~]# service drbd status

drbd driver loaded OK; device status:version: 8.4.3 (api:1/proto:86-101)GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by [email protected], 2013-11-03 00:03:40m:res cs ro ds p mounted fstype1:web StandAlone Secondary/Unknown UpToDate/DUnknown r-----

解決方法:

在備服務器操作:其中web是資源名

[[email protected] ~]# drbdadm secondary web

[[email protected] ~]# drbdadm --discard-my-data connect web

在主服務器操作

[[email protected] ~]# drbdadm connect web

[[email protected] ~]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by [email protected],2013-11-03 00:03:40 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:6852 nr:0 dw:264460 dr:8393508al:39 bm:512 lo:0 pe:2 ua:0 ap:0 ep:1 wo:d oos:257728[>....................] sync‘ed: 4.7% (257728/264412)K finish: 0:03:47speed: 1,112 (1,112) K/sec

備機上查看:DRBD恢復正常

[[email protected] ~]#service drbd status

drbd driver loaded OK; device status:version: 8.4.3 (api:1/proto:86-101)GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by [email protected], 2013-11-03 00:03:40m:res cs ro ds p mounted fstype1:web Connected Secondary/Primary UpToDate/UpToDate C

本文出自 “Linux_woniu” 博客,請務必保留此出處http://llu1314.blog.51cto.com/5925801/1965319

corosync+pacemaker+drbd 實現mysql的高可用性