Chinaunix首页 | 论坛 | 博客
  • 博客访问: 489033
  • 博文数量: 127
  • 博客积分: 7010
  • 博客等级: 少将
  • 技术积分: 1972
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-01 12:42
文章分类

全部博文(127)

文章存档

2009年(33)

2008年(94)

我的朋友

分类: LINUX

2009-05-08 15:03:50

1,编译与安装DRBD,heartbeat

在2台主从机器上都要安装DRBD

[root@drbd-1 ~] tar -xvzf drbd-8.2.6.tar.gz
[root@drbd-1 ~] cd drbd-8.2.6 && make && make rpm
[root@drbd-1 ~] cd dist/RPMS/i386
[root@drbd-1 ~] ls

drbd-8.2.6-3.i386.rpm
drbd-debuginfo-8.2.6-3.i386.rpm
drbd-km-2.6.9_42.EL-8.2.6-3.i386.rpm

[root@drbd-1 ~] rpm -ivh drbd-8.2.6-3.i386.rpm
[root@drbd-1 ~] rpm -ivh drbd-debuginfo-8.2.6-3.i386.rpm
[root@drbd-1 ~] rpm -ivh drbd-km-2.6.9_42.EL-8.2.6-3.i386.rpm

 

2,加载DRBD模块

[root@drbd-1 ~] modprobe drbd
[root@drbd-1 ~] lsmod |grep drbd
drbd                  242924  2

如果有,则表示成功了!!!

3,配置/etc/drbd.conf

编辑配置文件,2个主机上的内容一样,内容如下:

#让linbit公司收集目前drbd的使用情况,yes为参加。

global {
usage-count yes;
}

#drbd所管理的多个资源之间的common,主要是配置drbd的所有resource可以设置为相同的参数项,比如protocol,syncer等等.

common {
syncer { rate 100M; }
}

#创建一个资源,名字叫”db”

resource db {

#使用协议C.表示收到远程主机的写入确认后,则认为写入完成。

protocol C;

startup {
wfc-timeout 0;
degr-wfc-timeout 120;
}

#由于实验环境下两台服务器硬盘大小可能不同,所以需要设置drbd的大小。

disk {
on-io-error detach;
size 6G;
}

net {
max-buffers 2048;
ko-count 4;
}

syncer {
rate 100M;
}

#设定一个节点,分别以各自的主机名命名

on drbd-1 {

#设定资源设备/dev/drbd0 指向实际的物理分区 /dev/sdb1

device /dev/drbd0;
disk /dev/sdb1;

#设定监听地址以及端口

address 192.168.1.241:8888;

#设定元数据保存方式:可以用 internal(即保存在同一个物理分区下)
#也可以保存在其他分区上

meta-disk internal;
}

on drbd-2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.242:8888;
meta-disk internal;
}
}

4,启动drbd

准备启动之前,需要分别在2个主机上的 /dev/sdb1 分区上创建相应的元数据保存的数据块:

[root@drbd-1 ~] drbdadm create-md db
[root@drbd-2 ~] drbdadm create-md db

2次输入“yes”,如果出现下面的提示信息,表示成功
[root@drbd-1 /]# drbdadm create-md db
md_offset 8587153408
al_offset 8587120640
bm_offset 8586858496

Found ext3 filesystem which uses 6291456 kB
current configuration leaves usable 8385604 kB

==> This might destroy existing data! <==

Do you want to proceed?
[need to type 'yes' to confirm] yes

v07 Magic number not found
v07 Magic number not found
You want me to create a v08 style flexible-size internal meta data block.
There apears to be a v08 flexible-size internal meta data block
already in place on /dev/sdb1 at byte offset 8587153408
Do you really want to overwrite the existing v08 meta-data?
[need to type 'yes' to confirm] yes

Writing meta data…
initialising activity log
NOT initialized bitmap
New drbd meta data block sucessfully created.

接下来就可以启动drbd进程了:

