Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 831|回复: 0

lvs+keepalived实现高可用负载均衡

[复制链接]

238

主题

288

帖子

1925

积分

超级版主

Rank: 8Rank: 8

积分
1925
QQ
发表于 2015-3-18 14:29:30 | 显示全部楼层 |阅读模式

一、        设计背景
在IT应用技术中,负载均衡似乎成了一门不可缺少的技术。随着业务量的增长,导致服务器的压力越来越大,需要负载均衡的解决方案,但由于负载硬件设备很是昂贵,中小型的企业还是会选择避之的!本文中采用LVS+keepalived基于开源软件的架构提供一个负载均衡及高可用的服务器。

二、        LVS+Keepalived简单介绍
    LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。
虚拟服务器是负载均衡体系的基本架构,它分两层结构:转发器(Director)和真实服务器。虚拟服务器最主要的功能是提供包转发和负载均衡。
Keepalived 在此主要提供对Realserver状态的检测,及对Director的状态检测并做出相应的切换

三、        网络负载均衡拓扑图
注:本实例采用DR转发规则

IP

服务

主机

192.168.0.251VIP
192.168.0.161RIPweb-01
192.168.0.162RIPweb-02
192.168.0.171DIPkeepalived01
192.168.0.172DIPkeepalived02

四、        安装LVS和keepalived软件包
web环境不再阐述,相信你做到这里了,不会还不知道怎么部署web环境吧,真不会的话,你可以去撞墙了。。。
以下内容需要在主备keepalived上分别执行。
# yum  -y  install  openssl-devel popt-devel
# mkdir  /tmp/src
# cd  /tmp/src
百度云下载地址:http://t.cn/zRPO2KI --> lvs 目录下自行下载即可
或者
# wget http://www.linuxvirtualserver.or ... ipvsadm-1.24.tar.gz
# wget  http://www.keepalived.org/software/keepalived-1.2.0.tar.gz
# modprobe  ip_vs
# lsmod |grep  ip_vs
# uname  -r
2.6.32-358.18.1.el6.x86_64
# ln  -sv  /usr/src/kernels/2.6.32-358.18.1.el6.x86_64  /usr/src/linux
# cd  ipvsadm-1.24
# make
# make install
# cd  /tmp/src/keepalived-1.1.20
# ./configure  --prefix=/usr/local/keepalived
# make && make install
# cp  /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/
# cp  /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/
# mkdir  /etc/keepalived
# cp  /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/
# ln  -sv  /usr/local/keepalived/sbin/keepalived  /usr/sbin/
# chmod  +x  /etc/init.d/keepalived
# chkconfig  --add  keepalived
# chkconfig  keepalived on

五、        利用keepalived实现负载均衡及高可用
####配置文件详解见下文######
1. 配置Realserver
## 本处利用脚本控制两台Realserver
# vim  /tmp/realserver.sh
#!/bin/bash
# description: Config realserver lo
SNS_VIP=192.168.0.251
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_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 >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0

# chmod  +x  /tmp/realserver.sh

分别把此脚本放到web-01和web-02两台服务器上去

2. 配置master keepalived
# vim  /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
notification_email {
lvs@minunix.com
}
notification_email_from 111@minunix.com
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 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.251
}
}
virtual_server 192.168.0.251 80 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 60
protocol TCP

real_server 192.168.0.162 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.0.161 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3. 配置BACKUP Keepalived
将上文中的keepalived.conf拷贝到keepalived02 ,修改以下内容即可
state MASTER
修改为:
state BACKUP
priority 100
修改为:
priority 90

转载请注明出处: http://www.minunix.com/2013/09/lvskeepalived_0/   作者:MinUnix
4. 配置文件解释
一个较为完整的keepalived配置文件包含三个部分:全局定义模块、VRRP定义模块以及virtual_server虚拟服务器组定义模块。
4.1 全局定义模块
① Email通知:有故障的时候可发送邮件进行预警;
② lvs 负载均衡器标识router_id:在一个网络内,应该是唯一的。

