windows 负载均衡 总是定位到同一台机器_【实战演练】Linux操作系统15-LVS实现Nginx服务器负载均衡...

#本文欢迎转载,转载请注明出处和作者。

理论部分,在之前的文章已经说明过了,详见:

繁星亮与鲍包包:【理论研究】业务系统高可用及负载均衡​zhuanlan.zhihu.com
0358e8a507b7152bd390f60e23bb581d.png

上一篇已经讲述通过对2台Nginx服务器安装Keepalived软件+Nginx服务检测脚本,做高可用HA的配置。

繁星亮与鲍包包:【实战演练】Linux操作系统14-keepalived实现Nginx服务器高可用​zhuanlan.zhihu.com
f2e8256d81d0a2c339c7eaf353e4ad80.png

本篇介绍通过增加LVS服务器,对2台Nginx服务器做负载均衡。

5d447b7059bd2497e932af63459be2d0.png

1、LVS

2dfadc82ea1aea24304678fec4345747.png

LVS的控制端,叫director,负责VIP以及分发流量。

后端被分发的服务器,叫做RealServer。有时候为了节省,机器可以既做Director也做Realserver。

实验中,我们增加1台LVS服务器(10.1.30.40)1做director,原来的2台Nginx服务器30.26、30.27做Realserver。

1.1检查LVS模块

用lvs分发到2台nginx服务器(此处nginx仅当作web服务器使用)

Centos6.5自带lvs模块,用如下命令可以检查

modprobe -l | grep ipvs

79a02d5aab5c0e47b04b071ac6abaaaf.png

1.2安装依赖

yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt*

1.3安装lvs管理工具

管理工具叫ipvsadm,ipvsadm-1.26.tar.gz拷贝至/usr/local/下

cd /usr/local
tar -zxvf ipvsadm-1.26.tar.gz
cd ipvsadm-1.26
make & make install 

c6fa92f20aa69e94ff09ebef1aea85fc.png

2、Nginx服务测试预设置

由于实现负载均衡后,直接访问VIP,发现业务能够正常访问,并且能够负载均衡到apache01、02,但是由于Nginx01、02设置了负载均衡到Apache,所以访问VIP屏蔽了Nginx01、02,无法看出到底VIP有没有负载到Nginx01、02,因此需要提前做些修改,方便测试。

2.1 临时取消Nginx负载均衡Apahce设置

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
vi  /usr/local/nginx/conf/nginx.conf

删除

upstream site{
        server 10.1.30.24;
        server 10.1.30.25;
    }

proxy_pass http://site;
#在location / {}里面

修改会话保持时间

keepalive_timeout  0;
#原有#去掉,否则连续访问VIP,会65秒内连续分发到同一台Nginx服务器
#keepalive_timeout  65;
#加上#注释掉

详见之前Nginx配置WEB负载均衡的4.1-5)

繁星亮与鲍包包:【实战演练】Linux操作系统13-Nginx实现WEB服务器负载均衡​zhuanlan.zhihu.com
c27967c7f9314424593285eef6492e5e.png

重启nginx服务

service nginx restart

此时单独访问Nginx01、02会显示Nginx的默认页面。

d7e0a77c46f69fe3ed13eb0278275949.png

2.2 修改Nginx默认页面

修改Nginx01、02的默认欢迎页面,默认主页是/usr/local/nginx/html/index.html

mv /usr/local/nginx/html/index.html /usr/local/nginx/html/index.html.bak
vi /usr/local/nginx/html/index.html
#Nginx01设置为
This is Nginx01 10.1.30.26
#Nginx02设置为
This is Nginx02 10.1.30.27

单独访问Nginx01、02的IP进行测试

27d31dd2d1c9f5f8f48df310172af33f.png

9ef8641915cb9e422411763c5e2a4a15.png

2.3 关闭ARP解析

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 
#使用修改生效

3、LVS Director配置

3.1 脚本自动配置

vi /etc/init.d/lvsdr

内容如下

