关于lvs:用eBPFXDP来替代LVS

前文剖析了 LVS 作为负载平衡的原理。随着 eBPF 的倒退,咱们曾经能够将 eBPF/XDP 程序间接部署在一般服务器上来实现负载平衡,从而节俭掉用于专门部署 LVS 的机器。 本文不打算间接到这一步,而是首先看看如何用 eBPF/XDP 依照惯例模式来代替 LVS,也就是说咱们还是将负载平衡程序(software load balance 简称 SLB)部署在专用机器上,只不过不必 LVS,而是用 eBPF/XDP 来实现。 试验步骤创立网络环境# 不同发行版命令不一样systemctl start dockerdocker network create south --subnet 172.19.0.0/16 --gateway 172.19.0.1# checkdocker network inspect south# orip link# 先用 ifconfig 取得刚创立的 network 应的 bridge# 后续则能够在宿主机上抓取这个 network 的所有 IP 包tcpdump -i br-3512959a6150 ip# 也能够取得某个容器的 veth ,抓取这个容器进出的所有包tcpdump -i vethf01d241 ip# 当然,如果是 offload 的模式,则调试的确不易,须要嗅探本地网络的数据包并抓取了# 在容器网络里,咱们尚有宿主机这个上帝视角,在裸机网络里,则可能得去捯饬路由器了 创立两个RSecho "rs-1" > rs1.htmlecho "rs-2" > rs2.htmldocker run -itd --name rs1 --hostname rs1 --privileged=true --net south -p 8888:80 --ip 172.19.0.2 --mac-address="02:42:ac:13:00:02" -v "$(pwd)"/rs1.html:/usr/share/nginx/html/index.html:ro nginx:stabledocker run -itd --name rs2 --hostname rs2 --privileged=true --net south -p 9999:80 --ip 172.19.0.3 --mac-address="02:42:ac:13:00:03" -v "$(pwd)"/rs2.html:/usr/share/nginx/html/index.html:ro nginx:stable# check on hostcurl 127.0.0.1:8888curl 127.0.0.1:9999另:即便是 nginx 对于咱们调试负载平衡也不是足够简略,调试阶段能够用 nc 来进行调试dnf install nc or apt install netcatserver side nc -l -vv -p 5000client side nc 172.19.0.2 5000 ...

April 5, 2023 · 3 min · jiezi

关于lvs:搭建LVSDR模式-使用ipvsadm配置集群规则

创立LVS节点,用户拜访的集群调度者 ipvsadm -A -t 192.168.1.150:80 -s rr -p 5-A:增加集群-t:tcp协定ip地址:设定集群的拜访ip,也就是LVS的虚构ip-s:设置负载平衡的算法,rr示意轮询-p:设置连贯长久化的工夫 创立2台RS实在服务器 ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -gipvsadm -a -t 192.168.1.150:80 -r 192.168.1.172:80 -g-a:增加实在服务器-t:tcp协定-r:实在服务器的ip地址-g:设定DR模式 保留到规定库,否则重启生效 ipvsadm -S查看集群查看集群列表 ipvsadm -Ln查看集群状态 ipvsadm -Ln --stats其余命令: # 重启ipvsadm,重启后须要重新配置service ipvsadm restart# 查看长久化连贯ipvsadm -Ln --persistent-conn# 查看连贯申请过期工夫以及申请源ip和指标ipipvsadm -Lnc# 设置tcp tcpfin udp 的过期工夫(个别放弃默认)ipvsadm --set 1 1 1# 查看过期工夫ipvsadm -Ln --timeout更具体的帮忙文档: ipvsadm -hman ipvsadm

April 13, 2022 · 1 min · jiezi

关于lvs:搭建LVSDR模式-为两台RS配置arp

