LVS-DR + NGINX ——负载均衡集群部署及测试案例

一、环境预览

LVS-DR + NGINX ——负载均衡集群部署及测试案例_第1张图片             LVS-DR + NGINX ——负载均衡集群部署及测试案例_第2张图片

二、各服务器开放本机提供服务的端口

三、LVS服务器配置(40服务器)

1、查看lvs内核信息

提示: 在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是 从Linux2.4内核及以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

#查看Linux内核版本

uname -r   

#查看linux内核是否集成lvs模块

find /lib/modules/$(uname -r)/ -iname "**.ko*" | cut -d/ -f5- 

滚动查询结果查找,以下为LVS内核模块
LVS-DR + NGINX ——负载均衡集群部署及测试案例_第3张图片

#也可以直接使用whereis查看

whereis lvs  

在这里插入图片描述

2、安装LVS管理工具:ipvsadm

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

#查看ipvsadm 版本

ipvsadm -v

4、Director Server配置

#在网卡卡上绑定虚拟ip

ifconfig ens33:0 192.168.11.100 broadcast 192.168.11.100 netmask 255.255.255.255 up

此处在ens33设备上绑定了一个虚拟设备ens33:0,同时设置了一个虚拟IP是192.168.11.100,然后指定广播地址也为192.168.11.100
需注意:虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255;因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。

5、服务器添加路由规则

route add -host 192.168.11.100 dev ens33:0

6、启用系统的包转发功能

#1:启用ip转发,0:禁止ip转发

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

7、清除原有转发规则

ipvsadm --clear

8、添加虚拟IP规则(-s rr表示采用轮询策略, :80表示负载转发的端口是80)

ipvsadm -A -t 192.168.11.100:80 -s rr  

9、在虚拟IP中添加服务规则

在新加虚拟IP记录中添加两条新的Real Server记录,-g表示指定LVS 的工作模式为直接路由模式;
注意: lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口一致,这里都使用了80端口

ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.30:80 -g
ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.31:80 -g

10、重启LVS

ipvsadm

四、nginx服务器(30、31服务器)

1、部署nginx

yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel libtool
pcre-config --version
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --prefix=/usr/local/nginx  #指定安装目录
make && make install

2、配置nginx

vim /usr/local/nginx/conf/nginx.conf

http 模块:
取消注释 log_format main (日志格式,可自定义)
修改keepalive_timeout 为0 (断开连接时限,方便测试使用)
LVS-DR + NGINX ——负载均衡集群部署及测试案例_第4张图片
轮询模式、指定日志文件
LVS-DR + NGINX ——负载均衡集群部署及测试案例_第5张图片

3、启动nginx

 /usr/local/nginx/sbin/nginx

4、ngxin操作命令

#关闭( $(…)部分等价于pid值)

kill QUIT $(cat /usr/local/nginx/logs/nginx.pid)

#重新加载配置文件(无需重启,新开启的worker线程会使用新配置

kill HUB pid

或使用

/usr/local/nginx/sbin/nginx -s reload

#重新输出日志文件 (否则日志还是会往原文件输出,运维备份日志文件时需关注

 kill USR1 pid

5、upstream 目前支持的5种分配策略

(1)轮询(默认)
   每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
(2)weight
   指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
(3)ip_hash
   每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务,好处是可以解决session的问题。
  因此前两种只能处理静态页面,而这种方式可以处理动态网站。
(4)fair(第三方)
   按后端服务器的响应时间来分配请求,响应时间短的优先分配。
(5)url_hash(第三方)
   按访问url的hash结果来分配请求,使每个url定向到同一个后端服务 ,后端服务器为缓存时比较有效。

五、RS 配置(30、31服务器操作)

  在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。

1、在每个回环设备上绑定了一个虚拟IP地址

ifconfig lo:0 192.168.11.100 broadcast 192.168.11.100 netmask 255.255.255.255 up

2、配置host

/sbin/route add -host 192.168.11.100 dev lo:0

3、关闭arp解析

arp_announce: 当ARP请求通过某个端口进来是否利用这个接口来回应。
  0 -利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
  1 - 避免使用另外一个接口上的mac地址去响应ARP请求;
  2 - 尽可能使用能够匹配到ARP请求的最佳地址。
arp_ignore: 当ARP请求发过来后发现自己正是请求的地址是否响应;
  0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
  1 - 哪个接口上接受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   #生效配置

六、后端服务器(192.168.11.50)

cd /usr/local/src/
 java -jar ./nginxdemo-0.0.1-SNAPSHOT.jar
 java -jar ./nginxdemo-0.0.1-SNAPSHOT.jar --server.port=8090

#jar包具有一个测试接口,源码如下:
LVS-DR + NGINX ——负载均衡集群部署及测试案例_第6张图片

七、测试

LVS-DR + NGINX ——负载均衡集群部署及测试案例_第7张图片

LVS-DR + NGINX ——负载均衡集群部署及测试案例_第8张图片

停掉一个nginx服务测试:LVS具有健康检测机制,不会丢请求
停掉一个web服务测试:nginx具有健康检测机制,不会丢请求

你可能感兴趣的:(负载均衡,负载均衡,nginx,lvs)