利用heartbeat和drbd实现HDFS的双机热备Word下载.docx
《利用heartbeat和drbd实现HDFS的双机热备Word下载.docx》由会员分享,可在线阅读,更多相关《利用heartbeat和drbd实现HDFS的双机热备Word下载.docx(22页珍藏版)》请在冰豆网上搜索。
netmask255.255.255.0
gateway192.168.123.1
autoeth1
ifaceeth1inetstatic
address192.168.123.42
hosts文件
~$cat/etc/hosts
127.0.0.1localhost
127.0.1.1bobo-VirtualBox
192.168.123.41master
192.168.123.44backup
192.168.123.47slave
192.168.123.40vip
192.168.123.42master
192.168.123.46backup
backup:
bobo@backup:
address192.168.123.44
address192.168.123.46
同master
slave(datanode):
bobo@slave:
address192.168.123.47
配置SSH无密码访问:
master
ssh-keygen-tdsa-P'
'
-f~/.ssh/id_dsa
cat~/.ssh/id_dsa.pub>
>
authorized_keys
backup
关闭selinux(所有机器)
SELinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。
Lustre存储服务器和元数据目录服务器通信会使用一些特殊端口,最好关闭SELINUX。
编辑文件/etc/sysconfig/selinux,设置:
SELINUX=disabled
然后reboot
没有selinux
关闭防火墙(所有机器)
如果系统启动了Iptables服务,需要为相关服务打开端口(988,1021~1023等),简单的处理是关闭防火墙。
#清除规则
iptables–F
#保存
serviceiptablessave
chkconfig--level2345iptablesoff
serviceiptablesstop
没有防火墙ufw
iptables没有开启,默认都是ACCEPT
DRBD部署
原理
DRBD(DistributedReplicatedBlockDevice)是基于Linux系统下的块复制分发设备。
它可以实时的同步远端主机和本地主机之间的数据,类似与Raid1的功能,我们可以将它看作为网络Raid1。
在服务器上部署使用DRBD,可以用它代替共享磁盘阵列的功能,因为数据同时存在于本地和远端的服务器上,当本地服务器出现故障时,可以使用远端服务器上的数据继续工作,如果要实现无间断的服务,可以通过drbd结合另一个开源工具heartbeat,实现服务的无缝接管。
DRBD的工作原理如下图:
编译linux内核
由于2.4.9缺少CONNECTOR,导致drbd无法安装,因此必须编译内核。
linux内核2.6之后就带有CONNECTOR,这里用的是:
~$uname-a
Linuxmaster3.0.0-12-generic#20-UbuntuSMPFriOct714:
50:
42UTC2011i686i686i386GNU/Linux
安装drbd
分别在两台主机上安装。
sudoapt-getinstalldrbd8-utils
配置drbd
1.DRBD使用的硬盘分区
这两个分区的大小必须相同。
为虚拟机master和backup添加一块虚拟硬盘,大小为2G,利用fdisk分区,得到:
Disk/dev/sdb:
2147MB,2147483648bytes
22heads,16sectors/track,11915cylinders,total4194304sectors
Units=sectorsof1*512=512bytes
Sectorsize(logical/physical):
512bytes/512bytes
I/Osize(minimum/optimal):
Diskidentifier:
0x80d3501f
DeviceBootStartEndBlocksIdSystem
/dev/sdb12048419430320961285Extended
/dev/sdb540964194303209510483Linux
我们指定两台主机的/dev/sdb5分区作为DRBD的使用的分区.这两个分区大小都为2G。
分区需为空白。
主机1:
master,IP地址为192.168.123.42,DRBD分区为/dev/sdb5
主机2:
backup,IP地址为192.168.123.46,DRBD分区为/dev/sdb5
这里用eth1作为两个主机的通信接口。
2.drbd.conf配置文件
DRBD运行时,会读取一个配置文件/etc/drbd.conf。
这个文件里描述了DRBD设备与硬盘分区的映射关系,和DRBD的一些配置参数:
#是否参加DRBD使用者统计.默认是yes
global{usage-countyes;
}
#设置主备节点同步时的网络速率最大值,单位是字节.
common{syncer{rate10M;
}}
#一个DRBD设备(即:
/dev/drbdX),叫做一个"
资源"
.里面包含一个DRBD设备的主备节点的相关信息.
resourcer0{
#使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
protocolC;
disk{
on-io-errordetach;
}
net{
#见其他——splitbrain问题处理
after-sb-0pridiscard-younger-primary;
after-sb-1pridiscard-secondary;
after-sb-2pricall-pri-lost-after-sb;
rr-conflictdisconnect;
#incompatibleresyncdecision
syncer{
rate10M;
#(设置网络同步速率)
al-extents257;
#Ahighernumberofextentsgiveslongerresynctimesbutlessupdatestothemeta-data.Thedefaultnumberofextentsis127.(Minimum:
7,Maximum:
3843)
}
#每个主机的说明以"
on"
开头,后面是主机名.在后面的{}中为这个主机的配置.
onmaster{
#/dev/drbd1使用的磁盘分区是/dev/hdb1
device/dev/drbd0;
disk/dev/sdb5;
#/dev/hdb5;
#设置DRBD的监听端口,用于与另一台主机通信
address192.168.123.42:
7788;
flexible-meta-diskinternal;
onbackup{
#/dev/hda5;
address192.168.123.46:
3将drbd.conf文件复制到备机上
scp/etc/drbd.confbackup:
/etc
初始化drbd
1、加载模块
drbd采用的是模块控制的方式,所以先要加载drbd.ko模块
#insmoddrbd.ko或者modprobedrbd
使用lsmod来查看模块是否加载成功。
成功
ModuleSizeUsedby
nls_utf8124931
isofs395491
drbd2602224
2、主备创建数据块
drbdadmcreate-mdr0
3、主备启动drbd
/etc/init.d/drbdstart
~$cat/proc/drbd
version:
8.3.11(api:
88/proto:
86-96)
srcversion:
DA5A13F16DE6553FC7CE9B2
0:
cs:
Connectedro:
Secondary/Secondaryds:
Inconsistent/InconsistentCr-----
ns:
0nr:
0dw:
0dr:
0al:
0bm:
0lo:
0pe:
0ua:
0ap:
0ep:
1wo:
foos:
2095004
/etc$cat/proc/drbd
4、设置主节点
在master上执行以下命令,设置master为主节点:
sudodrbdadm----overwrite-data-of-peerprimaryall
5、查看连接
netstat-atn的输出结果,说明两台机器的drbd服务已经连接上了:
tcp00192.168.1.42:
57769192.168.1.46:
7788ESTABLISHED
7788192.168.1.46:
33762ESTABLISHED
6、查看同步状态
cat/proc/drbd
主节点上执行这个命令后的结果,显示数据正在同步中:
SyncSourcero:
Primary/Secondaryds:
UpToDate/InconsistentCr-----
ns:
62464nr:
63264al:
3lo:
7pe:
8ap:
2032540
[>
....................]sync'
ed:
3.2%(2032540/2095004)K
finish:
03:
14speed:
10,408(10,408)K/sec
等待同步完毕
7、创建文件系统
在主节点上的设备/dev/drbd0上创建一个文件系统,可以把DRBD设备挂载到/mnt/drbd目录上使用。
从节点的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。
因此不需要这个过程。
在master上执行:
mkfs.ext3/dev/drbd0
mkdir/mnt/drbd
mount/dev/drbd0/mnt/drbd
查看挂载结果:
df
/dev/drbd030963708176200292146441%/mnt/drbd
8、设置drbd开机自动启动
chkconfigdrbdon
主备机切换
有时,需要将DRBD的主备机互换一下,可以执行下面的操作:
1、在主节点上,先要卸载掉DRBD设备。
sudoumount/mnt/drbd0
2、将主节点master降级为“从节点”:
sudodrbdadmsecondaryr0
3、在从节点backup上,将它升级为“主节点”:
sudodrbdadmprimaryr0
4、在从节点backup上,挂载drbd设备
sudomount/dev/drbd0/mnt/drbd
drbd手动切换同步测试
1)在master上
cd/mnt/drbd
ddif=/dev/zeroof=/mnt/drbd/testfilebs=104857600count=2
umount/mnt/drbd
drbdadmsecondaryall
2)在backup上
drbdadmprimaryall
mkdir-p/mnt/drbd
ls-l/mnt/drbd
可以看到文件testfile在主节点写入,在从节点马上可以看到。
heartbeat部署
安装heartbeat
先在主节点上安装,命令如下:
sudoapt-getinstallheartbeat
/etc/ha.d/ha.cf定义位于不同节点上的heartbeat进程间如何进行通信/etc/ha.d/authkeys定义Heartbeat包在通信过程中如何进行加密
/etc/ha.d/haresources定义对某个资源来说哪个服务器是主节点,以及哪个节点应该拥有客户端访问资源时的目标IP地址
配置/etc/ha.d/ha.cf
配置heartbeat守护进程使用交叉网络发送和接收心跳数据包。
1、解压/usr/share/doc/heartbeat/ha.cf样本配置文件:
sudogunzipha.cf.gz
2、使用下面的命令将样本配置文件复制到适当的位置:
sudocpha.cf/etc/ha.d/ha.cf
3、编辑/etc/ha.d/ha.cf文件,取消注释符号或增加以下内容:
logfile/var/log/ha-log
#heartbeat的日志文件
udpport694
#设置广播通信使用的端口,694为默认使用的端口号
ucasteth1192.168.123.46
#采用单播ucast方式,使用网卡eth1在主服务器和备用服务器之间发送心跳消息。
指定对端ip,即在master上指定192.168.123.46,在backup上指定192.168.123.42
4、同时,取消keepalive,deadtime和initdead这三行的注释符号:
keepalive2
#心跳消息之间的时间间隔,默认时间单位为秒
deadtime30
#超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡。
warntime10
#超出该时间间隔未收到对方节点的心跳,则发出警告并记录到日志中。
initdead120
#在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,选项用于解决这种情况产生的时间间隔。
取值至少为deadtime的两倍。
5、添加下面两行:
nodemaster
nodebackup
#这里填写主、备用服务器的名字(uname-n命令返回的值)。
6、使用Heartbeat重新启动守护进程
指定与heartbeat一同启动和关闭的进程,该进程被自动监视,遇到故障则重新启动。
最常用的进程是ipfail,该进程用于检测和处理网络故障,需要配合ping语句指定的pingnode来检测网络连接。
在/etc/ha.d/ha.cf中使用下面这样一行:
ping192.168.123.1#一般ping网关,不能ping集群中的节点
respawnroot/usr/lib/heartbeat/ipfail
apiauthipfailgid=rootuid=root#执行ipfail的用户和组ID
7、auto_failback的相关配置
用于决定,当拥有该资源的属主恢复之后,资源是否变迁:
是迁移到主上(设置为on),还是在当前节点上继续运行,直到当前节点出现故障(off)。
auto_failbackoff
8、STONITH配置
stonith_hostmasternullbackup
stonith_hostbackupnullmaster
#stonith的主要作用是使出现问题的节点从集群环境中脱离,进而释放集群资源,避免两个节点争用一个资源的情形发生。
保证共享数据的安全性和完整性。
配置/etc/ha.d/authkeys
authkeys文件用于heartbeat的鉴权设置,共有三种可用的鉴权方式:
crc、md5和sha1。
三种方式安全性依次提高,但同时占用的系统资源也依次扩大。
crc安全性最低,适用于物理上比较安全的网络,sha1提供最为有效的鉴权方式,占用的系统资源也最多。
其配置语句格式如下:
auth<
number>
<
<
authmethod>
[<
authkey>
]
1、将authkeys文件复制到适当的位置:
cp/usr/share/doc/heartbeat/authkeys/etc/ha.d
2、编辑/etc/ha.d/authkeys文件,取消下面两行内容前的注释符号:
auth1
1crc
3、确保authkeys文件只能由root读取:
chmod600/etc/ha.d/authkeys
配置/etc/ha.d/haresources
格式如下:
primary-server[IPaddress[/mask/interface/broadcast]]resource1[:
:
arg1:
arg2]resource2[:
arg2]
主服务拥有的资源的名字,它告诉heartbeat程序哪个机器拥有某个资源,资源名实际上是/etc/init.d目录或/etc/ha.d/resource.d目录下的一个脚本。
(这个脚本的副本必须同时存在于主服务器和备用服务器上)
master192.168.123.40drbddisk:
r0Filesystem:
/dev/drbd0:
/mnt/drbd:
ext3hdfs
在备用服务器上安装Heartbeat
安装完包之后,直接在主服务器上执行下面的命令复制所有配置文件到备用服务器上:
scp-r/etc/ha.dbackup:
/etc/ha.d
scp命令是安全复制命令,它使用SSH协议在两个节点之间复制数据,-r选项指定scp复制主服务器上/etc/ha.d目录下的所有文件和所有子目录。
启动Heartbeat
1在主服务器和备用服务器上把heartbeat配置为开机自动启动
chkconfig--level35heartbeaton
2手工启停方法
/etc/init.d/heartbeatstart
或者
serviceheartbeatstart
/etc/init.d/heartbeatstop
serviceheartbeatstop
heartbeat自动切换测试
1)启动heartbeat
在master和backup上执行:
已经启动
2)在master上到ifconfig
可以看到虚拟IP已经启动
0Linkencap:
EthernetHWaddr00:
11:
D8:
94:
C6:
1C
inetaddr:
192.168.123.40Bcast:
192.168.188.255Mask:
255.255.255.0
UPBROADCASTRUNNINGMULTICASTMTU:
1500Metric:
1
Interrupt:
177Baseaddress:
0xc400
3)在master上停止heartbeat服务或关机
4)在bac