使用keepalived搭建高可用的LVS-DR集群

Keepalived 概述:

keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层和第

5 层交换。 Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现 故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人 工做的只是修复故障的 web 服务器。




keepalived 理论工作原理


Layer3,4&7 工作在 IP/TCP 协议栈的 IP 层, TCP 层,及应用层,。 原理分别如下:

Layer3: Keepalived 使用 Layer3 的方式工作式时, Keepalived 会定期向服务器群中的服务器发送 一个 ICMP 的数据包(既我们平时用的 Ping 程序) , 如果发现某台服务的 IP 地址没有激活, Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非 法关机。 Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常不否的标准。

Layer4: 主要以 TCP 端口的状态来决定服务器工作正常不否。如 web server 的服务端口一般是

80,如果 Keepalived 检测到 80 端口没有启劢,则 Keepalived 将把这台服务器从服务器群中删除。 Layer7: Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带宽也 要大一些。 Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果不用户的设定不相符, 则 Keepalived 将把服务器从服务器群中剔除。




keepalived 作用:

1.管理 VIP VIP 会在 LVS �T间漂移

2.监控 LVS 分发器

运行在主分发的 Keepalived 会以组播的形式向网络中宣告自己,即主分发器还活 着,备用节点能收到。当备用节点,在一个时间单位中收不到组播,备用节点会认



为主 LVS 挂了,开始接手主分发器工作,把 VIP 配给自己。

3.管理 RS

Keepalived 会每隔一个时间段去做一次类似于访问的操作如: 探针: elinks http://192.168.1.81 -dump



keepalived 官网

http://www.keepalived.org/

下载:http://www.keepalived.org/download.html


spacer.gif实例:使用 keepalived 实现 LVS-DR 模式高可用

wKioL1W5AxyB3x_CAAIMuYg4myc327.jpg

配置主 LVS_keepalived        silence80

安装 ipvsadm 件:

[root@silence80 ~]rp-ivh /mnt/Packages/ipvsadm-1.25-9.el6.x86_64.rpm

 

安装 keepalived

[root@silence80 ~]# tar zxvf keepalived-1.2.16.tar.gz

[root@silence80 ~]# cd keepalived-1.2.16

[root@silence80 keepalived-1.1.17]# ./configure --prefix=/usr/local/keepalived

。。。

Keepalived configuration


 

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

Keepalived version: 1.2.16

Compiler                     : gcc

Compiler flags                      : -g -O2

Extra Lib                     : -lssl -lcrypto -lcrypt

Use IPVS Framework    : Yes

IPVS sync daemon support            : Yes

IPVS use libnl          : No 

fwmark socket support             : Yes

Use VRRP Framework             : Yes

Use VRRP VMAC             : Yes 

SNMP support             : No 

SHA1 support             : No 

Use Debug flags                    : No


[root@silence84 keepalived-1.1.17]# make && make install



扩展:

虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称 VRRP)是由 IETF 提出的解决局域网中 配置静态网关出现单点失效现象的路由协议。使用组播方式通信。

VRRP 是一种路由容错协议,也可以叫做备份路由协议。一个局域网络内的所有主机都设置缺省路由(默 认网关),当网内主机发出的目的地址不在本网段时,报文将被通过缺省路由发往外部路由器,从而实现了 主机不外部网络的通信。当缺省路由器 down 掉(即端口关闭)之后,内部主机将无法不外部通信,如果 路由器设置了 VRRP 时,那举这时,虚拟路由将启用备份路由器,从而实现全网通信。

工作流程如图:

wKiom1W5BAPzfT62AAFsbl9Y0XA408.jpg

注:所有局域网中的 PC 默认网关为 10.1.1.13



安装后操作

[root@silence80 keepalived-1.1.17]# mkdir /etc/keepalived

[root@silence80 keepalived-1.1.17]# cp

/usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

[root@silence80 keepalived-1.1.17]# cp /usr/local/keepalived/etc/sysconfig/keepalived

