fm:http://snda.itprofly.com/showtopic-54.aspx
DRBD+HeartbeatV1+MySQL安裝配置執行個體(在RHEL 5.3上測試OK)
1.系統說明與架設結構
說明:此方案解決兩台做DB sever的機器做成軟raid,實現資料的安全備份,同時也實現在兩台機器上資料的同步與{
tagshow(event)
}">mysql服務HA。
採用第三方軟體DRDB和Heartbeat做MySQL高可用性設定組群方案。DRBD用來維護資料的同步和冗餘,Heartbeat負責HA處理.
2.系統安裝軟體準備
2.1OS
Redhat ENTERPRISE Linux5.3
2.2軟體包
DRBD-8.3.2.tar.gz(:http://oss.linbit.com/drbd/8.3/drbd-8.3.2.tar.gz)
libnet-1.1.2.1-1.1.i386.{
tagshow(event)
}">rpm(http://mirror.centos.org/centos-5/5.4/extras/i386/RPMS/libnet-1.1.2.1-2.rf.i386.rpm)
MySQL-client-community-5.1.41-0.rhel5.i386.Rpm(http://mirrors.sohu.com/mysql/MySQL-5.1/MySQL-client-community-5.1.41-0.rhel5.i386.rpm
MySQL-server-community-5.1.41-0.rhel5.i386.Rpm(http://mirrors.sohu.com/mysql/MySQL-5.1/MySQL-server-community-5.1.41-0.rhel5.i386.rpm
MySQL-shared-community-5.1.41-0.rhel5.i386.Rpm(http://mirrors.sohu.com/mysql/MySQL-5.1/MySQL-shared-community-5.1.41-0.rhel5.i386.rpm
2.3伺服器安裝配置
兩台配置基本相同的Server,必須要求每台伺服器有相同大小的一個分區或邏輯卷。伺服器重要配置資訊如下:節點1:主機名稱為:DB_primary, IP地址:192.168.31.173(用於網路通訊),分區為要離出一部分空間。(在本執行個體中,10G的硬碟,5G安裝系統,裝好系統後再fdisk 對留空間進行分區,在分區格式中選0,本例對將要做raid的/dev/sda3分了2G空間。(建議熟悉PV,VG,LV的概念及fdisk的分區處理)
[root@localhost ~]# fdisk –l
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 650 5116702+ 8e Linux LVM
/dev/sda3 651 894 1959930 0 Empty
節點2:主機名稱為:DB_secondary, 192.168.31.180分區為/dev/sda3,系統安裝須求與DB_primary一樣。
安裝完系統後,兩台機器都做以下配置:
1)#vi /etc/hosts
添加
192.168.31.173 DB_primary
192.168.31.180 DB_secondary
2) 關掉seliunx及相關不須要起動的服務
# vi /etc/sysconfig/se{
tagshow(event)
}">linux
SELINUX=disabled
#ntsysv
只選network sshd syslog,其他都取消,然後都reboot,到些系統安裝配置完成
3.DRBD安裝和配置
3.1DRBD安裝
1)從http://oss.linbit.com/drbd/下載了源碼包drbd-8.3.2.tar.gz,存放到/root/software
2)開始安裝,以root使用者執行以下命令
#cd /root/software
#tar -zxvf drbd-8.3.2.tar.gz
#cd drbd-8.3.2
#make
#make install
#insmod drbd/drbd.ko
#lsmod |grep drbd
3.2DRBD配置
3.2.1設定檔修改(兩台機)
#vi /etc/drbd.conf 使檔案成為
global { usage-count yes; }
common { syncer { rate 10M; } }
resource r0 {
protocol C;
startup {
}
disk {
on-io-error detach;
}
net {
}
on db_primary {
device /dev/drbd0;
disk /dev/sda3;
address 192.168.31.173:7788;
flexible-meta-disk internal;
on db_secondary {
device /dev/drbd0;
disk /dev/sda3;
address 192.168.31.180:7788;
meta-disk internal;
}
}
3.2.2Primary node和secondary node設定
1) 在DB_primary建立matadata:
#drbdadm create-md r0
2) 啟動drbd:
#/etc/init.d/drbd start
3) 在DB_secondary建立matadata:
#drbdadm create-md r0
4) 啟動drbd:
#/etc/init.d/drbd start
3) 設定DB_primary為主節點:
#drbdadm -- --overwrite-data-of-peer primary r0
4) 在DB_primary新裝置上面建立{
tagshow(event)
}">檔案系統
#mkfs.ext3 /dev/drbd0
5) 將檔案系統mount上:
#mkdir /drbddata
#mount /dev/drbd0 /drbddata
查看建立情況:
#cat /proc/drbd
3.3測試(重要要瞭解主和從之間的切換關係,是以後處理故障的基礎)
1)準備資料。在DB_primary192.168.31.173建立資料
#cd /drbddata
#mkdir test
#cd test
#echo 123 >1
2)將DB_primary上umount檔案系統,然後執行drbdadm secondary all,改成secondary模式:
# umount /drbddata
# drbdadm secondary r0
3)在伺服器DB_secondary192.168.31.180上執行drbdadm primary r0 改成primary模式,再mount檔案系統:
#drbdadm primary r0
#mount /dev/drbd0 /drbddata
檢查在/drbddata檔案下的test檔案和子檔案123是否已經完全同步到DB_secondary ,如果OK,資料已經同步好了。
3.4配置MySQL for DRBD
3.4.1MySQL安裝
在兩台機器上均用超級使用者root登入,執行以下操作:
#rpm -ivh rpm -ivh MySQL-client-community-5.1.41-0.rhel5.i386.rpm MySQL-shared-community-5.1.41-0.rhel5.i386.rpm MySQL-server-community-5.1.41-0.rhel5.i386.rpm
#/etc/init.d/mysql start
#netstat -lpn|grep 3306
說明mysql安裝成功
3.4.2資料目錄和my.cnf配置
DB_primary設定
第一步 關閉MySQL,清理InnoDB 檔案,因為後面需要重新構建,然後移動資料目錄到DRBD資料區域,並建立一個軟連結。
#/s{
tagshow(event)
}">bin/service mysql stop
#rm -rf /var/lib/mysql/ib*
#mv -f /var/lib/mysql /drbddata/mysql_data
#ln -s /drbddata/mysql_data /var/lib/mysql
第二步 建立和配置my.cnf檔案。
#cp /usr/share/mysql/my-huge.cnf /var/lib/mysql/my.cnf
第三步 增加一個root使用者為所以有伺服器可以串連的許可權:
#mysql
Mysql>GRANT ALL PRIVILEGES ON *.* to root @’%’ IDENTIFIED BY '123';
上面這句是為商務服務添加的相關使用者和密碼
設定MySQL使用者root的密碼,以保證資料安全。
#/usr/bin/mysqladmin -u root password 'passwd'
然後關掉mysql在DB_primary的運行,轉到DB_secondary
#/etc/init.d/mysql stop
將DB_primary上umount檔案系統,然後執行drbdadm secondary all,改成secondary模式:
# umount /drbddata
# drbdadm secondary r0
DB_secondary設定
對於DB_secondary,只需要進行如下操作:
#/sbin/service mysql stop
#rm -rf /var/lib/mysql
#ln -s /drbddata/mysql_data /var/lib/mysql
3.3MySQL啟動和關閉
3.3.1啟動MySQL
#/etc/init.d/mysql start
此時須要密碼,如果用剛才在DB_primary設定的密碼可以登陸,說明mysql的運行OK,並且資料目錄同步一致。
3.4.3測試
按照3.3的測試,把mysql轉到DB_primary,如果能完成,說明對DRDB的工作情況已經瞭解。可以繼續做下面的heartbert.
3.5Heartbeat軟體和配置(兩台機基本一樣,注意細節地方有不同,已藍色標記)
3.5.1Heartbeat安裝
5.1.1安裝libnet
#rpm -ivh libnet-1.1.2.1-1.1.i386.rpm
3.5.2安裝heartbeat(直接用{
tagshow(event)
}">yum安裝,在redhat上配置centos的yum源,如沒有外網也可直接把相關的包下載下來rpm安裝)
#wget http://sudone.com/download/CentOS-Base.repo -O /etc/yum.repos.d/CentOS-Base.repo
#rpm –import http://mirror.centos.org/centos-5/5.3/os/i386/RPM-GPG-KEY-CentOS-5
#yum install heartbeat*
3.5.3Heartbeat配置
3.5.3.1/etc/hc.d/authkeys配置
在/etc/hc.d/下增加檔案authkeys,兩台伺服器內容配置一樣,並且賦予600許可權。
#cat > /etc/ha.d/authkeys
內容如下:
auth 1
1 crc
#chmod 600 /etc/ha.d/authkeys
3.5.3.2/etc/ha.d/ha.cf配置
在/etc/hc.d/下增加檔案ha.cf,兩台伺服器內容配置一樣,並且賦予600許可權。
#vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 500ms
deadtime 10
warntime 5
initdead 30
udpport 694
bcast eth0
auto_failback off
node DB_primary
node DB_secondary
ping 192.168.31.200
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
deadping 5
3.5.3.3/etc/ha.d/haresources配置
在/etc/hc.d/下增加檔案ha.cf,兩台伺服器內容配置基本一樣,不同之處在於Node_name用hostname代替。192.168.31.200為虛擬IP,即對外提供服務的IP。
#vi /etc/ha.d/haresources
db_primary內容如下:db_primary 192.168.31.200 drbddisk Filesystem::/dev/drbd0::/drbddata::ext3 mysql
db_secondary 內容如下:db_secondary 192.168.31.200 drbddisk Filesystem::/dev/drbd0::/drbddata::ext3 mysql
/etc/ha.d/haresources配置完畢之後,需要拷貝兩個檔案到系統目錄,操作如下:
#cp -rf /etc/ha.d/resource.d/drbddisk /etc/init.d
#cp -rf /etc/ha.d/resource.d/Filesystem /etc/init.d
3.5.3.4啟動Heartbeat
先在db_primary上啟動,然後在db_secondary上啟動
#/etc/init.d/heartbeat start
用ifconfig能看到eth0:0的IP地址192.168.31.200即說明伺服器啟動,然後在db_secondary啟動heartbeat服務此時DB_primary和DB_secondary和同時運行,DB_primary對外提供服務,DB_secondary standby。
4.類比測試及處理問題流程
4.1 db_primary宕機或網路中斷
4.1.1db_primary宕機
db_primary宕機,此時db_secondary直接接管服務,網路無縫切換,服務轉到db_secondary上成為primary,如果db_primary開機後系統正常工作,此時在db_primary上運行drbdadm secondary r0,並啟動heartbeat服務,那麼原來的db_primary成為secondary.
4.1.2db_primary網路中斷
db_primary網路中斷幾秒後,此時db_secondary直接接管服務,網路無縫切換,服務轉到db_secondary上成為primary,如果db_primary接上網線後正常,此時在db_primary上運行drbdadm secondary r0,並啟動heartbeat服務,那麼原來的db_primary成為secondary.
4.1.3以上兩種情況出現後伺服器的主從切換
以上兩種情況出現後都會導致原來的db_primary成為secondary,在我們瞭解的heartbeat的工作原理後,很容易對它們做主從的切換。此時只須要在db_secondary關閉heartbeat服務,使服務無縫切換到db_primary上,然後再在db_secondary啟動heartbeat服務,使db_secondary成為standby.
4.2 db_secondary宕機或網路中斷
此種情況發生後,如果機器重啟後系統正常,只須執行drbdadm secondary r0並啟動heartbeat服務,使其成為standby.
4.3機器宕機系統無法正常啟動
無論是哪一台機器出現這種問題,請不要隨意重啟另一台正常工作的伺服器,請參照db_secondary進行配置,請注意細節地方,分清db_secondary和db_primary.