lvs是什么

avatar
作者
猴君
阅读量:0

lvs是什么:

linux virtual server

张文嵩发起的开源项目,阿里,linux的内核层面实现负载均衡的软件.

主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡

适用场景

小集群不需要适用lvs,nginx可以满足

大集群可以用lvs

lvs集群中的术语

VS virtual server lvs服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口

DS driector server lvs集群中的主服务器,也就是调度器,相当于nginx的代理服务器,调度器是集群的核心,调度器就是用来接收客户端的请求转发到后端的服务器

RS Real server lvs集群中的真实服务器,也可以理解后端服务器,用来接收DS转发过来的请求,并且响应结果.

CIP Client ip 客户端的ip地址,也就是发起请求的客户端地址

VIP Virtual IP lvs集群使用的ip地址,对外提供集群访问的虚拟ip地址

DIP Director IP 调度器在集群当中的地址,用于和RS通信.

RIP REAL IP 后端服务器在集群当中的ip地址

lvs的工作方式

NAT模式

由调度器响应给客户端(小集群)

NAT模式的特点:地址转换,是lvs集群最常用的模式之一

在NAT模式之下,lvs会将来自客户端的请求报文的目标ip地址和端口,修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器

响应结果返回给客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口

优点:对于客户端来说,请求的目标地址始终不变.客户端的配置不需要特殊修改,只是调度器在对ip和端口进行转换,后台的服务器也不需要改任何配置

缺点:性能损失,请求和响应都需要调度器做地址转换,会影响性能,NAT模式只能有一个调度器,如果它故障了,整个集群就不能正常工作

地址转换

内网–外网 转换的源ip地址 snat

外网–内网 转换的目的ip dnat

1.客户端发起请求,访问vip地址,到达调度器

2.调度器接收到请求后,根据负载均衡算法,选一个后端服务器

3.请求的地址,转成可以直接和内部RS通信的ip地址

4.后端服务器处理请求

5.目的地址转换,转换vip地址

6.调度器的vip响应给客户端

lvs的工具

ipvsadm工具,用来配置和管理lvs集群的工具

-A 添加虚拟服务器vip

-D 删除虚拟服务器地址

-s 指定负载均衡的调度算法,

​ rr 默认轮询

​ wrr 加权轮询

​ lc 最少连接

​ wlc 加权最小连接

-a 添加真实服务器

-d 删除真实服务器

-t 指定vip地址和端口

-r 指定真实服务器的地址和端口

-m 使用模式为nat模式

-g 使用DR模式

-i 使用隧道模式

-w 设置权重

-p 60 设置长连接的保持时间60秒

-l 列表查看

-n 数字化展示

示例

test1 真实客户端

#关闭防火墙 #重启nginx vim /etc/sysconfig/network-scripts/ifcfg-ens33  TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=12.0.0.10 NETMASK=255.255.255.0 GATEWAY=12.0.0.20 DNS1=218.2.135.1 DNS2=112.4.0.55 systemctl restart network #此时xshell会断开,去虚拟机实验curl 12.0.0.20 

test2 调度器 ens33 192.168.118.20,ens36 12.0.0.20

#关闭防火墙 #重启nginx #添加网卡 ifconfig ipvsadm -v yum -y install ipvsadm.x86_64 cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens36  vim ifcfg-ens33 TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.118.20 NETMASK=255.255.255.0 #GATEWAY=192.168.118.2 #DNS1=218.2.135.1 #DNS2=112.4.0.55 :wq  vim ifcfg-ens36 TYPE=Ethernet DEVICE=ens36 ONBOOT=yes BOOTPROTO=static IPADDR=12.0.0.20 NETMASK=255.255.255.0 #GATEWAY=192.168.118.2 #DNS1=218.2.135.1 #DNS2=112.4.0.55 :wq  systemctl restart network iptables -t nat -vnL iptables -t nat -F iptables -t nat -A POSTROUTING -s 192.168.118.0/24 -o ens36 -j SNAT --to 12.0.0.20 iptables -t nat -vnL ipvsadm -C ipvsadm -A -t 12.0.0.20:80 -s rr #加权轮询ipvsadm -A -t 12.0.0.20:80 -s wrr  ipvsadm -a -t 12.0.0.20:80 -r 192.168.118.30:80 -m #加权重ipvsadm -a -t 12.0.0.20:80 -r 192.168.118.30:80 -m -w 2  ipvsadm -a -t 12.0.0.20:80 -r 192.168.118.40:80 -m #加权重ipvsadm -a -t 12.0.0.20:80 -r 192.168.118.40:80 -m -w 3  ipvsadm -Ln  ipvsadm-save >/etc/sysconfig/ipvsadm #保存策略  systemctl restart ipvsadm #重启服务  ipvsadm -D -t 192.168.118.20:80 #删除策略,重新添加	 #删除节点服务器ipvsadm -d -r 192.168.118.30:80 -t 12.0.0.20:80  ipvsadm -Ln  vim /etc/sysctl.conf  net.ipv4.ip_forward=1 :wq sysctl -p curl 12.0.0.20 

