本文以LVS + keepalived 实现基于keepalived的LVS的高可用

   LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR);    十种调度算法(rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)。

   Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现

   简单介绍keepalived:keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。之所以说keepalived是轻量级的,是相对于corosync + ldirectord来说的。keepalived也可以实现高可用集群,而且配置起来比corosync + ldirectord简单方便很多,keepalived与corosync的工作机制相差很多。corosync + ldirectord实现的功能虽然强大,但配置起来比较麻烦,而keepalived功能虽然简单,但配置起来比较容易。也就是说keepalived可实现corosync + ldirectord实现的功能,只不过前者没有后者功能强大而已

   这里有一个网上图片,以便可以详细的了解工作流程

网管宕机,服务停止?别担心,解决方案来了_第1张图片

大致规划:

   web-real  server1    172.16.14.3    node1.magedu.com

   web-real  server2    172.16.14.4    node2.magedu.com

   LVS-DR    vip        172.16.14.1

   LVS-DR-master        172.16.14.5    node1.magedu.com

   LVS-DR-salve         172.16.14.6    node2.magedu.com

首先需要下载keepalived-1.2.7-5.el5.i386.rpm

一、准备两台real server,安装httpd服务

1
2
3
4
5
6
( 172.16 . 14.3 node1.magedu.com)
172.16 . 14.4 node2.magedu.com)
#   yum  -y install httpd
#   echo "node1.magedu.com" > /var/www/html/index.html
#   setenforce 0            关闭selinux
#   service httpd start     启动服务

进行测试

网管宕机,服务停止?别担心,解决方案来了_第2张图片

   在real server2上安装http服务

1
2
3
4
5
( 172.16 . 14.4 node2.magedu.com)
#   yum  -y install httpd
#   echo "node2.magedu.com" > / var /www/html/index.html
#   setenforce 0 关闭selinux
#   service  httpd  start

   进行测试

网管宕机,服务停止?别担心,解决方案来了_第3张图片

   现在real server的http服务就准备好啦。

二、安装keepalived服务

1
2
3
( 172.16 . 14.5 node1.magedu.com)
#   yum  -y --nogpgcheck localinstall keepalived-1.2.7-5.el5.i386.rpm
#   yum -y  install  ipvsadm

   修改配置文件

   #    vim /etc/keepalived/keepalived.conf

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
进行配置keepalived
#   cd /etc/keepalived/
#   cp keepalived.conf keepalived.conf.bak  #做备份,出错时,还可以恢复
#   vim  keepalived
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost             #管理员邮箱
}
notification_email_from  keepalived@localhost     #发件人邮箱
smtp_server 127.0 . 0.1 #邮箱地址
smtp_connect_timeout 30 #邮箱连接超时时间
router_id LVS_DEVEL               #router_id是从LVS_DEVEL直接获取
}
vrrp_instance VI_1 {                 #虚拟路由
state MASTER                     #状态
interface eth0                   #虚拟路由工作于哪个接口
virtual_router_id 55 #vid
priority 101 #优先级,要高于被节点,减去2后,低于被节点
advert_int 1 #认证
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
172.16 . 14.1 / 16 dev eth0 label eth0: 0
}               #虚拟地址
virtual_server 172.16 . 14.1 80 {         #虚拟服务的地址,及监听端口
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255 . 0.0 #子网掩码
persistence_timeout 50
protocol TCP
real_server 172.16 . 14.3 80 {
weight 1
HTTP_GET {                   #进行健康检查的方法
url {
path / #获取主页面
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16 . 14.3 80 {
weight 1
HTTP_GET {                   #进行健康检查的方法
url {
path / #获取主页面
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

   复制keepalived.conf配置文件到从节点上

1
# scp keepalived.conf node2:/etc/keepalived/

   在从节点上,修改其配置文件

1
2
3
4
5
6
( 172.16 . 14.6 node2.magedu.com)
#   cd /etc/keepalived/
#   vim keepalived.conf
修改如下行
state BACKUP
priority 100

   重启keepalived服务,并查看ipvsadm规则,看是否成功(因为安装keepalived服务,会自动在服务上生成ipvs规则,基于LVS,达到ip地址的高可用)

1
2
( 172.16 . 14.5 172.16 . 14.6 )
#   service keepalived restart

查看规则

网管宕机,服务停止?别担心,解决方案来了_第4张图片

   手动模拟 resal server1宕机,再进行查看ipvs规则

   ipvs规则里就只剩下了node2(172.16.14.4)了

   1.模拟real server 都宕机时,服务器出现错误页面

       在keepalived服务器上安装http服务器,安装提示错误的页面

1
2
3
4
5
6
7
( 172.16 . 14.5 node1.magedu.com
172.16 . 14.6 node2.magedu.com)
#   yum  -y install httpd
#   echo "error" > /var/www/html/index.html
#   setenforce 0            关闭selinux
#     scp /var/www/html/index.html node2:/var/www/html/index.html
#   service  httpd  start

编译配配置文件/etc/keepalived/keepalived.conf

1
2
3
4
( 172.16 . 14.5 172.16 . 14.6 )
在rea_server前面加上一行:
sorry_server 127.0 . 0.1 80
#   service keepalived restart

停止real server上的http服务,查看172.16.14.1会出现怎么样的页面

网管宕机,服务停止?别担心,解决方案来了_第5张图片

2.自写检测脚本,完成维护模式切换

       使用维护模式,模拟节点1宕机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
vrrp_script chk_schedown {
script "[ -e /etc/keepalived/down ] && exit 1 || exit 0"
interval 1
weight - 5
fall 2
rise 1
}
在    virtual_ipaddress {
172.16 . 14.1 / 16 dev eth0 label eth0: 0
}
添加如下行:
track_script{
chk_schedown
}

       重启keepalived服务,查看节点1(172.16.14.5)的ip地址

网管宕机,服务停止?别担心,解决方案来了_第6张图片

       手动编辑down文件,重启服务,模拟主节点宕机

1
2
#   cd /etc/keepalived
#   touch down

       查看ip地址.eth0:0就运行于从节点啦

网管宕机,服务停止?别担心,解决方案来了_第7张图片