1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解

linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解

时间:2019-03-09 21:05:52

相关推荐

linux搭建LVS+keepalive+nginx实现集群高性能负载均衡配置详解

关于nginx配置tomcat实现负载均衡可参考/liqi_q/article/details/78063603

安装jdk可参考:/liqi_q/article/details/72963947

关于IP直接访问nginx可参考/liqi_q/article/details/78476787

关于lvs长时间轮询real-server原因可阅读/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、 下载软件包

在/下载lvs的软件包

在/下载keepalived软件包

2、先编译安装lvs,再安装keepalived,安装lvs需要内核源码

下载lvs源码的时候,一定要选择你内核版本对应的源码包。

# uname -r2.6.18-164.el5PAE#yum install kernel-devel -y //安装内核源码包#ln -s /usr/src/kernels/2.6.18-164.el5PAE-i686/ /usr/src/linux#wget /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的下载地址:/download.html

wget /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.15Compiler : gccCompiler flags: -g -O2Extra Lib : -lpopt -lssl -lcryptoUse IPVS Framework : YesIPVS sync daemon support : YesUse VRRP Framework : YesUse LinkWatch: NoUse 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模式搭建

环境介绍

注意:所有机器都在一个交换机,并且在一个网段。

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@

#}

#notification_email_from jiankong@ ######定义发送邮件的邮箱

#smtp_server

#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 realservervip=10.10.10.11 #虚拟IPsource /etc/rc.d/init.d/functionscase $1 instart)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 1esac

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:PortForward Weight ActiveConn InActConn

TCP 10.10.10.11:http rr

-> 10.10.10.171:httpRoute 1 00

-> 10.10.10.172:httpRoute 1 00

[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-t192.168.8.230:80-swlc-p3600

这样用户访问后端一台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 # 主要用于后端服务器是缓存服务器时

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。