负载均衡集群简介
主流开源软件LVS、Keepalived、haproxy、Nginx等
LVS属于4层负载均衡,Nginx属于7层负载均衡,Haproxy可以认为是4层,也可以做7层使用。
LVS这种4层的负载均衡是可以分发除80以外的其他端口通信的,比如MySQL的,而Nginx仅仅支持HTTP、HTTPS、MAIL;Haproxy也支持MySQL这种。
相比较来说,LVS这种4层的更稳定,能承受更多的请求,而Nginx这种7层的更加灵活,能实现更多个性化需求。
LVS简介
1.LVS是由国人章文嵩开发。
2.LVS是基于TCP/IP做的路由和转发,稳定性和效率很高。
3.LVS是工作于Linux内核中的
4.LVS有三种常见的模式NAT、DR、IP Tunnel
5.LVS架构中有一个核心角色叫做分发器(Load Balancer),它用来分发用户的请求。
一个LVS集群往往包含以下角色:
1、DS:Director Server,指的是前端负载均衡器节点
2、RS:Real Server,后端真实的工作服务器
3、VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
4、DIP:Director Server IP,主要用于和内部主机通讯的IP地址
5、RIP:Real Server IP,后端服务器的IP地址。
6、CIP:Client IP,访问客户端的IP地址。
LVS NAT模式
这种模式借助iptables的nat表来实现
用户的请求到分发器后,通过预设的iptables规则,把请求的数据报转发到后端的RS上去。
RS需要设定网关为分发器的内网IP
用户请求的数据包和返回给用户的数据包全部经过分发器,所以分发器成为瓶颈
在NAT模式中,只需要分发器有公网IP即可,所以比较节省公网IP资源
LVS IP Tunnel模式
这种模式需要有一个公共的IP配置在分发器和所有的RS上,我们把它叫做VIP
客户端请求的目标IP为VIP,分发器接收到请求数据包后,会对数据包做一个加工,会把目标IP改为RS的IP,这样数据包就到了RS上。
RS接受数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以他会认为是他自己
LVS DR模式
这种模式,也需要有一个公共的IP配置在分发器和所有RS上,也就是VIP
和IP Tunnel不同的是,他会把数据包的MAC地址修改为RS的MAC地址。
RS接收数据包后,会还原原始数据包,这样目标IP为VIP,因为所有RS上配置了这个VIP,所以他会认为是他自己
LVS调度算法
针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法
轮询(Round Robin)
加权轮询(Weighted Round Robin)
最少连接(Least Connections)
加权最少连接(Weighted Least Connections)
基于局部性的最少连接(Locality-Based Least Connections)
带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
目标地址散列(Destination Hashing)
源地址散列(Source Hashing)
LVS集群搭建
环境准备
虚拟机 VMware15.01
虚拟主机
centos7.6.1810 192.168.1.221
centos7.6.1810 192.168.1.222
centos7.6.1810 192.168.1.223
centos7.6.1810 192.168.1.224
系统服务LVS,Keeplived
Web服务Nginx
集群搭建LVS DR模式
host1 192.168.1.221 VIP 192.168.1.220 director1 ipvs/keepalived
host2 192.168.1.222 VIP 192.168.1.220 director1 ipvs/keepalived
host3 192.168.1.223 realserver nginx/lvsrs
host4 192.168.1.224 realserver nginx/lvsrs
安装软件
host1、host2 sudo yum install ipvsadm安装ipvs
host1、host2 sudo yum install keepalived安装Keepalived
host3、host4 sudo yum install nginx安装Nginx
ipvsadm开启ipvs
sudo lsmod | grep ip_vs查询是否开启了ipvs
/etc/keepalived目录下有一个默认的keepalived.conf配置文件
Keepalived的配置
# Global Configuration
global_defs {
lvs_id director1
}
# VRRP Configuration
vrrp_instance LVS {
state MASTER
interface ens33
virtual_router_id 51
priority 151
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
}
virtual_ipaddress {
192.168.200.220
}
# Virtual Server Configuration - for www server
virtual_server 192.168.1.220 80 {
delay_loop 1
lb_algo rr
lb_kind DR
persistenct_time 0
protocol TCP
# Real Server 1 configuration
real_server 192.168.1.223 80 {
weight 1
TCP_CHECK {
connection_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
# Real Server 2 configuration
real_server 192.168.1.224 80 {
weight 1
TCP_CHECK {
connection_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
host3的Nginx配置为监听80端口,返回200 Hello, Nginx! Server Host3@192.168.1.223
host4的Nginx配置为监听80端口,返回200 Hello, Nginx! Server Host3@192.168.1.224
ps -ef | grep nginx检查Nginx是否正在运行
启动Nginx,并且两台Nginx必须可以交叉访问
编写lvsrs脚本
#!/bin/bash
ifconfig lo:0 192.168.1.220 netmask 255.255.255.255 broadcast 192.168.1.220 up
route add -host 192.168.1.220 lo:0
echo "0" > /proc/sys/net/ipv4/ip_forward
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
exit 0
sudo chmod +x /etc/init.d/lvsrs使文件可执行
执行lvsrs脚本
在host1、host2执行systemctl start keepalived启动Keepalived服务
执行ipvsadm -ln
在host1执行curl -i 192.168.1.220访问虚拟ip
在host1上停止keepalived服务,没有负载均衡信息,重启可以继续访问
至此实现基于VIP的负载均衡和基于keepalived的高可用