1,什麼是DRBD
DRBD(Distributed Replicated Block Device),DRBD 號稱是 "網絡 RAID",開源軟件,由 LINBIT 公司開發。
2,DRBD的主要功能
DRBD 實際上是一種塊設備的實現,主要被用於Linux平台下的高可用(HA)方案之中。他是有內核模塊和相關程序而組成,通過網絡通信來同步鏡像整個設備,有點類似於一個網絡RAID的功能。也就是說當你將數據寫入本地的DRBD設備上的文件系統時,數據會同時被發送到網絡中的另外一台主機之上,並以完全相同的形式記錄在一個文件系統中(實際上文件系統的創建也是由DRBD的同步來實現的)。本地節點(主機)與遠程節點(主機)的數據可以保證實時的同步,並保證IO的一致性。所以當本地節點的主機出現故障時,遠程節點的主機上還會保留有一份完全相同的數據,可以繼續使用,以達到高可用的目的。
3,DRBD的主要應用
如果主服務器宕機,造成的損失是不可估量的。要保證主服務器不間斷服務,就需要對服務器實現冗余。在眾多的實現服務器冗余的解決方案中,heartbeat 為我們提供了廉價的、可伸縮的高可用集群方案。我們通過heartbeat + drbd在Linux下創建一個高可用(HA)的集群服務器,在高可用(HA)解決方案中使用DRBD的功能,可以代替使用一個共享盤陣存儲設備。因為數據同時存在於本地主機和遠程主機上,在遇到需要切換的時候,遠程主機只需要使用它上面的那份備份數據,就可以繼續提供服務了。
4,DRBD於MySQL的關系
MySQL 與 LINBIT 達成了合作關系,大張旗鼓的搞了這個 "12 天 Scale-Out" 活動,也是這個商業合作驅動的吧。DRBD 助力 MySQL, 號稱可以得到四個 9 的可靠性,這不低於任何一款商業數據庫軟件了。
DRBD 的出現的確對 MySQL 集群的可用性有很大提高。而且,有獨到的特點,非常適合面向互聯網的應用。因為是在存儲層的數據塊同步,很容易的做到應用層的 IO 負載均衡(備機承擔一定的讀壓力),不但支持數據庫失敗接管,還能做到 IP 失敗接管,接管時間小於 30 秒,真是窮人的絕佳集群解決方案。
IP地址說明:
master
192.168.100.20
slave
192.168.100.21
VIP 192.168.100.25
1、管理節點MySQL安裝
修改主機名為manager
# tar -zxvf MySQL-5.0.67.tar.gz
# cd MySQL-5.0.67
# groupadd MySQL
# useradd -g mysql -s /sbin/nologin -M MySQL
# ./configure --prefix=/usr/local/MySQL --with-charset=gbk --localstatedir=/var/data --with-extra-charset=all --enable-thread-safe-clIEnt
# make && make install
# cp support-files/my-large.cnf /etc/my.cnf
# chown -R mysql.mysql /usr/local/MySQL/
# /usr/local/mysql/bin/mysql_install_db --user=MySQL
# chown -R root.root /usr/local/MySQL/
# chown -R mysql.mysql /var/data # /usr/local/mysql/bin/mysqld_safe --user=MySQL &
# cp support-files/mysql.server /etc/rc.d/init.d/MySQLd
# chmod 755 /etc/rc.d/init.d/mysqld # chkconfig --add MySQLd
添加root密碼
# /usr/local/mysql/bin/MySQLadmin -u root passWord "123456"
配置庫文件搜索路徑
# echo "/usr/local/mysql/lib/MySQL">>/etc/ld.so.conf
# ldconfig
# ldconfig -v
添加/usr/local/MySQL/bin到環境變量PATH中
#echo "export PATH=$PATH:/usr/local/MySQL/bin">>/etc/profile
#source /etc/profile
2、從服務器MySQL的安裝同上
3、DRBD的安裝和設置
(1)安裝DRBD(主從服務器安裝相同)
# tar -zxvf drbd-8.3.0.tar.gz
# cd drbd-8.3.0
# make KDRI=/usr/src/redhat/
# make install
檢查是否生成了相應的文件:/etc/drbd.conf ; /etc/init.d/drbd ; 以及./drbd/drbd.ko
加載安裝drbd模塊
# modprobe drbd
通過lsmod檢查是否已經成功
#lsmod |grep drbd (2)更改drbd配置文件(主從服務器相同)
准備drbd要使用的分區,該分區最好是干淨的分區,我在虛擬機中重新劃分了一個分區/dev/sdb1作為drbd使用。
# vi /etc/drbd.conf
resource r0 {
protocol C;
startup {
degr-wfc-timeout 120; disk {
on-io-error detach; net { syncer {
rate 10M; on master{
//master為主服務器的主機名
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.100.20:7788;
meta-disk internal; on slave{
//master為從服務器的主機名
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.100.21:7788;
meta-disk internal; }
(3)主服務器的設置
創建matadata:
# drbdadm create-md all
2次輸入“yes”
啟動drbd:
# /etc/init.d/drbd start
在啟動第一個節點上的DRBD服務的時候,他會等待第2個節點的DRBD服務的啟動,此時啟動第2個節點上的DRBD服務即可。
查看drbd的運行狀態
# cat /proc/drbd 設置為主節點:
# drbdadm primary all # drbdsetup /dev/drbd0 primary -o # mkfs.ext3 /dev/drbd0 # mkdir /var/data
# mount /dev/drbd0 /var/data
在主節點上寫入數據
然後,我們把primary降級成secondary,把secondary提升成primary:
# umount /var/data
# drbdadm secondary all 把primary降級前,一定要先umount設備才行。然後提升secondary:
# drbdadm primary all
# mount /dev/drbd0 /var/data/
查看一下數據同步過來沒
4、安裝配置heartbeat(主從服務器的安裝和配置相同):
(1)先安裝libnet
# tar -zxvf libnet.tar.gz
# cd libnet
# ./configure
# make
# make install
(2)安裝heartbeat
# groupadd haclIEnt
# useradd -g haclIEnt hacluster
# tar -jxvf Heartbeat-STABLE-2-1-STABLE-2.1.4.tar.bz2
# cd Heartbeat-STABLE-2-1-STABLE-2.1.4
# ./ConfigureMe configure --disable-swig --disable-snmp-subagent
# make
# make install
# cp doc/ha.cf /etc/ha.d/
# cp doc/haresources /etc/ha.d/
# cp doc/authkeys /etc/ha.d/
(3)Authkeys配置
# chmod 600 authkeys 主節點和從節點間數據校驗用的
# vi /etc/ha.d/authkeys
把 #auth 1
#1 crc
#2 sha1 HI!
#3 md5 Hello! auth 3
#1 crc
#2 sha1 HI!
3 md5 Hello!
(4)資源文件haresources配置
# vi /etc/ha.d/haresources master drbddisk Filesystem::/dev/drbd0::/var/data::ext3 MySQLd 192.168.100.25 master 當前primary節點名(uname -n)
drbddisk 告訴heartbeat要管理drbd的資源
Filesystem 這裡是告訴heartbeat需要管理文件系統資源,其實實際上就是執行mount/umount命令,後面的“::”符號之後是跟的 Filesystem的參數設備名和mount點)
mysqld 告訴需要管理MySQL
192.168.100.25 這裡是讓heartbeat幫你管理一個service ip,會跟著主節點一起漂移
(5)ha.cf配置
# vi /etc/ha.d/ha.cf
#debugfile /var/log/ha-debug的注釋去掉
#keepalive 2 去注釋
#deadtime 15 去注釋
#warntime 10 去注釋把10改成5
#initdead 120 去注釋
#udpport 694 去注釋
#bcast eth0 #Linux 去注釋
#watchdog /dev/watchdog 去注釋也可以不打開
#node den3 把den3改成master 這裡要注要它是主節點名稱下面的是副節點名稱,一定要與uname -n一致.
#node dathy 把dathy改成slave
#ping_group group1 10.10.10.254 10.10.10.253 去注釋改:ping_group group1 192.168.100.20 192.168.10.21
#respawn hacluster /usr/lib/heartbeat/ipfail 去注釋
#apiauth ipfail gid=haclIEnt uid=hacluster 去注釋
#hopfudge 1 去注釋 它就是集群中活躍節點的數量
(6)啟動heartbeat
# /etc/init.d/heartbeat start
# echo "/etc/init.d/heartbeat start">>/etc/rc.local
# ps -ef | grep heartbeat查看一下
5、測試然後再把網線插回去,MySQL服務能否自動切換回來?