Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡

前言

       LVS简介;LVS三种模式;搭建LVS-DR模式;搭建Keepalived+LVS+Nginx高可用集群负载均衡。


文章目录

  • 前言
  • 一、LVS简介
    • 1.1 为什么要使用LVS + Nginx
    • 1.2 Nginx网络拓扑图
    • 1.3 LVS网络拓扑图
  • 二、LVS三种模式
    • 2.1 LVS模式之NAT
    • 2.2 LVS模式之TUN
    • 2.3 LVS模式之DR
  • 三、搭建LVS-DR模式
    • 3.1 配置LVS节点与ipvsadm
    • 3.2 为两台RS配置虚拟IP
    • 3.3 为两台RS配置arp
    • 3.4 使用ipvsadm配置集群规则
  • 四、搭建Keepalived+LVS+Nginx高可用集群负载均衡
    • 4.1 配置Master
    • 4.2 配置Backup
  • 总结


一、LVS简介

LVS负载均衡

  • Linux Virtual Server
  • 章文嵩博士主导的开源的负载均衡项目
  • LVS(ipvs)已被集成到Linux内核中
  • 负载均衡调度器

http://www.linux-vs.org/
Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第1张图片

1.1 为什么要使用LVS + Nginx

  • LVS基于四层,工作效率高
  • 单个Nginx承受不了压力,需要集群
  • LVS充当Nginx集群的调度者
  • Nginx接受请求来回,LVS可以只接受不响应

1.2 Nginx网络拓扑图

Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第2张图片

1.3 LVS网络拓扑图

Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第3张图片

二、LVS三种模式

2.1 LVS模式之NAT

网络地址的转换
Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第4张图片
LVS处于公网,用户可以直接访问;真实服务器处于私网,局域网内,用户无法直接访问。

2.2 LVS模式之TUN

Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第5张图片

ip隧道;网卡用于建立隧道;建立隧道以后才能建立通讯;隧道类似复联中的“量子领域”。
用户的响应直接返回给用户,不经过LVS。
上行LVS,量比较小;
下行服务器响应,量比较大。
增加了吞吐量。
集群暴露在公网,不太安全。

2.3 LVS模式之DR

请求和响应都经过虚拟ip,真实服务器隐藏,避免暴露在公网中。
Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第6张图片

三、搭建LVS-DR模式

       【前期准备】服务器与ip规划:

  1. LVS - 1台
  • VIP(虚拟IP):192.168.1.150
  • DIP(转发者IP/内网IP):192.168.1.151
  1. Nginx - 2台(RealServer)
  • RIP(真实IP/内网IP):192.168.1.171
  • RIP(真实IP/内网IP):192.168.1.172

3.1 配置LVS节点与ipvsadm

       所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:

systemctl stop NetworkManager
systemctl disable NetworkManager

       创建子接口:

  1. 进入到网卡配置目录,找到咱们的ens33:
    Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第7张图片
  2. 拷贝并且创建子接口:
cp ifcfg-ens33 ifcfg-ens33:1

*注:数字1为别名,可以任取其他数字都行
在这里插入图片描述

  1. 修改子接口配置:
vim ifcfg-ens33:1

配置参考如下:
在这里插入图片描述
*注:配置中的192.168.2.100就是vip ,是提供给外网用户访问的 ip 地址,原理和 Keepalived + Nginx 的 vip 是一样的。

  1. 重启网络服务,或者重启 linux:
service network restart

在这里插入图片描述

  1. 重启成功后,ip addr 查看,此时会多一个ip,也就是虚拟ip(vip):
    Java架构师—搭建Keepalived+LVS+Nginx高可用集群负载均衡_第8张图片
    创建子接口-方式2(不推荐):
    创建网络接口并且绑定虚拟ip,通过此方式创建的虚拟ip在重启后会自动消失。
ifconfig ens33:1 192.168.2.100/24

安装 ipvsadm
现如今的 centos 都集成了 LVS,所以 ipvs 是自带的,相当于苹果手机自带 ios ,我们只需要安装 ipvsadm 即可( ipvsadm 是管理集群的工具,通过 ipvs 可以管理集群,查看集群等操作),命令如下:

yum install ipvsadm 

安装成功后,可以检测一下:

ipvsadm -Ln

图中显示目前版本为1.2.1,此外是一个空列表,啥都没。
*注:关于虚拟 ip 在云上的事儿
1.阿里云不支持虚拟 IP ,需要购买他的负载均衡服务
2.腾讯云支持虚拟 IP ,但是需要额外购买,一台节点最大支持
10个虚拟 ip

3.2 为两台RS配置虚拟IP

配置虚拟网络子接口(回环接口)

  1. 进入到网卡配置目录,找到lo(本地环回接口,用户构建虚拟网络子接口),拷贝一份新的随后进行修改:
    cd /etc/sysconfig/network-scripts/
    cp ifcfg-lo ifcfg-lo:1

  2. 修改ifcfg-lo:1
    vim ifcfg-lo:1
    DEVICE=lo:1
    IPADDR=192.168.2.100
    NETMASK=255.255.255.255

  3. 重启后通过ip addr 查看多了ip192.168.2.100,表示ok:

3.3 为两台RS配置arp

ARP响应级别与通告行为 的概念

  1. arp-ignore:ARP响应级别(处理请求)
    0:只要本机配置了ip,就能响应请求
    1:请求的目标地址到达对应的网络接口,才会响应请求。
    通告行为:
  2. arp-announce:ARP通告行为(返回响应)
    0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告。
    1:尽可能避免本网卡与不匹配的目标进行通告
    2:只在本网卡通告
    配置ARP
  3. 打开sysctl.conf:
