LVS负载均衡基础

LVS负载均衡基础

 

一、常见nginx常用模块和模块的使用示例


1.性能相关的模块配置:

1.worker_processes auto|number  #worker进程的数量,通常为当前主机的cpu物理核心数目;    
2.worker_cpu_affinity auto [cpumask]  #将work进程绑定在固定的cpu上提高缓存命中率    
3.worker_priority_number   #指定worker进程优先级    
4.worker_rlimit_nofile number #worker进程所能够打开的文件数量上限。    

2.时间驱动events相关的模块配置

1.worker_connections number  #每个worker进程所能够打开的最大并发连接数    
2.use method    #指明并发连接请求的处理方法,默认自动选择最优方法,use epoll    
3.accept_mutex on | off     #处理新的连接请求的方法

3.http核心模块配置

1.server     #配置一个虚拟主机,可以基于ip,端口,fqdn配置;    
2.listen address     #配置套接字    
3.server_name        #配置服务名    
4.tcp_nodelay on|off     #延迟发送选项    
5.sendfile on|off        #在内核中封装报文直接发送    
6.server_tokens on|off|build|string   #是否在响应报文的server首部显示nginx版本    
7.location [ = | ~ | ~* | ^~ ] uri { ... }     #在一个server中location配置段可存在多个,用于实现从uri到文件系统的路径映射    
8.alias path   #路径别名    
9.keepalive_timeout timeout [header_timeout]    #设置保持长连接超时时长    
10.keepalive_requests number    #在一次长连接上所允许请求的资源的最大数量    
11.limit_rate rate    #限制响应给客户端的传输速率,单位是bytes/second 默认值0表示无限制

4.访问控制模块ngx_ http_ access _module

1.实现基于IP的访问控制功能:    
    allow address | CIDR | unix: | all;    
    deny address | CIDR | unix: | all;

5.用户认证模块ngx_ http_ auth_ basic_ module

1.实现基于用户的访问控制,使用basic机制进行用户认证    
    auth_basic string | off;    
    auth_basic_user_file file;

6.状态查看模块ngx_ http_ http_ stub_ status_ module

1.Active connections:当前状态,活动状态的连接数    
2.accepts:统计总值,已经接受的客户端请求的总数    
3.handled:统计总值,已经处理完成的客户端请求的总数    
4.requests:统计总值,客户端发来的总的请求数    
5.Reading:当前状态,正在读取客户端请求报文首部的连接的连接数    
6.Writing:当前状态,正在向客户端发送响应报文过程中的连接数    
7.Waiting:当前状态,正在等待客户端发出请求的空闲连接数

7.日志记录模块

1.log_format name string ...;   #string可以使用nginx核心模块及其它模块内嵌的变量    
2.access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];access_log off;    #访问日志文件路径,格式及相关的缓冲的配置    
3.open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];open_log_file_cache off;    #缓存各日志文件相关的元数据信息

8.压缩功能相关的模块配置

1.gzip on | off;     #启用或禁用gzip压缩    
2.gzip_comp_level level;  #压缩比由低到高: 1 到 9  默认: 1
3.gzip_disable regex ...;  #匹配到客户端浏览器不执行压缩    
4.gzip_min_length length;  #启用压缩功能的响应报文大小阈值    
5.gzip_http_version 1.0 | 1.1; #设定启用压缩功能时,协议的最小版本 默认: 1.1

9.https模块ngx_ http_ ssl_module模块

1.ssl on | off;    #为指定虚拟机启用HTTPS protocol, 建议用listen指令代替    
2.ssl_certificate file;     #当前虚拟主机使用PEM格式的证书文件    
3.ssl_certificate_key file;   #当前虚拟主机上与其证书匹配的私钥文件    
4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];   #支持ssl协议版本,默认为后三个    
5.ssl_session_cache off | none | [builtin[:size]]    #使用OpenSSL内建缓存,为每worker进程私有    
6.ssl_session_timeout time;    #客户端连接可以复用ssl session cache中缓存的ssl参数的有效时长,默认5m

10.重定向模块ngx_ http_ rewrite_ module

1.rewrite regex replacement [flag]     #将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI    
2.return    #停止处理,并返回给客户端指定的响应码    
3.rewrite_log on | off;    #是否开启重写日志, 发送至error_log(notice level)    
4.set $variable value;    #用户自定义变量

11.反向代理模块

1.proxy_pass URL    #proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机;proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;    
2.proxy_set_header filed value    #设定发往后端主机的请求报文的请求首部的值    
3.proxy_cache_path;    #定义可用于proxy功能的缓存; Context:http    
4.proxy_cache zone | off    #指明调用的缓存,或关闭缓存机制    
5.proxy_cache_key string    #缓存中用于“键”的内容    
6.proxy_cache_valid [code ...] time;    #定义对特定响应码的响应内容的缓存时长    
7.proxy_cache_methods GET | HEAD | POST ...;  #对哪些客户端请求方法对应的响应进行缓存, GET和HEAD方法总是被缓存    
8.proxy_connect_timeout time;    #定义与后端服务器建立连接的超时时长,如超时会出现502错误,默认为60s,一般不建议超出75s    
9.proxy_send_timeout time;    #把请求发送给后端服务器的超时时长;默认为60s    
10.proxy_read_timeout time;    #等待后端服务器发送响应报文的超时时长, 默认为60s

