3-6-LVS实现企业负载均衡高级应用配置实战

回顾:
lvs:四层交换或四层路由器;
lvs-type:
nat/dr/tun(ipip)/fullnat
nat/fullnat:请求和响应都经由director;
nat:仅修改请求报文的目标IP和端口
fullnat:修改请求报文的源和目标IP,目标端口(源端口最好不改)
dr/tun:仅请求报文经由director
dr:dip所属的网络接口与各RS的RIP所属的网络接口要在同一个物理网络;
tun:重新封装,跨路由
lvs-scheduler:
静态算法:仅根据算法进行调度,适用于短链接
rr/wrr/sh/dh
动态算法:根据算法和后端服务器负载进行调度
lc/wlc/sed/nq,lblc/lblcr通常适用于正向代理的使用场景
nat:多目标的Dnat,最容易实现

注意:如果每个RS上安装了web服务和telnet服务,可以基于web来调度,也可以基于telnet来调度,可以分开进行调度
有时候监听的端口不同不代表是不同的服务,例如80,443一个是http,一个是https,这是同一种服务
有时候访问的url必须使用https服务,(会话绑定会怎样?)有时候nginx还可以改写http请求为https,意味着客户端要重新发起请求了,还有可能如果做了会话黏性,http一台主机,https一台主机,普通页面可以访问http,登陆页面要访问https,这时候就会访问不到资源

把多个服务端口绑定为一个服务,基于防火墙标记来定义,让lvs识别为同一种服务,
也就是说基于iptables规则先把流量归为一类(打标记),然后根据防火墙标记来进行调度
在prerouting上做统一标记,input上根据标记来调度,哪个标记调度到哪里

接下来演示将多个服务统一调度:
视频中机器重启了,配置就丢了,rs先配置vip地址,然后设置内核参数,测试vip,ping不通然后directory配置vip,就能ping通

视频中机器重启了,配置丢了
directory:192.16.0.6
ifconfig eno16777736:0 172.16.0.99 netmask 255.255.255.255 broadcast 172.16.0.99 up---配置vip
ifconfig---查看ip配置好没有
这时可以ping通,因为ping的是directory

RS1:172.16.0.7
bash -x setparam.sh start
ifconifg
scp setparam.sh 172.16.0.8:/root/
然后ping vip172.16.0.99不通,因为directory还没有配置,上边的directory vip配置

systemctl start httpd.service

RS2:172.16.0.8
bash -x setparam.sh start
ifconifg

systemctl start httpd.service

这里使用sh模型来演示,以前讲过不同服务怎么调度,这里就不演示了
http可以使用httpd服务,但是https需要配置证书的,两台机器可以使用相同的证书,私钥也是同一个,https很贵又很慢,意味着每次会话请求要使用更多的资源,为了加速,使用会话缓存。
ssl服务建立后,在服务端会有缓存机制,默认会话缓存5分钟,有两种逻辑,1、每一个worker进程有自己的私有缓存(有问题,被调度后会话到另一个server上了),2、多个worker可以使用共享缓存
使用同一个证书就可以缓存了,但是会出现1的问题,所以只能会话绑定,但是又违反负载均衡规则,所以,
可以这么做,用户请求到达调度器是ssl会话,调度器和server之间就不是ssl了,不过这是lvs做不到的,lvs只能让rs都配置证书,nginx可以让nginx自己安装证书,rs不需要,nginx前还可以使用lvs进行四层调度。灵活运用!!!

把lvs:director当作调度器和CA
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048)---创建私钥
req -new -x509 -key private/cakey.pem -out cacert.pem -days 365---生成自签证书,会要求输入证书的内容,时间是1年
Country Name:CN
State or Province Name:Beijing
Locality Name:Beijing
Organization Name:MageEdu
Organizational Unit Name:devops
Common Name:ca.ilinux.io

touch index.txt
echo 01 > serial

本机或者后端RS都可以生成私钥和证书请求,只要复制给其他主机就可以,视频中仍然是在本机设置
openssl genrsa -out httpd.key 2048---生成私钥
chmod 600 httpd.key---修改权限
openssl req -new -key httpd.key -out httpd.csr---会要求输入证书的内容
Country Name:CN
State or Province Name:Beijing
Locality Name:Beijing
Organization Name:MageEdu
Organizational Unit Name:devops
Common Name:www.ilinux.io---一定是解析成vip地址时的域名