[root@drbd-1 ~] /etc/init.d/drbd start
[root@drbd-2 ~] /etc/init.d/drbd start

在启动第一个节点上的DRBD服务的时候,他会等待第2个节点的DRBD服务的启动,此时启动第2个节点上的DRBD服务即可。

[root@drbd-1 /]# /etc/init.d/drbd start
Starting DRBD resources:    [ d(db) s(db) n(db) ].
……….
***************************************************************
DRBD’s startup script waits for the peer node(s) to appear.
- In case this node was already a degraded cluster before the
reboot the timeout is 120 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot the timeout will
expire after 0 seconds. [wfc-timeout]
(These values are for resource ‘db’; 0 sec -> wait forever)
To abort waiting enter ‘yes’ [  47]:

此时,2台机器的DRBD服务都起来了,检查进程是否存在:

[root@drbd-1 /]# ps aux | grep drbd
root      3758 14.5  0.0     0    0 ?        S    15:56   0:20 [drbd0_worker]
root      3762  9.6  0.0     0    0 ?        S    15:56   0:13 [drbd0_receiver]
root      3787  2.4  0.0     0    0 ?        S    15:56   0:03 [drbd0_asender]
root      3794  0.0  0.2   644  128 pts/0    R+   15:58   0:00 grep drbd

可以看到两个节点的进程都起来了,每个drbd设备会有三个进程:drbd0_worker是drbd0的主要进城,drbd0_asender是primary上drbd0的数据发送进程,drbd0_receiver是secondary上drbd0的数据接收进程。

看看刚启动后的drbd状态:

