负载平衡
负载平衡(Load Balance):可以使用多个盘算机和组合进行海量哀求处理,从而得到很高的处理服从,也可以用多个盘算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。通过负载平衡使哀求可以在盘算机集群中尽大概平均地分摊处理。每个节点都可以负担肯定的处理负载,并且可以实现处理负载在节点之间的动态分配,以实现负载平衡。
分类
负载平衡根据所接纳的装备对象(软/硬件负载平衡)、应用的OSI网络层次(网络层次上的负载平衡)等来分类。
在现实应用中,比较常见的就是四层负载及七层负载。
四层负载平衡(基于IP+端口的负载平衡)
四层负载平衡,主要通过报文中的目标地址和端口,以及负载平衡装备设置的服务器选择方式,决定最终选择的内部服务器。
- 以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,选择一个最佳的
- 服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连
- 接建立,即三次握手的建立是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。
复制代码 实现四层负载平衡的软件有:
- - F5:硬件负载均衡器,功能很好,但是成本很高。
- - lvs:重量级的四层负载软件
- - nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
- - haproxy:模拟四层转发,较灵活
复制代码 七层的负载平衡(基于假造的URL或主机IP的负载平衡)
在四层负载平衡的基础上,再思量应用层的特性,比如同一个Web服务器的负载平衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别来决定是否要进行负载平衡。
- 以常见的TCP为例,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理的服务器和客
- 户端建立连接(三次握手)后,才可能接受到客户端发送的真正应用层内容的报文,然后再根据该报文中的
- 特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。负载均衡设备在这
- 种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。
复制代码 实现七层负载平衡的软件
- - haproxy:天生负载均衡技能,全面支持七层代理,会话保持,访问控制;
- - nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
- - apache:功能较差
- - Mysql proxy:功能尚可。
复制代码 四层负载与七层负载的区别(lvs和nginx的区别)
四层负载平衡(layer 4)七层负载平衡(layer 7)基于基于IP和Port(TCP协议)基于假造的URL或主机IP(HTTP协议)类似于路由器署理服务器握手次数1次2次复杂度低高性能高;无需解析内容中;需要算法识别 URL,Cookie 和 HTTP head 等信息安全性低,无法识别 DDoS等攻击高,可以抵御SYN大水攻击额外功能无会话保持,图片压缩,防盗链等- 四层负载与七层负载最大的区别是效率与功能的区别。
- 四层架构简单,无需解析消息内容,在网络吞吐量及处理性能上高于七层。
- 七层负载均衡优势在于功能多,控制灵活强大
复制代码 LVS 实现四层负载平衡项目实战
1、LVS 介绍
LVS 是Linux Virtual Server的简称,也就是 Linux 假造服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。如今LVS已经是 Linux尺度内核的一部分,因此性能较高。
LVS 优势与不足
(1)优势
- 1.高并发稳定性强:LVS基于内核工作,有超强的承载能力和并发处理能力,而且工作在网络4层之上仅
- 作分发之用,这个特点也决定了它的性能最强,稳定性最好,对内存和cpu资源消耗极低。单台LVS负载
- 均衡器,可支持上万并发连接。
- 2.成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,
- 性价比极高。
- 3.配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理。
- 4.支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用
- 5.支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题。
复制代码 应用范围广:因为LVS工作在4层,以是它几乎可以对所有应用做负载平衡,包括http、数据库、DNS、ftp服务等等
(2)不足
工作在4层,不支持7层规则修改,不适合小规模应用。
2、LVS 核心组件和专业术语
(1)核心组件
- LVS的管理工具和内核模块 ipvsadm/ipvs
- ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等;
- ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发;
复制代码 (2)专业术语
- VS:Virtual Server #虚拟服务器
- Director, Balancer #负载均衡器、分发器
- RS:Real Server #后端请求处理服务器
- CIP: Client IP #客户端IP
- VIP:Director Virtual IP #负载均衡器虚拟IP(接收请求的公网IP)
- DIP:Director IP #负载均衡器IP
- RIP:Real Server IP #后端请求处理服务器IP
复制代码 (3)详细图解
3、LVS负载平衡工作模式
- LVS/NAT:网络地址转换模式,进站/出站的数据流量经过分发器
- (IP负载均衡,修改目标主机的IP地址) --利用三层功能
- LVS/DR :直接路由模式,只有进站的数据流量经过分发器
- (数据链路层负载均衡,修改目标主机的mac地址)--利用二层功能mac地址
- LVS/TUN: 隧道模式,只有进站的数据流量经过分发器
- FULL-NAT模式(了解)
复制代码 LVS 四种工作模式原理、以及优缺点比较
1、NAT模式(VS-NAT)
- 原理:
- (1)客户端访问集群的VIP,请求WEB资源(请求报文:源地址为CIP,目标地址为VIP);
- (2)Director(负载均衡器)收到请求后,修改请求报文的目标地址为web服务器IP(RIP),并且将请求根据相应的调度算法送往后端WEB服务器(请求报文:源地址CIP,目标地址为RIP);
- (3)WEB服务器收到请求,检查报文是访问自己的而自己也提供WEB服务,就会响应这个请求报文,并发送给Director(响应报文:源地址RIP,目标地址CIP);
- (4)Director收到WEB服务器的响应报文,根据内部追踪机制确定该响应是针对哪个客户端的VIP请求,此时会修改源地址为VIP并响应客户端请求(响应报文:源地址VIP,目标地址CIP)。期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器。
-
- 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址(公网IP),减少了 IP 地址的需求。
- 缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器,速度就会变慢!一般要求10-20台节点
复制代码
2、直接路由(Direct routing)模式(VS-DR)
VS-DR 是一种高效的负载平衡实现方式,尤其实用于需要高性能且服务器位于同一物理网段的场景。然而,它对于网络拓扑有肯定的要求,这大概限定了其实用范围。
- 1. 原理
- (1)数据包转发
- 负载均衡器 (Director) 和实际服务器 (Real Server, RS) 共享同一个虚拟IP地址 (VIP)。
- 客户端向VIP发送请求时,负载均衡器对VIP的ARP请求作出响应,而所有RS对VIP的 ARP 请求保持静默。
- 负载均衡器接收到请求后,根据调度算法确定转发给哪个RS,并修改数据包的目标MAC地址为选定RS的MAC地址。
- (2)应答包返回
- RS处理完请求后,直接使用VIP作为源IP地址将应答包发送回客户端,因为VIP与RS的真实IP地址相同。
- 2. 优点
- (1)高效的数据包转发:无需额外的封装和解封装过程,提高了数据包转发效率。
- (2)灵活的操作系统支持:大多数现代操作系统均能支持 VS-DR 模式。
- (3)避免隧道开销:不需要使用隧道技术,降低了网络通信的复杂度和开销。
- 3. 不足
- (1)物理位置限制:负载均衡器和实际服务器必须位于同一物理网段内。
- (2)配置复杂性:需要确保所有RS都不响应VIP的ARP请求,可能增加额外配置步骤。
- (3)维护难度:添加或移除实际服务器时可能需要重新配置网络设置。
- 4. 使用场景
- (1)适合高性能负载均衡:适用于需要直接路由应答包回客户端的情况。
- (2)对延迟敏感的应用程序和服务:例如游戏服务器、实时交易系统等。
复制代码 3、IP隧道(Tunnel)模式(VS-TUN)
VS-TUN 模式实用于需要处理大量数据流量且 RS 分布在差别地理位置的场景。它通过淘汰负载平衡器的数据处理负担来进步整体性能,并允许 RS 直接向客户端发送应答,从而实现高效的服务提供。然而,它也要求 RS 具备肯定的配置和技术支持。
- 1. 原理
- (1)数据包封装
- 客户端向虚拟 IP (VIP) 发送请求时,负载均衡器接收请求并选择一个实际服务器 (RS)。负载均衡器将
- 原始数据包封装在一个新的IP包中,新包的头部包含实际服务器的IP地址作为目的IP,负载均衡器的 IP 地址作为源 IP。
- (2)数据包解封装与应答
- RS 收到封装的数据包后,解封装得到原始请求数据包。RS处理请求后,直接将应答包发回客户端,无需再经过负载均衡器。
- 2. 优点
- (1)减少负载均衡器负担
- 负载均衡器只处理请求包,应答包由 RS 直接发送给客户端,减少了负载均衡器的数据流,使其不再是系统瓶颈。
- (2)地理分布:通过互联网传输数据包,可以实现跨地域的负载均衡。
- (3)高可扩展性:一台负载均衡器能为大量 RS 进行分发,适合处理巨大请求量。
- 3. 缺点
- (1)IP资源需求:每个 RS 都需要一个合法的 IP 地址。
- (2)操作系统兼容性:RS 必须支持 IP Tunneling 协议,这意味着需要运行特定版本的 Linux 或其他支持此功能的操作系统。
- (3)额外配置:RS 上需要配置隧道功能,增加了管理复杂性。
- 4. 使用场景
- (1)跨地域负载均衡:适用于需要在全球范围内提供服务的场景。
- (2)高流量应用:适合处理大量请求和大体积应答数据的应用。
- (3)高性能要求:适用于需要高性能负载均衡且服务器分布广泛的情况。
复制代码
4、LVS三种模式NAT、DR和TUN的区别
- lvs-nat:请求和响应报文都经由Director负载均衡器
- lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
复制代码 5、LVS ipvsadm 命令
1、LVS-server安装lvs管理软件
2、命令选项
- -A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
- -a --add-server #在服务器表中添加一条新的真实主机记录
- -t --tcp-service #说明虚拟服务器提供tcp服务
- -u --udp-service #说明虚拟服务器提供udp服务
- -r --real-server #真实服务器地址
- -m --masquerading #指定LVS工作模式为NAT模式
- -w --weight #真实服务器的权值
- -g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
- -s --scheduler #使用的调度算法,默认调度算法是 wlc
-
- 固定调度算法:rr,wrr,dh,sh
- 即调度器不会去判断后端服务器的繁忙与否,一如既往得将请求派发下去。
- 动态调度算法:wlc,lc,sed,nq,lblc,lblcr
- 调度器会去判断后端服务器的繁忙程度,然后依据调度算法动态得派发请求。
- #常用的算法是:rr、wrr、wlc、lc
-
- -C -clear #清除内核虚拟服务器表中的所有记录。
- -S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
- -d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
- -L|-l –list #显示内核虚拟服务器表
- -n --numeric, :#以数字形式输出地址和端口号
复制代码 4、LVS-DR模式负载平衡集群实战
1. 情况预备
(1)预备假造机
预备 3 台纯净的假造机,两台 web 服务器
(2)LVS-server 安装lvs管理软件
- [root@lvs-server ~]# yum -y install ipvsadm
- 程序包:ipvsadm(LVS管理工具)
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save > /path/to/file
- 配置文件:/etc/sysconfig/ipvsadm-config
复制代码 (3)LVS/DR 模式
- DR模式的组网要求LVS和Real server在同一网段二层互通。因为LVS DR模式在负载均衡转发报文时,只修改目的mac为real server的mac,lvs要能将报文转发给real server,就必须满足LVS和real server是同网段二层互通。
复制代码 实验说明:1.网络使用NAT模式2.DR模式要求Director DIP 和 所有RealServer RIP必须在同一个网段及广播域
所有节点网关均指定真实网关
2. LVS/DR模式实施
预备工作(集群中所有主机)关闭防火墙和selinux
- [root@lvs-server ~]# cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.246.166 lvs-server
- 192.168.246.161 real-server1
- 192.168.246.162 real-server2
复制代码 Director分发器配置
配置VIP
- [root@lvs-server ~]# ip addr add dev ens33 192.168.246.160/32 #设置VIP
- [root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用
- [root@lvs-server ~]# service ipvsadm start #启动(RHCL6)
- 注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
- 需要手动生成文件
- [root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
-
- 为什么RS上lo配置的VIP掩码为32位
- 这是由于lo设备的特殊性导致, 如果lo绑定VIP/24,则该设备会响应该网段所有IP(192.168.246.0-254)的请求,而不是只响应192.168.246.160这一个地址。,就算是不设置为32也是可以的,只不过会影响访问
复制代码 界说LVS分发计谋
- -A:添加VIP
- -t:用的是tcp协议
- -a:添加的是lo的vip地址
- -r:转发到real-serve rip
- -s:算法
- -L|-l –list #显示内核虚拟服务器表
- --numeric, -n:#以数字形式输出地址和端口号
- -g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
- -S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
- rr:轮询算法
- 如果添加ip错了,删除命令如下:
- # ip addr del 192.168.246.193 dev ens33
- [root@lvs-server ~]# ipvsadm -C #清除内核虚拟服务器表中的所有记录。
- [root@lvs-server ~]# ipvsadm -A -t 192.168.246.160:80 -s rr
- [root@lvs-server ~]# ipvsadm -a -t 192.168.246.160:80 -r 192.168.246.161 -g
- [root@lvs-server ~]# ipvsadm -a -t 192.168.246.160:80 -r 192.168.246.162 -g
- [root@lvs-server ~]# service ipvsadm save #保存方式一,版本7已不支持
- [root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式二,保存到一个文件中
- [root@lvs-server ~]# ipvsadm -ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 192.168.246.160:80 rr
- -> 192.168.246.161:80 Route 1 0 0
- -> 192.168.246.162:80 Route 1 0 0
- [root@lvs-server ~]# ipvsadm -L -n
复制代码 所有RS配置
配置好网站服务器,测试所有RS #为了测试效果,提供差别的页面(两台real-server都操作,以下以real-server1为例)
- ~]# yum install -y nginx
- ~]# echo "real-server1" >> /usr/share/nginx/html/index.html
- 两台机器都安装,按顺序添加不同的主机名以示区分
- ~]# ip addr add dev lo 192.168.246.160/32 #在lo接口上绑定VIP
- ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp广播
- ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #匹配精确ip地址回包
- ~]# systemctl start nginx
- ~]# systemctl enable nginx
- =============================================================================
- 因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送
- arp广播需找vip时需要让realServer不接受响应.
- 解决:
- echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore
- arp_ignore 设置为1,意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,
- 就不做出响应(这个ip在lo上,lo不是接收设备的进口)
- echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce
- 使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的
复制代码 测试
- # yum install -y elinks
- # elinks -dump http://192.168.246.160 #--dump:非交互式模式
- # elinks -dump http://192.168.246.160 #交互式
复制代码 5、Linux内核模块
- 查看linux已加载的内核模块
- [root@sql-review ~]# lsmod
- 加载与卸载内核模块
- [root@sql-review ~]# modprobe ip_vs
- #动态加载ip_vs 模块,这个命令只是临时生效,需要添加到开机启动项目里面
- [root@sql-review ~]# lsmod | grep ip_vs #过滤模块是否加载成功!
- [root@sql-review ~]# modprobe -r ip_vs #动态卸载ip_vs模块
- 查看内核模块信息
- [root@sql-review ~]# modinfo ip_vs
- 设置开机启动项
- [root@sql-review ~]# echo "modprobe ip_vs" >> /etc/rc.local
- [root@sql-review ~]# chmod +x /etc/rc.local 切记添加执行权限
- 添加到开机启动项里面如果不需要这个模块的时候只需要将etc/rc.local里面对应的命令删除掉。但是这样需要重新启动服务器。 可以通过下面的命令立即生效。
复制代码 6、LVS-NAT模式实战
LVS-NAT网络拓扑
建议:先在Real Server安装如nginx(两台机器real-server)
- [root@real-server1 ~]# yum install -y nginx
- [root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html
- 两台机器都安装,按顺序添加不同的主机名以示区分
复制代码 LVS/NAT模式实施
1、预备工作
(集群中所有主机)[可选]每台机器都需要做
- [root@lvs-server ~]# cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.246.166 lvs-server
- 192.168.246.161 real-server1
- 192.168.246.162 real-server2
复制代码 2、RS配置
real-server所有服务器---默认网关均指向Directory的DIP
- ~]# route add default gw 192.168.246.166 dev ens33
复制代码 最好是将real-server的ip设置成静态ip。网关设置为Directory的Dip。
3、Director分发器配置
先给LVS服务器新添加一块网卡网络模式设置为桥接模式。会自动生成一个ip,做为VIP。
- [root@lvs-server ~]# ip addr add dev ens37 192.168.50.128/24 #设置VIP
- [root@lvs-server ~]# vim /etc/sysctl.conf #开启路由转发
- net.ipv4.ip_forward = 1
- [root@lvs-server ~]#sysctl -p #让路由转发生效
- #NAT模式是把请求报文的目标VIP修改为RIP,然后转发给real server。所以整个director的
- 功能有点像路由器。centos默认是不开启转发功能,所以需要激活ip转发功能。
复制代码 界说LVS的分发计谋
- [root@lvs-server ~]# yum install -y ipvsadm #RHEL确保LoadBalancer仓库可用
- [root@lvs-server ~]# service ipvsadm start #启动
- [root@lvs-server ~]# ipvsadm -A -t 192.168.50.128:80 -s rr
- [root@lvs-server ~]# ipvsadm -a -t 192.168.50.128:80 -r 192.168.246.161 -m
- [root@lvs-server ~]# ipvsadm -a -t 192.168.50.128:80 -r 192.168.246.162 -m
- [root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm #保存方式一
- [root@lvs-server ~]# service ipvsadm save #保存方式二,使用上面的保存方式
- [root@lvs-server ~]# ipvsadm -Ln
- IP Virtual Server version 1.2.1 (size=4096)
- Prot LocalAddress:Port Scheduler Flags
- -> RemoteAddress:Port Forward Weight ActiveConn InActConn
- TCP 192.168.50.128:80 rr
- -> 192.168.246.161:80 Masq 1 1 3
- -> 192.168.246.162:80 Masq 1 1 3
复制代码 4、测试
7、LVS的调度算法
LVS的调度算法分为静态与动态两类。
1、静态算法(4种)
只根据算法进行调度 而不思量后端服务器的现实连接情况和负载情况
①RR:轮询调度(Round Robin)(轮叫)
②WRR:加权轮叫(Weight RR)
- 调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
复制代码 ③DH:目标地址散列调度(Destination Hash )
- 将同样的请求发送给同一个server,一般用于缓存服务器.即将同一类型的请求分配给同一个后端服务器,例如将以 .jgp、.png等结尾的请求转发到同一个节点。这种算法其实不是为了真正意义的负载均衡,而是为了资源的分类管理。这种调度算法主要应用在使用了缓存节点的系统中,提高缓存的命中率。
复制代码 ④SH:源地址 hash(Source Hash)
- 源地址散列”调度算法根据请求的源IP地址,
- 简单的说就是有将同一客户端的请求发给同一个real server,如果后端服务器工作正常没有超负荷的话。这可以解决session共享的问题,但是这里有个问题,很多企业、社区、学校都是共用的一个IP,这将导致请求分配的不均衡。
复制代码 2、动态算法(6种)
前端的调度器会根据后端真实服务器的现实连接情况来分配哀求
① LC:最少链接(Least Connections)
- 调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。
复制代码 ② WLC:加权最少连接(默认接纳的就是这种)(Weighted Least Connections)
- 根据Real Server 权重值,选择连接数最少的服务器。
复制代码 ③ SED:最短期望延迟调度(Shortest Expected Delay )
- 不考虑非活动连接,谁的权重大,我们优先选择权重大的服务器来接收请求,但会出现问题,就是权重比较大的服务器会很忙,但权重相对较小的服务器很闲,甚至会接收不到请求,所以便有了下面的算法nq。
复制代码 ④ NQ:永不排队/最少队列调度(Never Queue Scheduling NQ)
- 无需队列。如果有台realserver的连接数=0就直接分配过去,保证不会有一个主机很空间。
复制代码 ⑤ LBLC:基于局部性的最少链接(locality-Based Least Connections)
基于局部性的最少链接”调度算法是针对目标IP地址的负载平衡,目前主要用于Cache集群系统。该算法根据哀求的目标IP地址找出该目标IP地址近来使用的服务器,若该服务器是可用的且没有超载,将哀求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将哀求发送到该服务器。
⑥ LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载平衡,目前主要用于Cache集群系统。它与LBLC算法的差别之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据哀求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将哀求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器参加到服务器组中,将哀求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
keepalived 高可用
1. Keepalived简介
- 1.keepalived
- keepalived是一款基于VRRP协议实现高可用性的工具,确保服务在主节点故障时无缝切换到
- 备用节点。VRRP通过竞选机制选举Master和Backup,主节点通过发送心跳包保持服务状态,当主节
- 点失效,Backup接管服务。
- 2.VRRP
- VRRP(Virtual Router Redundancy Protocol):虚拟路由冗余协议,解决静态网关单点故障风险,
- 它能够保证当个别节点宕机时,整个网络可以不间断地运行。
- 3.工作过程
- (1)虚拟路由器中的路由器根据优先级选举出Master,Master通过发送ARP报文,将自己的虚拟MAC
- 地址发送给其它设备和主机
- (2)Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状态
- (3)如果Master路由器出现故障, 虚拟路由器的backup路由器根据优先级重新选举新的Master
- (4)虚拟路由器状态切换时,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和IP
- 地下信息的ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息,网络中的主机感知不到Master的切换
- (5)backup路由器优先级高于master路由器时,由backup路由的工作方式(抢占或非抢占方式)决定
- 是否重新选举Master
- VRRP优先级的取值范围为0-255(数值越大优先级越高),可配置的范围为1到254,优先级0为系统保留
- 给路由器放弃master位置时使用,255则是系统保留给IP地址拥有者使用,当路由器为IP地址拥有者时,
- 其优先级始终为255,当虚拟路由器拥有虚拟IP地址时,只要其工作正常,则为Master路由器。
- 4.工作模块
- keepalived三个主要模块:core、check和vrrp。
- core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。
- check负责健康检查,包括常见的各种检查方式。
- vrrp模块实现VRRP协议的。
- 5.脑裂:
- Keepalived的BACKUP主机在收到不MASTER主机报文后会切换成为master,如果是它们之间的通信线
- 路出现问题,无法接收到彼此的组播通知,但两个节点实际都处于正常工作状态,这时两个节点均为master
- 强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。
- 原因
- 网络故障:网络中断、路由器故障等导致集群的一部分节点无法与其他节点通信。
- 网络延迟:极端的网络延迟也可能导致节点之间的通信超时,从而被误认为是节点宕机或网络分区。
- 解决方式
- a. 添加更多的检测手段,通过其他网络路径(如物理网卡、额外的网络接口)来互相ping对方,或通过
- 其他协议(如TCP连接)来进行检测,以减少脑裂的发生概率。(指标不治本,只是提高了检测到的概率);
- b. 爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信
- keepalived两种模式:抢占式(默认)和非抢占式
- 抢占模式下,master节点恢复后会重新接管服务,而非抢占模式则保持故障转移后的状态,master节
- 点恢复后变为backup。
- keepalived默认工作在抢占模式preemp。在抢占模式中,主节点的state设为MASTER,备节点的
- state设为BACKUP,主节点的优先级要比备节点的优先级要高。
- 非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP,一个节点的优先级要比另一个节
- 点的优先级要高,同时高优先级的节点设置nopreempt参数,该参数表示不抢占vip。
复制代码 keepalived配置详解
- # cat /etc/keepalived/keepalive.conf
- global_defs { #全局定义块
- router_id MySQL-HA-1 #用户标识本节点的名称,主备节点要不一致
- }
-
- vrrp_script check_mysql { #应用状态检查
- script "/etc/keepalived/check_mysql.sh" #mysql数据库状态检查脚本
- interval 30 #检查间隔时间
- }
-
- vrrp_instance VI_1 { #定义一个vrrp_install实例,名称为VI_1
- state BACKUP #表示该实例的角色状态,有MASTER和BACKUP两种主备状态。
- interface ens192 #对外提供服务的网络接口,如eth0,ens33,ens192
- virtual_router_id 101 #虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致,否则将出现脑裂问题。
- priority 120 #priority表示实例优先级。数字越大,优先级越高。
- advert_int 1 #advert_int为同步通知间隔。主备之间通信检查的时间间隔,默认为1秒。
- nopreempt #nopreempt允许一个priority比较低的节点作为master,即使有priority更高的节点启动。
- authentication { #权限认证配置,下方2行参数。
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress { #虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中需要和域名绑定的ip,即可配置的高可用服务监听的ip保持一致。
- 10.0.0.101 dev ens33
- }
- track_script { #可以在keepalived.conf文件中定义的脚本,用以实现某个检测功能;
- check_mysql #此处调用check_mysql中的脚本。
- }
- }
- MySQL检查脚本:查运行在 3306 端口上的 MySQL 服务器进程是否正在运行
- cat /etc/keepalived/check_mysql.sh
-
- #!/bin/bash
- mysql_proc_3306=`ps aux | grep -v grep | grep "bin/mysqld" | grep -c "port=3306"`
- if [[ $mysql_proc_3306 -eq 1 ]]
- then
- exit 0
- else
- exit 1
复制代码 2. Nginx+keepalived实现七层的负载平衡(同类服务)
- Nginx通过Upstream模块实现七层负载均衡,通过stream模块实现四层负载均衡
复制代码 (1)upstream 支持的负载平衡算法
- 轮询(默认):可以通过weight指定轮询的权重,权重越大,被调度的次数越多
- ip_hash:可以实现会话保持,将同一客户的IP调度到同一样后端服务器,可以解决session的问题,不能使用weight
- fair:可以根据请求页面的大小和加载时间长短进行调度,使用第三方的upstream_fair模块
- url_hash:按请求的url的hash进行调度,从而使每个url定向到同一服务器,使用第三方的url_hash模块
复制代码 (2)nginx负载平衡配置状态参数
- down,表示当前的server暂时不参与负载均衡。
- backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
- max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。
- fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails 可以和 fail_timeout一起使用。
复制代码- 配置安装nginx 所有的机器,关闭防火墙和selinux
- [root@nginx-proxy ~]# cd /etc/yum.repos.d/
- [root@nginx-proxy yum.repos.d]# vim nginx.repo
- [nginx-stable]
- name=nginx stable repo
- baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
- gpgcheck=0
- enabled=1
- [root@nginx-proxy yum.repos.d]# yum install yum-utils -y
- [root@nginx-proxy yum.repos.d]# yum install nginx -y
- 调度到不同组后端服务器
- 网站分区进行调度
复制代码- =================================================================================
-
- 拓扑结构
复制代码- [vip: 20.20.20.20]
-
- [LB1 Nginx] [LB2 Nginx]
- 192.168.1.2 192.168.1.3
-
- [index] [milis] [videos] [images] [news]
- 1.11 1.21 1.31 1.41 1.51
- 1.12 1.22 1.32 1.42 1.52
- 1.13 1.23 1.33 1.43 1.53
- ... ... ... ... ...
- /web /web/milis /web/videos /web/images /web/news
- index.html index.html index.html index.html index.html
复制代码- 1、选择两台nginx服务器作为代理服务器。
- 2、给两台代理服务器安装keepalived制作高可用生成VIP
- 3、配置nginx的负载均衡
- 以上两台nginx服务器配置文件一致
- 根据站点分区进行调度
- 配置upstream文件
- [root@nginx-proxy ~]# cd /etc/nginx/conf.d/
- [root@nginx-proxy conf.d]# cp default.conf proxy.conf
- [root@nginx-proxy conf.d]# mv default.conf default.conf.bak
- [root@nginx-proxy conf.d]# vim upstream.conf
- upstream index {
- server 192.168.246.162:80 weight=1 max_fails=2 fail_timeout=2;
- server 192.168.246.163:80 weight=2 max_fails=2 fail_timeout=2;
- }
- [root@nginx-proxy conf.d]# vim proxy.conf
- server {
- listen 80;
- server_name localhost;
- access_log /var/log/nginx/host.access.log main;
-
- location / {
- proxy_pass http://index;
- proxy_redirect default;
- proxy_set_header Host $http_host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
- }
- 将nginx的配置文件拷贝到另一台代理服务器中:
- [root@nginx-proxy conf.d]# scp proxy.conf 192.168.246.161:/etc/nginx/conf.d/
- [root@nginx-proxy conf.d]# scp upstream.conf 192.168.246.161:/etc/nginx/conf.d/
复制代码 3. KeepAlived实现LVS-DR四层负载
- KeepAlived在该项目中的功能:
- 1. 管理IPVS的路由表(包括对RealServer做健康检查)
- 2. 实现调度器的HA(High Availability高可用性)
- http://www.keepalived.org
- Keepalived所执行的外部脚本命令建议使用绝对路径
复制代码 4、数据库高可用
- [root@mysql-keep-master ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
- [root@mysql-keep-master ~]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
- [root@mysql-keep-master ~]# yum -y install yum-utils #安装yum工具包
- [root@mysql-keep-master ~]# vim /etc/yum.repos.d/mysql-community.repo
复制代码
- 安装mysql
- [root@mysql-keep-master ~]# yum install -y mysql-community-server
- [root@mysql-keep-master ~]# systemctl start mysqld
- [root@mysql-keep-master ~]# systemctl enable mysqld
- 修改密码
- [root@mysql-keep-master ~]# grep pass /var/log/mysqld.log
- 2020-02-18T13:54:25.706635Z 1 [Note] A temporary password is generated for root@localhost: %baWi=4!NsT)
- [root@mysql-keep-master ~]# mysqladmin -uroot -p'%baWi=4!NsT)' password 'QianFeng@123!'
- 制作互为主从:
- [root@mysql-keep-master ~]# vim /etc/my.cnf #编辑配置文件开启gtid
- log-bin=m1.log
- server-id=1
- gtid_mode = ON #开启gtid
- enforce_gtid_consistency=1 #强制gtid移植性
- [root@mysql-keep-master ~]# systemctl restart mysqld
- [root@mysql-keep-master ~]# mysql -uroot -p'QianFeng@123!' #登录数据库
- mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'QianFeng@123'; #创建远程登录用户
- mysql> flush privileges;
- mysql> grant replication slave,reload,super on *.* to 'slave'@'%' identified by 'QianFeng@123'; ---创建主从授权用户
- mysql> flush privileges; #刷新授权
- mysql> \e #指定主服务器信息
- CHANGE MASTER TO
- MASTER_HOST='192.168.58.136', #指定主服务器的ip或者主机名
- MASTER_USER='slave', #授权用户
- MASTER_PASSWORD='QianFeng@123', #授权用户密码
- master_auto_position=1
- -> ;
- 启动slave
- mysql> start slave;
- [root@mysql-keep-backup ~]# vim /etc/my.cnf
- log-bin=m2.log
- server-id=2
- gtid_mode = ON
- enforce_gtid_consistency=1
- [root@mysql-keep-backup ~]# systemctl restart mysqld
- [root@mysql-keep-backup ~]# mysql -uroot -p'QianFeng@123!'
- mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'QianFeng@123';
- mysql> flush privileges;
- mysql> grant replication slave,reload,super on *.* to 'slave'@'%' identified by 'QianFeng@123';
- mysql> flush privileges;
- 指定主服务器信息
- mysql> \e
- CHANGE MASTER TO
- MASTER_HOST='192.168.58.135',
- MASTER_USER='slave',
- MASTER_PASSWORD='QianFeng@123',
- master_auto_position=1
- -> ;
- 启动slave
- mysql> start slave;
复制代码- mysql> show slave status\G
复制代码 两台机器安装keepalived
- [root@mysql-keep-master ~]# yum -y install keepalived
- [root@mysql-keep-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
- [root@mysql-keep-master ~]# vim /etc/keepalived/keepalived.conf
- ! Configuration File for keepalived
-
- global_defs {
- router_id master1
- }
-
- vrrp_instance VI_1 {
- state MASTER
- interface ens33
- virtual_router_id 80
- priority 100
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.58.16/24
- }
- }
- 将配置文件拷贝到backup机器
- [root@mysql-keep-backup ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
- [root@mysql-keep-master ~]# scp /etc/keepalived/keepalived.conf 192.168.58.136:/etc/keepalived/
- [root@mysql-keep-backup ~]# vim /etc/keepalived/keepalived.conf #修改如下
- ! Configuration File for keepalived
-
- global_defs {
- router_id backup1
- }
-
- vrrp_instance VI_1 {
- state BACKUP
- interface ens33
- virtual_router_id 80
- priority 50
- advert_int 1
- authentication {
- auth_type PASS
- auth_pass 1111
- }
- virtual_ipaddress {
- 192.168.58.16/24
- }
- }
- 两台机器启动keepalived
- [root@mysql-keep-master ~]# systemctl start keepalived
- [root@mysql-keep-backup ~]# systemctl start keepalived
- [root@mysql-keep-master ~]# ip a #vip在master上面
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
- link/ether 00:0c:29:92:0a:64 brd ff:ff:ff:ff:ff:ff
- inet 192.168.58.135/24 brd 192.168.58.255 scope global dynamic ens33
- valid_lft 1729sec preferred_lft 1729sec
- inet 192.168.58.16/24 scope global secondary ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::86f4:1d74:ad05:c61c/64 scope link
- valid_lft forever preferred_lft forever
- 测试:
- [root@mysql-keep-master ~]# mysql -uroot -p'QianFeng@123' -h 192.168.58.16 #登录vip
- mysql> create database test1;
- Query OK, 1 row affected (0.07 sec)
-
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | test1 |
- +--------------------+
- 5 rows in set (0.08 sec)
- 验证
- [root@mysql-keep-backup ~]# mysql -uroot -p'QianFeng@123!'
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | test1 |
- +--------------------+
- 5 rows in set (0.12 sec)
- [root@mysql-keep-master ~]# systemctl stop keepalived #关闭master
- [root@mysql-keep-backup ~]# ip a #vip切换backup机器
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- inet 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
- link/ether 00:0c:29:a2:0f:5c brd ff:ff:ff:ff:ff:ff
- inet 192.168.58.136/24 brd 192.168.58.255 scope global dynamic ens33
- valid_lft 1547sec preferred_lft 1547sec
- inet 192.168.58.16/24 scope global secondary ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::af6e:2eff:e2d1:99cb/64 scope link
- valid_lft forever preferred_lft forever
- 测试登录
- [root@mysql-keep-master ~]# mysql -uroot -p'QianFeng@123' -h 192.168.58.16
复制代码 四、Haproxy 基础
HAProxy提供高可用性、负载平衡以及基于TCP和HTTP的应用署理,支持假造主机,它是免费、快速并且可靠的一种负载平衡解决方案。适合处理高负载站点的七层数据哀求。类似的署理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
- haproxy---主要是做负载均衡的7层,也可以做4层负载均衡
- apache也可以做7层负载均衡,但是很麻烦。实际工作中没有人用。
- 7层负载均衡:用的7层http协议,
- 4层负载均衡:用的是tcp协议加端口号做的负载均衡
-
- ha-proxy概述
- ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与
- nginx比起来在负载均衡这件事情上做更好,更专业。
-
- ha-proxy负载均衡软件的优点:
- 1.双层协议支持:
- 支持第 4 层 (TCP) 和第 7 层 (HTTP) 负载均衡。
- 2.支持8种左右的负载均衡算法:
- 支持多种算法,如轮询、最少连接数、源地址散列等,并支持会话保持。
- 3.高性能
- 单进程设计保证了出色的性能表现。
- 4.直观的监控界面
- 提供详细的实时统计页面。
- 5.灵活的访问控制
- 强大的 ACL 支持,便于定制规则。
- 6.SSL/TLS 加密支持
- 支持客户端和服务端的 SSL/TLS 加密。
- 7.多用途应用
- 可用于 Web、数据库、邮件和其他服务的负载均衡。
- 8.虚拟主机支持
- 根据 Host 头字段进行路由,支持多个网站共存。
- haproxy算法:
- 1.Round Robin (轮询)
- 动态分配请求到后端服务器,依据权重进行循环调度。
- 后端服务器的权重可以动态调整,每台服务器最多处理 4128 个连接。
- 2.Static Round Robin (静态轮询)
- 静态方式分配请求。基于权重进行循环调度,运行时调整权重无效,
- 对后端服务器的连接数无限制。
- 3.Least Connections (最少连接)
- 新请求分发给连接数最少的服务器,确保最轻负载的服务器优先接收新连接。
复制代码 1、Haproxy 实现七层负载高可用
- Keepalived + Haproxy
- =================================================================================
- /etc/haproxy/haproxy.cfg
- global # 关于进程的全局参数
- log 127.0.0.1 local2 info #日志服务器
- pidfile /var/run/haproxy.pid #pid文件
- maxconn 4000 #最大连接数
- user haproxy #用户
- group haproxy #组
- daemon #守护进程方式后台运行
- nbproc 1 #工作进程数量 cpu内核是几就写几
- defaults 段用于为其它配置段提供默认参数
- listen是frontend和backend的结合体
-
- frontend 虚拟服务VIrtual Server
- backend 真实服务器Real Server
- Keepalived + Haproxy
- =================================================================================
- 拓扑结构
-
- [vip: 192.168.246.17]
-
- [LB1 Haproxy] [LB2 Haproxy]
- 192.168.246.169 192.168.246.161
-
- [httpd] [httpd]
- 192.168.246.162 192.168.246.163
复制代码- 一、Haproxy实施步骤
- 1. 准备工作(集群中所有主机)
- [root@ha-proxy-master ~]# cat /etc/hosts
- 127.0.0.1 localhost
- 192.168.246.169 ha-proxy-master
- 192.168.246.161 ha-proxy-slave
- 192.168.246.162 test-nginx1
- 192.168.246.163 test-nginx2
- 2. RS配置
- 配置好网站服务器,测试所有RS,所有机器安装nginx
- [root@test-nginx1 ~]# yum install -y nginx
- [root@test-nginx1 ~]# systemctl start nginx
- [root@test-nginx1 ~]# echo "test-nginx1" >> /usr/share/nginx/html/index.html
- # 所有nginx服务器按顺序输入编号,方便区分。
- 3. 调度器配置Haproxy(主/备)都执行
- ~]# yum -y install haproxy
- ~]# cp -rf /etc/haproxy/haproxy.cfg{,.bak}
- ~]# sed -i -r '/^[ ]*#/d;/^$/d' /etc/haproxy/haproxy.cfg #移除空白字符、注释和空行
- ~]# vim /etc/haproxy/haproxy.cfg
- # 全局设置
- global
- # 日志配置,发送到本地主机的 local2 设施上,级别为 info
- log 127.0.0.1 local2 info
- # 进程 ID 文件的位置
- pidfile /var/run/haproxy.pid
- # 最大连接数(优先级低),当有更高优先级的 maxconn 设置时,该设置会被覆盖
- maxconn 4000
- # 运行 HAProxy 的用户
- user haproxy
- # 运行 HAProxy 的组
- group haproxy
- # 使 HAProxy 以后台方式运行
- daemon
- # 设置工作进程的数量,通常建议与 CPU 核心数相同
- nbproc 1
- # 默认设置
- defaults
- # 工作模式 HTTP,TCP在4层
- mode http
- # 使用全局日志配置
- log global
- # 健康检查,3 次连接失败就认为服务器不可用
- retries 3
- # 服务不可用后重定向到其他健康的服务器
- option redispatch
- # 最大连接数(优先级中)
- maxconn 4000
- # HAProxy 与后端服务器连接超时时间,单位毫秒 ms
- contimeout 5000
- # 客户端数据接收超时时间
- clitimeout 50000
- # 后端服务器响应超时时间
- srvtimeout 50000
- # 监听配置 - 管理界面
- listen stats
- bind *:81 # 绑定到所有 IP 的 81 号端口
- stats enable # 启用统计信息页面
- stats uri /haproxy # 访问统计信息页面的 URI
- stats auth qianfeng:123 # 设置访问统计信息页面所需的用户名和密码
- # 前端监听配置 - web
- frontend web
- mode http # 工作模式 HTTP
- bind *:80 # 监听所有 IP 的 80 号端口
- option httplog # 开启 HTTP 日志记录
- # 创建一个 ACL,匹配 URL 结尾为 .html 的请求
- acl html url_reg -i \.html$
- # 如果请求匹配 .html,则使用后端服务器组 httpservers
- use_backend httpservers if html
- # 默认使用后端服务器组 httpservers
- default_backend httpservers
- # 后端服务器组配置 - httpservers
- backend httpservers
- balance roundrobin # 使用轮询算法分配请求
- # 定义第一个服务器,地址为 192.168.246.162:80,最大连接数为 2000,权重为 1,并启用健康检查
- server http1 192.168.246.162:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
- # 定义第二个服务器,地址为 192.168.246.163:80,最大连接数为 2000,权重为 1,并启用健康检查
- server http2 192.168.246.163:80 maxconn 2000 weight 1 check inter 1s rise 2 fall 2
- 将配置文件拷贝到slave服务器
- [root@ha-proxy-master ~]# scp /etc/haproxy/haproxy.cfg 192.168.246.161:/etc/haproxy/
- 两台机器启动设置开机启动
- [root@ha-proxy-master ~]# systemctl start haproxy
- [root@ha-proxy-master ~]# systemctl enable haproxy
- #check inter 2000 检测心跳频率单位
- #rise 2 2 次正确认为服务器可用
- #fall 2 2 次失败认为服务器不可用
复制代码 测试主/备(浏览器访问)
主:
备:
- 页面主要参数解释
- Queue
- Cur: current queued requests //当前的队列请求数量
- Max:max queued requests //最大的队列请求数量
- Limit: //队列限制数量
-
- Errors
- Req:request errors //错误请求
- Conn:connection errors //错误的连接
-
- Server列表:
- Status:状态,包括up(后端机活动)和down(后端机挂掉)两种状态
- LastChk: 持续检查后端服务器的时间
- Wght: (weight) : 权重
复制代码- 2.测试访问
- 通过访问haparoxy的ip地址访问到后端服务器
- # curl http://192.168.246.169
- 如果出现bind失败的报错,执行下列命令
- setsebool -P haproxy_connect_any=1
复制代码 2、Keepalived实现调度器HA
注:主/备调度器均能够实现正常调度
3、四层署理mysql
- 准备两台机器,关闭防火墙和selinux。
- 1.两台机器部署mysql并制作互为主从----略
- 2.安装haproxy制作代理
- [root@haproxy-server ~]# yum -y install haproxy
- [root@haproxy-server ~]# cp -rf /etc/haproxy/haproxy.cfg{,.bak}
- [root@haproxy-server ~]# sed -i -r '/^[ ]*#/d;/^$/d' /etc/haproxy/haproxy.cfg
- [root@haproxy-server ~]# vim /etc/haproxy/haproxy.cfg
- global
- log 127.0.0.1 local2
- pidfile /var/run/haproxy.pid
- maxconn 4000
- user haproxy
- group haproxy
- daemon
- nbproc 1
- defaults
- mode http
- log global
- option redispatch
- retries 3
- maxconn 3000
- contimeout 5000
- clitimeout 50000
- srvtimeout 50000
- listen stats
- bind *:81
- stats enable
- stats uri /haproxy
- stats auth qianfeng:123
- listen mysql
- bind *:3307
- mode tcp
- balance roundrobin
- server mysql1 192.168.198.149:3306 weight 1 check inter 1s rise 2 fall 2
- server mysql2 192.168.198.150:3306 weight 1 check inter 1s rise 2 fall 2
- [root@haproxy-server ~]# systemctl start haproxy
- [root@haproxy-server ~]# netstat -lntp | grep 3307
- tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 11866/haproxy
-
- 3.验证:
- [root@haproxy-server ~]# mysql -uroot -p'QianFeng@123!' -P 3307
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 6
- Server version: 5.7.31-log MySQL Community Server (GPL)
-
- Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
-
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
-
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
-
- mysql>
复制代码 练习
- 1.lvs的优势有哪些?
- 2.keepalived基于什么协议实现?工作原理是什么?
- 3.lvs有几种工作模式分别是什么?
- 4.haproxy的优点有哪些?
- 5.列出你知道的负载均衡软件有哪些?
- 6.keepalived是一款什么软件?
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |