運行環境:Ubuntu8.0.4
DRBD-8.0.11
MySQL-5.1.36-log
服務器名稱及IP:DBTest1 192.168.0.101 primary node
DBTest2 192.168.0.102 secondary node步驟:
一,編譯安裝MySQL
在DBTest1和DBTest2上分別執行如下步驟
#tar -zxvf MySQL-5.1.36.tar.gz
#cat MySQL-5.1.36
#./configure --prefix=/usr/local/MySQL --with-charset=utf8 --with-plugins=max-no-ndb
#make
#make install
#adduser MySQL
到此mysql安裝完成,先不急著運行MySQL下面安裝DRBD
二,安裝DRBD
在DBTest1和DBTest2上分別執行如下步驟
#sudo apt-get install drbd8-utils
安裝完成後查看drbd是否安裝成功
#lsmod | grep drbd
drbd 213256 4
cn 9632 1 drbd
看到上面的信息則表示安裝成功了
三,增加磁盤分區
在我的測試環境中有一個新的磁盤/dev/sdb 現在在這個磁盤上分一個區/dev/sdb1用於drbd, 注冊DBTEST1和DBTEST2上的磁盤分區大小最好相同。
#fdisk /dev/sdb
四,配置DRBD
DRBD 的配置文件一般位於/etc/drbd.conf,修改這個文件,注意在DBTEST1和DBTEST2中這個文件要完成相同
global {
usage-count no;
} common {
syncer { rate 10M; }
} resource MySQL {
protocol C; on DBTest1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.101:7788;
flexible-meta-disk internal;
} on DBTest2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.0.102:7788;
meta-disk internal;
}
}
五,啟動DRBD
在DBTEST1(主節點)上執行如下命令
1) 創建matadata:
#drbdadm create-md all
2) 啟動drbd:
#/etc/init.d/drbd start
3) 設置為主節點:
#drbdadm primary all
4) 在新設備上面創建文件系統
#mkfs.ext3 /dev/drbd0
5) 將文件系統mount上
#mkdir /dbfile
#mount /dev/drbd0 /dbfile
在DBTEST2(從節點)上執行如下命令:
1) 創建matadata:
#drbdadm create-md all
2) 啟動drbd:
#/etc/init.d/drbd start
注:在從節點上不用創建文件系統(因為這些信息都會從主節點同步過來的)
六,檢查DRBD的服務狀態:
在DBTEST1上執行如下命令:
#pa -aux | grep drbd
root@DBTest1:~# ps aux | grep drbd
root 5761 0.1 0.0 0 0 ? S 14:44 0:09 [drbd0_worker]
root 5763 0.4 0.0 0 0 ? S 14:44 0:29 [drbd0_receiver]
root 5768 0.1 0.0 0 0 ? S 14:44 0:08 [drbd0_asender]
root 6413 0.0 0.4 1784 536 pts/1 R+ 16:41 0:00 grep drbd
#cat /proc/drbd
root@DBTest1:~# cat /proc/drbd
version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43
0: cs:Connected st:Primary/Secondary ds:Inconsistent/UpToDate C r---
ns:88796 nr:1060 dw:89856 dr:0 al:42 bm:28 lo:0 pe:0 ua:0 ap:0
resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:22157 misses:66 starving:0 dirty:24 changed:42在DBTEST2上執行如下命令
root@DBTest2:/tools/MySQL-5.1.36# ps -aux |grep drbd
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.Net/faq.Html
root 5672 0.0 0.0 0 0 ? S 14:38 0:00 [drbd0_worker]
root 5673 0.3 0.0 0 0 ? S 14:38 0:26 [drbd0_receiver]
root 5695 0.0 0.0 0 0 ? S 14:44 0:03 [drbd0_asender]
root 6097 0.0 0.4 1788 576 pts/0 S+ 16:42 0:00 grep drbd
# cat /proc/drbd
version: 8.0.11 (api:86/proto:86)
GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43
0: cs:Connected st:Secondary/Primary ds:UpToDate/Inconsistent C r---
ns:3302 nr:88796 dw:89856 dr:2615 al:9 bm:8 lo:0 pe:0 ua:0 ap:0
resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0
act_log: used:0/257 hits:256 misses:9 starving:0 dirty:0 changed:9看到以上信息說明DRBD已經正確啟動了。其中drbd0_worker是drbd的主進程,而drbd0_asender是塊發送進程,drbd0_receiver是塊接收進程. cat /proc/drbd 中的信息如下FIEld 說明 值:
cs 連接狀態 出現的值:
o Unconfigured:設備在等待配置。
o Unconnected:連接模塊時的過渡狀態。
o WFConnection:設備等待另一測的配置。
o WFReportParams:過渡狀態,等待新TCP 連接的第一個數據包時。.
o SyncingAll:正將主節點的所有模塊復制到次級節點上。.
o SyncingQuick:通過復制已被更新的模塊(因為現在次級節點已經離開了集群)來更新次級節點。
o Connected:一切正常。
o Timeout:過渡狀態。
st 狀態(設備的作用) 可能的值為:
o 本地/遠程一級狀態
o 二級狀態
o 未知(這不是一種作用)
ns 網絡發送 模塊號碼
nr 網絡接收 模塊號碼
dw 磁盤寫入 模塊號碼
DR 磁盤讀取 模塊號碼
of 運行中(過時的)模塊號碼
pe 待解決的 模塊號碼
ua 未答復的 模塊號碼(最好為0)
七,配置MySQL
#cd /usr/local/MySQL
#bin/mysql_install_db --datadir=/dbfile --user=MySQL
#vi /dbfile/my.cnf
[clIEnt]
#password = your_passWord
port = 3306
socket = /tmp/MySQL.sock# Here follows entrIEs for some specific programs# The MySQL Server
[MySQLd]
port = 3306
socket = /tmp/MySQL.sock
skip-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
datadir=/dbfile
basedir=/usr/local/MySQLserver-id = 2log-bin=DBTest_bin# binary logging format - mixed recommended
#binlog_format=mixed# Uncomment the following if you are using InnoDB tables
#innodb_data_home_dir = /opt/data/innodb
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = /usr/local/MySQL/var/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
#innodb_buffer_pool_size = 2M
#innodb_additional_mem_pool_size = 1M
# Set .._log_file_size to 25 % of buffer pool size
#innodb_log_file_size = 5M
#innodb_log_buffer_size = 1M
#innodb_flush_log_at_trx_commit = 2
#innodb_lock_wait_timeout = 50#Slave Configure
#master-host=192.168.0.101
#master-port=3306
#master-user=repl #同步用戶帳號
#master-passWord=oursaadmin
#master-connect-retry=60 #預設重試間隔60秒
#replicate-do-db=crn #告訴slave只做blog數據庫的更新
#relay-log=mysqld-relay-bin[MySQLdump]
quick
max_allowed_packet = 16M[MySQL]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M[MySQLhotcopy]
interactive-timeout八,測試
在DBTEST1中啟動MySQL
#cd /usr/local/MySQL
# bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=MySQL &
#MySQL > create database crn;
#MySQL > create table t(i int);
#MySQL > insert into t values(1),(2),(3)
#MySQL> select * from t;
+------+
| i |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
退出mysql,並在DBTEST1上關閉MySQL,將主節點切換到DBTEST2
# bin/MySQLadmin shutdown
#umount /dbfile
#drbdadm secondary all
在DBTEST2 上執行如下命令
#drbdadmin primary all
#mount /dev/drbd0 /dbfile
#cd /usr/local/MySQL
#bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=MySQL &
#MySQL > use crn;
#MySQL > select * from t;
[color="#000000"]+------+[/color]
[color="#000000"]| i |[/color]
[color="#000000"]+------+[/color]
[color="#000000"]| 1 | [/color]
[color="#000000"]| 2 | [/color]
[color="#000000"]| 3 | [/color]
[color="#000000"]+------+[/color]
[color="#000000"]3 rows in set (0.00 sec)[/color]
查看數據完成一致,說明DRBD的同步已經成功了