[root@drbd-1 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-1, 2008-09-17 17:46:45
0: cs:Connected st: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 oos:6291456

[root@drbd-2 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-2, 2008-09-17 17:51:50
0: cs:Connected st: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 oos:6291456

注意:这个时候,2台服务器都为从节点状态(st:Secondary/Secondary),因为还没有指定哪一台为主节点。

然后,设置启动的一个节点为主节点,我们设置drbd-1为主节点:

[root@drbd-1 /]#  drbdadm primary db
State change failed: (-2) Refusing to be Primary without at least one UpToDate disk
Command ‘drbdsetup /dev/drbd0 primary’ terminated with exit code 11

[root@drbd-1 /]# drbdsetup /dev/drbd0 primary -o

可以看到,第一次设置主节点时用 drbdadm 命令会失败,所以先用drbdsetup 来做,以后就可以用 drbdadm 了。

再次查看2台服务器的drbd状态:

[root@drbd-1 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-1, 2008-09-17 17:46:45
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r—
ns:3483280 nr:0 dw:0 dr:3491456 al:0 bm:212 lo:1 pe:8 ua:256 ap:0 oos:2808416
[==========>.........] sync’ed: 55.5% (2742/6144)M
finish: 0:11:24 speed: 4,084 (4,648) K/sec

[root@drbd-2 /]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by root@drbd-2, 2008-09-17 17:51:50
0: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r—
ns:0 nr:3556832 dw:3556832 dr:0 al:0 bm:217 lo:1 pe:2464 ua:0 ap:0 oos:2734624
[==========>.........] sync’ed: 56.7% (2670/6144)M
finish: 0:07:35 speed: 5,856 (4,128) K/sec

此时可以看到,已经开始同步数据了。设置完之后的第一次同步耗时比较长,因为需要把整个分区的数据全部同步一遍。

第一次同步完成之后,就可以对drbd的设备创建文件系统了:

[root@drbd-1 /]# mkfs.ext3 /dev/drbd0

将文件系统mount上:

[root@drbd-1 /]# mount /dev/drbd0 /drbddata

在主节点上测试数据写入:

[root@drbd-1 drbddata]# ll
total 4
drwx——  4 mysql root 4096 Oct 13 16:29 mysql

然后,我们把primary降级成secondary,把secondary提升成primary:

[root@drbd-1 /]# umount /drbddata/
[root@drbd-1 /]# drbdadm secondary db

把primary降级前,一定要先umount设备才行。然后提升secondary:

[root@drbd-2 /]# drbdadm primary db
[root@drbd-2 /]# mount /dev/drbd0 /drbddata/
[root@drbd-2 drbddata]# ll
total 4
drwx——  4 mysql root 4096 Oct 13 16:29 mysql

可以看到,数据已经完全同步过去了。

注:

通过查看/proc/drbd可以查看所有drbd资源当前的状态.

[root@oem3 ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
 0: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:811016 dw:811016 dr:0 al:0 bm:61 lo:0 pe:0 ua:0 ap:0 oos:0
 1: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r---
    ns:0 nr:8 dw:8 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 oos:0

其中cs表示连接的状态, 常见的状态有,StandAlone,WFConnection,Connected等, Connected表示该resource的节点已经建立连接, WFConnection表示在等待连接, 常在启动过程中, 或者另外一方运行disconnect后出现, StandAlone表示没有可用的网络配置, 常在运行disconnect后出现.

ds表示磁盘的状态,常见的状态有UpToDate, Unknown等, UpToDate表示表示数据是最新的,这一状态为正常状态, Unknow表示对方状态是未知的, 网络断开后, 对方节点的磁盘状态常变为Unknown.

drbd kernel module 会写一些日志到系统日志中, 可以通过dmesg查看

mirrorview的fracture/synchronize过程模拟如下:

1 在2个节点上attatch, connect resource,

2 检查磁盘状态为UpToDate/UptoDate, 连接状态为Connected, 状态为Primary/Secondary

3 在2个节点上disconnect resource, 此时连接状态应变为StandAlone, 状态变为Primary/Unknown(第1个节点)或Secondary/Unknown, 磁盘状态变为UpToDate/DUnknown

drbdadm disconnect resource

4 在第2个节点上将resource置为primary, 状态变为Primary/Unknown

drbdadm primary resource

5 在第2个节点上对resource对应的逻辑设备进行操作, 比如挂载文件系统, 备份等.

6 操作结束后, 停止对resource对应的逻辑设备的访问, 卸载文件系统

7 在第2个节点上, 将resorce置为Secondary

drbdadm secondary resource

8 在第1个节点上连接资源

drbdadm connect resource

9 在第2个节点上忽略数据变化, 同步数据,

drbdadm -- --discard-my-data connect resource

如果使用了普通的connect数据, 则一个节点处于WFconenct, 一个节点处于Standalone状态, dmesg信息中显示

drbd0: Split-Brain detected, dropping connection!
drbd0: self BF739B73E097B05E:D3B06FBE563C5580:7D4CAACF55C1C208:A625E780FF79A3B7
drbd0: peer 2FE125710E63486F:D3B06FBE563C5581:7D4CAACF55C1C208:A625E780FF79A3B7
drbd0: helper command: /sbin/drbdadm split-brain
drbd0: conn( WFReportParams -> Disconnecting )

此时只需要执行步骤8和9即可.

10 通过/proc/drbd检查同步状态, 直到磁盘状态变为UpToDate/UptoDate

 

 

HA:

一,安装软件包:

rpm -ivh libnet-1.1.2.1-1.rh.el.um.1.i386.rpm
rpm -ivh pils-2.1.3-1.i386.rpm
rpm -ivh stonith-2.1.3-1.i386.rpm
rpm -ivh heartbeat-2.1.3-1.i386.rpm
rpm -ivh heartbeat-gui-2.1.3-1.i386.rpm

二,配置信息:

1、cd /etc/ha.d/
2、touch ha.cf
3、vi ha.cf

   logfacility   local0                            # 指定log类型
   mcast eth1 225.0.0.3 694 1 0
   mcast eth0 225.0.0.2 694 1 0                  # 指定在eth01.上的mcast
   udpport 694
   use_logd yes
   node test1                                     # 指定节点
   node test2                                     # 指定另一节点
   ping 192.168.1.247                              # 指定ping 节点(测试网关)
   respawn root /usr/lib/heartbeat/pingd -m 100 -d 2s -a default_ping_set
   crm yes                                          # 指定使用CRM

 

4、touch authkeys
5、vi authkeys

auth 1
1 sha1 wwhfdwdceyyymxkiqEqrvnwsedymAck09nhex

6、chmod 600 /etc/ha.d/authkeys


7、cd /var/lib/heartbeat/crm/
passwd hacluster  --HA  gui 帐户密码

三、用gui配置ha

启动:/usr/lib/heartbeat-gui/haclient.py

参见:

scp authkeys
scp ha.cf
scp cib.xml
/etc/init.d/heartbeat start

or:

touch cib.xml

vi cib.xml
chown hacluster:haclient cib.xml 

 

Heartbeat CRM模式

1)在ha.cf里面增加

crm on

 

Heartbeat CRM模式管理

 

1)查看所有资源

[root@alssme_probe3 sbin]# crm_resource -L

Resource Group: group_1

IPaddr_172_18_158_111 (heartbeat::ocf:IPaddr)

mysql_2 (lsb:mysql)

 

2)查看资源跑在哪个节点上

[root@alssme_probe3 sbin]# crm_resource -W -r mysql_2

resource mysql_2 is running on: alssme_probe3

 

4)启动/停止资源(cluster不会发生切换,手工停mysql,将会重新启动或者发生切换)

