主流开源软件LVS、keepalived、haproxy、nginx等html
其中LVS属于4层,nginx属于7层,haproxy既能够认为是4层,也能够当7层(网络OSI 7层模型)linux
keepalived的负载均衡功能其实就是lvsnginx
lvs这种4层的负载均衡是能够分发TCP协议,web服务是80端口,除了分发80端口,还有其余的端口通讯的,好比MySQL的负载均衡,就能够用LVS实现,而nginx仅仅支持http,https,mail,haproxy;haproxy也支持MySQL这种TCP负载均衡web
相比较来讲,LVS这种4层的更稳定,能承受更多的请求,承载的并发量更高,而nginx这种7层的更加灵活,能实现更多的个性化需求算法
LVS是由国人章文嵩开发apache
流行度不亚于apache的httpd,基于TCP/IP作的路由和转发,稳定性和效率很高vim
LVS最新版本基于Linux内核2.6,有好多年不更新了后端
LVS有三种常见的模式:NAT、DR、IP Tunnelbash
LVS架构中有一个核心角色叫作分发器(Load balance),它用来分发用户的请求,还有诸多处理用户请求的服务器(Real Server,简称rs)服务器
借助iptables的nat表来实现
用户的请求到分发器后,经过预设的iptables规则,把请求的数据包转发到后端的rs上去
rs须要设定网关为分发器的内网ip
用户请求的数据包和返回给用户的数据包所有通过分发器,因此分发器成为瓶颈
在nat模式中,只须要分发器有公网ip便可,因此比较节省公网ip资源
这种模式,须要有一个公共的IP配置在分发器和全部rs上,咱们把它叫作vip
客户端请求的目标IP为vip,分发器接收到请求数据包后,会对数据包作一个加工,会把目标IP改成rs的IP,这样数据包就到了rs上
rs接收数据包后,会还原原始数据包,这样目标IP为vip,由于全部rs上配置了这个vip,因此它会认为是它本身
这种模式,也须要有一个公共的IP配置在分发器和全部rs上,也就是vip
和IP Tunnel不一样的是,它会把数据包的MAC地址修改成rs的MAC地址
rs接收数据包后,会还原原始数据包,这样目标IP为vip,由于全部rs上配置了这个vip,因此它会认为是它本身
经常使用的算法是前四种
要点:nat模式,基于iptables,因此必须设置一些规则来实现。
三台机器:分发器:内网192.168.133.130 外网192.168.147.144
rs1:内网192.168.133.132 网关192.168.133.130
rs2:内网192.168.133.133 网关192.168.133.130
三台机器执行:systemctl stop firewalld;systemctl disable firewalld;systemctl start iptables;systemctl enable iptables;iptables -F ;service iptables save #关闭并取消开机启动firewalld;开启并设置开机启动iptables;若iptables没安装可yum install -y iptables-services;清空规则并保存,以便后续测试
三台机器关闭selinux:setenforce 0;vim /etc/selinux/config #SELINUX=enforcing更改成SELINUX=disabled
两台rs机器安装nginx并启动,测试所用:yum install -y nginx
1.分发器安装ipvsadm: #是实现 lvs 的工具
yum install -y ipvsadm
2.分发器编写iptables规则脚本并执行:
vim /usr/local/sbin/lvs_nat.sh #路径自定义,添加如下内容:
#! /bin/bash # director (分发器)服务器上开启路由转发功能 #对内核参数修改,打开路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 关闭icmp的重定向 #假装操做,否则不能转发rs的数据 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects # 注意区分网卡名字,dir机器的两块网卡分别为ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens36/send_redirects # director 设置nat防火墙 iptables -t nat -F iptables -t nat -X #MASQUERADE实现同网段的机器去上网,路由器使用的就是这个功能 iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -j MASQUERADE # director设置ipvsadm #设置一个变量,方便下面命令引用 IPVSADM='/usr/sbin/ipvsadm' #清空规则 $IPVSADM -C #用来定义lvs 的模式;lc,为算法,能够按需求选择 lvs 里面适合的算法 #-t 制定lvs 模式,以后IP 就是dir的IP,-s 指定算法;-p 指定数据包转发超时时间 $IPVSADM -A -t 192.168.147.144:80 -s lc -p 3 #小规则,-r 指定dir机器IP,-m 指定nat模式,-w指定rs权重 $IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1 #小规则,-r 指定dir机器IP,-m 指定nat模式,-w指定rs权重 $IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
sh /usr/local/sbin/lvs_nat.sh
1.设置两台rs的nginx的索引页
vim /usr/share/nginx/html/index.html #rs1与rs2的索引页设置不一样字符串,用于区分访问。
2.curl 192.168.147.144 #屡次执行,看访问的索引页是否有变化