nginx1 RS1 192.168.118.30

#关闭防火墙 #重启nginx cd /etc/sysconfig/network-scripts/ vim ifcfg-ens33 TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.118.30 NETMASK=255.255.255.0 GATEWAY=192.168.118.20 DNS1=218.2.135.1 DNS2=112.4.0.55 systemctl restart network  vim /usr/local/nginx/html/index.html this is nginx1 systemctl restart nginx.service curl 192.168.118.30   

nginx2 RS2 192.168.118.40

#关闭防火墙 #重启nginx cd /etc/sysconfig/network-scripts/ vim ifcfg-ens33 TYPE=Ethernet DEVICE=ens33 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.118.40 NETMASK=255.255.255.0 GATEWAY=192.168.118.20 DNS1=218.2.135.1 DNS2=112.4.0.55 :wq  systemctl restart network vim /usr/local/nginx/html/index.html this is nginx2 systemctl restart nginx.service curl 192.168.118.40   
DR模式

直接路由模式,由真实服务器直接响应给客户端(大集群)

DR模式的特点:调度器在整个lvs集群当中是最重要的,在nat模式下,负责接受请求,同时根据负载均衡算法转发流量,响应给客户端.

DR模式下,调度器依然负责接受请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端

Direct Routing 直接路由,是一种二层转发模式,二层转发的是数据帧,根据源mac地址和目的mac地址进行转发,不会修改数据包源ip和目的ip,根据数据包mac地址进行转发.

DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然是走二层转发,当客户端的请求到达调度之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的mac地址,RS处理完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器,因此调度器的压力较小

注意

1.调度器的ip地址和RS的ip地址必须在同一网段,数据才能进行二层转发

2.如果RS是一个公网地址(极大概率不是),互联网可以直接访问RS

3.DR模式是走内核转发,内核来判断数据包的地址,根据RS的地址把数据包重新封装,修改的是mac地址

4.调度器的ip地址只可以作为集群访问的入口,不能做为网关

5.所有的RS上的lo(本地回环地址)都要配置vip地址.

由以上带来的问题

1.调度器配置了vip,RS上也配置了vip地址,到底是哪个ip地址来响应这个请求呢?

vip地址冲突,因为调度器和RS都在同一网段,就会造成ARP通信的紊乱,因为是整个局域网广播,所有的设备都收到了,怎么把lo这个回环的响应把它屏蔽掉,只有本机的物理ip地址进行响应

通过修改内核参数来达成

arp_ignore=1

系统的物理ip地址才会响应请求,lo就不会响应ARP请求

2.返回报文时,vip地址还在,怎么样能让客户端来接收响应

arp_announce=2

系统不使用ip数据包的原地址来响应ARP请求,直接发送物理接口的ip地址

节点服务器的配置:

DR模式的实现

test1调度器 192.168.118.10

test2客户端 192.168.118.20

nginx1 RS1 192.168.118.30

nginx2 RS2 192.168.118.40

vip 192.168.118.100

实验

test1调度器

