lvs+keepalive

架构环境:html

RedHat Linux Enterprise 5.8           keepalive                        LVS-DRnode

注意:一、事先配置好yum源,利用yum进行相关的软件安装,其能够很好的解决依赖关系linux

            yum利用DVD光盘配置便可!其详细配置能够参考个人博文“Linux系统经常使用的软件管理工具rpm、yum及软件源码编译安装”web

    二、事先关闭掉相关的iptables规则和selinux算法


1
2
3
4
[root@node1 ~]# getenforce  #查看selinux的设置permissive|
[root@node1 ~]# setenforce 0 | 1 #关闭或开启selinux功能
[root@node1 ~]# vim /etc/selinux/config  #selinux的配置文件
SELINUX=disabled|permissive|enforcing #禁止|禁用|启用selinux

相关服务和名字的定义:vim

1
2
3
4
5
Director:负载调度集群的主机,也简称DR
VIP:Virtual IP,向外提供服务的IP
RIP:Real Server IP,内部真正提供服务的
DIP:与内部主机通讯的IP,在DR主机上
CIP:客户端IP


1、架构设计bash

     利用keepalive来实现lvs的Directory Server的高可用集群,而后在利用keepalive和lvs的高可用来实现web服务的负载均衡!其架构图以下:服务器

图像 304

2、keepalive的介绍网络

⑴、keepalive的基本工做机制和应用场景架构

     keepalive是一个能够提供vrrp已经health-check功能的服务软件,能够只用它提供双机浮动的vip(vrrp虚拟路由功能),这样能够简单实现一个双机热备高可用功能。同时咱们还能够利用LVS+Keepalived基于完整开源软件的架构能够为你提供一个负载均衡及高可用的服务器。

    在本博文中Keepalived的主要用做RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。Keepalived的做用是检测web服务器的状态,若是有一台web服务器死机,或工做出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工做正常后Keepalived自动将web服务器加入到服务器群中,这些工做所有自动完成,不须要人工干涉,须要人工作的只是修复故障的web服务器。

   Keepalived是一个基于VRRP协议来实现的WEB 服务高可用方案,能够利用其来避免单点故障。一个WEB服务至少会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),可是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

⑵、VRRP协议

    上面咱们提到keepalive利用vrrp来进行health-check功能的,那么VRRP究竟是什么那?咱们下面来讲说VRRP协议吧!

    VRRP:Virtual Router Redundancy Protocol,是虚拟路由冗余协议,经过此协议咱们能够把多个路由器作成一个虚拟路由器,从而来保证其中某个路由宕掉的时候不会形成咱们内部外出网络的所有中断。

    VRRP中的各个路由器都有一个惟一的标识VRID,其范围为0-255,路由器对外表现为惟一的虚拟MAC地址,地址的格式为00-00-5E-00-01-[VRID]。主控路由器负责对ARP请求用该MAC地址作应答。这样,不管如何切换,保证给终端设备的是惟一一致的IP和MAC地址,减小了切换对终端设备的影响。其中的VRID中的0和255是保留的,0用于IP地址全部者主动放弃主控者角色时使用,255用于VRRP路由器的IP地址和虚拟路由器的接口IP地址相同时所拥有!

    因为VRRP协议比较复杂,这里一两句也介绍不清楚,而我理解的也不深,只是一点点而已,可是这并不影响咱们下面的使用,全部还望各位谅解不能在此详细介绍,若是有意深刻了解能够下载附件内的“h3c_vrrp介绍.pdf”。

3、RS上相关软件的安装和配置

⑴、web服务的安装和配置

1
2
3
web1和web2上分别配置相应的ip地址
RIP1: 172.16 . 7.3 / 16
RIP2: 172.16 . 7.4 / 16

  一、在web1上安装httpd服务并配置RIP和VIP,注意因为是基于LVS的DR模型,咱们须要设置本机VIP不能响应外部主机的arp请求。

安装httpd

1
2
yum install httpd –y #安装httpd
echo "web1.chris.com" > / var /www/html/index.html  #添加主页内容

配置RIP和设置arp不能被外部主机解析此处使用脚本vipset.sh进行设置,脚本以下:

