一、規劃
系統 CentOS 64bit
DRBD版本 9.0.0
Heartbeat版本 3.0.6
MySQL版本 5.6.27
DRBD磁盤 /dev/sdb1
主機名(IP) node1(192.168.10.132)
node2(192.168.10.133)
注:已關閉SeLinux和Firewalld。
二、安裝
Heartbeat安裝:http://wangzhijian.blog.51cto.com/6427016/1708694
DRBD安裝:http://wangzhijian.blog.51cto.com/6427016/1710926
MySQL安裝:
1
2
3
|
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm ##安裝MySQL源
# yum -y install mysql-server mysql-devel ##安裝MySQL
|
三、配置互信
HA-01:
1
2
|
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
ssh-copy-id -i .ssh/id_rsa.pub
[email protected]
|
HA-02:
1
2
|
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
ssh-copy-id -i .ssh/id_rsa.pub
[email protected]
|
四、配置
①配置DRBD
a.主配置文件drbd.conf
1
2
3
4
|
# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
|
b.配置global_common.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# cat /etc/drbd.d/global_common.conf|grep -v "#"
global {
usage-count no; ##是否參加drbd的使用者統計,默認此選項爲YES
}
common {
handlers {
}
startup {
}
options {
}
disk {
}
net {
}
}
|
c.新建res資源配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# vi /etc/drbd.d/drbd.res ##新建一個名爲drbd的res資源
resource r1 { ##定義資源組名稱爲r1
net {
cram-hmac-alg sha1; ##使用sha1加密
shared-secret "123456"; ##生成共享密鑰
}
volume 1 { ##定義卷組
device /dev/drbd1; ##邏輯設備路徑(建立塊設備)
disk /dev/sdb1; ##物理設備路徑(用於複製的分區)
meta-disk internal; ##meta data信息存放的方式,該處爲內部存儲,
即和真實數據放在一起存儲
}
on node1 { ##on開頭,後面是主機名稱(需與uname -n相同)
node-id 0;
address 192.168.10.132:7000; ##設置drbd監聽地址和端口
}
on node2 {
node-id 1;
address 192.168.10.133:7000;
}
connection {
host node1 port 7000;
host node2 port 7000;
net {
protocol C;##使用drbd的第三種同步協議,表示收到對方主機寫入確認後,則認爲寫入完成
}
}
}
|
d.掛載新磁盤
# fdisk /dev/sdb
-----> n
-----> 1
-----> 默認
-----> +300M -----> w
f.創建設備元數據並格式化磁盤
1
2
3
4
5
6
|
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=10 ##用指定大小的塊拷貝一個文件
# drbdadm -c /etc/drbd.conf create-md all ##創建設備元數據
# mkfs.ext4 /dev/drbd1 ##格式化虛擬磁盤
# mkdir -pv /data/mysql
# chown -R mysql.mysql /data/mysql/
# ln -s /etc/ha.d/resource.d/drbddisk /usr/local/heartbeat/etc/ha.d/resource.d/ ##建立drbddisk腳本至heartbeat的/etc/ha.d/resource.d/的軟鏈接
|
②Heartbeat配置
Heartbeat的配置主要涉及到ha.cf、haresources、authkeys這三個文件。其中ha.cf是主配置文件,haresource用來配置要讓Heartbeat託管的服務,authkey是用來指定Heartbeat的認證方式。
a.配置ha.cf
1
2
3
4
5
6
7
8
9
10
11
|
# cat /usr/local/heartbeat/etc/ha.d/ha.cf |grep ^[^#]
logfile /var/log/ha-log ##日誌文件記錄
logfacility local0
keepalive 2 ##設定心跳(監測)時間時間爲2秒
deadtime 30 ##指定若備用節點在30秒內未收到主節點心跳信號,則接管主服務器資源 warntime 10 ##指定心跳延遲的時間
initdead 120 ##系統啓動或重啓後預留的忽略時間段,取值至少爲deadtime的兩倍 udpport 694 ##廣播/單播通訊使用的Udp端口
ucast eno16777736 192.168.10.133 ##採用網卡eno16777736的udp單播來組織心跳,後面爲對端IP
auto_failback on ##定義當主節點恢復後,是否將服務自動切回
node node1 ##節點名稱,與uname -n顯示一致
node node2
ping 192.168.10.1
|
b.配置haresources
1
2
3
|
# cp resource-agents-3.9.6/heartbeat/mysql /usr/local/heartbeat/etc/ha.d/resource.d/ ##複製MySQL腳本至heartbeat的/etc/ha.d/resource.d/下
# cat /usr/local/heartbeat/etc/ha.d/haresources |grep ^[^#]
node1 IPaddr::192.168.10.222/24/eno16777736 drbddisk::r1 Filesystem::/dev/drbd1::/data::ext4 mysql
|
node1是HA集羣的主節點,IPaddr爲heartbeat自帶的執行腳本,heartbeat首先將執行/etc/ha.d/resource.d/IPaddr 192.168.10.222/24 start的操作,即虛擬一個子網掩碼爲255.255.255.0,IP爲192.168.10.222的地址,此IP爲heartbeat對外提供服務的網絡地址,同時指定此IP使用的網絡接口,接着,指定使用的DRBD的資源,然後,Heartbeat將執行共享磁盤分區的掛載操 作,"Filesystem::/dev/sdb1::/data::ext4"相當於在命令行下執行mount操作,即"mount -t ext4 /dev/sdb1 /data",最後依次啓動MySQL服務。
c.配置authkeys
1
2
3
|
# grep -v "#" /usr/local/heartbeat/etc/ha.d/authkeys
auth 2
2 sha1 HI!
|
auth 後面填寫序號,可任意填寫,但第二行開頭必須爲序號名,然後爲驗證方式,支持三種( crc md5 sha1 )方式驗證,最後面是自定義密鑰
d.複製配置文件至node2
1
|
# scp /usr/local/heartbeat/etc/ha.d/*
[email protected]:/usr/local/heartbeat/etc/ha.d/
|
注:需更改ha.cf的ucast中的IP爲node1的IP(該處爲192.168.10.132)。
③配置MySQL
1
2
|
# vi /etc/my.cnf
datadir=/data/mysql ##修改MySQL的數據存儲目錄
|
五、測試
①
1
2
3
4
5
|
# drbdadm up r1 ##啓用該資源
# drbd-overview
1:r1/1 Connected(2*) Secondary(2*) UpToDa/UpToDa
# systemctl start mysql
# systemctl start heartbeat
|
已實現自動掛載
②故障切換測試
node1:
1
|
# systemctl stop heartbeat
|
node2:
已實現正常切換
本文出自 「記事本」 博客,請務必保留此出處http://wangzhijian.blog.51cto.com/6427016/1713052