Linux高可用(HA)集群笔记heartbeat+drbd+nfs

简介:  heartbeat+drbd    如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。

 

heartbeat+drbd

    如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd在Linux下创建一个高可用(HA)的集群服务器。
    DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。

安装heartbeat

[root@manager src]# rpm -ivh e2fsprogs-1.35-7.1.i386.rpm
[root@manager src]# tar zxvf libnet.tar.gz
[root@manager libnet]# ./configure
[root@manager libnet]# make
[root@manager libnet]# make install
[root@manager src]# tar zxvf heartbeat-2.1.2.tar.tar
[root@manager src]# cd heartbeat-2.1.2
[root@manager heartbeat-2.1.2]# ./ConfigureMe configure
[root@manager heartbeat-2.1.2]# make
[root@manager heartbeat-2.1.2]# make install
[root@manager heartbeat-2.1.2]# cp doc/ha.cf /etc/ha.d/
[root@manager heartbeat-2.1.2]# cp doc/haresources /etc/ha.d/
[root@manager heartbeat-2.1.2]# cp doc/authkeys /etc/ha.d/
[root@manager heartbeat-2.1.2]# cd /etc/ha.d/
开始编辑配置文件(两台机器上都需要安装和配置)
(heartbeat的配置比较简单,网上也有很多例子,这里就不多废话了)

clip_image001

开始编译安装DRBD

[root@manager root]# cp drbd-8.2.1.tar.tar /usr/src/
[root@manager root]# cd /usr/src/
[root@manager src]# tar zxvf drbd-8.2.1.tar.tar
[root@manager src]# cd drbd-8.2.1
[root@manager src]# make KERNVER=2.6.17.11 KDIR=/usr/src/linux-2.6.17.11

如果编译顺利可以看到Module build was successful.
[root@manager drbd-8.2.1]# make install

可以编辑配置文件了

[root@manager drbd-8.2.1]# vi /etc/drbd.conf
在manager和manage_bak上都需要安装drbd服务。
分别在两台机器上配置好/etc/drbd.conf
[root@manager_bak root]# grep -v "#" /etc/drbd.conf
global {
    usage-count yes;                  (是否参加使用者统计,yes为参加)
}
common {
  syncer { rate 300M; }
}
resource r0 {
  protocol C;                            (数据同步协议,C为收到数据并写入后返回,确认成功)
  disk {
    on-io-error   detach;
     size 100G;                         (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)
  }
  net {
    after-sb-0pri disconnect;
    rr-conflict disconnect;
  }
  syncer {
    rate 300M;                           (设置网络同步速率)
    al-extents 257;
  }
  on manager_bak {
    device     /dev/drbd0;
    disk       /dev/sda3;
    address    192.168.0.2:7788;
    meta-disk  internal;
  }
  on manager {
    device    /dev/drbd0;
    disk      /dev/sdc;
    address   192.168.0.1:7788;
    meta-disk internal;
  }
}

在启动DRBD之前,需要创建供DRBD记录信息的数据块.分别在两台主机上执行:

[root@manager ha.d]# drbdadm create-md r0
[root@manager ha.d]#mknod /dev/drbd0 b 147 0
[root@manager ha.d]# /etc/init.d/drbd srart

现在两台主机都是备机状态,都是”不一致”状态,这是由于DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据。所以我们需要初始化,在manager上执行:

[root@manager /]#drbdsetup /dev/drbd0 primary –o

现在数据开始同步,可以用cat /proc/drbd查看数据同步的进度
等数据同步完查看DRBD的状态

[root@manager /]# cat /proc/drbd
version: 8.2.1 (api:86/proto:86-87)
GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by root@manager, 2007-12-05 16:40:14
0: cs:Connected st Primary/Secondary ds:UpToDate/UpToDate C r---
    ns:1514 nr:1110 dw:2616 dr:2259 al:0 bm:482 lo:0 pe:0 ua:0 ap:0
        resync: used:0/31 hits:2 misses:2 starving:0 dirty:0 changed:2
        act_log: used:0/257 hits:202 misses:0 starving:0 dirty:0 changed:0
磁盘状态都是”实时”,表示数据同步完成了。

[root@manager /]# mkfs.xfs /dev/drbd0

现在可以把manager上的DRBD设备挂载到/export目录上进行使用。备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。

[root@manager /]# mount /dev/drbd0 /export
[root@manager /]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             10229696   3019636   7210060  30% /
/dev/drbd0           104806400   3046752 101759648   3% /export

现在把之前备份的/export中的所有内容再恢复回去。
如果不使用heartbeat的情况下,DRBD只能手工切换主从关系
现在修改heartbeat的配置文件,使DRBD可以通过heartbeat自动切换