###########################################################

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash  
#    
# Script to start LVS DR real server.    
# description: LVS DR real server    
#    
.  /etc/rc.d/init.d/functions
VIP= 172.16 . 7.5 #VIP地址  
host=`/bin/hostname`          #定义host变量
case "$1" in
start)                        #start的时候设置本机arp不被外部主机解析    
# Start LVS-DR real server on this machine.    
/sbin/ifconfig lo down    
/sbin/ifconfig lo up    
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore  #定义接收到ARP请求时的响应级别
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
/sbin/ifconfig lo: 0 $VIP broadcast $VIP netmask   255.255 . 255.255 up
#配置vip在lo: 0 ,而且设置广播地址和子网掩码,此处使用 32 位是保证此vip不能与其余地址通讯。  
/sbin/route add -host $VIP dev lo: 0 #增长路由
;;  
stop) #stop的时候恢复到系统的初始化arp参数
# Stop LVS-DR real server loopback device(s).  
/sbin/ifconfig lo: 0 down    
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore    
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce    
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore    
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
;;  
status)
# Status of LVS-DR real server.  
islothere=`/sbin/ifconfig lo: 0 | grep $VIP`    
isrothere=`netstat -rn | grep "lo:0" | grep $VIP`    
if [ ! "$islothere" -o ! "isrothere" ];then    
# Either the route or the lo: 0 device    
# not found.    
echo "LVS-DR real server Stopped."
else
echo "LVS-DR real server Running."
fi    
;;    
*)    
# Invalid entry.    
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;    
esac

############################################################

在web1上执行此脚本,来完成vip和arp参数的设置

sh vipset.sh

而后查看相关IP参数信息

ifconfig

图像 306

二、在web2上安装httpd服务并配置RIP和VIP,注意因为是基于LVS的DR模型,咱们须要设置本机VIP不能响应外部主机的arp请求。

安装httpd

1
2
yum install httpd –y #安装httpd
echo "web2.chris.com" > / var /www/html/index.html #添加主页内容

配置RIP和设置arp不能被外部主机解析此处使用脚本vipset.sh进行设置,基本内容与web1上使用的脚本相同!

图像 308

4、DR上相关软件的安装和配置

⑴、ipvsadm软件安装,用于后面的ipvs规则的查看。

1
2
yum –y install ipvsadm  #安装用户空间工具ipvsadm
ipvsadm –L –n            #查看系统ipvs规则

⑵、安装keepalive软件和设置相关配置

一、安装keepalive软件,这里使用的是已经制做好的rpm包进行安装,如须要请在博文附件内下载。

1
2
3
4
5
6
7
8
9
DS1和DS2上都进行keepalive的安装:
两种方法:
源码编译安装:
configure [--enable-vrrp] [--disable-snmp|--enable-snmp]
make
make install
rpm包安装:
我这里利用以及编译制做好的rpm包进行安装
yum -y --nogpgcheck localinstall keepalived- 1.2 . 7 - 5 .el5.i386.rpm   #不校验并自动安装

图像 309

至此咱们的keepalive软件就安装完毕了,简单吧~下面来看看keepalive的配置文件吧

⑵、keepalive配置文件的详解

keepalive的配置文件是/etc/keepalived/keepalived.conf,其文件内分为:全局配置、vrrp配置、lvs配置、服务程序监控检查

------------------------------------------------------------------------------

全局配置:

1
2
3
4
5
6
7
8
9
10
11
12
! Configuration File for keepalived              #注释
global_defs {                                          #全局配置,配置参数为{}内的内容  
notification_email {                               #keepalive服务服务信息通知邮箱,能够为多个    
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}    
notification_email_from Alexandre.Cassen@firewall.loc  #发送信息的时候的发送邮箱    
smtp_server 192.168 . 200.1 #smtp服务器    
smtp_connect_timeout 30 #链接smtp超时时间    
router_id LVS_DEVEL                            #keepalive服务器的ID标识,注意每一个服务                                                                 要有一个独立的标识    
}

-----------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vrrp的配置:
vrrp_instance VI_1 {                           # 定义vrrp组,VI_1表明第一个组  
state MASTER                                 #角色,master|backup,当state指定的instance的初始化状态,在两台DS都启动之后,立刻发生竞选,优先级高的成为MASTER,因此这里的MASTER并非表示此台服务器一直是MASTER    
interface eth0                                  #绑定网卡    
virtual_router_id 51 #VRID标记( 1 - 244 )    
priority 100 #优先级    
advert_int 1 #检查时间间隔,默认为1s    
authentication {                                # 认证    
auth_type PASS                            #认证机制,PASS表明字符串    
auth_pass 1111 #字符串
}  
virtual_ipaddress {                             #指定漂移地址,此处既VIP,能够指定多个。    
192.168 . 200.16
192.168 . 200.17
192.168 . 200.18
}    
}

-------------------------------------------------------------------------------------