ARP响应级别与通告行为 的概念 arp-ignore:ARP响应级别(解决申请)0:只有本机配置了ip,就能响应申请1:申请的指标地址达到对应的网络接口,才会响应申请arp-announce:ARP通告行为(返回响应)0:本机上任何网络接口都向外通告,所有的网卡都能承受到通告1:尽可能防止本网卡与不匹配的指标进行通告2:只在本网卡通告配置ARP 关上sysctl.conf: vim /etc/sysctl.conf配置 所有网卡 、 默认网卡 以及 虚构网卡 的arp响应级别和通告行为,别离对应: all , default , lo : # configration for lvsnet.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.default.arp_ignore = 1net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2net.ipv4.conf.default.arp_announce = 2net.ipv4.conf.lo.arp_announce = 2刷新配置文件:减少一个网关,用于接收数据报文,当有申请到本机后,会交给lo去解决: echo "route add -host 192.168.1.150 dev lo:1" >> /etc/rc.local

April 13, 2022 · 1 min · jiezi

关于lvs:搭建LVSDR模式-为两台RS配置虚拟IP

配置虚构网络子接口(回环接口) 进入到网卡配置目录,找到lo(本地环回接口,用户构建虚构网络子接口),拷贝一份新的随后进行批改:批改内容如下:重启后通过ip addr 查看如下,示意ok: ifup lo ip addr

April 13, 2022 · 1 min · jiezi

关于lvs:搭建LVSDR模式-配置LVS节点与ipvsadm

后期筹备 服务器与ip布局:LVS - 1台VIP(虚构IP):192.168.1.150DIP(转发者IP/内网IP):192.168.1.151Nginx - 2台(RealServer)RIP(实在IP/内网IP):192.168.1.171RIP(实在IP/内网IP):192.168.1.172所有计算机节点敞开网络配置管理器,因为有可能会和网络接口抵触: systemctl stop NetworkManagersystemctl disable NetworkManager创立子接口 进入到网卡配置目录,找到咱们的ens33:拷贝并且创立子接口: cp ifcfg-ens33 ifcfg-ens33:1注:数字1为别名,能够任取其余数字都行 批改子接口配置: vim ifcfg-ens33:1配置参考如下:重启网络 service network restart显示这台机器上所有的网卡 ip addr 装置ipvsadm yum install ipvsadm

April 13, 2022 · 1 min · jiezi

就是要你懂负载均衡lvs和转发模式

本文希望阐述清楚LVS的各种转发模式,以及他们的工作流程和优缺点,同时从网络包的流转原理上解释清楚优缺点的来由,并结合阿里云的slb来说明优缺点。如果对网络包是怎么流转的不太清楚,推荐先看这篇基础:程序员的网络知识 -- 一个网络包的旅程,对后面理解LVS的各个转发模式非常有帮助。 几个术语和缩写cip:Client IP,客户端地址vip:Virtual IP,LVS实例IPrip:Real IP,后端RS地址RS: Real Server 后端真正提供服务的机器LB: Load Balance 负载均衡器LVS: Linux Virtual Serversip: source ipdip: destinationLVS的几种转发模式DR模型 -- (Director Routing-直接路由)NAT模型 -- (NetWork Address Translation-网络地址转换)fullNAT -- (full NAT)ENAT --(enhence NAT 或者叫三角模式/DNAT,阿里云提供)IP TUN模型 -- (IP Tunneling - IP隧道)DR模型(Director Routing--直接路由) 如上图所示基本流程(假设 cip 是200.200.200.2, vip是200.200.200.1): 请求流量(sip 200.200.200.2, dip 200.200.200.1) 先到达 LVS然后LVS,根据负载策略挑选众多 RS中的一个,然后将这个网络包的MAC地址修改成这个选中的RS的MAC然后丢给交换机,交换机将这个包丢给选中的RS选中的RS看到MAC地址是自己的、dip也是自己的,愉快地手下并处理、回复回复包(sip 200.200.200.1, dip 200.200.200.2)经过交换机直接回复给client了(不再走LVS)我们看到上面流程,请求包到达LVS后,LVS只对包的目的MAC地址作了修改,回复包直接回给了client。 同时还能看到多个RS和LVS都共用了同一个IP但是用的不同的MAC,在二层路由不需要IP,他们又在同一个vlan,所以这里没问题。 RS上会将vip配置在lo回环网卡上,同时route中添加相应的规则,这样在第四步收到的包能被os正常处理。 优点: DR模式是性能最好的一种模式,入站请求走LVS,回复报文绕过LVS直接发给Client缺点: 要求LVS和rs在同一个vlan;RS需要配置vip同时特殊处理arp;不支持端口映射。为什么要求LVS和RS在同一个vlan(或者说同一个二层网络里)因为DR模式依赖多个RS和LVS共用同一个VIP,然后依据MAC地址来在LVS和多个RS之间路由,所以LVS和RS必须在一个vlan或者说同一个二层网络里 DR 模式为什么性能最好因为回复包不走LVS了,大部分情况下都是请求包小,回复包大,LVS很容易成为流量瓶颈,同时LVS只需要修改进来的包的MAC地址。 DR 模式为什么回包不需要走LVS了因为RS和LVS共享同一个vip,回复的时候RS能正确地填好sip为vip,不再需要LVS来多修改一次(后面讲的NAT、Full NAT都需要) 总结下 DR的结构 ...

