转:http://www.360doc.com/content/12/0826/13/834950_232421759.shtml
这里简单介绍一下heartbeat和drbd。
如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd在Linux下创建一个高可用(HA)的集群服务器。
DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。
下面我们部署这一高可用。首先安装heartbeat,执行yum install heartbeat即可,不建议编译安装heartbeat,因为安装时间特长,容易出问题;接着安装drbd,安装方法见:http://www.86shichang.com/blog/?post=100,唯一不同的是在./configure命令中添加–with-heartbeat,安装完成后会在/usr/local/drbd/etc/ha.d/resource.d生成drbddisk和drbdupper文件,把这两个文件复制到/usr/local/heartbeat/etc/ha.d/resource.d目录,命令cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d。
我们的主机ip是192.168.79.130,备机ip:192.168.79.131,虚拟ip:192.168.79.135,drbd同步的分区/dev/sdb1,挂载的目录/data。
drbd配置
1、首先对/dev/sdb分区出/dev/sdb1,建立目录/data。
2、配置global和resource。
配置drbd.conf:
- vi /usr/local/drbd/etc/drbd.conf
写入:
- include "drbd.d/global_common.conf";
- include "drbd.d/*.res";
配置global_common.conf
- vi /usr/local/drbd/etc/drbd.d/global_common.conf
写入:
- global {
- usage-count yes;
- }
- common {
- net {
- protocol C;
- }
- }
配置r0资源:
- vi /usr/local/drbd/etc/drbd.d/r0.res
写入:
- resource r0 {
- on node1 {
- device /dev/drbd1;
- disk /dev/sdb1;
- address 192.168.79.130:7789;
- meta-disk internal;
- }
- on node2 {
- device /dev/drbd1;
- disk /dev/sdb1;
- address 192.168.79.131:7789;
- meta-disk internal;
- }
- }
3、设置hostname。
- vi /etc/sysconfig/network
修改HOSTNAME为node1
编辑hosts
- vi /etc/hosts
添加:
- 192.168.79.130 node1
- 192.168.79.131 node2
使node1 hostnmae临时生效
- hostname node1
node2设置类似。
4、设置resource
以下操作需要在node1和node2操作。
- modprobe drbd //载入 drbd 模块
- dd if=/dev/zero of=/dev/sdb1 bs=1M count=100 /把一些资料塞到 sdb 內 (否则 create-md 时有可能会出现错误)
- drbdadm create-md r0 //建立 drbd resource
- drbdadm up r0 //启动 resource r0
5、设置Primary Node
以下操作仅在node1执行。
设置node1为primary node:
- drbdadm primary --force r0
6、创建DRBD文件系统
以下操作仅在node1执行。
上面已经完成了/dev/drbd1的初始化,现在来把/dev/drbd1格式化成ext3格式的文件系统。
- mkfs.ext3 /dev/drbd1
然后将/dev/drbd1挂载到之前创建的/data目录。
- mount /dev/drbd1 /data
heartbeat配置
总共有三个文件需要配置:
ha.cf 监控配置文件
haresources 资源管理文件
authkeys 心跳线连接加密文件
1、同步两台节点的时间
- rm -rf /etc/localtime
- \cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- yum install -y ntp
- ntpdate -d cn.pool.ntp.org
2、配置ha.cf
- vi /etc/ha.d/ha.cf
- debugfile /var/log/ha-debug #打开错误日志报告
- keepalive 2 #两秒检测一次心跳线连接
- deadtime 10 #10 秒测试不到主服务器心跳线为有问题出现
- warntime 6 #警告时间(最好在 2 ~ 10 之间)
- initdead 120 #初始化启动时 120 秒无连接视为正常,或指定heartbeat
- #在启动时,需要等待120秒才去启动任何资源。
- udpport 694 #用 udp 的 694 端口连接
- ucast eth0 192.168.79.131 #单播方式连接(主从都写对方的 ip 进行连接)
- node node1 #声明主服(注意是主机名uname -n不是域名)
- node node2 #声明备服(注意是主机名uname -n不是域名)
- auto_failback on #自动切换(主服恢复后可自动切换回来)这个不要开启
- respawn hacluster /usr/lib/heartbeat/ipfail #监控ipfail进程是否挂掉,如果挂掉就重启它
3、配置authkeys
- vi /etc/ha.d/authkeys
写入:
- auth 1
- 1 crc
4、配置haresources
- vi /etc/ha.d/haresources
写入:
- node1 IPaddr::192.168.79.135/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/data::ext3
node1:master主机名
IPaddr::192.168.79.135/24/eth0:设置虚拟IP
drbddisk::r0:管理资源r0
Filesystem::/dev/drbd1::/data::ext3:执行mount与unmout操作
node2配置基本相同,不同的是ha.cf中的192.168.79.131改为192.168.79.130。
DRBD主从自动切换测试
首先先在node1启动heartbeat,接着在node2启动,这时,node1等node2完全启动后,相继执行设置虚拟IP,启动drbd并设置primary,并挂载/dev/drbd1到/data目录,启动命令为:
- service heartbeat start
这时,我们执行ip a命令,发现多了一个IP 192.168.79.135,这个就是虚拟IP,cat /proc/drbd查看drbd状态,显示primary/secondary状态,df -h显示/dev/drbd1已经挂载到/data目录。
然后我们来测试故障自动切换,停止node1的heartbeat服务或者断开网络连接,几秒后到node2查看状态。
接着恢复node1的heartbeat服务或者网络连接,查看其状态。
来源:http://www.centos.bz/2012/03/achieve-drbd-high-availability-with-heartbeat/