openssl ca -in httpd.csr -out httpd.crt -days 365
把crt和key证书和私钥复制给rs
scp -p httpd.crt httpd.key 172.16.0.7:/etc/httpd/conf.d/
scp -p httpd.crt httpd.key 172.16.0.8:/etc/httpd/conf.d/

RS1:
172.16.0.7---就可以配置ssl了
yum -y install mod_ssl---安装模块
vim /etc/httpd/conf.d/ssl.conf---做如下修改:
DocumentRoot “/var/www/html”---把注释去掉
ServerName www.ilinux.io---修改为自己的主机名
SSLCertificateFile /etc/httpd/conf.d/httpd.crt
SSLCertificateKeyFile /etc/httpd/conf.d/httpd.key
httpd -t检查下语法
systemctl restart httpd.service
ss -tnl---可以看到80、443就可以
scp ssl.conf 172.16.0.8:/etc/httpd/conf.d/
然后172.16.0.8就可以直接重启服务了
systemctl restart httpd.service
ss -tnl---可以看到80、443就可以

CURL可以指明使用哪个协议使用哪个证书来访问,如果要验证客户端发过来的证书,要指明自己的ca证书,
curl --cacert /etc/pki/CA/cacert.pem https://172.16.0.7---这里会有问题,没有做域名
vim /etc/hosts---添加下面一行
172.16.0.7 www.ilinux.io

证明可以访问了,就需要把两个服务打包成一个了
在172.16.0.6上做
iptables -F---先清空所有的规则
iptables -t mangle -vnL---查看现有的规则
iptables -t mangle -A PREROUTING -d 172.16.0.99 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 3
iptables -t mangle -vnL---查看现有的规则

ipvsadm -A -f 3 -s sh---f表示防火墙标记为3的流量,sh是调度方法
ipvsadm -a -f 3 -r 172.16.0.7 -g---r是realserver的意思
ipvsadm -a -f 3 -r 172.16.0.8 -g---r是realserver的意思
ipvsadm -ln---查看ipvs的规则列表

然后在一个客户端:这是测试客户端
vim /etc/hosts---添加下列一行
172.16.0.99 www.ilinux.io

curl http://www.ilinux.io/test1.html
多次请求可以看到始终访问的是rs1,因为使用的sh算法

在172.16.0.6上
scp /etc/pki/CA/cacert.pem 172.16.0.67:/root/---放到客户端上
客户端上再次请求
curl --cacert /root/cacert.pem https://www.ilinux.io/test1.html
多次访问可以看到,仍然是绑定在rs1上,因为是用了sh算法

172.16.0.6上
ipvsadm -E -f 3 -s rr---更换调度方法为rr轮询
ipvsadm-save > /etc/sysconfig/ipvsadm
iptables-save > /etc/sysconfig/iptables

在客户端上
for i in {1..10}; do curl http://www.ilinux.io/test1.html;curl --cacert /root/cacert.pem https://www.ilinux.io/test1.html;done
这是一个循环,可以看到是轮询调度的

注意:sh算法是根据源地址和hash来进行绑定,但是绑定多长时间呢?不知道

视频中的课件:
FWM:FireWall Mark
netfilter:
target:MARK,This target is used to set the Netfilter mark value assoclated with the packet.
--set-mark value
借助于防火墙标记来分类报文,而后基于标记定义集群服务;可将多个不同的应用使用同一个集群服务进行调度;

    打标记方法(在Director主机):
        #iptables -t mangle -A PREROUTING -d $vip -p $proto --dport $port -j MARK --set-mark NUMBER
    基于标记定义集群服务:
        #ipvsadm -A -f NUMBER[options]
lvs persistence:持久连接---脱离于算法,无论用什么算法都是持久的
    持久连接模板:实现无论使用任何调度算法,在一段时间内,能够实现将来自同一个地址的请求始终发往同一个RS;
        ipvsadm -A|E -t|u|f service-address [-s scheduler][-p [timeout]]
    port Affinity:
        每端口持久:每个端口对应定义为一个集群服务,每集群服务单独调度;
        每防火墙标记持久:基于防火墙标记定义集群服务;可实现将多个端口上的应用统一调度,即所谓的port Affinity;
        每客户端持久:基于0端口定义集群服务,即将客户端对应所有应用的请求统统调度至后端主机,必须定义为持久模式;