[root@manager /]# vi /etc/ha.d/haresources
manager 192.168.0.3 drbddisk::r0 Filesystem::/dev/drbd0::/export::xfs  dhcpd xinetd portmap nfs

注释:上面那行
manager                                              定义manager为heartbeat的主机
192.168.0.3                                         定义对外服务的IP地址,这个IP自动在主从机之间切换
drbddisk::r0                                         定义使用的drbd资源
Filesystem::/dev/drbd0::/export::xfs     定义挂载文件系统
dhcpd xinetd portmap nfs                    定义其他需要切换的服务(用空格隔开)

现在我们可以测试一下了

(dhcpd portmap nfs等需要切换的服务,应该先在两台服务器上都配置好)

[root@manager root]# chkconfig –list

确定heartbeat和DRBD开机自启动
确定需要由heartbeat切换的服务,开机不自启动(由heartbeat来启用相关的服务)
给gg1接通电源,通过pxe启动系统(gg1是一组服务器中的一台,是一台无盘服务器,启动后挂载在manager上保存的系统)
在manager上ssh gg1

[root@manager root]# ssh gg1
-bash-2.05b#
-bash-2.05b# arp -a
? (192.168.0.3) at 00:19:B9:E4:7D:22 [ether] on eth0
-bash-2.05b# ls
-bash-2.05b# touch test
-bash-2.05b# ls
test

现在在manager上关机或停止heartbeat服务
[root@manager root]# /etc/init.d/heartbeat stop
Stopping High-Availability services:                                                            [  OK  ]

到manager_bak上ifconfig
[root@manager_bak root]# ifconfig
可以看到eth1:0起来了,IP地址是192.168.0.3

[root@manager_bak root]# ssh gg1
-bash-2.05b#
-bash-2.05b# arp -a
? (192.168.0.3) at 00:19:B9:E5:3B:FC [ether] on eth0 (可以看到192.168.0.3的mac地址变了)
-bash-2.05b# ls
test

可以看到在manager上ssh上gg1后建立的test文件
-bash-2.05b# echo "this is test" > test
-bash-2.05b# cat test
this is test

可以看到现在gg1可以正常读写manager_bak上nfs出来的磁盘
现在把manager上的heartbeat服务启动起来

[root@manager root]# /etc/init.d/heartbeat start
Starting High-Availability services:
2007/12/06_12:46:08 INFO:  Resource is stopped                                                   [  OK  ]
-bash-2.05b# cat test
this is test

现在终于大功告成了,之前在不使用drbd的情况下,heartbeat也可以切换apache、dhcpd、portmap、nfs等等服务,但是 nfs服务切换后,必须重新mount一下nfs共享出来的目录,否则会报 Stale NFS file handle 的错误。现在heartbeat+drbd配合使用后,nfs等等服务可以无缝切换,不必再重新mount一下nfs目录了

Posted by vitter at 02:47 PM | 评论 (0) | 引用 | 分类:技术历程

" dc:creator="vitter" dc:date="2008-04-08T11:26:26+08:00" /> -->

lvs+heard负载均衡文档(DR)

blog:http://blog.vfocus.net

测试环境:
硬件 两台dell1950 (单硬盘)
系统 FC7
软件 ipvsadm-1.24 heartbeat-2.1.2
说明 一台172.16.3.75 (lvsdr)作为主director服务器
     172.16.3.73 (lvsdrbak)作为热备director服务器
     虚拟ip为172.16.3.76
     采用基于DR的模式进行负载均衡

算法采用的是轮叫调度(Round-Robin Scheduling) 即ipvsadm –rr模式

注1:(本次测试为节约机器,将备份节点也作为一台realserver)
注2:算法模式一共有7种分别是
加权轮叫调度(Weighted Round-Robin Scheduling)
最小连接调度(Least-Connection Scheduling)
加权最小连接调度(Weighted Least-Connection Scheduling)
基于局部性的最少链接(Locality-Based Least Connections Scheduling)
带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
目标地址散列调度(Destination Hashing Scheduling)
源地址散列调度(Source Hashing Scheduling)
只需要改变ipvsadm后面的参数
ipvsadm -rr 论叫调度
rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

一,配置基于隧道(DR)模式的LVS集群

所需软件 ipvsadm-1.24 http://www.linuxvirtualserver.org/software/
需要建立一个软链接把内核指向/usr/src/linux

ln -s /usr/src/kernels/2.6.9-42.EL-i686/ /usr/src/linux
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.2.4
make;make install