/etc/sysconfig/

[root@silence80 keepalived-1.1.17]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived

/etc/init.d

[root@silence80 keepalived-1.1.17]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/


测试是否能启动


[root@xuegod65 keepalived-1.1.17]# service keepalived start

 正在启动 keepalived: [确定]



配置主keepalived  silence80

配置文件

[root@silence80 ~]# vim /etc/keepalived/keepalived.conf


改:

3 global_defs {

4 notification_email {

5 [email protected]

6 [email protected]

7 [email protected]

8 }

9 notification_email_from [email protected]

10 smtp_server 192.168.200.1

11 smtp_connect_timeout 30

12 router_id LVS_DEVEL

13 }


为:

3 global_defs {

4 notification_email {

5 root@localhost

6 }

7 notification_email_from root@localhost

8 smtp_server localhost

9 smtp_connect_timeout 30

10 router_id silence80

11 }

注:

默认的配置文件中,使用第三方 smtp 服务器,但这在现实中几乎没有意义,发不出邮件,我们将其指定 为 localhost, 将通知信息的发送交给本地 sendmail 服务处理。

router_id silence80 #标识当前节点名字,两个节点的此项需要不相同。




改:

13 vrrp_instance VI_1 {

14 state MASTER

15 interface eth0

16 virtual_router_id 51

17 priority 100

18 advert_int 1

19 authentication {

20 auth_type PASS

21 auth_pass 1111

22 }

23 virtual_ipaddress {

24 192.168.200.16

25 192.168.200.17

26 192.168.200.18

27 }


为:

13 vrrp_instance apache {

14 state MASTER

15 interface eth0

16 virtual_router_id 51

17 priority 100

18 advert_int 1

19 authentication {

20 auth_type PASS

21 auth_pass 1111

22 }

23 virtual_ipaddress {

24 192.168.1.88

25 }



参数说明:

vrrp_instance apache {   #定义一个实例,一个集群就是一个实例。 VI_1 可以随意改

state MASTER   #��定 A 节点为主节点 备用节点上设置为 BACKUP 即可

interface eth0   #绑定虚拟 IP 的网络接口

virtual_router_id 51  #VRRP 组名,两个节点的设置必须一样,以��明各个节点属于同一 VRRP 组

priority 100   #主节点的优先级(1-254 之间),备用节点必须比主节点优先级低

advert_int 1   #组播信息发送间隔,两个节点设置必须一样

authentication {   #设置验证信息,两个节点必须一致

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {   #指定虚拟 IP, 两个节点设置必须一样

192.168.1.88

}

}


#在 silence80 中的 keepalived 中添加 LVS 相关内容:


改:

28 virtual_server 192.168.200.100 443 {

29        delay_loop 6

30        lb_algo rr

31        lb_kind NAT

32 nat_mask 255.255.255.0

33 persistence_timeout 50

34 protocol TCP

为:

28 virtual_server 192.168.1.88 80 {

29 delay_loop 6

30 lb_algo rr

31 lb_kind DR

32 nat_mask 255.255.255.0

33# persistence_timeout 50      #开启这个参数有可能导致不能实现负载均衡

34 protocol TCP

注释:

##虚拟一个服务 ipvsadm -A -t 192.168.1.88:80 -s rr virtual_server 192.168.1.88 80 {

delay_loop 6 Keepalived 多长时间监测一次 RS

lb_algo rr 分发算法

lb_kind DR DR 模式

32 nat_mask 255.255.255.0

33 persistence_timeout 50   #   同一 IP 50 秒内的请求都发到同个 real server ,这个会影响 LVS

的 rr 调度算法, 同一 IP 超过 50 秒后,再次访问,才会被转发到另一台 real server 上。

persistence 持久性 


改:

36 real_server 192.168.201.100 443 {

37 weight 1

38 SSL_GET {

39 url {

40 path /

41 digest ff20ad2481f97b1754ef3e12ecd3a9cc

42 }

43 url {

44 path /mrtg/

45 digest 9b3a0c85a887a256d6939da88aabd8cd

46 }

47 connect_timeout 3

48 nb_get_retry 3

49 delay_before_retry 3

50 }

51 }



为:

## ipvsadm -a -t 192.168.1.81:80 -r 192.168.1.81 -g

## ipvsadm -a -t 192.168.1.82:80 -r 192.168.1.82 -g




real_server 192.168.1.81 80 {

weight 1

TCP_CHECK { 

connect_timeout 3 

nb_get_retry 3 

delay_before_retry 3 

connect_port 80

}

}

real_server 192.168.1.82 80 {

weight 1

TCP_CHECK { 

connect_timeout 3 

nb_get_retry 3 

delay_before_retry 3 

connect_port 80

}

}

}


注:

real_server192.168.1.81 80 {#配置服务节点 1,需要指定 realserver 的真实 IP 地址和端口,IP 不端 口之间用空�窀艨�

weight 1   #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可 以为不同性能的服务器

connect_timeout 3 #表示 3 秒无响应超时 nb_get_retry 3#表示重试次数 delay_before_retry 3 #表示重试间隔 connect_port 80   #检测端口

}



默认配置文件中还有两个 virtual_server 模版,把剩下的都删除了,就可以。 如:

virtual_server 10.10.10.2 1358 {   。。。 }

virtual_server 10.10.10.3 1358 {   。。。 }


测试:

[root@silence80 etc]# service keepalived restart

Stopping keepalived: [   OK   ] 

Starting keepalived: [   OK   ] 

[root@silence80 etc]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP   192.168.1.88:80 rr persistent 50

注:没有看到 realserver,是因为两台 realserver 没有开启 httpd 服务。



配置备keepalived  silence84


安装 ipvsadm 软件:


[root@silence84 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.25-9.el6.x86_64.rpm


在 silence84 上安装 keepalived

[root@silence84 ~]# tar zxvf keepalived-1.2.16.tar.gz

[root@silence84 ~]# cd keepalived-1.2.16

[root@silence84   keepalived-1.1.17]# ./configure --prefix=/usr/local/keepalived

[root@silence84 keepalived-1.1.17]# make -j 4 && make install


安装后操作

[root@silence84 keepalived-1.1.17]# mkdir /etc/keepalived

[root@silence84 keepalived-1.1.17]# cp /usr/local/keepalived/etc/sysconfig/keepalived

/etc/sysconfig/

[root@silence84 keepalived-1.1.17]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived

/etc/init.d

[root@silence84 keepalived-1.1.17]# ln -s /usr/local/keepalived/sbin/keepalived /sbin/


从 silence80 上直接复制对应的配置文件到 silence84 上:

复制主配置文件

[root@silence80 ~]#scp /etc/keepalived/keepalived.conf 192.168.1.84:/etc/keepalived/


测试是否能启动


[root@silence84 keepalived-1.1.17]# service keepalived start

 正在启动 keepalived: [确定]



配置 silence84 为 LVS 从服务器,修改配置文件:

[root@silence84 ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived



global_defs {

notification_email {

root@localhost

}

notification_email_from root@localhost



smtp_server localhost

smtp_connect_timeout 30

router_id silence84   #运行 keepalived 的机器标示符

}



vrrp_instance apache {

state BACKUP #当前 LVS 状态为从分发器

interface eth0 virtual_router_id 51

priority 90   #当前 LVS 优先级,备的要比主的小



重启服务

[root@silence84 ~]# /etc/init.d/keepalived restart



测试:高可用

[root@silence80 etc]# /etc/init.d/keepalived stop   #停止 silence80 主上 keepalived



[root@silence84 keepalived]# ip addr #在 silence82 上查看

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo

inet6 ::1/128 scope host

valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen

1000

link/ether 00:0c:29:c5:08:33 brd ff:ff:ff:ff:ff:ff

inet 192.168.1.84/24 brd 192.168.1.255 scope global eth0

inet 192.168.1.88/32 scope global eth0

inet6 fe80::20c:29ff:fec5:833/64 scope link 

valid_lft forever preferred_lft forever



[root@silence84 keepalived]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP   192.168.1.88:80 rr persistent 50

注:可以查看到以上内容说明,正常。



配置 silence81 为 RS1


编写脚本把虚拟 IP(VIP)绑定到 silence81 的回环网卡上。

[root@silence81   ~]# vim /etc/init.d/lvsrsdr #写入以下内容

#!/bin/bash

#description : start realserver

VIP=192.168.1.88

source /etc/init.d/functions case "$1" in

start)

echo " start LVS of RealServer DR"

/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

;;

stop)

/sbin/ifconfig lo:0 down

echo "close LVS of RealServer DR"

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

;;

*)

echo "Usage: $0 {start|stop}" exit 1

esac



启动:

[root@silence81 ~]# chmod +x /etc/init.d/lvsrsdr

[root@silence81 ~]# /etc/init.d/lvsrsdr start

[root@silence81 ~]# ifconfig

。。。


lo:0 Link encap:Local Loopback

inet addr:192.168.1.88   Mask:255.255.255.255

UP LOOPBACK RUNNING   MTU:16436   Metric:1


安装 apache:

[root@silence81 ~]# yum install httpd -y

[root@silence81 ~]# echo '192.168.1.81' > /var/www/html/index.html

[root@silence81 ~]# service httpd restart



配置 silence82 为 RS2


复制一下脚本:

[root@silence81 ~]# scp /etc/init.d/lvsrsdr [email protected]:/etc/init.d/


启动:

[root@silence82 ~]# chmod +x /etc/init.d/lvsrsdr 

[root@silence82 ~]# /etc/init.d/lvsrsdr start 

[root@silence82 ~]# ifconfig

。。。


lo:0 Link encap:Local Loopback

inet addr:192.168.1.88   Mask:255.255.255.255

UP LOOPBACK RUNNING   MTU:16436   Metric:1


安装 apache:

[root@silence82 ~]# yum install httpd -y

[root@silence82 ~]# echo '192.168.1.82' > /var/www/html/index.html

[root@silence82 ~]# service httpd restart



#在 RS1 和 RS2 上面运行,并添加到/etc/rc.local 下开机自启 

[root@silence81 ~]# echo '/etc/init.d/lvsrsdr start' >> /etc/rc.local 

[root@silence82 ~]# echo '/etc/init.d/lvsrsdr start' >> /etc/rc.local



测试RS1和RS2

wKiom1W5C3TR1qZ3AAJcISu8F-U058.jpg

到此实验配置完毕。


排错:

报错信息:

[root@silence80 keepalived-1.2.16]# ./configure

wKioL1W5DePyBj6ZAAG7BD1JIhI606.jpg

解决办法:

由提示可以看到,没有发现 gcc cc 编译工具,只需要安装即可。 解决方法:

[root@silence80 keepalived-1.2.16]#yum install gcc gcc-C++


报错信息:

wKiom1W5DCqjaf5EAAGLhCZrjQE226.jpg

解决方法: 内核源码做软链接,查看是否有内核源码

[root@silence80 ~]#ls /usr/src/kernels/

[root@silence80 ~]#yum install kernel-devel ipvsadm

[root@silence80 ~]#ln -s /usr/src/kernels/2.6.32-220.el6.x86_64/ /usr/src/linux

注:上面 ln 软链接时源地址根据系统版本的不同,目录名也不同



Configure 最后输出说明

wKiom1W5DFewkSieAAGYBRkj5ms649.jpg


你可能感兴趣的:(服务器,工作原理,程序,数据包,应用层)