LVS的配置:lvs的配置包括两部分,虚拟主机组和虚拟主机,这些配置都会在传递给ipvsadm做为参数的。

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
virtual_server 192.168 . 200.100 443 {       #设置VIP port    
delay_loop 6 #多少秒检查一次real server的健康状态    
lb_algo rr                                             #调度算法    
lb_kind NAT                                          #lvs模型    
nat_mask 255.255 . 255.0 #虚拟VIP的掩码    
persistence_timeout 50 #长链接时间    
protocol TCP                                          #协议类型
real_server 192.168 . 201.100 443 {          #定义real server    
weight 1 #定义权重    
SSL_GET {                                        #检查web服务的SSL情况    
url {    
path /    
digest ff20ad2481f97b1754ef3e12ecd3a9cc    
}    
url {                                               #检查服务器的web服务情况    
path /mrtg/    
digest 9b3a0c85a887a256d6939da88aabd8cd    
}    
connect_timeout 3 #链接超时时间    
nb_get_retry 3 #重试次数    
delay_before_retry 3 #重试链接时间间隔    
}    
}    
}
⑶、keepalive在DS1和DS2上进行相关配置,并实现VIP的高可用和web集群的负载均衡:
! Configuration File for keepalived
global_defs {  
notification_email {    
chris@localhost    
}    
notification_email_from root@localhsot    
smtp_server 127.0 . 0.1
smtp_connect_timeout 30
router_id LVS_DEVEL    
}
vrrp_instance VI_1 {  
state MASTER    
interface eth0    
virtual_router_id 51
priority 101
advert_int 1
authentication {    
auth_type PASS    
auth_pass chris    
}    
virtual_ipaddress {    
172.16 . 7.5
}    
}
virtual_server 172.16 . 7.5 80 {  
delay_loop 6
lb_algo rr    
lb_kind DR    
protocol TCP
real_server 172.16 . 7.3 80 {  
weight 2
TCP_CHECK {    
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
connect_port 80
}    
}    
real_server 172.16 . 7.4 80 {    
weight 2
TCP_CHECK {    
connect_timeout 3
nb_get_retry 3
delay_before_retry 1
connect_port 80
}    
}    
}

图像 311

图像 313

而后把DS1上的keepalive.conf复制到DS2上,并把其中的stata改为BACKUP,priority修改成100,其余的保存不变

图像 312

至此咱们的DS高可用已经设置完了,启动keepalive测试下效果吧

DS1和DS2上分别开启keepalive服务

service keepalived start

图像 315

此时利用vip访问一下咱们的web服务,看看可否正常不吧

图像 318

下面模拟一下DS1宕掉吧~看看其vip可否否自动漂移

在DS1上中止keepalive服务

service keepalived stop

图像 316

DS2上查看下地址是否漂移过来了吧!

图像 317

此时的vip进行web访问

图像 319

5、web服务的高可用集群

    经过上面的相关配置,咱们利用keepalive实现了DS的高可用,而后利用LVS的DR模型实现了web服务的负载均衡,那下面咱们就经过keepalive的相关功能来实现web服务的高可用!这里keepalive经过调用相关的脚本进行对服务器的相关操做!其架构图以下

图像 320

⑴在DS1和DS2上分别安装httpd服务,并设设置主页内容

yum –y install httpd

echo "DS1.chris.com" > /var/www/html/index.html

启动服务进行测试

service httpd start

图像 321

⑵、配置keepalive服务

一、利用上面实验已经安装好的keepalive进行设置,这里再也不从新安装,因此配置以前先把keepalive服务关掉:service keepalived stop

相关配置以下:(配置脚本在附件内-keepalive.conf-webha)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
! Configuration File for keepalived
global_defs {  
notification_email {    
chrisli129@gmail.com    
chrinux@ 126 .com    
}    
notification_email_from root@chris.com    
smtp_connect_timeout 3
smtp_server 127.0 . 0.1
router_id LVS_DEVEL    
}
vrrp_script chk_httpd {  
script "killall -0 httpd" #kill - 0 是模拟kill httpd服务,并非真的kill,只是检查其服务是否存在    
interval 2
# check every 2 seconds    
weight - 2
# if failed, decrease 2 of the priority    
fall 2
# require 2 failures for failures    
rise 1
# require 1 sucesses for ok    
}
vrrp_script chk_schedown {  
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" #利用/etc/keepalive/下的down文件是否存在来进行服务的关闭    
interval 2 #每 2 秒检查一次    
weight – 2 #若是存在,权重- 2
}
vrrp_instance VI_1 {  
interface eth0
state MASTER
priority 101
virtual_router_id 51
garp_master_delay 1
authentication {  
auth_type PASS    
auth_pass password    
}
track_interface {  
eth0    
}    
# optional, monitor these as well.    
# go to FAULT state if any of these go down.
virtual_ipaddress {  
172.16 . 7.5 / 16 dev eth0 label eth0: 0 #配置虚拟VIP,并指定端口和别名    
}    
#addresses add|del on change to MASTER, to BACKUP.    
#With the same entries on other machines,    
#the opposite transition will be occuring.    
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
track_script {  
chk_httpd    
chk_schedown    
}
notify_master "/etc/keepalived/httpd.sh master"
notify_backup "/etc/keepalived/httpd.sh backup"
notify_fault "/etc/keepalived/httpd.sh fault"
}

