Lvsip-tun的原理和实现采用Nat技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务器应答比请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
Lvs ip-tun(ip隧道)的原理和实现
采用Nat技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务器应答比请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。 实验规划: (1).将物理机上的VMnet1网卡的ip设置为200.168.10.4,子网掩码设置为255.255.255.0 (2).为Lvs服务器配置一块网卡eth0,网络连接设置为VMnet1,设置IP地址:ifconfig eth0 200.168.10.1 (3).为两台真实服务器配置一块网卡,网络连接设置为VMnet1,设置IP地址:ifconfig eth1 200.168.10.2和ifconfig eth1 200.168.10.3 (4).为Lvs服务器和两台真实服务器都配置一个tunl0网卡,配置为单独的网段:ifconfig tunl0 200.168.10.10 netmask 255.255.255.255 up,route add -host 200.168.10.10 dev tunl0 (5).Lvs ip-tun服务器脚本: ipvsadm -C ipvsadm -A -t 200.168.10.10:80 -s rr(-t:采用tcp协议;-s:模式参数;rr:采用轮叫算法) ipvsadm -a -t200.168.10.10:80 -r 200.168.10.2 -i(-r:真实服务器ip;-i:ip-tun模式) ipvsadm -a -t200.168.10.10:80 -r 200.168.10.3 -i (6).真实服务器脚本: echo "1" 》 /proc/sys/net/ipv4/conf/tunl0/arp_ignore echo "2" 》 /proc/sys/net/ipv4/conf/tunl0/arp_announce echo "1" 》 /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" 》 /proc/sys/net/ipv4/conf/all/arp_announce 注:目前只有Unix/Linux版本的操作系统才具备ip-tun网卡
关于小米ilvs金属边框
呵呵,ilvs的是需要配后盖的,还不如在淘宝的 “良宇数码”专卖店 购买适合任何后盖的卡麦伦金属边框呢
基于lvs实现4层负载均衡
章文嵩:研发,原就职alibaba公司,目前就职滴滴;
lvs:2部分组成 ipvsadm:用户空间的命令行工具;用于管理集群服务及集群服务上的RS; ipvs:是内核中的框架;工作于内核上的netfilter的INPUT钩子上的程序,可根据用户定义的集群实现请求转发;
注意:在lvs主机上,不允许在INPUT链上添加规则,一般不建议与ipvs一同使用filter规则;更不能使用na
根据其调度时是否考虑后端主机的当前负载,可分为 静态方法 和 动态方法 两类
基于客户端瘦cookie+服务器端的session机制,在负载均衡时,同一用户被调度不同后端服务器时,为了保持会话连接功能不丢失;当第一次用户请求时,通过调度机制给该用户分配了一个负责响应后端服务器,以后来自该用户的请求就由这个服务器负责响应了,而不再调度,这就叫 源地址哈希 ;
在调度器上有会话追踪表,在这个会话追踪模板中,把用户的IP地址和挑选的后端服务器对应的记录下来,而且定义一个超时时长,在定义的时间内该条目不会删除;所以,用户请求到来时,先检查这个表,把原IP当做k查找,因为哈希就是k/v数据,对应的v就是后端的真实服务器;如果检查有用户的IP对应的记录,则直接将请求报文发给记录中对应的后端真实服务器,而不通过调度;
缺陷 :当记录的真实服务器挂了时,就没有会话保持记录了;当内网用户同过同一IP地址访问外网时,可能会把内网用户的所有请求都发往会话记录表上的真实服务器,这样负载均衡能力是受到损害的;
解决办法
内网用户请求的目标地址,在调度器上把目标地址绑定到一个代理缓存服务器上,以后,任何用户访问的是该目标地址就发往绑定的代理服务器,代理服务器收到请求后,再发往后端服务器主机,从而实现正向代理负载均衡的作用;
ipvs功能特别强大,一般网站用到的可能性比较小,但面试必会问到; 如果负载不是特别大,使用配置比较麻烦,维护成本较大;
ipvs/ipvsadm的关系相当于netfilter/iptables的关系; 真正提供lvs服务的是ipvs;
因为是根据请求的目标ip地址和目标端口(能识别协议)进行转发;一个ipvs(Director)主机就可同时为多个集群提供服务进行调度;这就是四层交换的原因;只不过一个Director很有可能成为负载均衡的瓶颈;
注意:单个Director可同时为多个集群提供调度服务;
在centos 7系统上: 判断内核是否支持ipvs:
判断ipvsadm程序包是否安装
ipvsadm -A|E -t|u|f service-address -A:增,添加 -E:修改
ipvsadm -D -t|u|f service-address -D:删除集群服务;
service-address:定义集群服务的地址 -t:tcp,把tcp端口定义成集群服务,vip:tcp_port; -u:udp,把udp端口定义成集群服务,vip:udp_port; -f:Firewalls mark防火墙标记,是一个数字;
-s scheduler:定义集群服务的调度方法,默认为wlc加权最少连接;
ipvsadm -a|e -t|u|f service-address -r server-address -a:增,添加RS; -e:改,修改RS;
ipvsadm -d -t|u|f service-address -d:删除
-r server-address:向已存在的service-address(集群服务)添加RS的地址; rip 端口省略时,表示不做端口映射,与请求服务的端口为同一端口;有些集群服务不支持端口映射,如lvs-dr,lvs-tun,只要响应报文不经过Director都不支持;
查看: ipvsadm -L|l -L,--list:列出集群服务; -n, --numeric:数字格式显示,不反解主机名到ip地址,服务到端口号; --exact:精确显示数值,不进行单位换算; -c, --connection:显示当前ipvs连接;可查看后端服务器是否连接; --stats:统计数据; --rate:速率;
清空 :clear ipvsadm -C
保存和重载 保存:输出重定向 ipvsadm -S 》 /PATH/TO/SOME_RULE_FILE ipvsadm-save 》 /PATH/TO/SOME_RULE_FILE
重载:输入重定向 ipvsadm -R 《 /PATH/TO/SOME_RULE_FILE ipvsadm-restore 《 /PATH/TO/SOME_RULE_FILE
清空计数器: ipvsadm -Z
例如:
例如:
添加集群服务,vip为172.18.11.111提供web服务,指明调度方法为rr;不指明为默认wlc;
在集群服务中添加RS地址为192.168.255.2,类型为lvs-nat,权重为1此值无意义,因为前面已经指明使用rr调度算法
再次添加一个RS
再次添加一个集群服务
在另一个集群服务上添加2个RS
修改集群服务的调度方法为wrr
注意:修改只能改属性,不能改IP地址;只有删除集群服务才能从新改IP地址;
修改RS的权重值为10
保存集群服务规则至指定路径
查看保存的内容:
清空集群服务
重载集群服务配置文件
下次开机时会自动载入集群服务规则: 所以,可把规则保存在/etc/sysconfig/ipvsadm文件中; # ipvsadm-save 》 /etc/sysconfig/ipvsadm 一般手动保存后(确保保存无误),下次开机时,会自动重载此文件;
需要开机自动有效: # systemctl enable ipvsadm.service
lvs-nat设计要点: (1)DIP与RIP要在同一IP网络,RIP的网关要指向DIP; (2)支持端口映射; (3)是否用到共享存储,取决于业务需要;
1、配置RS1
2、配置RS2
3、配置Director
打开网卡核心转发功能;永久有效:
查看内核参数是否打开核心转发功能
此时,在Director测试,访问RS1、RS2;
添加ipvs集群:
在另一台虚拟机上测试,调度是否起作用: 测试主机为:172.18.11.111
修改Director上的调度方式为wrr
再到测试主机为:172.18.11.111,测试wrr的调度效果
经过多次请求测试后,有明显wrr调度效果; 其RS服务器响应权重比是1:2,即RS1响应1次后RS响应2次;
数据同步:rsync+inotify
响应报文不用经过Director,每个RS必须配置VIP,为了避免地址冲突,有3种方式:
在各主机(Director,RS)均需要配置VIP,因此,要解决地址的冲突的问题,目标是让各RS上的VIP不可见,仅用接收目标地址为VIP的报文,同时可作为响应报文的源地址; (1)在前端的网关接口上静态绑定(vip+mac); 缺陷:一旦Director挂了,基于高可用转移另外节点上无法实现;而且,要在网关上有权限操作; (2)在各RS上使用arptables;添加规则,拒绝自己的VIP地址向外通告及响应arp解析地址的请求; (3)在各RS上修改内核参数,来限制arp响应和通告; 注意:要将VIP配置在lo的别名上,不能配置在网卡的别名上;
在各RS上设置arp通告级别即修改两个内核参数arp_ignore、arp_announce,因为地址是属于内核的,所以在Linux主机默认的通告方式是所有本机的可用IP地址通告给每个接口;
arp_announce要限制通告级别,每一个网卡仅在把自己的网络地址向所在物理网络中通告,即各网卡间地址绝不交叉通告;arp_announce设置为2;
arp_ignore是限制响应别人arp请求的级别;默认响应请求是无论从哪个接口接收到arp请求,只要本机有这个地址都会响应;限制arp响应级别后可实现,从哪个网卡接收的arp请求, 必须与该接口属于同一网络时才响应;arp_ignore`设置为1
lvs-dr设计要点: (1)各主机一个接口即可,但需要在同一物理网络中; (2)RIP的网关不能指向DIP,RIP和DIP通常应在同一网络,但此二者未必会与VIP在同一网络; (3)各RS需要先设置内核参数,再设置VIP和路由;
搭建网络环境
1、配置Director
2、配置RS1
3、配置RS2
4、访问测试
在RS2主机运行
在报文进入时,进行打标记,例如目标IP是VIP端口80,把这类报文分拣出来打标,标记一般为十六进制整数,例如标记1;在input链上定义集群服务时,就可判定如果防火墙标记为1,则为集群服务;把本来在input链上完成识别、定义集群服务分成了两步,识别在prerouting做,定义在ipvs(inputing)上实现;
在mangle表上的prerouting链上,目标ip(VIP)为172.18.11.7,目标端口为80,打标记为1;
mark标记里包含了IP地址和端口;定义集群服务时使用mark即可;
打标记的方法: iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $clusterserverport -j MARK --set-mark # #:代表十六进制整数;
打标作用 :提供辅助持久连接功能;在多个端口定义服务时,可把相关作为一个集群来调度;
配置RS1:
配置RS2:
在Director创建CA:
在RS1主机:
在CA服务上签证并传回给RS1:
在各RS主机重启web服务并查看443端口是否监听:
手动测试直接访问RS的IP:
测试请求,OK可以响应页面;-k表示可接受不受信任的页面响应;
单机测试ok,下面绑定80和443服务,打标记:
linux基础知识有哪些
第一阶段:linux基础入门Linux基础入门主要包括: Linux硬件基础、Linux发展历史、Linux系统安装、xshell连接、xshell优化、SSH远程连接故障问题排查、L inux基础优化、Linux目录结构知识、Linux文件属性、Linux通配符、正则表达式、Linux系统权限等第二阶段:linux系统管理进阶linux系统管理进阶包括:Linux定时任务、Linux用户管理、Linux磁盘与文件系统、Linux三剑客之sed命令等。第三阶段:Linux Shell基础Linux Shell基础包括:Shell编程基础、Linux三剑客之a第十二阶段:高性能数据库Redis和Memcached课程第十三阶段:Linux大规模集群架构构建(200台)第十四阶段:Linux Shell编程企业案例实战第十五阶段:企业级代码发布上线方案(SVN和Git)第十六阶段企业级Kvm虚拟化与OpenStack云计算第十七阶段公有云阿里云8大组件构建集群实战第十八阶段:Docker技术企业应用实践第十九阶段:Python自动化入门及进阶第二十阶段:职业规划与高薪就业指导