云原生第一次作业(lvs)

云原生第一次作业(lvs) 1 集群与分布式简介1.1 集群(Cluster)--一活多人干概念集群是为了解决某个特定问题将多台计算机组合起来形成的单个系统类型LB-LoadBalancing负载均衡由多个主机组成每个主机只承担一部分访问负载[用户访问压力]HAHigh Availiablity高可用SPOFsingle Point Of failure[调度器挂掉后有另一个替补]MTBF:Mean Time Between Failure 平均无故障时间正常时间MTTR:Mean Time To Restoration repair平均恢复前时间故障时间AMTBF/MTBFMTTR(0,1)99%, 99.5%, 99.9%, 99.99%, 99.999%SLAService level agreement服务等级协议是在一定开销下为保障服务的性能和可用性服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中总是设定所谓的三个9四个9来进行表示当没有达到这种水平的时候就会有一些列的惩罚措施而运维最主要的目标就是达成这种服务水平。停机时间又分为两种一种是计划内停机时间一种是计划外停机时间而运维则主要关注计划外停机时间HPCHigh-performance computing高性能计算国家战略资源不在课程范围)1.2 分布式--多活分多人分布式存储:CephGlusterFsFastDFSMogileFs分布式计算:hadoopSpark分布式常见应用分布式应用-服务按照功能拆分使用微服务分布式静态资源--静态资源放在不同的存储集群上分布式数据和存储--使用key-value缓存系统分布式计算--对特殊业务使用分布式计算比如Hadoop集群1.3 集群与分布式的区别集群同一个业务系统部署在多台服务器上集群中每一台服务器实现的功能没有差别数据和代码都是一样的分布式一个业务被拆成多个子业务或者本身就是不同的业务部署在多台服务器上。分布式 中每一台服务器实现的功能是有差别的数据和代码也是不一样的分布式每台服务器功能加起 来才是完整的业务分布式是以缩短单个任务的执行时间来提升效率的而集群则是通过提高单位时间内执行的任务数 来提升效率对于大型网站访问用户很多实现一个群集在前面部署一个负载均衡服务器后面几台服务器 完成同一业务。如果有用户进行相应业务访问时负载均衡器根据后端哪台服务器的负载情况决 定由给哪一台去完成响应并且台服务器垮了其它的服务器可以顶上来。分布式的每一个节点都完成不同的业务如果一个节点垮了那这个业务可能就会失败2lvs(Linux virtual server)运行原理2.1 lvsLVSLinux Virtual Server负载调度器是一种基于Linux操作系统的虚拟服务器技术用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上从而提高整体服务的处理能力和可靠性LVS 蕴含概念VSVirtual ServerRSReal ServerCIPClient IPVIP: Virtual serve IP VS外网的IPDIP: Director IP VS内网的IPRIP: Real server IP访问流程CIP -- VIP DIP -- RIPLVS相关术语VS: Virtual Server负责调度RS:RealServer负责真正提供服务LVS 支持三种主要的工作模式LVS-NATNetwork Address Translation在该模式下负载均衡器不仅需要修改请求报文的目标地址还需要修改响应报文的源地址适用于小规模集群。LVS-DRDirect Routing在该模式下负载均衡器只修改请求报文的目标MAC地址而不修改IP地址后端服务器直接将响应报文发回客户端适用于大规模集群。LVS-TUNIP Tunneling该模式通过IP隧道将请求转发到后端服务器后端服务器直接将响应报文发回客户端适用于地理位置分散的集群。lvs-fullnat修改请求报文的源和目标IP2.2nat模式本质是多目标IP的DNAT通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和 PORT实现转发RIP和DIP应在同一个IP网络且应使用私网地址;RS的网关要指向DIP请求报文和响应报文都必须经由Director转发Director易于成为系统瓶颈支持端口映射可修改请求报文的目标PORTVS必须是Linux系统RS可以是任意OS系统nat模式数据逻辑客户端发送访问请求请求数据包中含有请求来源cip访问目标地址VIP访问目标端口9000portVS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口RS1相应请求发送响应数据包包中的相应保温为数据来源RIP1响应目标CIP相应端口9000portVS服务器接收到响应数据包改变包中的数据来源RIP1--VIP,响应目标端口9000--80VS服务器把修改过报文的响应数据包回传给客户端lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机所以lvs的调度机容易阻塞注意:客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通过PREROUTING后被ipvs结果并作nat转发因为ipvs的作用点是在PREROUTING和INPUT链之间所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉2.3DR模式DR(Direct Routing)直接路由LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发源MAC是DIP所在的接口的MAC目标MAC是某挑选出的RS的RIP所在接口的MAC地址源 IP/PORT以及目标IP/PORT均保持不变DR模式数据传输过程DR模式的特点Director和各RS都配置有VIP确保前端路由器将目标IP为VIP的请求报文发往Director在前端网关做静态绑定VIP和Director的MARS的RIP可以使用私网地址也可以是公网地址RIP与DIP在同一IP网络RIP的网关不能指向DIP以确保响应报文不会经由DirectorRS和Director要在同一个物理网络请求报文要经由Director但响应报文不经由Director而由RS直接发往Client不支持端口映射端口不能修败RS可使用大多数OS系统2.4TUN模式了解TUN模式数据传输过程2.5fullnet模式了解3 实验内容3.1 nat模式实验3.1.1 实验环境四个虚拟机 :servera # 仅主机eth0:192.168.0.10/24,192.168.0.100serverb # 仅主机eth0:192.168.0.22/24,192.168.0.100lvs # 仅主机eth0:172.25.254.100/24,172.25.254.2nat模式eth1:192.168.0.100/24,192.168.0.2client #nat模式eth0:172.25.254.111/24,172.25.254.2###关闭火墙(所有主机) systemctl disable --now firewalld.service ###安装ipvsadm(仅在lvs主机) dnf install ipvsadm -y ###安装并应用httpd用于验证实验(仅在servera和serverb) dnf install httpd -y #servera 在集群真实业务中数据应该是相同的这里为了看到实验效果设置不同的index echo RS1 - 192.168.0.10 /var/www/html/index.html systemctl enable --now httpd #开启httpd服务 #serverb echo RS2 - 192.168.0.20 /var/www/html/index.html systemctl enable --now httpd ###使不同网段可通过lvs通讯 #lvs echo net.ipv4.ip_forward1 /etc/sysctl.conf sysctl -p3.1.2 实验过程#lvs [rootlvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr [rootlvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m [rootlvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m [rootlvs ~]# ipvsadm -Ln3.1.3 测试3.2 DR模式实验3.2.1 实验环境client同上route # eth0172.25.254.100/24,172.25.254.2# eth1192.168.0.100/24,192.168.0.2注serveraserverbDR_lvs都要额外加上vipservera # eth0192.168.0.10/24,192.168.0.100# lo①127.0.0.1/8 ②192.168.0.220/32serverb # eth0192.168.0.20/24,192.168.0.100# lo①127.0.0.1/8 ②192.168.0.220/32DR_lvs # eth0 俩ip192.168.0.200/24,192.168.0.100# lo①127.0.0.1/8 ②192.168.0.220/32###关闭防火墙 systemctl disable --now firewalld.service ###在DR_lvs上安装ipvsadm dnf install ipvsadm -y ###使不同网段能通过路由通讯 #route dnf install iptables-nft-services-1.8.10-11.el9_5.noarch -y echo net.ipv4.ip_forward1 /etc/sysctl.conf3.2.2 实验过程###使servera和serverb的vip不对外作用 #servera和serverb echo net.ipv4.conf.all.arp_announce2 /etc/sysctl.conf echo net.ipv4.conf.lo.arp_announce2 /etc/sysctl.conf echo net.ipv4.conf.lo.arp_ignore1 /etc/sysctl.conf echo net.ipv4.conf.all.arp_ignore1 /etc/sysctl.conf #DR_lvs [rootDRlvs ~]# ipvsadm -A -t 192.168.0.220:80 -s rr [rootDRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.10:80 -g [rootDRlvs ~]# ipvsadm -a -t 192.168.0.220:80 -r 192.168.0.20:80 -g [rootDRlvs ~]# ipvsadm -Ln #route [rootlvs ~]# iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.0.100 [rootlvs ~]# iptables -t nat -A POSTROUTING -j SNAT --to-source 172.25.254.100 [rootlvs ~]# iptables -t nat -nL3.2.3 测试3.3 利用火墙标记解决轮询错误实验在DR实验基础上做的3.3.1 实验环境同上由于刚好做完DR实验所以实验环境直接在上个实验的基础上做###在DR_lvs上安装iptables dnf install iptables-nft-services-1.8.10-11.el9_5.noarch -y #RS1和RS2安装apache的加密组件 [rootrs1和rs2 ~]# dnf install -y mod_ssl [rootrs1和rs2 ~]# systemctl restart httpd #DR_lvs对ipvsadm调度进行配置 [rootDRlvs ~]# ipvsadm -A -t 192.168.0.220:443 -s rr [rootDRlvs ~]# ipvsadm -a -t 192.168.0.220:443 -r 192.168.0.10:443 -g [rootDRlvs ~]# ipvsadm -a -t 192.168.0.220:443 -r 192.168.0.20:443 -g [rootDRlvs ~]# ipvsadm -Ln3.3.2 实验过程问题---在下张图中可以看到当同时访问lvs的80和443端口时调度结果发现是独立响应的这明显是不合理的所以我们需要用火墙标记来将两个服务端绑定起来同步响应#DR_lvs [rootDRlvs ~]# iptables -t mangle -A PREROUTING -p tcp -m multiport --dport 80,443 -d 192.168.0.220 -j MARK --set-mark 6666 [rootDRlvs ~]# iptables -t mangle -nL [rootDRlvs ~]# ipvsadm -A -f 6666 -s rr [rootDRlvs ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g [rootDRlvs ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g [rootDRlvs ~]# ipvsadm -Ln3.3.3 测试3.4 利用持久连接实现会话粘滞(也在DR实验基础上做的)在我们客户上网过程中有很多情况下需要和服务器进行交互客户需要提交响应信息给服务器如果单纯的进行调度会导致客户填写的表单丢失为了解决这个问题我们可以用sh算法但是sh算法比较简单粗暴可能会导致调度失衡解决方案在进行调度时不管用什么算法只要相同源过来的数据包我们就把他的访问记录在内存中也就是把这个源的主机调度到了那个RS上如果在短期默认360S内同源再来访问我仍然按照内存中记录的调度信息把这个源的访问还调度到同一台RS上。如果过了比较长的时间默认最长时间360s同源访问再次来访那么就会被调度到其他的RS上#DR_lvs [rootDRlvs ~]# ipvsadm -E -f 6666 -s rr -p 1注意由于存在时间最低只能设置为60s所以这里的1指的是1分钟测试可以看到在存活时间内访问的话会调度到同一台RS上下图是查看存活时间当ASSURED时间结束时会看FIN_WAIT是否存在若存在则ASSURED再来一轮存活时间否则结束实战项目之利用lvs对数据库读动作做负载均衡集群也在DR实验基础之上RS1和RS2的配置#RS1RS2安装数据库服务 [rootrs1和rs2 ~]# dnf install mariadb-server -y #RS1RS2修改不同id以便实验区分 [rootrs1 ~]# vim /etc/my.cnf.d/mariadb-server.cnf ... server-id10 ... [rootrs2 ~]# vim /etc/my.cnf.d/mariadb-server.cnf ... server-id20 ... [rootrs1和rs2 ~]# systemctl start mariadb.service [rootrs1和rs2 ~]# mysql MariaDB [(none)] create user root% identified by 233; MariaDB [(none)] select server_id; MariaDB [(none)] exitRS1RS2DR_lvs的配置[rootDRlvs ~]# ipvsadm -C #清理之前的策略以免影响实验 [rootDRlvs ~]# ipvsadm -A -t 192.168.0.220:3306 -s rr [rootDRlvs ~]# ipvsadm -a -t 192.168.0.220:3306 -r 192.168.0.10:3306 -g [rootDRlvs ~]# ipvsadm -a -t 192.168.0.220:3306 -r 192.168.0.20:3306 -g [rootDRlvs ~]# ipvsadm -Ln测试