systemctl stop firewalld setenforce 0 [root@test1 ~]# modprobe ip_vs [root@test1 ~]# yum -y install ipvsadm.x86_64  [root@test1 ~]# cd /etc/sysconfig/network-scripts/ [root@test1 ~]# vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.118.100 NETMASK=255.255.255.0 :wq [root@test1 network-scripts]# ifup ens33:0 [root@test1 network-scripts]# [root@test1 network-scripts]# vim /etc/sysctl.conf  net.ipv4.ip_forward=0 #关闭数据包转发功能 net.ipv4.conf.all.send_redirects=0 #禁止系统发送icmp重定向的消息 net.ipv4.conf.default.send_redirects=0 #禁止默认网络接口发送icmp重定向的消息 net.ipv4.conf.ens33.send_redirects=0 #针对ens33设备,禁止发送icmp重定向消息 :wq [root@test1 network-scripts]# sysctl -p [root@test1 opt]# cd /opt [root@test1 opt]# ipvsadm -C [root@test1 opt]# ipvsadm -ln [root@test1 opt]# ipvsadm-save >/etc/sysconfig/ipvsadm [root@test1 opt]# ipvsadm -A -t 192.168.118.100:80 -s rr [root@test1 opt]# ipvsadm -a -t 192.168.118.100:80 -r 192.168.118.30:80 -g [root@test1 opt]# ipvsadm -a -t 192.168.118.100:80 -r 192.168.118.40:80 -g [root@test1 opt]# ipvsadm-save >/etc/sysconfig/ipvsadm [root@test1 opt]# systemctl restart ipvsadm.service [root@test1 opt]# ipvsadm -D -t 192.168.118.10:80 [root@test1 opt]# ipvsadm -A -t 192.168.118.100:80 -s rr [root@test1 opt]# ipvsadm -a -t 192.168.118.100:80 -r 192.168.118.30:80 -g [root@test1 opt]# ipvsadm -a -t 192.168.118.100:80 -r 192.168.118.40:80 -g  

nginx1 RS1

[root@test3 ~]# systemctl stop firewalld [root@test3 ~]# setenforce 0 [root@test3 ~]# vim /usr/local/nginx/html/index.html this is nginx1 :wq [root@test3 ~]# systemctl restart nginx.service [root@test3 ~]# curl 192.168.118.30 [root@test3 ~]# cd /etc/sysconfig/network-scripts/ [root@test3 network-scripts]# cp ifcfg-lo ifcfg-lo:0 [root@test3 network-scripts]# vim ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.118.100 NETMASK=255.255.255.0 :wq ifup lo:0 [root@test3 network-scripts]# route add -host 192.168.118.100 dev lo:0 [root@test3 network-scripts]# vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore=1 #设置回环接口忽略来自任何接口的arp请求 net.ipv4.conf.lo.arp_announce=2 #设置回环地址仅仅公告本地的ip地址,但是不响应arp请求 net.ipv4.conf.all.arp_ignore=1 #设置所有接口忽略来自任何接口的arp请求 net.ipv4.conf.all.arp_announce=2 #设置所有接口仅仅公告本地的ip地址,但是不响应arp请求  

nginx2 RS2

[root@test4 ~]# systemctl stop firewalld [root@test4 ~]# setenforce 0 [root@test4 ~]# vim /usr/local/nginx/html/index.html this is nginx2 :wq [root@test4 ~]# systemctl restart nginx.service [root@test4 ~]# curl 192.168.118.40 [root@test4 ~]# cd /etc/sysconfig/network-scripts/ [root@test4 network-scripts]# cp ifcfg-lo ifcfg-lo:0 [root@test4 network-scripts]# vim ifcfg-lo:0 DEVICE=lo:0 ONBOOT=yes IPADDR=192.168.118.100 NETMASK=255.255.255.0 :wq ifup lo:0 [root@test4 network-scripts]# route add -host 192.168.118.100 dev lo:0 [root@test4 network-scripts]# vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore=1 #设置回环接口忽略来自任何接口的arp请求 net.ipv4.conf.lo.arp_announce=2 #设置回环地址仅仅公告本地的ip地址,但是不响应arp请求 net.ipv4.conf.all.arp_ignore=1 #设置所有接口忽略来自任何接口的arp请求 net.ipv4.conf.all.arp_announce=2 #设置所有接口仅仅公告本地的ip地址,但是不响应arp请求 