而后把此配置文件复制到DS2 上,并修改其中的

state BACKUP              #修改其为从服务器

priority 100                  #修改优先权低于主服务器的

图像 322

二、增长服务控制脚本—httpd.sh,把其到到配置文件内定义的目录/etc/keepalived/内,其脚本内容以下:(脚本在附件内-httpd.sh)

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
29
30
31
32
33
34
#!/bin/bash  
# Author: MageEdu <linuxedu@foxmail.com>    
# description: An example of notify script    
#
ifalias=${ 2 :-eth0: 0 }  
interface =$(echo $ifalias | awk -F: '{print $1}' )    
vip=$(ip addr show $ interface | grep $ifalias | awk '{print $2}' )    
#contact= 'linuxedu@foxmail.com'
contact= 'root@localhost'
workspace=$(dirname $ 0 )
notify() {  
subject= "$ip change to $1"
body= "$ip change to $1 $(date '+%F %H:%M:%S')"
echo $body | mail -s "$1 transition" $contact    
}
case "$1" in
master)    
notify master    
exit 0
;;    
backup)    
notify backup    
/etc/rc.d/init.d/httpd restart    
exit 0
;;    
fault)    
notify fault    
exit 0
;;    
*)    
echo 'Usage: $(basename $0) {master|backup|fault}'
exit 1
;;    
esac

⑶、在DS1和DS2上开启keepalive服务,并进行查看相关信息

图像 324

下面咱们访问一下web服务吧~使用vip地址!

图像 325

下面假设DS1服务器宕掉了,看看vip是否能自动漂移并启动DS2上的web服务,咱们在脚本内定义了利用在/etc/keepalived/目录下down文件是否存在来实现测试吧


图像 326

看下DS2上和web服务

图像 328

此此,咱们的web服务的高可用集群已经创建完成,固然这只是比较简单的实验测试,在实际的工做须要中咱们能够把web服务的主页放到一个共享存储上,来保证web内容的一致性!

6、双主模型

咱们经过定义不一样的vrrp_instance来实现两个DS互为双主的架构:

vrrp_instance 1内:

        DS1为主

        DS2为从

vrrp_instance 2内:

         DS1为从

         DS2为主

其设置只须要在前面配置文件下增长以下内容便可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vrrp_instance VI_2 {  
interface eth0    
state BACKUP  # BACKUP for slave routers    
priority 100 # 100 for BACKUP    
virtual_router_id 52
garp_master_delay 1
authentication {  
auth_type PASS    
auth_pass password    
}    
track_interface {    
eth0    
}    
virtual_ipaddress {    
172.16 . 7.6 / 16 dev eth0 label eth0: 1
}    
track_script {    
chk_httpd    
chk_mantaince_down    
}
notify_master "/etc/keepalived/httpd.sh master eth0:1"
notify_backup "/etc/keepalived/httpd.sh backup eth0:1"
notify_fault "/etc/keepalived/httpd.sh fault eth0:1"
}

图像 331

而后配置DS2上的配置文件内增长以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vrrp_instance VI_2 {  
interface eth0    
state MASTER  # BACKUP for slave routers    
priority 101 # 100 for BACKUP    
virtual_router_id 52
garp_master_delay 1
authentication {  
auth_type PASS    
auth_pass password    
}    
track_interface {    
eth0    
}    
virtual_ipaddress {    
172.16 . 7.6 / 16 dev eth0 label eth0: 1
}    
track_script {    
chk_httpd    
chk_mantaince_down    
}
notify_master "/etc/keepalived/httpd.sh master eth0:1"
notify_backup "/etc/keepalived/httpd.sh backup eth0:1"
notify_fault "/etc/keepalived/httpd.sh fault eth0:1"
}
图像 333

而后重启keepalive服务,查看DS1和DS2

图像 336

测试web

图像 337

此时能够把DS1宕掉,测试

图像 339

图像 340

此时测试web服务,其都是DS2上的了

图像 341

至此咱们实现了基于keepalive的web双主高可用集群!

       总结:经过以上实验咱们了解了keepalive实现高可用,并利用lVS实现web负载均衡的架构所有过程,最后利用keepalive的双主模型实现了web服务的高可用架构!

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息