一、Drbd安装配置及配置
drbd-8.3.10.tar.gz
1、安装
./configure --prefix=/usr/local/drbd/ —with-km
Make && make install
2、编辑配置文件
Vim /usr/local/drbd/etc/drbd.d/global_common.conf
global {
usage-count yes;
# minor-count dialog-refresh disable-ip-verification
}
common {syncer {rate 10M;} }
resource r0 {
protocol C;
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /u
sr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f
";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /u
sr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f
";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/
notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm
.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm
.sh;
}
startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-s
b
}
disk {
# on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes
# no-disk-drain no-md-flushes max-bio-bvecs
}
net {
//主备之间通信使用的算法
cram-hmac-alg sha1;
shared-secret "hello";
# sndbuf-size rcvbuf-size timeout connect-int ping-int ping-time
out max-buffers
# max-epoch-size ko-count allow-two-primaries cram-hmac-alg shar
ed-secret
# after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg n
o-tcp-cork
}
syncer {
# rate after al-extents use-rle cpu-mask verify-alg csums-alg
}
on server01.com {
device /dev/drbd0;
disk /dev/hdb1;
address 192.168.100.5:7788;
meta-disk internal;
}
on server02.com {
device /dev/drbd0;
disk /dev/hdb1;
address 192.168.100.6:7788;
meta-disk internal;
}
}
3、创建启动脚步
Cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/drbd
Chconfig —add drbd
Chconfig drbd on
4、修改主机名
server01上
Shell>Hostname server01.com
Shell>Vim /etc/sysconfig/network
HOSTNAME=server01.com
server02上:
Shell>Hostname server02.com
Shell>Vim /etc/sysconfig/network
HOSTNAME=server02.com
5、修改 hosts文件,server01.com与server02.com主机一致
Shell> vim /etc/hosts
192.168.100.5 server01.com
192.168.100.6 server02.com
6、创建供drbd记录信息的数据块,r0是我们配置文件中定义的
[root@server01 ~]# drbdadm create-md r0
[root@server02 ~]# drbdadm create-md r0
7、启动drbd
[root@server01 ~]# /etc/init.d/drbd start
[root@server02 ~]# /etc/init.d/drbd start
出看drbd的状态
[root@server01 ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2097012
8、初始化一方为主机
[root@server01 ~]# drbdsetup /dev/drbd0 primary -o
[root@server01 ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:95232 nr:0 dw:0 dr:95232 al:0 bm:5 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2001780
[>....................] sync'ed: 4.7% (2001780/2097012)K
finish: 0:03:08 speed: 10,580 (10,580) K/sec
查看状态显示 以主机为准同步磁盘数据
[root@server01 ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:2097012 nr:0 dw:0 dr:2097012 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
状态显示数据已经同步完毕
9、格式化文件系统
[root@server01 ~]# mkfs -t ext3 /dev/drbd0
挂载文件系统
[root@server01 ~]# mkdir /data
[root@server01 ~]# mount /dev/drbd0 /data/
8、数据测试
创建一个10M的文件,查看备机是否存在
[root@server01 data]# dd if=/dev/zero of=test count=20480
9、主备切换
在主机上执行
[root@server01 ~]# umount /data/
[root@server01 ~]# drbdadm secondary all
这时查看drbd状态
[root@server01 ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server01, 2011-06-08 17:18:04
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:3004452 nr:0 dw:907440 dr:2097569 al:241 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
在备机上执行
[root@server02 drbd-8.3.10]# drbdadm primary all
查看状态
[root@server02 drbd-8.3.10]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@server02, 2011-06-08 17:19:40
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:3004452 dw:3004452 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0
挂载drbd分区
[root@server02 ~]# mkdir /data
[root@server02 ~]# mount /dev/drbd0 /data/
[root@server02 data]# ll -h
total 11M
drwx------ 2 root root 16K Jun 8 17:50 lost+found
-rw-r--r-- 1 root root 10M Jun 8 17:55 test
可以看到刚才在server01.com上创建的test文件,至此安装已经完毕
二、安装mysql数据库
.mysql安装省略
数据库安装完成,将安装好的mysql拷贝到另一台机器
三、使用keepalived 做ha
1、安装keeplaived
Yum install -y openssl openssl-devel
./configure --prefix=/usr/local/keepalived
Make && make install
2、配置文件如下
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
#主备之间配置唯一的区别
priority 250
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.7
}
}
3、启动keepalived
/usr/local/keepalived/sbin/keepalived -D -f /usr/local/keepalived/etc/keepalived/keepalived.conf
查看vip状态,VIP是根据在keepalived中priority值决定帮定在master还是backup上
[root@server01 keepalived-1.2.2]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:95:bf:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.100.5/24 brd 192.168.100.255 scope global eth0
inet 192.168.100.7/32 scope global eth0
4、测试结果
down掉server01.com上网卡,vip会切换到server02.com上。
Server01.com恢复正常,vip自动切换到server01.com上(因为server01.com优先级要高;如果不想这样,可以在server01.com加上nopreempt)
四、drbd与keepalived 结合
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 52
priority 250
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.7
}
notify_master "/usr/local/sbin/to-master"
notify_backup "/usr/local/sbin/to-backup"
notify_fault "/usr/local/sbin/to-backup"
}
To-master脚本如下
#!/bin/bash
while :
do
drbd_status=`service drbd status|grep Inconsistent | gawk '{print $4}'`
if [ -n "$drbd_status" ]; then
echo "drbd's status is inconsisten,waiting..."
sleep 1
else
echo "drbd's status is ok,namenode will be changing"
break
fi
done
while :
do
if [ -d /data/mysql ]; then
#service mysqld stop
service mysqld start
break
else
drbdadm primary r0
mount /dev/drbd0 /data
sleep 1
service mysqld start
fi
done
drbd_status=`service drbd status|grep StandAlone | gawk '{print $2}'`
if [ -n "$drbd_status" ]; then
vip_status=`ip addr |grep eth0|grep "192.168.100.7"`
if [[ ! -z ${vip_status} ]];then
for i in $(seq 3)
do
drbdadm connect all
sleep 2
done
fi
fi
To-backup脚步如下
#!/bin/bash
if [ -d /data/mysql ];then
service mysqld stop
pkill -9 mysql
sleep 1
fuser -ck /data/
umount -l /dev/drbd0
drbdadm secondary all
else
drbd_status=`service drbd status|grep StandAlone | gawk '{print $2}'`
if [ -n "$drbd_status" ]; then
drbdadm secondary all
fi
fi