保存及重载规则:
    保存:建议保存至/etc/sysconfig/ipvsadm
        ipvsadm-save > /PATH/TO/IPVASDM_FILE
        ipvsadm -S > /PATH/TO/IPVSADM_FILE
        systemctl stop ipvsadm.service

    重载:
        ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
        ipvsadm -R > /PATH/FROM/IPVSADM_FILE
        systemctl restart ipvsadm.service
考虑:
    (1)Director不可用,整个系统将不可用;SPoF
        解决方案:高可用
            keepalived
            heartbeat/corosync
    (2)某RS不可用时,Director依然会调度请求至此RS;
        解决方案:对各RS的健康状态做检查,失败时禁用,成功时启用;
            keepalived
            heartbeat/corosync,idirectord

注意:
ipvsadm -A -t 172.16.0.99:0 -s rr -p---不加-p选项会报错,必须加,0表示通配,所有的服务都作为一个集群服务
ipvsadm -a -t 172.16.0.99:0 -r 172.16.0.7 -g
ipvsadm -a -t 172.16.0.99:0 -r 172.16.0.8 -g
ipvsadm -ln
然后客户端继续使用for循环仍然可以看到是绑定在一台主机上的,因为使用了持久链接。

原文地址:https://blog.51cto.com/13852573/2364129

时间: 2024-10-31 14:20:46

3-6-LVS实现企业负载均衡高级应用配置实战的相关文章

3-7-LVS实现企业负载均衡高级应用配置实战2

健康逻辑:网络层检测:能不能ping通,有可能有误差,服务不知道在不在线传输层检测:80或443端口,tcp ping 或udp ping,但是不知道服务可用不可用(页面资源被删)更向上一层,应用层检测资源,状态码必须是200,内容必须包含我检测的关键字,但是会记录日志,会干扰做哪一层的检测,自己决定,而且检测不是一次有问题就认为有问题,(这叫做软状态)连续3次以后就转换为硬状态(自己设置)或者10次以内有多少次有问题,转换硬状态 注意:脚本的执行效率很差,因为脚本不是专门的编程语言,它的实现是

LVS+Keepalived实现负载均衡

一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户

LVS DR模式 负载均衡服务搭建

LVS 负载均衡 最近在研究服务器负载均衡,阅读了网上的一些资料,发现主要的软件负载均衡方案有nginx(针对HTTP服务的负载均衡),LVS(针对IP层,MAC层的负载均衡).LVS模式工作在网络层,且由内核实现负载转发,效率要比nginx高.     LVS负载均衡包含三种模式: 1. NAT模式(类似路由器,实现外网内网地址映射,负载均衡服务器修改请求包的源以及目的MAC地址和IP地址,发送给实际服务器:负载均衡服务器,修改响应包的源以及目的MAC地址和IP地址,发送给客户端.请求和响应报

借助LVS+Keepalived实现负载均衡(转)

原文:http://www.cnblogs.com/edisonchou/p/4281978.html 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一

借助LVS+Keepalived实现负载均衡

一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户

利用lvs实现discuz负载均衡

一:实验目的 利用LVS实现discuz负载均衡  二:实验拓扑图 WEB服务器与PHP服务器在同一网段内,mysql服务器同时起着LVS负载均担作用. 三:搭建WEB服务器 本次WEB服务器采用编译安装服务,编译过程请参考LAMP平台编译.接下来配置WEB服务器主配置文件.  vim /etc/httpd24/extra/httpd-vhosts.conf  #前面的路径为编译时指定的路径.  ifconfig eth0 192.168.1.16/24 up           #修改主机的I

LVS+IPvsadm+Keepalive负载均衡安装部署

LVS中文站点 http://zh.linuxvirtualserver.org/ 一. LVS简介 LVS: Linux Virtual Server的缩写,意思是Linux虚拟服务器,是一个虚拟的服务器集群系统. LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡 宗旨: 使用集群技术和Linux操作系统实现一个高性能.高可用的服务器. 很好的可伸缩性(Scalability) 很好的可靠性(Reliability) 很好的可

【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户

《大型网站技术实践》借助LVS+Keepalived实现负载均衡

一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等. 古人有云:当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来拉车. 在实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户