二:项目案例-如图
LVS/DR+Keepalived 实现lvs高可用,并提供web服务负载均衡
案例环境:版本及相及IP地址的分配
名称(Name) | Ip_address |
LVS-DR-DIP:eth0 LVS-DR-DIP:eth0 | 172.16.88.88/16 172.16.88.66/16 |
LVS-DR-VIP:eth0:0 | 172.16.88.100/16 |
WEB1-Real-Server:eth0 | 172.16.88.10/16 |
WEB2-Real-Server:eth0 | 172.16.88.20/16 |
软件及版本:Vmware Station-RHEL 5.8(2.6.18) |
实验拓扑图如下:
配置过程如下:
Realserver1:172.16.88.10/16配置
第一步:设置主机名、IP地址、hosts文件IP地址和主机名对应关系,及关闭selinux
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@localhost ~]# sed -i
's@\(HOSTNAME=\).*@\1Real1.example.com@g'
/etc/sysconfig/network
[root@localhost ~]# hostname Real1.example..com
[root@localhost ~]# vim /etc/hosts
172.16
.
88.10
Real1.example.com Real1
172.16
.
88.20
Real2.example.com Real2
[root@Real1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
# Real Service Ip_address Information
DEVICE=eth0
BOOTPROTO=
static
IPADDR=
172.16
.
88.10
NETMASK=
255.255
.
0.0
GATEWAY=
172.16
.
0.1
ONBOOT=yes
HWADDR=
00
:0c:
29
:4b:
88
:1f
[root@Real1 ~]# service network restart
|
第二步:建立Realserver之间建立SSH互信及时间同步:
1
2
3
4
5
|
[root@Real1 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P
''
[root@Real1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@
172.16
.
88.20
[root@Real1 ~]# service ntpd stop && chkconfig ntpd off && ntpdate
172.16
.
0.1
[root@Real1 ~]# crontab -e
*/
3
* * * * /sbin/ntpdate
172.16
.
0.1
&> /dev/
null
|
第三步:创建Shell_Scripts,在这里,我们的RealServer提供的是web服务器,所以在这里我们采用脚本的方式来对Realserver进行配置,脚本内容如下:
[root@Real1 ~]# vim /scripts/realserver.sh ##创建脚本实现vip地址以和默认路由的设置以及对外网ARP请求的相关设置
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.
# chkconfig: -
90
10
# description: LVS DR real server
#
. /etc/rc.d/init.d/functions
VIP=
172.16
.
88.100
host=`/bin/hostname`
case
"$1"
in
start)
# 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
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
/sbin/route add -host $VIP dev lo:
0
;;
stop)
# 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
|
第四步:给此脚本执行权限并安装httpd二进制软件包,提供web服务
1
2
3
4
5
6
7
8
|
[root@Real1 ~]# chmod +x /scripts/realserver.sh
[root@Real1 ~]# .realserver.sh start ##运行此脚本,传递一个参数为start,即可设置vip地址、默认路由、对与外网arp请求参数
[root@Real1 ~]# service ntpd stop && ntpdate
172.16
.
0.1
##这里实现时间同步,使用的ntpdate+crontab来实现,也可以通过system-config-date来做相关设置即可。
[root@Real1 ~]# crontab -e
*/
3
* * * * /sbin/ntpdate
172.16
.
0.1
&>/dev/
null
[root@Real1 ~]# yum install httpd -y
[root@Real1 ~]# echo
"Real1 Server-1"
> /
var
/www/html/index.txt ##提供网页内容,用于测试
[root@Real1 ~]# service httpd restart
|
[root@Real1 ~]# netstat -ntupl | grep 80 && curl httpd://172.16.88.10
这样Realserver1的基本设置就完成了,Realserver2的设置和Realserver1完全相同,所以笔者在这里就不再演示。
[root@Real2 ~]# curl http://172.16.88.20
Director1 Server Configure
Keepalived在这里主要用作RealServer的健康状态检查以及LoadBalance主机(172.16.88.88/16)和Backup主机(172.16.88.66/16)之间failover的实现
下面为二台lvs调度服务器,安装lvs+keepalived软件包。安装lvs软件包,因为keepalived是运行在lvs之上的,因此lvs及keepalived必须装在一个系统里面。
第一步:设置主机名和/etc/hosts对照关系及两台Director调度器之间建立SSH互信:
Director Router1操作步骤
1
2
3
4
5
6
7
8
9
|
[root@localhost ~]# setup ##设置IP地址为
172.16
.
88.88
/
16
[root@localhost ~]# sed -i
's@\(HOSTNAME=\).*@\1Director1.example.com@g'
/etc/sysconfig/network ##修改主机名
[root@localhost ~]# hostname Director1.example.com
[root@localhost ~]# logout ##可以选择注销和重启来使配置文件生效
[root@Director1 ~]# vim /etc/hosts ##添加IP地址和主机名的映射关系
172.16
.
88.88
Director1.example.com Director1
172.16
.
88.66
Director2.example.com Director2
[root@Director1 ~]# ssh-keygen -t rsa -f ~/.ssl/id_rsa -P
''
##建立两台调度服务器之间的SSH互信,用于Director服务之间复制文件,也可以使用跳板级来实现部署。
[root@Director1 ~]# ssh-copy-id -i ./.ssl/id_rsa.pub Director2
|
第二步:IP地址信息及开路由转发功能:
[root@Director ~]# sysctl -p ##重新加载/etc/sysctl.conf配置文件
Director Router2操作步骤:
第一步:配置IP、主机名、hosts 、SSH互信
1
2
3
4
5
6
7
8
9
|
[root@localhost ~]# setup ##设置IP地址为
172.16
.
88.66
/
16
[root@localhost ~]# sed -i
's@\(HOSTNAME=\).*@\1Director2.example.com@g'
/etc/sysconfig/network
[root@localhost ~]# hostname Director2.example.com
[root@localhost ~]# logout ##重新登录,读取配置文件(/etc/sysconfig/network)
[root@Director2 ~]# vim /etc/hosts ##添加如下两行,完成IP地址和主机名对应关系,然后保存退出即可。
172.16
.
88
.88Director1.example.comDirector1
172.16
.
88
.66Director2.example.comDirector2
[root@Director2 ~]# ssh-keygen -t rsa -f ~/.ssl/id_rsa -P
''
[root@Director2 ~]# ssh-copy-id -i ./.ssl/id_rsa.pub Director2 ##以上的操作步骤,就完成了两台调度器之间建立SSH互信工作
|
第二步:安装ipvsadm和keepalived软件包
1
2
|
[root@Director1 ~]# yum install ipvsadm -y
[root@Director1 ~]# yum --nogpgcheck localinstall keepalived-
1.2
.
7
-
5
.el5.i386.rpm -y
|
第三步:keepalived主配置文件格式及对每一个参数做详细的解释:
keepalived分为三个部分:
全局配置、VRRP定义配置、虚拟服务器定义
全局配置格式:
1
2
3
4
5
6
7
8
9
|
global_defs {
notification_email {
root@localhost ##接收邮件的用户
}
notification_email_from keepalived@localhost ##发件用户为keepalived
smtp_server
127.0
.
0.1
##邮件服务器
smtp_connect_timeout
30
##连接请求超时时常
router_id LVS_DEVEL ##路由ID
}
|
VRRP定义配置格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
vrrp_instance VI_1 { ##定义虚拟路由
state MASTER ##两种状态分别是{MASTER|BACKUP}
interface
eth0 ##对外提供服务及通告所使用的接口
virtual_router_id
51
##虚拟路由标识ID
priority
101
##{MASTER|BACKUP}的优先级,MASTER的优先级比BACKUP的优先级大
advert_int
1
##同步通知间隔,MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒
authentication { ##验证类型和验证密码,目前类型主要有PASS、AH两种,通常使用的类型为PASS。
auth_type PASS
auth_pass keepalived
}
virtual_ipaddress { ##虚拟ip(VIP)地址,可以有多个地址,每个地址占一行,不需要指定子网掩码。
172.16
.
88.100
/
16
dev eth0
label
eth0:
0
}
}
|
虚拟服务器配置格式:
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
|
virtual_server
172.16
.
88.1
80
{ ##虚拟服务器(virtual_server)所使用的VIP地址及端口,实现负责均衡。
delay_loop
6
##健康状态检查时间间隔,单位是秒。
lb_algo rr ##负载均衡调度算法,LVS总共有八种调度算法,互联网应用常使用wlc或rr作为调度算法。
lb_kind DR ##负载均衡模型,LVS包括三种模型,分别为DR、NAT、TUN。
nat_mask
255.255
.
0.0
persistence_timeout
50
##会话保持时间(持久连接),默认为
50
秒。
protocol TCP ##转发所使用的协议(protocol),{TCP|UPD}
real_server
172.16
.
88.10
80
{ ##后端应用服务器(real_server),用于提供用户的请求,有时也称为应用服务器群组。
weight
1
##设定权值,对rr没有意义,一般应用服务器性能好的,可以将其权值设置大写,这样此应用服务器就能分担分担更多的用户请求资源并响应。
HTTP_GET { ##健康状态检测{HTTP_GET|SSL_GET(https)|TCP_CHECK|SMTP_CHECK|MISC_CHECK 权值小的,根据不同的调度算法分担的请求量会少些。
url {
path /
status_code
200
##页面返回代码值
}
connect_timeout
3
##连接超时时常
nb_get_retry
3
##连接重试的次数
delay_before_retry
3
##延迟所使用的时间
}
}
real_server
172.16
.
88.10
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
.
88.20
80
{
weight
1
HTTP_GET {
url {
path /
status_code
200
}
connect_timeout
3
nb_get_retry
3
delay_before_retry
3
}
}
}
|
第四步:将此Director1上的keepalived主配置文件复制到Director2上,并将其状态以及优先级修改为BACKUP和100,然后保存并退出即可。
1
2
3
4
|
[root@Director2 ~]#
[root@Director2 ~]# yum install ipvsadm -y
[root@Director2 ~]# yum --nogpgcheck localinstall keepalived-
1.2
.
7
-
5
.el5.i386.rpm -y
[root@Director1 ~]# scp /etc/keepalived/keepalived.conf Direcotr2:/etc/keepalived/keepalived.conf
|
第五步:启动keepalived服务器并查看vip配置在哪台Director上。
1
2
3
|
[root@Director1 ~]# service keepalived restart ##两台lvs同时启动keepalived服务
[root@Director2 ~]# service keepalived restart
[root@Director1 ~]# ifconfig ##查看VIP地址是否配置在Director1调度服务器上
|
查看ipvsadm的虚拟服务器真实存在的Realserver主机记录
1
|
[root@Director1 ~]# ipvsadm -L -n
|
第六步:如何在维护模式下,模拟LVS服务器发生故障
只需在keepalived配置文件中,添加如下内容(vrrp实例之外添加如下内容):
1
2
3
4
5
6
7
|
vrrp_script chk_schedown {
script
"[ -e /etc/keepalived/down ] && exit1 || exit 0 "
inerval
1
weight -
5
fall
2
rise
1
}
|
当vrrps事务发生改变时,运行此脚本:只需要在vrrp实例内添加如下内容即可
1
2
3
|
track_script {
chk_schedown
}
|
在两台调度服务器上,重启keepalived进程,加载主配置文件
当手动在/etc/keepalived目录中创建down文件时,主服务就会变成backup服务器,则从backup模式转换为master模式
1
2
|
手动创建down文件,查看主从是否切换
[root@Director1 ~]# touch /etc/keepalived/down
|
1、查看日志信息
日志分析:
1
2
3
|
通过日志信息,不难发现两台调度服务器重新选举主服务来提供服务,因为在Director1相关目录上手动创建了down文件,触发了chk_schedown脚本,
所以Director1的优先级从
101
变为了
96
,所以从主服务器变为了从服务器(BACKUP)移除vip地址,因此Director2变为主(MASTER)服务器,添加vip地址,
以及自主发起arp请求及响应arp请求,来更新记录。
|
2、查看vip地址相关信息
第七步:如果提供的两台应用服务里(web),由于其他原因出现故障,该如何解决呢:
1
2
3
4
5
|
只需要在/etc/keepalived/keepalived.conf,在virtual_server中添加如下内容:
[root@Director1 ~]# vim /etc/keepalived/keepalived.conf
sorry_service
127.0
.
0.1
:
80
然后分别重启keepalived服务进程
注:前提两台调度服务器都提供httpd服务,并且提供web错误页面信息
|
第八步:模拟两台应用程序服务出现故障
1
2
3
4
|
[root@Real1 ~]# /etc/init.d/httpd stop
Stopping httpd: [ OK ]
[root@Real1 ~]# ssh Real2
'service httpd stop'
Stopping httpd: [ OK ]
|
第九步:到调度服务器上利用ipvsadm工具查看ipvs规则
测试一:利用windows客户端访问172.16.88.100看是否发生变化:
测试二:到其中一台应用程序服务器从新启动httpd进程,并查看ipvsadm规则
1
2
|
[root@Real1 ~]# service httpd restart
[root@Director2 ~]# ipvsadm -L -n
|
再次通过windows客户端访问网页,看是否提供正常web服务
转载于:https://blog.51cto.com/smileyouth/1269166