4.2 VRRP定义模块
① vrrp_instance定义实例:包含以下内容
1)实例状态state:只有MASTER和BACKUP两种状态,并且需要大写这些单词。其中MASTER为工作状态,BACKUP为备用状态,当MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态由BACKUP转变为MASTER状态;当之前失效的MASTER所在的系统恢复时,BACKUP从MASTER状态转变为BACKUP状态;
2)interface    对外提供服务的网络接口;
3)virtual_router_id      此标识是一个数字,且同一个vrrp实例使用唯一的标识,在同一个vrrp_instance,MASTER和BACKUP的值是一致的。
4)priority 优先级,此标识是一个数字,数值越大,优先级就越高,同一个vrrp_instance中,MASTER的优先级应高于BACKUP;
5)advert_int 同步通知间隔,MASTER和BACKUP负载均衡服务器之间同步检查的时间间隔,单位为秒;
6)authentication 验证,包含验证类型和验证密码,验证类型有PASS和AH两种,据说AH的验证密码为明文。

② 虚拟IP:virtual_ipaddress
可以有多个地址,当有多个地址的时候,一行一个,换行写即可。不需要指定子网掩码。注:此IP必须和realserver所设定的VIP一致!!

4.3 virtual_server定义模块
虚拟服务器定义模块是keepalived框架中最重要的,是不可缺少的部分。
① virtual_server的IP来自vrrp定义模块中的第②步,定义一个VIP,可实现多个tcp端口的负载均衡功能。
1)delay_loop  定义realserver健康检查时间间隔,单位是秒
2)lb_algo 负载均衡调度算法,包含rr|wrr|dh|sh|lc|wlc|sed|nq|lblc|lblcr
3)lb_kind  负载均衡转发规则:包含:NAT|DR|TUN
4)persistence_timeout 会话保持时间,单位是秒。将同一个用户的请求转发至同一个服务器
5)protocol 转发协议,一般有tcp和udp两种协议。
② real_server 服务器池,real_server的值包括IP地址和端口。
1)weight 权重,数值越大,权重越高,利用不同的权重值为不同性能的服务器分配不同的负载。
2)tcp_check   TCP检查,对realserver的工作正常与否的检查,除此之外还包括SSL_GET和HTTP_GET方式进行健康检查
connect_timeout 连接超时时间,单位是秒
nb_get_retry  连接失败超时之后的重连次数
delay_before_retry  重连的间隔时间
connect_port    健康检查端口
③ 在virtual_server 有项sorry_server 参数,默认情况下此参数无效,只有在所有的realserver都失效后启用此参数,即realserver的备用机。
5.  针对偶尔出现的web假死,我们可以通过realserver的http_get健康检查方法对某一个页面进行检查。
HTTP_GET {
url {
path /index.html  ##定义要监测的页面
digest           ### $IP/index.html的digest的值
status_code 200  ## 访问index.html的访问状态码
}
connect_timeout 3
....
}
注:digest值的获取方法:
# genhash  -s  <server_ip>  -p  <port>  -u  <url>

六、        测试结果
1. 分别在两台realserver上启动realserver.sh脚本
两台realserver分别启动web程序,eg: httpd 或者nginx,之后启动脚本
# sh  /tmp/realserver.sh  start
2. 在两台Director启动keepalived服务
# service  keepalived  start
3. 在master|backup  Director 上查看地址信息
# ip  addr
发现只有在master有vip地址,而在backup上没有vip地址信息
4. 访问 http://192.168.0.251/index.html
关闭其中一台web server,再访问上述中的地址,查看访问状态;
若没有问题再启动刚才关闭的web server;
关闭master keepalived,在backup keepalived 查看ip地址信息,正常情况下,你会发现有vip的地址信息,访问web,查看访问状态是否正常;再关闭其中一台web server,访问web查看状态;接着启动master keepalived,查看ip 地址信息,访问web,查看访问状态。若这几步走来,都正常,那么可以恭喜你的lvs+keepalived可以应用了,
注:在做测试的时候,可以先打开/var/log/messages, 查看keepalived的切换状态


感谢原著作者大力分享http://www.minunix.com/2013/09/lvskeepalived_0/


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2020-2-18 03:56 , Processed in 0.030224 second(s), 12 queries , Redis On.

快速回复 返回顶部 返回列表