vim /etc/sysctl.conf
  1. 配置 所有网卡 、 默认网卡 以及 虚拟网卡 的arp响应级别和通告行为,分别对应: all , default , lo :
# configration for lvs
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
  1. 刷新配置文件:
sysctl -p
  1. 增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:
route add -host 192.168.2.100 dev lo:1
route -n
  1. 防止重启失效,做如下处理,用于开机自启动:
echo "route add -host 192.168.2.100 dev lo:1" >> /etc/rc.local

3.4 使用ipvsadm配置集群规则

  1. 创建LVS节点,用户访问的集群调度者
ipvsadm -A -t 192.168.2.100:80 -s rr -p 5

-A:添加集群
-t:tcp协议
ip地址:设定集群的访问ip,也就是LVS的虚拟ip
-s:设置负载均衡的算法,rr表示轮询
-p:设置连接持久化的时间

  1. 创建2台RS真实服务器
ipvsadm -a -t 192.168.2.100:80 -r 192.168.1.171:80 -g
ipvsadm -a -t 192.168.2.100:80 -r 192.168.1.172:80 -g

-a:添加真实服务器
-t:tcp协议
-r:真实服务器的ip地址
-g:设定DR模式

  1. 保存到规则库,否则重启失效
ipvsadm -S
  1. 检查集群
  • 查看集群列表
ipvsadm -Ln
  • 查看集群状态
ipvsadm -Ln --stats
  1. 其他命令:
# 重启ipvsadm,重启后需要重新配置
service ipvsadm restart
# 查看持久化连接
ipvsadm -Ln --persistent-conn
# 查看连接请求过期时间以及请求源ip和目标ip
ipvsadm -Lnc
# 设置tcp tcpfin udp 的过期时间(一般保持默认)
ipvsadm --set 1 1 1
# 查看过期时间
ipvsadm -Ln --timeout
  1. 更详细的帮助文档:
ipvsadm -h
man ipvsadm

四、搭建Keepalived+LVS+Nginx高可用集群负载均衡

4.1 配置Master

上传keepalived
./configure
make
make install
把keepalived注册到系统服务

cd /etc/keepalived/
vim keepalived.conf

global_defs {
	router_id LVS_100
}
vrrp_instance VI_1 {
	state MASTER
	interface ens33
	virtual_router_id 41
	priority 100
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.2.100
	}
}

#配置集群地址访问的 IP +端口,端口和 nginx 保持一致,都是80 virtual _ virtual_server 192.168.2.100 80 {
	#健康检查的时间,单位:秒 
	delay_loop 6
	#配置负载均衡的算法,默认是轮询
	lb_algo rr 
	#设置 LVS 的模式 NAT|TUN|DR
	lb_kind DR 
	#设置会话持久化的事件
	persistence_timeout 5
	#协议-t
	protocol TCP

	#负载均衡的真实服务器,也就是 nginx 节点的具体的真实 ip 地址 
	real_server 192.168.2.128 80{
		#轮询的默认权重配比设置为1
		weight 1
		#设置健康检查 TCP _ CHECK {
		#检查的80端口
		connect _ port 80
		#超时时间2s
		connect_timeout 2
		#重试次数2次
		nb_get_retry 2
		#间隔时间3s
		delay_before_retry 3
	}
	
 	real_server 192.168.2.129 80{
 		#轮询的默认权重配比设置为1
		weight 1
		#设置健康检查 TCP _ CHECK {
		#检查的80端口
		connect _ port 80
		#超时时间2s
		connect_timeout 2
		#重试次数2次
		nb_get_retry 2
		#间隔时间3s
		delay_before_retry 3
 	}
}

4.2 配置Backup

global_defs {
	router_id LVS_101
}
vrrp_instance VI_1 {
	state BACKUP
	interface ens33
	virtual_router_id 41
	priority 50
	advert_int 1
	authentication {
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress {
		192.168.2.100
	}
}

#配置集群地址访问的 IP +端口,端口和 nginx 保持一致,都是80 virtual _ virtual_server 192.168.2.100 80 {
	#健康检查的时间,单位:秒 
	delay_loop 6
	#配置负载均衡的算法,默认是轮询
	lb_algo rr 
	#设置 LVS 的模式 NAT|TUN|DR
	lb_kind DR 
	#设置会话持久化的事件
	persistence_timeout 5
	#协议-t
	protocol TCP

	#负载均衡的真实服务器,也就是 nginx 节点的具体的真实 ip 地址 
	real_server 192.168.2.128 80{
		#轮询的默认权重配比设置为1
		weight 1
		#设置健康检查 TCP _ CHECK {
		#检查的80端口
		connect _ port 80
		#超时时间2s
		connect_timeout 2
		#重试次数2次
		nb_get_retry 2
		#间隔时间3s
		delay_before_retry 3
	}
	
 	real_server 192.168.2.129 80{
 		#轮询的默认权重配比设置为1
		weight 1
		#设置健康检查 TCP _ CHECK {
		#检查的80端口
		connect _ port 80
		#超时时间2s
		connect_timeout 2
		#重试次数2次
		nb_get_retry 2
		#间隔时间3s
		delay_before_retry 3
 	}
}
ipvsadm -C
ipvsadm -Ln
systemctl restart keeplivad

探讨LVS的持久化机制:https://blog.csdn.net/qq_41959899/article/details/113849405


总结

LVS简介;LVS三种模式;搭建LVS-DR模式;搭建Keepalived+LVS+Nginx高可用集群负载均衡。

你可能感兴趣的:(Java架构师之路,nginx,负载均衡,java,架构,服务器)