July 4, 2019 · 1 min · jiezi

四层负载均衡LVS

高可用的工程系统一定要做流量的负载均衡,软件可做负载均衡位置:DNS,代码中,应用层。DNS受缓存影响;代码中二次转发;基于应用层负载均衡调度的多服务器解决方法也存在一些问题。第一,系统处理开销特别大,致使系统的伸缩性有限。当请求到达负载均衡调度器至处理结束时,调度器需要进行四次从核心到用户空间或从用户空间到核心空间的上下文切换和内存复制;需要进行二次TCP连接,一次是 从用户到调度器,另一次是从调度器到真实服务器;需要对请求进行分析和重写。这些处理都需要不小的CPU、内存和网络等资源开销,且处理时间长。所构成系 统的性能不能接近线性增加的,一般服务器组增至3或4台时,调度器本身可能会成为新的瓶颈。所以,这种基于应用层负载均衡调度的方法的伸缩性极其有限。第 二,基于应用层的负载均衡调度器对于不同的应用,需要写不同的调度器。nginx主要是基于HTTP协议,若对于FTP、Mail、POP3等应用,都需要重写调度器。当然四层也无法做业务相关的负载均衡。IP层 LVS针对高可伸缩、高可用网络服务的需求,我们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。官方:http://www.linuxvirtualserver...逻辑架构 三种IP转发实现方式1.NAT 换目标地址,回来再换一次 2.IP管道。在VIP前加真实IP。回去直接去掉真实IP 3.直接路由。加MAC地址找到对应机器。回去直接去掉MAC地址(局域网中) 4.fullnat全部转为内网(内网负载均衡只能是fullnat)cip 客户端地址 rip 真实服务器地址 lip本地地址 SNAT来源地址转换 部署vip这个是提前申请好放到池子里面的,业务现申请直接使用某个vip,外网lvs一般一个集群是250个vip,内网lvs是520个每台LVS机器都有所有的VIP配置(通过OSPF一个VIP可以有8台副本),把所有VIP的IP都配在机器上。用OSPF实现相同IP随机分配流量 负载均衡算法轮叫调度(Round-Robin Scheduling)加权轮叫调度(Weighted Round-Robin Scheduling)最小连接调度(Least-Connection Scheduling)记录服务器连接数。会有一段时长的TCP_WAIT加权最小连接调度(Weighted Least-Connection Scheduling)基于局部性的最少链接(Locality-Based Least Connections Scheduling)请求IP最近使用服务器+服务器未超载,用于cache带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling) LBLC+LCS.性能和cache的折中目标地址散列调度(Destination Hashing Scheduling)源地址散列调度(Source Hashing Scheduling) DGWdpdk+fullnat的LVSdpdk:加速数据包处理软件,取代传统的Linux内核态驱动 (https://blog.csdn.net/zhaoxin...)

