linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解
关于nginx配置tomcat实现负载均衡可参考http://blog.csdn.net/liqi_q/article/details/78063603
安装jdk可参考:http://blog.csdn.net/liqi_q/article/details/72963947
关于IP直接访问nginx可参考http://blog.csdn.net/liqi_q/article/details/78476787
关于lvs长时间轮询real-server原因可阅读http://www.capjsj.cn/keepalived_lvs_nginx_tomcat.html
在LVS+Keepalived环境里面,lvs主要的工作是提供调度算法,把客户端请求按照需求调度在real服务器,keepalived主要的工作是提供lvs控制器的一个冗余,并且对real服务器做健康检查,发现不健康的real服务器,就把它从lvs集群中剔除,real服务器只负责提供服务。
二、lvs和keepalived的安装
环境规划
2*(lvs+keepalived服务器)+n*real-server,一般lvs+keepalived是这样的架构。
开始安装
1、 下载软件包
在http://www.linuxvirtualserver.org/ 下载lvs的软件包
在http://www.keepalived.org/ 下载keepalived软件包
2、先编译安装lvs,再安装keepalived,安装lvs需要内核源码
下载lvs源码的时候,一定要选择你内核版本对应的源码包。
# uname -r 2.6.18-164.el5PAE #yum install kernel-devel -y //安装内核源码包 #ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux #wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz //ipvsadm包就是lvs软件包,别觉得名字不一样 # tar -zxvf ipvsadm-1.24.tar.gz # cd ipvsadm-1.24 #make && make install
检查lvs是否安装成功:
#ipvsadm //查看是否有输出
#lsmod | grep ip_vs //如果ipvsadm有输出,那么使用这个命令查看是否加载ip_vs模块,如果加载,那么lvs算安装成功。
2、 编译安装keepalived,一定在安装完lvs以后在安装keepalive
Keeplive的下载地址:http://www.keepalived.org/download.html
wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz //不建议选择最新的版本
1.tar -zxvf keepalived-1.2.2.tar.gz
2.cd keepalived-1.2.2
3。
./configure --prefix=/
Keepalived version : 1.1.15 Compiler : gcc Compiler flags : -g -O2 Extra Lib : -lpopt -lssl -lcrypto Use IPVS Framework : Yes IPVS sync daemon support : Yes Use VRRP Framework : Yes Use LinkWatch : No Use Debug flags : Nod
看见如上输入,注意yes和no的值,如果一样,证明配置成功,如果lvs为no,那么证明你的lvs没有安装成功,需要从新安装lvs再安装keepalived。
yum -y install openssl-devel
4.make && make install
5.cd /etc/keepalived/
三、LVS VS/DR模式搭建
环境介绍
主机IP |
角色 |
安装软件 |
10.10.10.168 |
Lvs+keepalived MASTER |
Ipvsadm keepalived |
10.10.10.169 |
Lvs+keepalived BACKUP |
Ipvsadm keepalived |
10.10.10.170 |
Real server |
Lvs_real脚本 |
10.10.10.171 |
Real server |
Lvs_real脚本 |
10.10.10.11 |
VIP |
注意:所有机器都在一个交换机,并且在一个网段。
1、在168和169上安装ipvsadm和keepalived软件。
2、修改keepalived的配置文件
7.vi keepalived.conf
Keepalive安装默认目录会在less /etc/keepalived/keepalived.conf
[root@test01 nginx]# cat /etc/keepalived/keepalived.conf
#ConfigurationFile for keepalived
global_defs {
#notification_email { ######定义接受邮件的邮箱
# wangjj@hrloo.com
#}
#notification_email_from jiankong@staff.tuge.com ######定义发送邮件的邮箱
#smtp_server mail.tuge.com
#smtp_connect_timeout 10
}
vrrp_script check_lvs { ######定义监控nginx的脚本
script "/root/check_lvs.sh"
interval 1 ######监控时间间隔
weight 2 ######负载参数
}
vrrp_instance vrrptest { ######定义vrrptest实例
state MASTER ######服务器状态
nopreempt #非抢占模式
interface eth0 ######使用的接口
virtual_router_id 51 ######虚拟路由的标志,一组lvs的虚拟路由标识必须相同,这样才能切换
priority 150 ######服务启动优先级,值越大,优先级越高,BACKUP 不能大于MASTER
advert_int 1 ######服务器之间的存活检查时间
track_script { ######执行监控nginx进程的脚本
check_lvs
}
virtual_ipaddress { ######虚拟IP地址
10.10.10.11
}
}
virtual_server 10.10.10.11 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0 //此值为0,主要是为了方便测试,每次刷新页面结果会不一样
protocol TCP
real_server 10.10.10.170 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.10.10.171 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
10.10.10.169:
和10.10.10.168相比,值需要删除state MASTER 和 修改priority的值小于master的。
real server:
在所有real server上添加下面脚本,名执行# cat /sbin/lvs_real
#!/bin/bash #description:start realserver vip=10.10.10.11 #虚拟IP source /etc/rc.d/init.d/functions case $1 in start)echo "Start Realserver"/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 upecho "1" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announce ;; stop)echo "Stop Realserver"/sbin/ifconfig lo:0 downecho "0" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "0" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/all/arp_announce ;; *)echo "Usage: $0 (start | stop)" exit 1 esac
sh /sbin/lvs_real start启动脚本为Real server设置回环共享虚拟IP
执行脚本以后,使用ip add命令查看lo接口是否添加了虚拟ip地址。
3、配置完成以后,开始测试:
在10.10.10.168和10.10.10.169上使用ip add检查,虚拟IP应该配置在168上面。
测试1{主要测试lvs}:访问虚拟IP是否可以访问真实服务器,是否轮询real server
在master上使用 ipvsadm命令查看lvs状态。
[root@test01 nginx]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.10.10.11:http rr
-> 10.10.10.171:http Route 1 0 0
-> 10.10.10.172:http Route 1 0 0
[root@test01 nginx]#
在客户端访问虚拟IP 10.10.10.11,看是否可以访问。每次刷新,应该会换一个real server。访问数次后,通过ipvsadm观察lvs状态。
测试2{主要测试keepalived}:lvs服务器的HA,当keepalived master挂掉后,keepalived backup会不会接管虚拟IP。
关闭master主机上的keepalived进程。
在backup上ip add查看是否添加虚拟IP,通过/var/log/message查看相关转换日志。
测试3{测试backup的lvs}:使用客户端访问现在虚拟ip,查看是否一切正常
测试完成后,开启master的keepalived进程,等虚拟ip转移到master以后,在从客户端访问,查看是否存在问题
service keepalived stop停止主服务 使用ip addr查看共享IP是否已经漂移到备机上
接下来查看ipvsadm默认超时时间
[root@DR1 keepalived]# ipvsadm -L --timeout
Timeout (tcp tcpfin udp): 900 120 300
900 120 300这三个数值分别是TCP TCPFINUDP的时间.也就是说一条tcp的连接经过lvs后,lvs会把这台记录保存15分钟,就是因为这个时间过长,所以大部分人都会发现做好LVS DR之后轮询现象并没有发生,而且我也看到大部分的教程是没有说明这一点的,因为是实验性质,所以将此数值调整为非常小,使用以下命令调整:
[root@DR1 ~]# ipvsadm --set 1 2 1
解决同一个用户session访问同一台服务器
这样LVS基本就配置完成了,BBS存在用户session的问题,虽然有很多种解决方法,这里如果只用lvs来解决的话,就要用到LVS的持久连接了,配置如下:
ipvsadm -E -t 192.168.8.230:80 -s wlc -p 3600
这样用户访问后端一台RS在3600s内都只会访问这一台RS,可以发现这样做会破坏LB的效果,不过可以解决用户session的问题。
LVS调度算法
(2)负载调度算法
静态方法:仅根据算法本身进行调度
rr:Round Robin # 即轮询
wrr:Weighted RR # 即加权轮询
sh:Source Hashing # 即来源IP地址hash
dh:Destination Hashing # 即目标地址hash(不常用,仅用于前端多防火墙的场景,保证防火墙的连接追踪功能有效)
动态方法:根据算法及RS当前的负载情况
lc:Least Connection
# 评判标准:Overhead=Active*256+Inactive
# Overhead最小者胜出
wlc:Weighted LC
# 评判标准:Overhead=(Active*256+Inactive)/weight
# Overhead最小者胜出
sed:Shortest Expect Delay
# 评判标准:Overhead=(Active+1)*256/weight
# Overhead最小者胜出
nq:Never Queue # 集群开始时工作时,每台服务器都至少分配一个连接请求,然后再根据sed算法调度;
lblc:Locality-based Least Connection # 类似于dh+lc
lblcr:Relicated and Locality-based Least Connection # 主要用于后端服务器是缓存服务器时
linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解相关推荐
- Nginx+Tomcat集群与负载均衡
Nginx+Tomcat集群与负载均衡 架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomca ...
- jeesite集群和负载均衡配置
jeesite是支持集群和负载均衡配置的,其实步骤非常简单.我们只需修改jeesite.properties的配置项,将ehcache.configFile=cache/ehcache-local.x ...
- Nginx 集群安装以及常用配置详解开机自启动
Nginx 配置文件详解 main: 全局配置 event: 配置工作模式以及连接数 http: http 模块相关配置 server 虚拟主机配置,可以有多个 location 路由规则,表达式 u ...
- nginx的集群与负载均衡
一.集群 就是同一个业务部署在不同的服务器上. 1.启动多个Web服务器 http://127.0.0.1:9001 http://127.0.0.1:9002 http://127.0.0.1:90 ...
- 使用LVS+TUN搭建集群实现负载均衡
使用LVS+TUN搭建集群实现负载均衡 TUN模式的概述与工作原理 TUN模式服务概述: IP Tunneling(IP隧道) --可以在不同地域,不同网段 Director分配请 ...
- 在Linux上使用Nginx为Solr集群做负载均衡
在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...
- FastDFS蛋疼的集群和负载均衡(十五)之lvs四层+Nginx七层负载均衡
###Interesting things lvs+nginx的拓扑图 准备环境,基于上一篇[Diary Report 2018-1-3]关于FastDFS蛋疼的集群和负载均衡(十三)之LVS-DR环 ...
- 10分钟搭建服务器集群——Windows7系统中nginx与IIS服务器搭建集群实现负载均衡...
10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡 原文:10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡 分布式 ...
- nginx与IIS服务器搭建集群实现负载均衡(三)
强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 在<架构之路:nginx与IIS服务器搭建集群实现负载均衡(二)>中提到有 ...
最新文章
- 手把手教你用Keras进行多标签分类(附代码)_数据派THU-CSDN博客 (翻译:程思衍校对:付宇帅)
- 9 个实用 shell 脚本,建议收藏!
- C#实现枚举的相关操作
- 基于感知机的手写体识别
- 【经典回放】多种语言系列数据结构算法:归并排序
- BZOJ2388: 旅行规划
- 读取速度500m/s和1000m/s的硬盘,装系统使用起来有区别吗?
- jQuery 帮助文档
- JDK的安装及环境变量配置
- MobSF分析.ipa文件,MobSF分析iOS app
- Xmind 2022 Mac思维导图软件
- go实践二十 web开发--表单唯一token 表单验证 防止xss攻击 上传文件 cookie处理
- c++变幻的矩阵_C++课程设计c++矩阵类(简洁版)
- pd15不能连接oracle11g,PowerDesigner15 使用时的十五个问题附解决方法
- 2022年最新网络与数据安全法规政策、国标、报告合集(141份)
- C++性能优化系列——3D高斯核卷积计算(三)IPP计算一维卷积
- python底层与机器底层关系_起底 Python 的底层逻辑
- 计算机资源管理论文,计算机专业教育资源管理系统毕设论文.doc
- android日程管理的论文,毕业论文-基于安卓的手机日程管理系统.pdf
- 40张python图表