採用Heartbeat+DRBD+mysql高可用方案,配置兩個節點的高可用集羣html
l 配置各節點互相解析node
gb07mysql
gb06linux
l 配置各節點時間同步sql
gb07vim
[root@gb07 ~]# ntpdate 10.10.102.7服務器
gb06網絡
[root@gb06 ~]# ntpdate 10.10.102.7dom
l 各節點關閉SELinuxide
修改/etc/selinux/config文件中設置SELINUX=disabled ,而後重啓服務器。
l Corosync 安裝與配置(兩節點上都要安裝配置)
gb07
[root@gb07 ~]# yum install -y corosync
gb06
[root@gb06 ~]# yum install -y corosync
[root@gb07 ~]# cd /etc/corosync/
[root@gb07 corosync]# mv corosync.conf.example corosync.conf
[root@gb07 corosync]# vim corosync.conf
compatibility: whitetank
totem { #心跳信息傳遞層
version: 2 #版本
secauth: on #認證信息 通常on
threads: 0 #線程
interface { #定義心跳信息傳遞的接口
ringnumber: 0
bindnetaddr: 10.10.0.0 #綁定的網絡地址,寫網絡地址
mcastaddr: 226.94.1.1 #多播地址
mcastport: 5405 #多播的端口
ttl: 1 #生存週期
}
}
logging { #日誌
fileline: off
to_stderr: no #是否輸出在屏幕上
to_logfile: yes #定義本身的日誌
to_syslog: no #是否由syslog記錄日誌
logfile: /var/log/cluster/corosync.log #日誌文件的存放路徑
debug: off
timestamp: on #時間戳是否關閉
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service {
ver: 0
name: pacemaker #pacemaker做爲corosync的插件進行工做
}
aisexec {
user: root
group: root
}
[root@gb07 corosync]# scp corosync.conf gb06:/etc/corosync/
[root@gb07 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).
#遇到這個狀況,表示電腦的隨機數不夠,能夠不停的隨便敲鍵盤生成隨機數
[root@gb07 corosync]# scp authkey gb06:/etc/corosync/
#把認證文件也複製到gb06主機上
l Pacemaker配置與安裝(兩節點上都要安裝配置)
gb07
[root@gb07 ~]# yum install -y pacemaker
gb06
[root@gb06 ~]# yum install -y pacemaker
gb07
[root@gb07 ~]# yum –y install crm
gb06
[root@gb06 ~]# yum –y install crm
安裝完成後,啓動corosync service corosync start; 啓動pacemaker
service pacemaker start
l DRBD 安裝與配置(兩個節點上都要安裝配置)
gb07
[root@gb07 ~]# yum -y install drbd84 kmod-drbd84
gb06
[root@gb06 ~]# yum -y install drbd84 kmod-drbd84
若是yum源找不到包,嘗試在網上搜一下drbd安裝,下載相應的yum源文件再安裝
[root@gb07 ~]# cat /etc/drbd.d/global_common.conf
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol 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";
# 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 120;
#degr-wfc-timeout 120;
}
disk {
on-io-error detach;
#fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "mydrbdlab";
}
syncer {
rate 1000M;
}
}
[root@gb07 drbd.d]# cat mysql.res #資源配置文件
resource mysql {
on gb07 {
device /dev/drbd0;
disk /dev/sda3; #預留的硬盤分區
meta-disk internal;
address ipv4 10.10.102.7:7700;
}
on gb06 {
device /dev/drbd0;
disk /dev/sda3;
meta-disk internal;
address ipv4 10.10.102.6:7700;
}
}
[root@gb07 drbd.d]# scp global_common.conf mydata.res gb06:/etc/drbd.d/
DRBD元數據的初始化和將元數據的初始設置寫入 /dev/data/mysql,必須兩個節點上都完成
建立/ dev/drbd0設備節點,將DRBD設備與本地存儲設備相連,必須在兩個節點上都完成
使初始設備同步,讓設備成爲主要的角色(可寫和可讀)。查看DRBD資源的主要角色和次要角色更詳細的說明請參考DRBD用戶指南。只能完成一個節點,就是你將繼續建立文件系統的那個節點
mkfs -t xfs /dev/drbd0
mount /dev/drbd0 /mysql
l 將mysql資源加入pacemaker
[root@jie2 ~]# crm
crm(live)# configure
crm(live)configure# property stonith-enabled=false
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# primitive mysqldrbd ocf:linbit:drbd params drbd_resource=mysql op monitor role=Master interval=10 timeout=20 op monitor role=Slave interval=20 timeout=20 op start timeout=240 op stop timeout=100
crm(live)configure#verify #檢查語法
crm(live)configure# ms ms_mysqldrbd mysqldrbd meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
crm(live)configure# verify
crm(live)configure# primitive mystore ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/mysql" fstype="xfs" op monitor interval=40 timeout=40 op start timeout=60 op stop timeout=60
crm(live)configure# verify
crm(live)configure# colocation mystore_with_ms_mysqldrbd inf: mystore ms_mysqldrbd:Master
crm(live)configure# order ms_mysqldrbd_before_mystore mandatory: ms_mysqldrbd:promote mystore:start
crm(live)configure# verify
crm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip="10.10.42.96" op monitor interval=20 timeout=20 on-fail=restart
crm(live)configure# primitive myserver lsb:mysqld op monitor interval=20 timeout=20 on-fail=restart
crm(live)configure# verify
crm(live)configure# colocation myserver_with_mystore inf: myserver mystore
crm(live)configure# order mystore_before_myserver mandatory: mystore:start myserver:start
crm(live)configure# verify
crm(live)configure# colocation myvip_with_myserver inf: myvip myserver
crm(live)configure# order myvip_before_myserver mandatory: myvip myserver
crm(live)configure# verify
crm(live)configure# commit
commit以後能夠查看節點的運行狀態,切換節點,看資源是否轉移
mysql、drbd都是集羣的資源,由集羣管理的資源開機是必定不可以自行啓動的。
[root@gb07 ~]#chkconfig mysqld off
[root@gb07 ~]#chkconfig drbd off
[root@gb06 ~]#chkconfig mysqld off
[root@gb06 ~]#chkconfig drdb off
如今,OpenStack的服務必須指向MySQL配置高可用,虛擬羣集IP地址 - 而不是像往常同樣的MySQL服務器的物理IP地址。
對於Openstack中的glance,若是Mysql服務的ip地址是10.10.102.7,將會用到如下幾行在OpenStack鏡像註冊配置文件中(glance-registry.conf):
sql_connection = mysql://glancedbadmin:<password>@10.10.42.96/glance
l 可能會遇到的問題
正常狀態下,查看集羣中drbd資源的鏈接狀態爲:
但因爲網絡或機器的故障可能會出現drbd腦裂故障,集羣的drbd資源鏈接中斷:
0:mysql/0 StandAlone Secondary/Unknown UpToDate/-- C r-----
解決辦法查看官方連接http://www.drbd.org/users-guide/s-resolve-split-brain.html