May 14, 2019 · 1 min · jiezi

MySQL集群搭建(4)-MMM+LVS+Keepalived

上篇文章 MySQL集群搭建(3)-MMM高可用架构 介绍了 MMM 高可用集群的搭建方法, 里面有提到 MMM 可以配置多个读 VIP, 今天这篇文章教大家怎么用 LVS 对这些读 VIP 做一个负载均衡。1 LVS 介绍1.1 简介LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS 集群采用 IP 负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。比如说,用 LVS 做 Web 负载均衡,那么请求 LVS 调度器的时候,请求会根据配置的算法分发给后端某台 Web 服务器,后端 Web 服务器机器对于请求者来说是透明的。1.1 LVS 工作模式LVS 包含以下三种常用工作模式1). NAT 模式NAT (Network Address Translation) 即网路地址装换,NAT 的工作原理是更改报文头(目标地址、源地址和端口等)后,转发请求都后端地址。流程如下客户端请求 LVS 的 IPLVS 更改请求的目的 IP,改为后端服务器其中一个 IP,然后转发请求后端服务器处理完,返回数据给 LVS,LVS 更改源 IP 为 LVS 机器的 IP 然后返回给请求端NAT 模式的所有数据都会经过 LVS 服务器,简单来说就是从 LVS 进,从 LVS 出,如图2). TUN 模式在 NAT 的集群系统中,请求和响应的数据报文都需要通过 LVS 服务器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技 术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。我们利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户(要求后端真实服务器与外部网络连接)。TUN 模式工作流程如下:客户端请求数据,调度器根据各个服务器的负载情况,动态地选择一台服务器, 将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发 现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。3). DR 模式DR 模式中,负载调度器中只负责调度请求,而服务器直接将响应返回给客户, DR 模式架构图DR 模式的执行流程如下客户端请求数据,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC 地址改为选出服务器的 MAC 地址,再将修改后 的数据帧在与服务器组的局域网上发送。因为数据帧的 MAC 地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该 IP 报文。当服务器发现 报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。关于三种模式选择NAT模式下,所有流量会经过 LVS 服务器, 很容易有瓶颈;TUN 模式需要内核支持,部署成本比较高;DR模式性能高、容易部署,一般使用这种模式。本小节内容参考: LVS集群中的IP负载均衡技术1.2 LVS 调度算法这里简单介绍 LVS 的 8 种调度算法静态调度轮询调度(rr): 轮询调就是依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。加权轮询(wrr): 加权轮询算法可以解决服务器间性能不一的情况,它用相应的权值表示服务器的处理性能,服务器的缺省权值为1。假设服务器A的权值为1,B的 权值为2,则表示服务器B的处理性能是A的两倍。加权轮询调度算法是按权值的高低和轮叫方式分配请求到各服务器。源地址散列(sh): 该算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。目标地址散列(dh): 该算法也是针对目标IP地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。动态调度最少连接(lc): 最少连接是把新的连接请求分配到当前连接数最小的服务器。加权最少连接(wlc): 加权最少连接算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。基于局部性的最少连接(lblc): 该算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中 客户请求报文的目标IP地址是变化的。带复制的基于局部性最少连接(lblcr): 该算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要 维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。本小节内容参考: LVS集群的负载调度2 Keepalived 简介Keepalived 起初是为 LVS 件设计, 用来管理和监控 LVS 各个服务器节点状态的工具Keepalived 采用 Master/Slave 模式, 在 Master 上设置配置文件的 VIP,当 Master 宕机后,VIP 自动漂移到另一台 Keepalived 服务器上Keepalived 可以用来做各种软件的高可用集群,它会一直检测服务器的状态,如果有一台服务器宕机,或工作出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后 Keepalived 自动将服务器加入到服务器群中。简单来说,Keepalived 就是用来实现机器的高可用的,在使用 Keepalived 的情况下,只有一台服务器能够提供服务(通过 VIP 来实现),当 Master 主机宕机后,VIP 会自动飘移到另一台服务器3 环境准备3.1 服务器与 MySQL 环境MySQL 环境采用上篇文章部署的那一套,然后新增一台服务器作为 LVS 的备用节点节点信息IP系统端口MySQL版本节点读写说明10.0.0.247Centos6.533065.7.9Master读写主节点10.0.0.248Centos6.533065.7.9Standby只读,可切换为读写备主节点10.0.0.249Centos6.533065.7.9Slave只读从节点10.0.1.24Centos6.5–MMM Monitor/LVS-MMM Monitor/LVS Keepalive Master10.0.1.85Centos6.5–LVS-LVS Keepalive SlaveVIP 信息简称VIP类型RW-VIP10.0.0.237读写VIPRO-VIP110.0.0.238读VIPRO-VIP210.0.0.239读VIPLVS-RO10.0.0.236LVS Keepalived VIP3.2 Keepalved 安装配置我们在10.0.1.24和10.0.1.85上部署 Keepalived1). yum 安装如果有对应的 yum 源,直接安装就可以了yum install -y keepalived2). 源码安装下载安装包, 下载地址 keepalived, 使用 1.2.24 版本举例# 安装依赖yum install -y gcc popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel libnfnetlink-devel# 下载包wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz# 解压安装tar -xvz -f keepalived-1.2.24.tar.gzcd keepalived-1.2.24./configure –prefix=/usr/local/keepalivedmake && make installcp /usr/local/keepalived/sbin/keepalived /usr/sbin/cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalived/cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/3). 配置 Keepalived打开 /etc/keepalived/keepalived.conf 文件, 加上上面的配置global_defs { notification_email { } router_id MYSQL_MMM}vrrp_instance MMM_TEST { state BACKUP interface eth0 virtual_router_id 24 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.236 }}router_id: 标识用的state: MASTER或BACKUP, 当其他节点起来的时候会重新选举,所以这里设为 BACKUP 就可以了virtual_router_id: 用来区分 VRRP 组播的标记,取值 0-255priority: 优先级advert_int: 监控检测间隔authentication: 认证相关virtual_ipaddress: 要设置的 VIP注意: 在同一个广播域内 virtual_router_id 不能重复 4). 启动由于在priority都相同,所以先启动为 Master, 我们在10.0.1.24和10.0.1.85上轮流启动Keepalived/etc/init.d/keepalived start启动后观察10.0.1.24 IP 状态[root@chengqm ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether fa:16:3e:ee:ae:a1 brd ff:ff:ff:ff:ff:ff inet 10.0.1.24/16 brd 10.0.255.255 scope global eth0 inet 10.0.0.236/32 scope global eth0 inet6 fe80::f816:3eff:feee:aea1/64 scope link valid_lft forever preferred_lft forever3.3 LVS 安装配置本次测试,负载调度的算法采用 加权最少连接(wlc),工作模式采用 DR 模式1). 安装LVS 采用 yum 安装就可以了yum install -y ipvsadm2). 增加配置文件继续打开 /etc/keepalived/keepalived.conf 文件, 在后面加上 LVS 配置, 转发VIP为10.0.0.236的3306端口到MMM的虚IPvirtual_server 10.0.0.236 3306 { delay_loop 6 # 健康检查时间,单位是秒 lb_algo wlc # 负载调度的算法 lb_kind DR # LVS 工作模式 nat_mask 255.255.255.255 # 掩码 persistence_timeout 0 protocol TCP real_server 10.0.0.237 3306 { # 指定后端真实服务器的IP地址, 这里直接指到 MMM 虚 IP 上 weight 1 # 节点权重, 数字越大, 权重越大 TCP_CHECK { # 检测参数 connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } real_server 10.0.0.238 3306 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } real_server 10.0.0.239 3306 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } }} 更改完毕重启 keepalived3). 后端真实服务器抑制 ARP 广播由于 DR 模式的原理是 LVS 与后端真实服务器配置同一个 VIP,后端服务器 不允许arp广播,这样路由器接收到请求就会发给 LVS,LVS 修改请求的 MAC 地址。这样路由器和后端服务器通过 MAC 地址进行通信,达到负载均衡的目的。在 10.0.0.247, 10.0.0.248, 10.0.0.249 服务器上执行以下命令VIP=10.0.0.236ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP/sbin/route add -host $VIP dev lo:0echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho “2” >/proc/sys/net/ipv4/conf/lo/arp_announceecho “1” >/proc/sys/net/ipv4/conf/all/arp_ignoreecho “2” >/proc/sys/net/ipv4/conf/all/arp_announcesysctl -p >/dev/null 2>&1注意: 后端真实服务器的 VIP 绑在 lo 上如果想取消,可以反着操作ifconfig lo:0 downroute del VIP >/dev/null 2>&1echo “0” >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho “0” >/proc/sys/net/ipv4/conf/lo/arp_announceecho “0” >/proc/sys/net/ipv4/conf/all/arp_ignoreecho “0” >/proc/sys/net/ipv4/conf/all/arp_announce4). 检查 LVS 状态[root@chengqm ~]# ipvsadm -lIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 10.0.0.236:mysql wlc -> 10.0.0.237:mysql Route 1 0 0 -> 10.0.0.238:mysql Route 3 0 0 -> 10.0.0.239:mysql Route 3 0 0 LVS 负载均衡已经生效4 测试4.1 负载均衡测试LVS 配置好了,让我们测试一下效果, 目前 Keepalived Master在 10.0.1.24, 并且已经预先创建了一个测试账号,那么我们在其他机器发起请求看看[root@mysql-test-83 ~]# mysql -umytest -p -h10.0.0.236 -P3306 -e “show variables like ‘hostname’“Enter password: +—————+———–+| Variable_name | Value |+—————+———–+| hostname | cluster01 |+—————+———–+[root@mysql-test-83 ~]# mysql -umytest -p -h10.0.0.236 -P3306 -e “show variables like ‘hostname’“Enter password: +—————+———–+| Variable_name | Value |+—————+———–+| hostname | cluster02 |+—————+———–+可以看到,LVS 负载均衡已经生效4.2 高可用测试10.0.1.24 和 10.0.1.85部署了 Keepalived服务,我们停掉Master的Keepalived, VIP 会自动飘移到另一台机器现在停掉10.0.1.24的Keepalived[root@chengqm ~]# /etc/init.d/keepalived stopStopping keepalived: [ OK ]查看10.0.1.85的IP[root@yexm ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether fa:16:3e:3c:81:1b brd ff:ff:ff:ff:ff:ff inet 10.0.1.85/16 brd 10.0.255.255 scope global eth0 inet6 fe80::f816:3eff:fe3c:811b/64 scope link valid_lft forever preferred_lft forever[root@yexm ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether fa:16:3e:3c:81:1b brd ff:ff:ff:ff:ff:ff inet 10.0.1.85/16 brd 10.0.255.255 scope global eth0 inet 10.0.0.236/32 scope global eth0 inet6 fe80::f816:3eff:fe3c:811b/64 scope link valid_lft forever preferred_lft forever可以看到 VIP 已经飘移到另一台 LVS 服务器5 结语LVS + MMM下既可以实现多台 MySQL 节点的负载均衡,也避免了因为同步延迟、同步失败等问题造成的数据不一致问题,是一个非常不错的架构方式。参考: http://www.linuxvirtualserver.org/zh/lvs1.html ...

December 13, 2018 · 4 min · jiezi