前言:構建雙節點高可用Mysql服務器,用DRBD個人感覺是比較合適的,只需要兩臺Server即可,用IP SAN的話先不說SAN的設備,主機也得需要4臺,NFS是行不通的。
目標:兩臺mysql服務器基於drbd構建高可用主從服務器,平時DR1服務器接受請求,DR2基於DRBD數據備份,當DR1出現問題時,DR2接替DR1的工作接受用戶請求。
規劃:
DR1:172.16.1.16 hostname dr1.laoguang.me
DR2:172.16.1.17 hostname dr2.laoguang.me
VIP:172.16.1.1
環境:RedHat5.8 內核:2.6.18-308.el5 Selinux已經關閉 Yum 配置完好
注:如果沒說在哪臺機器上配置則默認是dr1
一.配置準備工作,hostname設置,/etc/hosts解析的與對方hostname -n 一致,ssh互信,時間統一
1.1 hostname設置在dr1上演示設置
hostname dr1.laoguang.me
vi /etc/hosts ##添加如下解析
172.16.1.16 dr1.laoguang.me dr1
172.16.1.17 dr2.laoguang.me dr2
1.2 ssh互信設置dr1上演示
ssh-keygen -t rsa -P "" ##回車,生成密鑰在/root/.ssh下
ssh-copy-id -i /root/.ssh/id_rsa.pub dr2 ##公鑰拷貝到dr2上,再次登錄dr2不需要密碼
同樣dr2也這麼設置
1.3 同步時間(如果有NTP就同步NTP的時間)
date -s 20121127;ssh dr2 'date -s 20121127'
二.dr1,dr2上安裝DRBD
DRBD分爲兩部分,一部分是工作內核中的模塊部分,一部分是工件在用戶空間的管理工具,2.6.33以後的內核中已經集成了DRBD的模塊,只安裝管理工具即可,舊內核需要爲內核打補丁纔可以,有愛好者把補丁做成了rpm包名字爲kmod-drbd,安裝它即可,補丁包一定與內核版本一致。下面安裝與軟件。
2.1 dr1,dr2安裝內核補丁與軟件 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm,drbd83-8.3.8-1.el5.centos.i386.rpm
rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm
rpm -ql drbd83 ##查看生成文件
2.2 配置DRBD(注如果沒說在哪臺機器上配置則默認是dr1)
/etc/drbd.conf 爲主配置文件,它把/etc/drbd.d下子配置文件包含進來,通過查看drbd.conf我們可以發現一樣例文件/usr/share/doc/drbd83-8.3.8/drbd.conf,用它覆蓋這個空的配置文件。
cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
編輯/etc/drbd.d/global_common.conf 這個全局配置文件如下:
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
handlers {
用默認即可
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
on-io-error detach; ##IO錯誤的處理方法
#fencing resource-only;
}
net {
cram-hmac-alg "sha1"; ##指定校驗算法,校驗是爲保證數據完整
shared-secret "laoguang.me"; ##指定校驗密碼
}
syncer {
rate 1000M; ##指定同步時用多少帶寬
}
}
2.3 dr1,drs上創建大小一樣的分區,不演示了
dr1上的爲/dev/sda5 1G ##注:記的partprobe,不要格式化
dr2上的爲/dev/sda5 1G
2.4 爲DRBD添加磁盤資源
vim /etc/drbd.d/mysql.res
resource mysql {
on dr1.laoguang.me {
device /dev/drbd0; ##DRBD用的設備
disk /dev/sda5; ##映射的磁盤
address 172.16.1.16:7789; ##drbd啓動後監聽端口7789
meta-disk internal; ##元數據存放
}
on dr2.laoguang.me {
device /dev/drbd0;
disk /dev/sda5;
address 172.16.1.17:7789;
meta-disk internal;
}
}
2.5 拷貝到時dr2上一份
scp -r /etc/drbd.* dr2:/etc/
2.6 dr1,dr2上初始化drbd資源,並啓動服務
drbdadm create-md mysql ##如果沒出現successful可能是你沒有partprobe哦
service drbd start
drbd-overview ##查看起動狀態
0:mysql Connected Secondary/Secondary Inconsistent/Inconsistent C r----
2.7 將其中dr1節點先設置爲Primary,讓磁盤同步一次
drbdsetup /dev/drbd0 primary –o
drbd-overview ##查看狀態,可知dr2開始同步dr1的數據,等待同步完成
0:mysql SyncSource Primary/Secondary UpToDate/Inconsistent C r----
[==>.................] sync'ed: 15.3% (841880/987896)K delay_probe: 11
2.8 格式化drbd0,掛載使用。注意,由於沒有鎖管理,所以不要同時掛載使用,一般只有primaty可使用
mke2fs -j -L DRBD /dev/drbd0
mkdir /data/mydata -pv ##dr1,dr2都建立該目錄,爲以後mysql安裝準備
mount /dev/drbd0 /data/mydata
cd /data/mydata ##查看是否成功,建立文件測試能否同步
cp /etc/fstab .
umount /data/mydata
drbdadm secondary mysql ##把自己轉換爲Secondary
dr2上操作:
drbdadm primary mysql ##dr2切換爲Primary
mount /dev/drbd0 /data/mydata ##掛載,並查看是否有數據
ls /data/mydata
到此DRBD設置完畢。一會兒我們會把drbd定義爲資源,所以禁止drbd開機啓動
chkconfig drbd off
三.dr1,dr2上安裝Mysql
primary切換到dr1,掛載drbd0到/data/mydata,開始安裝Mysql,本段不再演示,如有需要去看http://laoguang.blog.51cto.com/6013350/1039208
主要更改datadir到 /data/mydata ,另外注意dr1,dr2的mysql用戶uid,gid須一致
安裝完測試能否啓動,如果能,請繼續。
停止mysql,卸載drbd,primary切換到dr2,掛載drbd0到/data/mydata,mysql不需要初始化了,拷貝配置文件,啓動腳本即可。測試能否啓動
不許mysql開機啓動
chkconfig mysqld off
四.基於corosync,pacemaker部署高可用集羣
4.1 安裝covosync,pacemaker及依賴包
ls ##查看當前目錄下的所有包,http://clusterlabs.org/rpm/下載適合你平臺的包
cluster-glue-1.0.6-1.6.el5.i386.rpm
cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
corosync-1.2.7-1.1.el5.i386.rpm
corosynclib-1.2.7-1.1.el5.i386.rpm
heartbeat-3.0.3-2.3.el5.i386.rpm ##安裝heartbeat是因爲pacemake會依賴它的某些庫
heartbeat-libs-3.0.3-2.3.el5.i386.rpm
libesmtp-1.0.4-5.el5.i386.rpm
pacemaker-1.1.5-1.1.el5.i386.rpm
pacemaker-cts-1.1.5-1.1.el5.i386.rpm
pacemaker-libs-1.1.5-1.1.el5.i386.rpm
perl-TimeDate-1.16-5.el5.noarch.rpm
resource-agents-1.0.4-1.1.el5.i386.rpm
------------------------------centos5.x x86_64bit安裝方法----------------------------
rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo
yum -y install heartbeat-stonith
yum -y install pacemaker corosync
--------------------------------------------------------------------------------------
安裝它們
yum -y --nogpgcheck localinstall *.rpm ##必須在rpm所在目錄哦
4.1 修改covosync配置文件
cd /etc/corosync
mv corosync.conf.example corosync.conf
vi corosync.conf
totem {
version: 2
secauth: on ##啓用認證,不能讓其它主機隨意加入集羣
threads: 0
interface {
ringnumber: 0
bindnetaddr: 172.16.0.0 ##綁定端口
mcastaddr: 226.94.11.19 ##組播地址,建議修改
mcastport: 5405 ##組播端口
}
}
logging { ##定義日誌
fileline: off
to_stderr: no
to_logfile: yes ##日誌寫入獨立file
to_syslog: no ##不用寫到syslog中了
logfile: /var/log/cluster/corosync.log ##日誌path,需要手動建立
debug: off ##調試
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}
service { ##定義資源管理服務
ver: 0
name: pacemaker ##啓動pacemaker
}
aisexec { ##運行corosync的user
user: root
group: root
}
4.2 建立日誌目錄,建立認證密鑰
mkdir /var/log/cluster ##dr2中也建立
corosync-keygen ##生成密鑰
##配置文件同步到dr2上一份
scp -p authkey corosync.conf dr2:/etc/corosync/
4.3 dr1,dr2啓動corysync,等待一會兒查看狀態
service corysync start
crm status ##查看狀態,如果顯示Online: [ dr2.laoguang.me dr1.laoguang.me ] 則正常
4.4 定義covosync的一些屬性,我們沒有stonith設備,我們就兩個節點,假如一個掛點quorum就不會大於1/2,集羣還運行於否
crm ##進入crn命令行,以後管理集羣就靠它了
crm(live)# configure ##進入配置狀態
crm(live)configure# property no-quorum-policy="ignore" ##定義quorum不足一半時繼續運行
crm(live)configure# property stonith-enabled="false" ##禁用stonish,生產環境中應該定義的
crm(live)configure# verify ##校驗是否有語法錯誤
crm(live)configure# commit ##沒有錯誤,提交
crm(live)configure# show ##查看
4.5 定義drbd爲主從資源
crm(live)configure# primitive Mysql_DRBD ocf:linbit:drbd \
params drbd_resource=mysql op start timeout=240 op stop timeout=100
##先定義爲本地資源,指定資源類型,資源name,指定用的RA,後面的是RA的語法需要
##drbd_resource是指你定義的drbd的名字
crm(live)configure# master Ms_Mysql_DRBD Mysql_DRBD meta \
master-max="1"master-node-max="1"clone-max="2"clone-node-max="1"notify="true"
##master關鍵字定義主從資源,後面指定資源name,meta 指定額外參選數,master-max指定最多有幾個master,
##master-node-max指定一個節點最多運行幾個master,clone-max指定有幾個clone資源,
##clone-node-max指定一個節點最多運行幾個clone資源,notify指當出現故障時是否通知對方
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# quit
drbd-overview ##查看drbd是不是啓動了
4.6 定義Filesystem資源
定義Filesystem掛載
crm(live)configure# primitive MysqlFS ocf:heartbeat:Filesystem params \
device=/dev/drbd0 directory=/data/mydata fstype="ext3" op start timeout=60 \
op stop timeout=60
掛載的drbd的一方必須是primary的主機,所以我們還得定義排列約束,Filesystem必須掛載到drbd的primary上,drbd服務必須先於Filesystem啓動
crm(live)configure# colocation MysqlFS_with_Ms_Mysql_master inf: MysqlFS Ms_Mysql_DRBD:Master
crm(live)configure# order MysqlFS_after_Ms_Mysql_DRBD inf: Ms_Mysql_DRBD:promote MysqlFS:start
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show 查看CIB庫
crm(live)configure# quit
crm_mon ##查看資源運行狀況
mount 查看master上drbd0掛載上沒有
4.7 定義Mysql資源,定義順序約束與排列約束
crm(live)configure# primitive Mysql_Server lsb:mysqld
crm(live)configure# order Mysql_Server_after_MysqlFS inf: MysqlFS Mysql_Server
crm(live)configure# colocation Mysql_Server_with_MysqlFS inf: Mysql_Server MysqlFS
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# quit
crm status
[root@dr1 ~]# crm status
============
Last updated: Wed Nov 28 15:11:26 2012
Stack: openais
Current DC: dr1.laoguang.me - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
3 Resources configured.
============
Online: [ dr2.laoguang.me dr1.laoguang.me ]
Master/Slave Set: Ms_Mysql_DRBD [Mysql_DRBD]
Masters: [ dr2.laoguang.me ]
Slaves: [ dr1.laoguang.me ]
MysqlFS (ocf::heartbeat:Filesystem): Started dr2.laoguang.me
Mysql_Server (lsb:mysqld): Started dr2.laoguang.me
4.8 定義一個IP資源並定義順序、排列約束
crm(live)configure# primitive Mysql_IP ocf:heartbeat:IPaddr params ip=172.16.1.1
crm(live)configure# colocation Mysql_IP_with_Mysql_Server inf: Mysql_IP Mysql_Server
crm(live)configure# order Mysql_IP_after_Mysql_Server inf: Mysql_Server Mysql_IP
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# quit
crm status
[root@dr1 ~]# crm status
============
Last updated: Wed Nov 28 15:17:03 2012
Stack: openais
Current DC: dr1.laoguang.me - partition with quorum
Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
2 Nodes configured, 2 expected votes
4 Resources configured.
============
Online: [ dr2.laoguang.me dr1.laoguang.me ]
Master/Slave Set: Ms_Mysql_DRBD [Mysql_DRBD]
Masters: [ dr2.laoguang.me ]
Slaves: [ dr1.laoguang.me ]
MysqlFS (ocf::heartbeat:Filesystem): Started dr2.laoguang.me
Mysql_Server (lsb:mysqld): Started dr2.laoguang.me
Mysql_IP (ocf::heartbeat:IPaddr): Started dr2.laoguang.me
4.9 資源定義完畢,簡單的集羣構建完畢,測試能否正常轉移
由4.8可知Master爲dr2,我們在dr2上轉移測試
crm node standby
crm status ##查看Master是否變爲了dr1
繼續測試,休眠dr1虛擬機,看能否轉移到時dr2
mysql中建立數據庫與表格,standby測試數據是否能同步