1)在lvsdr上部署(备份节点做完全一样的部署)

$ vi /etc/rc.d/init.d/lvsDR

#!/bin/bash
VIP=172.16.3.76
RIP1=172.16.3.73
RIP2=172.16.3.235
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer"
#Set the Virtual IP Address
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
#Clear IPVS Table
/sbin/ipvsadm -C
#Set Lvs
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run Lvs
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS Directorserver"
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac

2)在realserver上部署

$ vi /etc/rc.d/init.d/realserverDR

#!/bin/sh
VIP=172.16.3.76
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
~

二,安装heartbeat

所需软件
e2fsprogs-1.40.4.cfs1-0redhat.i386.rpm 光盘中有
libnet http://www.packetfactory.net/libnet
heartbeat-2.1.2.tar.gz http://linux-ha.org/download/

安装软件
安装e2fsprogs

rpm -ivh e2fsprogs-1.35-7.1.i386.rpm

安装libnet

tar zxvf libnet.tar.gz
cd libnet
./configure
make;make install

安装heartbeat

tar zxvf heartbeat-2.0.2.tar.gz
cd heartbeat-2.0.2
./Configureme configure
make;make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/
groupadd -g 694 haclient
useradd -u 694 -g haclient hacluster

修改配置

重点三个配置文件
ha.cf haresources authkeys

1, ha.cf

[root@lvsdrbak src]# awk '/^[^$]/&&/^[^#]/' /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
bcast eth0 # Linux
auto_failback on
node lvsdr
node lvsdrbak
hopfudge 1

2, haresources

这个文件其实就只有一行
lvsdr IPaddr::172.16.3.76 ldirectord lvsDR

3, authkeys

auth 1
1 sha1 key-for-sha1-any-text-you-want
chmod -R 600 autykeys 权限必须是600

以上三个文件 主从服务器上一致

修改hosts

$ vi /etc/hosts

127.0.0.1 localhost.localdomain localhost
172.16.3.75 lvsdr
10.1.1.3 HA01
10.1.1.2 HA02
172.16.3.73 lvsdrbak

其中10.1.1.3与10.1.1.2是在eth0上绑的另外ip作为检测heartbeat用

三,配置ldirectord

Ldirectord的作用是监测Real Server,当Real Server失效时,把它从Load Balancer列表中删除,恢复时重新添加,在安装heartbeat时已经安装了Ldirectord。

但是在fc7中启动ldirectord会报缺少Mail/Send.pm或者LWP/useragant模块,需要安装perl模块

所需模块
lwp/useagant http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/libwww-perl-5.808.tar.gz
mailsend http://search.cpan.org/CPAN/authors/id/M/MA/MARKOV/MailTools-2.02.tar.gz

生成makefile: 
perl Makefile.PL

建立模块 
make

测试模块 
make test

如果测试结果报告“all test ok”,您就可以放心地安装编译好的模块了。安装模块前,先要 
make install

配置 ldirectord 配置文件在/etc/ha.d/ldirectord.cf

[root@lvsdr lvs]# awk '/^[^$]/&&/^[^#]/' /etc/ha.d/ldirectord.cf

checktimeout=3
checkinterval=1
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=yes
virtual=172.16.3.76:80

real=172.16.3.73:80 gate
real=172.16.3.235:80 gate
service=http
request="test.html"
receive="Test Page"
scheduler=rr
protocol=tcp
#checktype=negotiate
#checkport=80
#request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z测试 ldirectord是否可以起来

现在可以在主节点172.16.3.75启动heartbeat

/etc/init.d/heartbeat start

起来正常的结果应该是这样

[root@lvsdr src]# netstat -npl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 :::22 :::* LISTEN 2095/sshd
udp 0 0 0.0.0.0:32784 0.0.0.0:* 28530/heartbeat: wr
udp 0 0 0.0.0.0:694 0.0.0.0:* 28530/heartbeat: wr

[root@lvsdr src]# ifconfig
eth0   Link encap:Ethernet HWaddr 00:15:C5:EF:E0:D9
       inet addr:172.16.3.75 Bcast:172.16.3.255 Mask:255.255.255.0
       inet6 addr: fe80::215:c5ff:feef:e0d9/64 Scope:Link
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
       RX packets:58138 errors:0 dropped:0 overruns:0 frame:0
       TX packets:17891 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:1000
       RX bytes:8955674 (8.5 MiB) TX bytes:3217775 (3.0 MiB)
       Interrupt:16 Memory:f8000000-f8012100