[root@alssme_probe4 crm]# crm_resource -r mysql_2 -p target_role -v started

[root@alssme_probe3 sbin]# crm_resource -r mysql_2 -p target_role -v stopped

 

5)查看资源在cib.xml中的定义

[root@alssme_probe3 sbin]# crm_resource -x -r mysql_2

mysql_2 (lsb:mysql): Started alssme_probe3

raw xml:

60s" name="monitor" timeout="30s"/>

 

即每60秒检测资源运行情况,如果发现资源不在,则尝试启动资源,如果30s后还未启动成功,则资源切换向另节点。时间可以修改( mysql一般建议采用这个时间值)


6
)将资源移向指定节点

crm_resource -M -r mysql_2 -H alssme_probe4

 

7)允许资源回到正常的节点

crm_resource -U -r mysql_2

NOTE: the values of resource_stickiness and default_resource_stickiness may mean that it doesnt move back. In such cases, you should use -M to move it back and then run this command.

 

9)将资源从CRM中删除

crm_resource -D -r mysql -t primitive

10)将资源组从CRM中删除

crm_resource -D -r my_first_group -t group

 

 

符:

 

Ha.cfheartbeat的主配置文件

 

vi /etc/ha.d/ha.cf

#日志文件位置

logfile /var/log/ha-log

#指定主备服务器多久发送一次心跳

keepalive 2

#指定30秒没有收到对方心跳就认为对方已经DOWN

deadtime 30

#10秒没有收到心跳,便发出警报。

warntime 10

#对方DOWN120秒重新检测一次。

initdead 120

#指定监听端口

udpport 694

#心跳监听网口,这里为eth1

bcast   eth1   //在文件中把第一个bcast前面的#去掉,还要把后面的#linux去掉

#主节点恢复后,自动收回资源。

auto_failback on

#指定主备服务器的主机名称,即在hosts文件中指定的

第一个node为主服务器,第二个node为备服务器。

node          master.abc.cn   //服务器的主机名

node          slave.abc.cn

#222.76.222.65222.76.222.71这两个IP都不能ping通时对方即开始接管资源。

ping_group group1 222.76.222.65 222.76.222.71

#启用ipfail脚本

respawn root /usr/lib/heartbeat/ipfail

#指定运行ipfail的用户。

apiauth ipfail gid=root uid=root

阅读(1459) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~