linux分布式复制块设备drbd
1.drbd主从:
primary :可执行读写复制
secondary:文件系统不能挂载
drbd主主:
高可用集群中,把它当为一种资源(其中有锁,表示有一个设配在写,另一个不可以,同时可以自动切换,但只在集群中可以)
2.Disk Scheduler(磁盘调度器)
合并读请求,合并写请求 (因为磁臂)
3.drbd协议:
A:异步 (只要向另一发出去,不管是否出自己网卡NIC,对方是否收到报文)
B:半同步 (经过对方网卡,但是不保证是否真正同步到B硬盘上)
C:同步(确保同步到B硬盘上)
4.drbd 资源
资源名称:可以是除过空格外的任意ACSII字符
drbd设备:在双方节点上,此drbd设备的设备文件,一般为/dev/drbdN 其主设备号147
磁盘:在双方节点上,各自提供的存储设备
网络配置:双方数据同步时所使用的网络属性
5.drbd命令
drbdadm (/etc/drbd.conf (/etc/drbd.d/))
drbdsetup
drbdmeta (操作drbd源数据)
6.drbd整合在内核 (uname -r)
配置:
基于跳板机工作:(drdb可以限制只允许跳板机ssh连接,这样更安全)
1. ssh 实现无密码连接
跳板机上:
ssh-keygen
ssh-copy-id -i id_rsa.pub 192.168.1.2
会在192.168.1.2 ~/.ssh/生成authroized.key
此时ssh 192.168.1.2 则无需密码
但如果还提示错误Agent admiiited.....
在跳板机上: ssh-add id_rsa (把密钥加载进来)
2.将安装包drbd发送到drbd节点机子上
在跳板机子上有安装包
# for n in {2..3}; do scp drbd.rpm 192.168.1.$n:/root/ ; done
3.安装drbd在两个节点上
在跳板机子上有安装包
# for n in {2..3}; do ssh 192.168.1.$n `yum localinstall drbd*.rpm -y ` ; done
4. 用跳板机控制drbd机子。
for ip in {1..2};
do
ssh node$ip `wget ftp://192.168.1.254/pub/RPM/drdb/a,rpm`;
done
5.修改配置文件
vim /etc/drbd.d/global_common.conf
6.定义资源文件
7.初始化资源
两节点执行
drbd create-md mydrdb
8.启动服务(两节点都执行)
/etc/init.d/drbd start
9.查看启动状态
a. cat /proc/drbd
b. drbd-overview
(此时两个都为Secondary 而且数据为Inconsistent 为同步)
10.设置其中一个为主
drbdadm - - - -overwrite-data-of-peer primary mydrbd (资源名字,图片中叫web)
只有一个为主时才会同步,此时Inconsistent变为UoToDate 就证明同步了(drbd 只能一个为主)
11.格式化文件(只能在主节点进行)
mke2fs -j /dev/drbd0
挂载文件
mount /dev/drbd0 /data
cp /etc/conf /data
12. 调换角色
在主节点上:
umount /data
drbdadm secondary mydrbd
在从节点
drbdadm primary mydrbd
mount /dev/drbd0 /data
cd /data
就会有刚复制的inittab文件 实现了文件同步
mydrbd
/dev/drbd0
/dev/sda5
drbd配置文件:
/etc/drbd.conf
/etc/drbd.d/global_common.conf (common默认协议)
/etc/drbd.d/*.res
1
|
# vim /etc/sysconfig/network
|
1
|
# hostname test1.magedu.com
|
1
|
# vim /etc/sysconfig/network
|
1
|
# hostname test2.magedu.com
|
1
|
# vim /etc/hosts
|
1
|
# vim /etc/hosts
|
1
2
|
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P
''
# ssh-copy-id -i .ssh/id_rsa.pub root@test2.magedu.com
|
1
2
|
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P
''
# ssh-copy-id -i .ssh/id_rsa.pub root@test1.magedu.com
|
1
|
# ntpdate
172.16
.
0.1
|
1
2
|
# crontab –e
*/
5
* * * * ntpdate
172.16
.
0.1
>/dev/
null
|
1
2
3
|
# yum -y --nogpgcheck localinstall
drbd83-
8.3
.
81
.el5.centos.i386.rpm
kmod-drbd83-
8.3
.
8
-
1
.el5.centos.i686.rpm
|
1
|
# cp /usr/share/doc/drbd83-
8.3
.
8
/drbd.conf /etc
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
global {
usage-count no;
# minor-countdialog-refresh disable-ip-verification
common {
protocol C;
handlers {
# 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-timeoutdegr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
disk {
on-io-errordetach;
# on-io-errorfencing
use
-bmbv no-disk-barrier no-disk-flushes
# no-disk-drain no-md-flushesmax-bio-bvecs
}
net {
cram-hmac-alg
"sha1"
shared-secret
"mydrbdlab"
;
}
syncer {
rate 100M;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
|
# vim web.res
resource web {
device /dev/drbd1;
disk /dev/sda6;
meta-disk
internal
;
on test1.magedu.com {
address172.
16.51
.
77
:
7789
;
}
on test2.magedu.com {
address172.
16.51
.
78
:
7789
;
}
}
|
1
|
# drbdadm create-md web
|
1
|
# service drbd status
|
1
2
3
|
# mke2fs -j /dev/drbd0
# mkdir /mydata
# mount /dev/drbd0 /mydata/
|
1
2
|
# umount /mydata/
# drbdadm secondary mydrbd
|
1
|
# drbdadm primary mydrbd
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# yum -y --nogpgcheck localinstall
cluster-glue-
1.0
.
6
-
1.6
.el5.i386.rpm
cluster-glue-libs-
1.0
.
6
-
1.6
.el5.i386.rpm
corosync-
1.4
.
5
-
1.1
.i386.rpm
corosynclib-
1.4
.
5
-
1.1
.i386.rpm
heartbeat-
3.0
.
3
-
2.3
.el5.i386.rpm
heartbeat-libs-
3.0
.
3
-
2.3
.el5.i386.rpm
libesmtp-
1.0
.
4
-
5
.el5.i386.rpm
openais-
1.1
.
3
-
1.6
.el5.i386.rpm
openaislib-
1.1
.
3
-
1.6
.el5.i386.rpm
pacemaker-
1.1
.
5
-
1.1
.el5.i386.rpm
pacemaker-cts-
1.1
.
5
-
1.1
.el5.i386.rpm
pacemaker-libs-
1.1
.
5
-
1.1
.el5.i386.rpm
resource-agents-
1.0
.
4
-
1.1
.el5.i386.rpm
|
1
2
3
|
# cd /etc/corosync/
# cp corosync.conf.example corosync.conf
# vim corosync.conf
|
1
2
3
4
5
|
totem {
secauth:on
interface
{
bindnetaddr:
172.16
.
0.0
mcastaddr:
239.151
.
51.51
|
1
2
3
4
5
6
7
8
|
service {
ver:
0
name: pacemaker
}
aisexec {
user: root
group: root
}
|
1
2
|
# mkdir /
var
/log/cluster
# ssh test2
'mkdir /var/log/cluster'
|
1
|
# corosync-keygen
|
1
|
# scp -p authkey corosync.conf test2:/etc/corosync/
|
1
2
3
4
5
|
crm(live)configure#property stonith-enabled=
false
crm(live)configure#verify
crm(live)configure#property no-quorum-policy=ignore
crm(live)configure#verify
crm(live)configure#commit
|
1
2
3
|
crm(live)configure#rsc_defaults resource-stickiness=
100
crm(live)configure#verify
crm(live)configure#commit
|
1
2
|
crm(live)# ra
crm(live)ra#providers drbd
|
1
|
crm(live)ra# metaocf:heartbeat:drbd
|
1
2
3
4
5
|
crm(live)#configure
crm(live)configure#primitive mydrbdservice ocf:heartbeat:drbd params drbd_resource=mydrbd op starttimeout=
240
op stop timeout=
100
op monitor role=Master interval=
20
timeout=30op monitor role=Slave interval=
30
timeout=
30
crm(live)configure#ms ms_mydrbd mydrbdservice meta master-max=
1
master-node-max=
1
clone-max=2clone-node-max=
1
notify=
true
crm(live)configure#verify
crm(live)configure#commit
|
1
2
3
|
crm(live)# node
crm(live)node#standby
crm(live)node#online test1.magedu.com
|
1
|
crm(live)configure#primitive mystore ocf:heartbeat:Filesystem params device=/dev/drbd0directory=/mydata fstype=ext3 op start timeout=
60
op stop timeout=
60
|
1
|
crm(live)configure#colocation mystore_with_ms_mydrbd inf: mystore ms_mydrbd:Master
|
1
|
crm(live)configure#order mystore_after_ms_mydrbd mandatory: ms_mydrbd:promote mystore:start
|
1
2
|
crm(live)# node
crm(live)node#standby test2.magedu.com
|
1
2
|
# groupadd -g3306 mysql
# useradd -g
3306
-u
3306
-M mysql
|
1
2
|
# tar xf mysql-
5.5
.
28
-linux2.
6
-i686.tar.gz-C /usr/local/
# ln -sv mysql-
5.5
.
28
-linux2.
6
-i686mysql
|
1
2
3
|
# cd /mydata
# mkdir data
# chownmysql.mysql data -R
|
1
2
|
# cd/usr/local/mysql
# chown root.mysql/usr/local/mysql/* -R
|
1
2
3
|
# cd/usr/local/mysql
# cpsupport-files/my-large.cnf /etc/my.cnf
# cpsupport-files/mysql.server /etc/init.d/
|
1
|
# vim /etc/my.cnf
|
1
2
|
thread_concurrency=
2
datadir=/mydata/data
|
1
2
|
# chkconfig --addmysqld
# chkconfigmysqld off
|
1
2
|
# cd/usr/local/mysql
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data
|
1
2
3
|
crm(live)# node
crm(live)node#standby test1.magedu.com
crm(live)node#online test1.magedu.com
|
1
2
3
|
crm(live)configure#primitive mysqld lsb:mysqld
crm(live)configure#verify
crm(live)configure#
|
1
2
|
crm(live)configure#colocation mysql_with_mystore inf: mysqld mystore
crm(live)configure#verify
|
1
2
3
|
crm(live)configure#order mysqld_after_mystore mandatory: mystore mysqld
crm(live)configure#verify
crm(live)configure#commit
|
1
2
3
|
crm(live)# node
crm(live)node#standby test2.magedu.com
crm(live)node#online test2.magedu.com
|