標籤:
openstack高可用配置文檔
介紹利用兩台物理主機實現高可用的openstack雲平台,這裡主要說明mysql和rabbitmq的高可用配置。
l 安裝openstack雲平台(兩台主機上都部署openstack I版)
- 安裝centos作業系統,由於以active-passive模式配置mysql等服務的高可用時,需要單獨的硬碟分區來裝載和同步mysql等服務的資料,所以安裝系統時,在系統鏡像設定檔裡預留出2-3塊20G左右單獨的硬碟分區作為備用;
- Yum –y update && reboot系統安裝完成後,更新系統;
- 利用redhat的rdo工具安裝openstack I版
yum install -y http://rdo.fedorapeople.org/rdo-release.rpm
yum install -y openstack-packstack
packstack --gen-answer-file=ans-file.txt
根據需要修改answer-file; 然後packstack --answer-file=ans-file.txt
完成後檢查openstack I版是否安裝成功成功後選擇其中一台主機作為主節點,另一台主機作為備用節點配置各個服務的高可用;
配置openstack服務的高可用,首先要配置兩個節點的高可用叢集:
l 配置各節點互相解析
gb07
gb06
l 配置各節點時間同步
gb07
[[email protected] ~]# ntpdate 10.10.102.7
gb06
[[email protected] ~]# ntpdate 10.10.102.7
l 各節點關閉SELinux
修改/etc/selinux/config檔案中設定SELINUX=disabled ,然後重啟伺服器。
l Corosync 安裝與配置(兩節點上都要安裝配置)
gb07
[[email protected] ~]# yum install -y corosync
gb06
[[email protected] ~]# yum install -y corosync
[[email protected] ~]# cd /etc/corosync/
[[email protected] corosync]# mv corosync.conf.example corosync.conf
[[email protected] 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
}
[[email protected] corosync]# scp corosync.conf gb06:/etc/corosync/
[[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 (bits = 152).
#遇到這個情況,表示電腦的隨機數不夠,可以不停的隨便敲鍵盤產生隨機數
[[email protected] corosync]# scp authkey gb06:/etc/corosync/
#把認證檔案也複製到gb06主機上
l Pacemaker配置與安裝(兩節點上都要安裝配置)
gb07
[[email protected] ~]# yum install -y pacemaker
gb06
[[email protected] ~]# yum install -y pacemaker
gb07
[[email protected] ~]# yum –y install crm
gb06
[[email protected] ~]# yum –y install crm
安裝完成後,啟動corosync service corosync start; 啟動pacemaker
service pacemaker start
l DRBD 安裝與配置(兩個節點上都要安裝配置)
gb07
[[email protected] ~]# yum -y install drbd84 kmod-drbd84
gb06
[[email protected] ~]# yum -y install drbd84 kmod-drbd84
如果yum源找不到包,嘗試在網上搜一下drbd安裝,下載相應的yum源檔案再安裝
[[email protected] ~]# 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;
}
}
[[email protected] 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;
}
}
[[email protected] 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
[[email protected] ~]# 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都是叢集的資源,由叢集管理的資源開機是一定不能夠自行啟動的。
[[email protected] ~]#chkconfig mysqld off
[[email protected] ~]#chkconfig drbd off
[[email protected] ~]#chkconfig mysqld off
[[email protected] ~]#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 Rabbitmq高可用配置
Rabbitmq的高可用採用mirrored queue,不需要額外的軟體包,配置比較簡單,靠參考以下兩篇部落格:
http://blog.sina.com.cn/s/blog_959491260101m6ql.html
http://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html
l 可能會遇到的問題
正常狀態下,查看叢集中drbd資源的串連狀態為:
但由於網路或機器的故障可能會出現drbd腦裂故障,叢集的drbd資源串連中斷:
0:mysql/0 StandAlone Secondary/Unknown UpToDate/-- C r-----
解決辦法查看官方連結http://www.drbd.org/users-guide/s-resolve-split-brain.html
- 叢集管理器pacemaker無法啟動mysql,啟動失敗; 控制節點記憶體要足夠,mysql中有個外掛程式innodb,mysqld啟動時innodb外掛程式會初始化一個記憶體緩衝池,約2.3G,如果沒有足夠的記憶體,mysqld啟動就會失敗;
- 偶爾一個節點掛掉,修複完成後,crm resource list看到該節點的資源狀態仍然是stopped,無法start,可能需要重啟一下drbd和pacemaker;
MySQL高可用配置