运行环境: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
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/mysql
server-id       = 2
log-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;
+------+
| i    |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)
查看数据完成一致,说明DRBD的同步已经成功了