test2客户端

systemctl stop firewalld setenforce 0 curl 192.168.118.100  
TUN隧道模式

需要专门开启一个vpn隧道翻墙

常用的模式

就是NAT和DR

slb是什么

阿里的SLB

server loab balance lvs+keepalive实现的

集群和分布式

系统的拓展方式

垂直拓展

向上拓展,增强,针对性能更强的计算机,瓶颈,计算机本身设备的限制.硬件本身的性能瓶颈

水平拓展

向外拓展,增加设备.并行的运行多个服务,依靠网络解决内部通讯的问题,cluster集群

集群

为了解决某个特定的问题将多台计算机组合起来形成的单个系统

集群的类型

LB load balance 负责均衡集群,多个主机组成,每个主机只承担一部分的访问请求

HA high availiablity 高可用,在设计系统时,采取一定的措施,确保系统当中某一组件或者两个出现故障,整个系统依然能够正常的运行

为了维护系统的可用性,可靠性,容错性

HPC high-performance computing 高性能,对响应时间,处理能力要求更高

系统可靠性指标

MTBF Mean time Between Failure 平均无故障时间

MTTR Mean time Restoration repair 平均故障恢复时间

A=MTBF+MTTR A的值要在0-1之间,A指标就是系统的可用性的度量,越接近0表示系统越不可用,越接近1表示系统越可用 99.99%,都是以小时为单位

90 (1-90%)*365=36.5天

停机时间:

计划内时间,可以忽略不计,但是现在也算在内

计划外时间,就是故障时间,从故障发生到故障解决的总时间,尤其是运维,计划外时间是我们必须关注的一个指标

当天事必须当天解决,没有解决之前,人是不可以离开的,解决完之后必须生成报告,备案

日报,周报,月报,年报

运维精神…7*24小时待命(及时响应,及时处理,及时总结.)

面试题

简述lvs的三种模式,和他们的区别

lvs的三种工作模式总结NATDRTUN
优点地址转换,配置简单性能最好WAN的形式远距离的数据包传送
缺点性能瓶颈不支持跨网段需求专用通道,vpn花钱
RS的要求无限制,10-20个禁止非物理的接口的arp响应,100台需要支持隧道模式,100台

面试题

练习

lvs和nginx做负载均衡的区别

lvs是层转发,内核态,ip+端口,四层代理

nginx 四层代理 也可以七层代理

lvs(DR模式)+nginx+tomcat

lvs实现四层转发+nginx实现7层转发(动态)

访问lvs的vip地址可以实现动静分离

实现

在上个实验的基础上,新增tomcat1和tomcat2服务器

tomcat1

vim /usr/local/tomcat/conf/server.xml   <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">         <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" /> :wq  vim /usr/local/nginx/html/index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test1 page</title> </head> <body> <% out.println("this is tomcat1,http://www.test1.com");%> </body> </html> :wq ./startup.sh ./shutdown.sh ./startup.sh 

然后去nginx1服务器