#!/bin/sh
# 定义虚拟ip
VIP=10.1.30.31 #虚拟 ip根据需求修改
# 定义realserver,并已空格分开,根据需求修改
RIPS="10.1.30.26 10.1.30.27"
# 定义提供服务的端口
SERVICE=80
# 调用init.d脚本的标准库
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "Start LVS of DR Mode"
        # 开启ip转发
        echo "1" > /proc/sys/net/ipv4/ip_forward
        # 绑定虚拟ip
        ifconfig eth1:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        route add -host $VIP dev eth1:0
        # 清除lvs规则
        ipvsadm -C
        # 添加一条虚拟服务器记录
    # -p指定一定的时间内将相同的客户端分配到同一台后端服务器
    # 用于解决session的问题,测试时或有别的解决方案时建议去掉
        ipvsadm -A -t $VIP:$SERVICE -s rr
        # 添加真实服务器记录
        for RIP in $RIPS
    do
        echo $RIP:$SERVICE;
                ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g
        done
        # 设置tcp tcpfin  udp的超时连接值
        ipvsadm --set 30 120 300
        ipvsadm
        ;;

        stop)
        echo "Stop LVS DR"
        ifconfig eth1:0 down
        ipvsadm -C
        ;;
        *)
        echo "Usage:$0 {start ¦ stop}"
        exit 1
esac

保存后增加执行权限

chmod 777 /etc/init.d/lvsdr

启动LVS服务

service lvsdr start

95729ebabd26a1da5d446f98374cea44.png

3.2 手工配置(如果已经做了脚本自动配置,就不需要再做手工配置了)

3.2.1 绑定VIP

绑定虚拟IP(注意网卡按照机器实际网卡更改,如eth0,则改eth1为eth0)

ifconfig eth1:0 10.1.30.31 broadcast 10.1.30.31 netmask 255.255.255.255 up

3.2.2添加路由规则

route add -host 10.1.30.31 dev eth1:0

3.2.3启动包转发功能

echo "1" >/proc/sys/net/ipv4/ip_forward

3.2.4清除原有转发规则

ipvsadm --clear

3.2.5添加虚拟IP规则

ipvsadm -A -t 10.1.30.31:80 -s rr

-s rr表示采用轮询策略。

:80表示负载转发的端口是80

3.2.6在虚拟IP中添加服务规则

ipvsadm -a -t 10.1.30.31:80 -r 10.1.30.26:80 -g
ipvsadm -a -t 10.1.30.31:80 -r 10.1.30.27:80 -g 

在新加虚拟IP记录中添加两条新的Real Server记录,-g表示指定LVS 的工作模式为直接路由模式。

lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口的一致,这里都为80。

3.2.7重启LVS

Ipvsadm

4、Realserver配置(2台Nginx服务器)

4.1 脚本自动配置

vi /etc/init.d/lvsdr

内容如下:

#!/bin/sh
VIP=10.1.30.31 #虚拟ip,根据需求修改
. /etc/rc.d/init.d/functions
case $1 in
        start)
        echo "lo:0 port starting"
        # 为了相应lvs调度器转发过来的包,需在本地lo接口上绑定vip
        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        # 限制arp请求
        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
        ;;
        stop)
        echo "lo:0 port closing"
        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
        ;;
        *)
        echo "Usage: $0 {start ¦ stop}"
        exit 1
esac

增加执行权限

chmod 777 /etc/init.d/lvsdr

然后可以直接使用service lvsdr start/stop进行启停。

service lvsdr start

4.2 手工配置(如果已经做了脚本自动配置,就不需要再做手工配置了)

4.2.1环回接口绑定VIP

ifconfig lo:0 10.1.30.31 broadcast 10.1.30.31 netmask 255.255.255.255 up
/sbin/route add -host 10.1.30.31 dev lo:0

4.2.2关闭ARP解析

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 

#使用修改生效

5、测试

通过VIP(10.1.30.31)访问业务,并且不断刷新,发现能够早Ngix01与02之间负载均衡。

baff97e97280111839f88a89d16874e1.png

40b50b3427fdbf7756953216402d80e9.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值