eth0:0 Link encap:Ethernet HWaddr 00:15:C5:EF:E0:D9
       inet addr:172.16.3.76 Bcast:172.16.3.255 Mask:255.255.255.0
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
       Interrupt:16 Memory:f8000000-f8012100

eth0:1 Link encap:Ethernet HWaddr 00:15:C5:EF:E0:D9
       inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0
       UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
       Interrupt:16 Memory:f8000000-f8012100

lo     Link encap:Local Loopback
       inet addr:127.0.0.1 Mask:255.0.0.0
       inet6 addr: ::1/128 Scope:Host
       UP LOOPBACK RUNNING MTU:16436 Metric:1
       RX packets:2493 errors:0 dropped:0 overruns:0 frame:0
       TX packets:2493 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
       RX bytes:1339237 (1.2 MiB) TX bytes:1339237 (1.2 MiB)

tunl0  Link encap:IPIP Tunnel HWaddr
       inet addr:172.16.3.76 Mask:255.255.255.255
       UP RUNNING NOARP MTU:1480 Metric:1
       RX packets:0 errors:0 dropped:0 overruns:0 frame:0
       TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
       collisions:0 txqueuelen:0
       RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

测试:关闭主节点,备份节点将自动接管directorserver服务。

四,把备份节点也作为realserver

1. 在上述DR节点做的以外,备份节点还需要也添加realserver脚本

另外需要添加关闭备用节点的脚本

[root@lvsdr lvs]# vi /etc/rc.d/init.d/closeDR
VIP=172.16.3.76
. /etc/rc.d/init.d/functions
case "$1" in
    start)
        echo "start director server and close dr"
        ifconfig lo:0 down
        echo 1 > /proc/sys/net/ipv4/ip_forward
        echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    stop)
        echo "start Real Server"
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev lo:0
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
        sysctl –p

        ;;
    *)
        echo "Usage: lvs {start|stop}"
        exit 1
esac

这个一个关闭备份节点的脚本,可以放到heartbeat里面去,在启动备用节点的时候自动关闭备份节点脚本

2, 修改备份节点的haresources

只需添加一项

[root@lvsdrbak lvs]# awk '/^[^$]/&&/^[^#]/' /etc/ha.d/haresources
lvsdr closedr IPaddr::172.16.3.76 ldirectord lvsDR

确定closedr脚本在 启动lvsDR之前就可以了。

五,测试

director服务器是 172.16.3.75
热备机是172.16.3.73
虚拟ip是172.16.3.76
realserver为 172.16.3.73 172.16.3.235
在主DR上启动服务

/etc/rc.d/init.d/heartbeat start

在ie里面输入http://172.16.3.76可以得到这两个页面
172.16.3.235下面有个index1.html 显示172.16.3.235
172.16.3.73下面有个index2.html 显示172.16.3.73
可以通过http://172.16.3.76/index1.html
http://172.16.3.76/index2.html

访问

拔掉172.16.3.75的网线,服务器切到172.16.3.73上。也能正常显示。

目录
相关文章
|
29天前
|
Linux
Linux手动更新时间Linux同步集群其他节点时间
Linux手动更新时间Linux同步集群其他节点时间
27 0
|
29天前
|
存储 负载均衡 索引
linux7安装elasticsearch-7.4.0集群配置
linux7安装elasticsearch-7.4.0集群配置
121 0
|
29天前
|
Kubernetes Shell Linux
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
linux|shell脚本|有趣的知识---格式化输出日志和脚本调试方法以及kubernetes集群核心服务重启和集群证书备份脚本
103 0
|
13天前
|
弹性计算 负载均衡 网络协议
LVS (Linux Virtual server)集群介绍
LVS (Linux Virtual server)集群介绍
|
23天前
|
大数据 Linux 虚拟化
大数据软件基础(3) —— 在VMware上安装Linux集群
大数据软件基础(3) —— 在VMware上安装Linux集群
40 0
|
29天前
|
存储 监控 中间件
Linux双机热备解决方案之Heartbeat
Linux双机热备解决方案之Heartbeat
|
29天前
|
Kubernetes 网络协议 Linux
使用 kubeadm 部署 Kubernetes 集群(一)linux环境准备
使用 kubeadm 部署 Kubernetes 集群(一)linux环境准备
110 9
|
29天前
|
Linux
Linux驱动运行灯 Heartbeat
Linux驱动运行灯 Heartbeat
32 0
|
29天前
|
分布式计算 Hadoop Java
linux上面hadoop配置集群
linux上面hadoop配置集群
55 0
|
29天前
|
关系型数据库 MySQL Linux
Linux|集群初始化脚本--osiniit.sh简介
Linux|集群初始化脚本--osiniit.sh简介
30 0