vim /usr/local/nginx/conf/nginx.conf  upstream tomcat {         server 192.168.118.50:8080 weight=1;         server 192.168.118.60:8080 weight=1;     }  server {         listen       80;         server_name  localhost;          #charset koi8-r;          #access_log  logs/host.access.log  main;          location / {             root   html;             index  index.html index.htm;         }         location ~ .*\.jsp$ {             proxy_pass http://tomcat;             proxy_set_header HOST $host;             proxy_set_header X-Real-IP $remote_addr;             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;         }  

tomcat2

vim /usr/local/tomcat/conf/server.xml   <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">         <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" /> :wq  vim /usr/local/nginx/html/index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test1 page</title> </head> <body> <% out.println("this is tomcat2,http://www.test2.com");%> </body> </html> :wq ./startup.sh ./shutdown.sh ./startup.sh 

nginx2服务器

vim /usr/local/nginx/conf/nginx.conf  upstream tomcat {         server 192.168.118.50:8080 weight=1;         server 192.168.118.60:8080 weight=1;     }  server {         listen       80;         server_name  localhost;          #charset koi8-r;          #access_log  logs/host.access.log  main;          location / {             root   html;             index  index.html index.htm;         }         location ~ .*\.jsp$ {             proxy_pass http://tomcat;             proxy_set_header HOST $host;             proxy_set_header X-Real-IP $remote_addr;             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;         }  

keepalive脑裂是什么

是HA高可用架构中的一个特殊现象,只要使用vip地址代理的冗余模式的高可用,都有可能出现脑裂的问题.

主和备同时都有vip地址,主和备无法确定各自的身份,同时出现了vip地址,两边都起来了,但是两边都无法使用

大概就是以下这些原因:

1.keepalive配置文件写错了

2.心跳线(网线),断了,老化

3.硬件问题(网卡出了问题),ip地址配置冲突

4.防火墙的策略,iptables的策略.屏蔽了组播的地址广播,屏蔽了vrrp协议的报文

5.两台服务器的事件不同步也可能导致问题

6.其他的服务配置对心跳线的检测造成了干扰

keppalive的脑裂怎么解决

lvs集群当中的高可用架构,只是针对调度器的高可用(基于vrrp来实现调度器的主和备),高可用的HA架构.

主调度器和备调度器(多台)

在主调度器正常工作的时候,备完全处于冗余状态(待命),不参与集群的运转,只有当主调度器出现故障时,备才会承担主调度器的工作,主调度器恢复功能之后,主又会成为主,继续做为集群的入口,备继续冗余待命(取决优先级)

keepalive基于vrrp协议来实现lvs高可用的方案.

1.组播地址 224.0.0.18根据组播地址来进行通信,主和备之间发送报文,确定对方是否存活

2.根据优先级来判定主和备的位置

3.故障切换,主故障了,备来继续工作,主恢复了,备继续等待

4.vip地址的切换,主和备之间的切换是vip的切换

keepalive是专门为了lvs而出现的,但不是lvs专用的

keepalive模块

core模块 keepalived的核心模块,负责主进程的启动,维护以及全局配置文件的加载

vrpp模块 实现vrrp协议的模块,也就是主功能模块

check模块 负责健康检查,也可以检查后台真实服务器的情况

主调度器

[root@test1 ~]# cd /etc/sysconfig/network-scripts/ [root@test1 network-scripts]# rm -rf ifcfg-ens33:0 [root@test1 ~]# yum -y install keepalived.x86_64  [root@testzhu ~]# cd /etc/keepalived/ [root@testzhu keepalived]# ls [root@testzhu keepalived]# vim keepalived.conf  #只需要改global,vrrp,virtual_server smtp_server 127.0.0.1 #第9行notification_email_from Alexandre.Cassen@firewall.loc的下面修改  router_id lvs_01 #第12行,备调度器改成02  vrrp_strict #第14行如果有注释,要取消注释  interface ens33 #第21行  virtual_router_id 51 #22行的id号,主备都要一样  priority 120 #23行,优先度要高,备优先度要低   virtual_ipaddress {          192.168.118.100  }  #29行的代码块里,留一个vip地址  virtual_server 192.168.118.100 80 { #34行,改成vip地址  lb_kind DR  #37行,改成dr模式  persistence_timeout 0 #39行,timeout改成0  #59行之后的都不要了  real_server 192.168.118.30 80 { 	   		 weight 1              TCP_CHECK{              connect_port 80              connect_timeout 3              nb_get_retry 3              delay_before_retry 4           }         } real_server 192.168.118.40 80 { 	   		 weight 1              TCP_CHECK{              connect_port 80              connect_timeout 3              nb_get_retry 3              delay_before_retry 4           }         }       } #42行里的代码块改成这样的 :wq systemctl restart keepalived.service   

副调度器

[root@testbei ~]# yum -y install keepalived.x86_64 [root@testbei ~]# cd /etc/keepalived/ [root@testbei keepalived]# rm -rf keepalived.conf   

总结:keepalive是调度器的高可用,vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器.

在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器上.

1.配优先级

2.配置vip和真是服务器

3.主备id要一致

4.主备的id要区分

keepalive是专门为lvs打造的,但是不是为lvs专门服务的

keepalive也可以使用nginx,haproxy

keepalive+nginx实现高可用

nginx1

systemctl stop firewalld setenforce 0 yum -y install keepalive vim check_nginx.sh /usr/bin/curl -I http://localhost &> /dev/null if [[ $? -ne 0  ]] then  systemctl stop keepalived fi :wq  chmod 777 check_nginx.sh  vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived  global_defs {    notification_email {      acassen@firewall.loc      failover@firewall.loc      sysadmin@firewall.loc    }    notification_email_from Alexandre.Cassen@firewall.loc    smtp_server 127.0.0.1    smtp_connect_timeout 30    router_id LVS_01    vrrp_skip_check_adv_addr    vrrp_strict    vrrp_garp_interval 0    vrrp_gna_interval 0    vrrp_iptables }    vrrp_script check_nginx {         script "/root/check_nginx.sh"         interval 5 }  vrrp_instance VI_1 {     state MASTER     interface ens33     virtual_router_id 51     priority 120     advert_int 1     authentication {         auth_type PASS         auth_pass 1111     }     virtual_ipaddress {         192.168.118.100     }      track_script {         check_nginx  } } :wq systemctl stop nginx systemctl status keeplived   

nginx2

systemctl stop firewalld setenforce 0 yum -y install keepalive scp root@192.168.118.30:/etc/keepalived/keepalived.conf /etc/keepalived/ vim /etc/keeplived/keepalived.conf #把主vip的一些东西改成副的 :wq systemct restart keepalived vim /usr/local/nginx/html/index.html this is nginx1 :wq systemctl restart nginx 

Haproxy负载均衡器:

nginx 四层转发,七层代理

lvs 四层转发

Haproxy 四层转发,七层转发

Haproxy的作用和使用场景

1.场景,用于高并发的web’场景,可以支持一万个以上的并发请求,高性能的tcp和http负载均衡器

工作原理:提高一个代理地址,访问集群

2.作用:1.进行四层和七层转发,2.支持https,3.haproxy本身不自带缓存功能,请求当中添加cookie,使用缓存,4.支持主备切换(keepalive)

3.特点

可靠性高(版本稳定),可以同时维护4万个到五万个并发,单位时间(指定时间)内可以处理最大请求数20000个

支持负载均衡算法,虽然不带缓存,但是可以支持会话保存

rr

wrr

leastconn

实验一下

nginx1

nginx2

test

yum -y install -y pcre-devel bzip2-devel gcc-c++ make cd /opt #把haproxy包扔进opt目录下 tar -xf haproxy-1.5.19.tar.gz  cd haproxy-1.5.19/ uname -r make TARGET=linux2628 ARCH=x86_64 #target使用的linux版本要大于linux2.60以上的版本 make install mkdir /etc/haproxy cd examples/ cp -a haproxy.cfg /etc/haproxy/ cd /etc/haproxy/ vim haproxy.cfg # this config needs haproxy-1.1.28 or haproxy-1.2.1  global         log /dev/log    local0 info         log /dev/log    local1 notice         #log loghost    local0 info         maxconn 4096         #最大连接数,推荐10240         #chroot /usr/share/haproxy         uid 99         gid 99         daemon         nbproc 4         #haproxy的并发线程数,设置的数量应该是cpu的两倍或者和cpu保持一致         #debug         #quiet  defaults #这里的是默认参数配置,包涵了连接配置,监听配置,以及代理配置         log     global         mode    http         option  httplog         option  dontlognull         retries 3         #检查节点服务器3次,连续3次失败,就认为节点服务器不可用         redispatch         #服务器负载很高时,自动结束当前队列中处理比较久的连接         maxconn 2000         #最大连接数,这个数值可以和global中一致,也可以比他小,但是不能超过,一般设置成一致         #contimeout     5000         #clitimeout     50000         #srvtimeout     50000         timeout http-request 10s         #http请求的默认超时时间         timeout queue 1m         #在队里当中请求的超时时间         timeout connect 10s         #链接超时时间         timeout client 1m         #客户端超时时间         timeout server 1m         #服务端的超时时间         timeout http-keep-alive 10s         #默认长连接的超时时间         timeout check 10s         #检查后端服务器的超时时间  #转发请求的设置,既可以是四层,也可以是七层 #七层配置: listen  xy102 0.0.0.0:80         option httpchk GET /index.html         #设置转发请求的内容         balance static-rr         #轮询算法         server  rs01 192.168.118.30 check inter 2000 fall 3 weight 2         server  rs02 192.168.118.40 check inter 2000 fall 3 weight 3         #server指定真实服务器,rs01自定义后台服务器名称check inter 2000 启动对后台服务器进行检查,间隔是2000毫秒,fall 3连续三次检测不到任务失败  :wq cd /opt/haproxy-1.5.19/examples/ cp -a haproxy.init /etc/init.d/haproxy chmod 777 /etc/init.d/haproxy  chkconfig --add /etc/init.d/haproxy  ln -s /usr/local/sbin/haproxy /usr/sbin/ systemctl restart haproxy.service  curl 192.168.118.50 #本机ip地址 

四层

在完成了七层的基础上做的修改

#转发请求的设置,既可以是四层,也可以是七层 #七层配置: #listen xy102 0.0.0.0:80 #       option httpchk GET /index.html #       #设置转发请求的内容 #       balance static-rr #       #轮询算法 #       server  rs01 192.168.118.30 check inter 2000 fall 3 weight 2 #       server  rs02 192.168.118.40 check inter 2000 fall 3 weight 3         #server指定真实服务器,rs01自定义后台服务器名称check inter 2000 启动对后台服务器进行检查,>间隔是2000毫秒,fall 3连续三次检测不到任务失败 #四层转发: frontend test bind *:80 mode tcp default_backend test  backend test mode tcp balance roundrobin server server1 192.168.118.30:80 check inter 2000 fall 3 weight 2 server server2 192.168.118.40:80 check inter 2000 fall 3 weight 3 :wq systemctl restart haproxy.service  curl 192.168.118.50 

练习2

keepalive+haproxy

在已完成的haproxy对nginx1,nginx2轮询的基础上,再加一个haproxy,最后由客户机curl

怎么再加一个haproxy?克隆带有haproxy的虚拟机就行,然后给两台haproxy再配置keepalive

yum -y install keepalived.x86_64  cd /etc/keepalived/ ls vim keepalived.conf  #只需要改global,vrrp,virtual_server smtp_server 127.0.0.1 #第10行修改成邮件地址  router_id lvs_01 #第12行,备调度器改成02  vrrp_strict #第14行如果有注释,要取消注释  interface ens33 #第21行  virtual_router_id 51 #22行的id号,主备都要一样  priority 120 #23行,优先度要高,备优先度要低   virtual_ipaddress {          192.168.118.100  }  #29行的代码块里,留一个vip地址  virtual_server 192.168.118.100 80 { #34行,改成vip地址  lb_kind DR  #37行,改成dr模式  persistence_timeout 0 #39行,timeout改成0  #59行之后的都不要了  real_server 192.168.118.30 80 { 	   		 weight 1              TCP_CHECK{              connect_port 80              connect_timeout 3              nb_get_retry 3              delay_before_retry 4           }         } real_server 192.168.118.40 80 { 	   		 weight 1              TCP_CHECK{              connect_port 80              connect_timeout 3              nb_get_retry 3              delay_before_retry 4           }         }       } #42行里的代码块改成这样的  #最后回到第16行的下一行添加vrrp_iptables :wq 
vim check_haproxy.sh #!/bin/bash /usr/bin/curl -I http://localhost &> /dev/null if [[ $? -ne 0  ]] then  systemctl stop keepalived fi :wq  chmod 777 check_haproxy.sh  vim /etc/keepalived/keepalived.conf   vrrp_script check_haproxy {         script "/opt/check_haproxy.sh"         interval 5 }  track_script {         check_haproxy  }  完事之后,运行就ok了 以及,一定一定要记得,关闭防火墙和setenfoce 0!!!!!!!!!!!!!!  

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!