12.ngx_ stream_ proxy_ module模块

可实现代理基于TCP, UDP (1.9.13), UNIX-domain sockets的数据流。

1.proxy_pass address;    #指定后端服务器地址    
2.proxy_timeout timeout;  #无数据传输时,保持连接状态的超时时长    
3.proxy_connect_timeout time;    #设置nginx与被代理的服务器尝试建立连接的超时时长默认为60s

二、Linux集群类型、系统扩展方式及调度方法


Linux的集群类型包括:

1.LB:Load Balancing:负载均衡;    
2.HA:High Availiablity:高可用集群;    
3.HP:High Performance:高性集群。

系统扩展方式包括:

1.向上扩展:Scale up;    
2.向外扩展:Scale out。

调度算法:根据调度时是否考虑各RS当前的负载状态,可将调度算法分为静态方法和动态方法两种。

静态算法:

1.RR:roundrobin,轮询;    
2.WRR:weighted RR,加权轮询;    
3.SH:source hashing,实现session sticy,源ip地址hash,将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现回话绑定;    
4.DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡;

动态算法:根据每RS当前的负载状态及调度算法进行调度,方法主要有:LC,WLC,SED,NQ,LBLC等。

三、lvs四种集群有点及使用场景


LVS集群包括:lvs-nat;lvs-dr;lvs-tun,lvs-fullnat。

lvs-nat特点:多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。

1.RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;    
2.请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;    
3.支持端口映射,可修改请求报文的目标PORT;    
4.vs必须是Linux系统,rs可以是任意系统;

lvs-dr的特点:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。

1.确保前端路由器将目标IP为VIP的请求报文发往Director;    
2.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;    
3.RS跟Director要在同一个物理网络;    
4.请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;    
5.不支持端口映射;

lvs-tun特点:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)。

1.DIP, VIP, RIP都应该是公网地址;    
2.RS的网关不能,也不可能指向DIP;    
3.请求报文要经由Director,但响应不能经由Director;    
4.不支持端口映射;    
5.RS的OS得支持隧道功能;

lvs-fullnat的特点:通过同时修改请求报文的源IP地址和目标IP地址进行转发

1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;    
2.RS收到的请求报文源地址是DIP,因此,只能响应给DIP;但Director还要将其发往Client;    
3.请求和响应报文都经由Director;    
4.支持端口映射。

四、LVS-NAT、LVS-DR的工作原理并实现配置


LVS-NAT的工作原理:

1.首先client 发送请求[package] 给VIP;    
2.VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package 的DST IP 修改为realserver;    
3.realserver 收到这个package后判断dst ip 是自己,就处理这个package ,处理完后把这个包发送给LVS VIP;
4.LVS 收到这个package 后把sorce ip改成VIP的IP,dst ip改成 client ip然后发送给client;

1.其中Director server:10.3.223.11(对外提供服务的IP),192.168.88.100
Real server1:192.168.88.101
Real server2:192.168.88.102
2.在Director Server上配置LVS;首先打开系统的包转换功能,从而使系统充当路由器:

[root@node1 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

3.配置ipvs:

[root@node1 ~]# ipvsadm -A -t 10.3.223.11:80 -s rr    
[root@node1 ~]# ipvsadm -a -t 10.3.223.11:80 -r 192.168.88.101:80 -m    
[root@node1 ~]# ipvsadm -a -t 10.3.223.11:80 -r 192.168.88.102:80 -m    

4.测试验证:验证httpd的负载均衡。

[root@node4 ~]# for i in {1..20};do curl http://10.3.223.11/;done    
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2
                Real Server 1
                Real Server 2

LVS-DR的工作原理:client 发送一个pv请求给VIP;VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的realserver,然后把此请求的package 的MAC地址修改为realserver的MAC地址。

1.LVS:192.168.88.100
Real server1:192.168.88.101
Real server2:192.168.88.102
Vip地址:192.168.88.188

2.添加ipvsadm转发规则:

iptables -A -t 192.168.88.188:80 -s rr    
iptables -a -t 192.168.88.188:80 -r 192.168.88.101:80 -g -w 1    
iptables -a -t 192.168.88.188:80 -r 192.168.88.102:80 -g -w 1

3.添加vip:

ip addr add 192.168.88.188/32 dev lo

4.避免vip冲突:

cat>> /etc/sysctl.conf<<EOF
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
EOF
 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/99164

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班