[TOC]
一、集群的含义
由多台主机构成,但对外表现为一个整体
二、集群的分类
1、负载均衡集群
1、提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发,高负载的整体性能
2、LB的负载分配依赖于主节点的分流算法
2、高可用集群
1、提高应用系统的可靠性,尽可能减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
2、HA的工作方式包括双工和主从两种模式
3、高性能运算集群
1、提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
2、高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
三、负载均衡集群
1、架构
第一层:负载均衡池(LVS)
第二层:服务器池
第三层:共享存储
2、LVS-NAT
1)、介绍
1、负载调度器为所有服务节点的网关,即作客户机的访问入口,也是各节点回应客户机的访问出口;
2、服务器节点使用私有IP地址,与调度器处于同一个物理网络,安全性优于其他两种方式。
director(调度器)与RS(服务节点)必须在同一个局域网内。
RS的网关必须指向director的私网DIP。
请求和响应报文都需要director转发,会成为整个系统的瓶颈。
支持端口映射,client访问80端口,director可以映射到RS的8080端口上。
director必须是Linux系统。
director需要两个网卡,一个与互联网通信的公网VIP,一个与RS通信的私网DIP。
2)、环境
调度服务器一台:
1 2 3
| IP地址:192.168.100.10(内网)
192.168.73.10(外网)
|
Web服务器两台:
1 2 3
| IP地址:192.168.100.11(Server1)
IP地址:192.168.100.12(Server2)
|
NFS共享服务器一台:(可省略)
1
| IP地址:192.168.100.13 (内网)
|
3)、调度器配置
1、两张网卡,一张用于内网通信,一张用于外网通信
1 2 3
| 192.168.100.10(VM1)
192.168.73.10(VM8)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| [root@LVS-Server ~]# modprobe ip_vs ###加载LVS内核模块(LVS现已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。以下操作能够手动加载ip_vs模块,并查看当前系统中的ip_vs模块的版本信息)
[root@LVS-Server ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096) ###版本信息
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS-Server ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm ###安装管理软件ipvsadm,不需要启动
[root@LVS-Server ~]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 ###开启路由转发
[root@LVS-Server ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@LVS-Server ~]# vi nat.sh ###编辑调度服务器脚本
\#!/bin/bash
echo "1" > /proc/sys/net/ipv4/ip_forward ###开启路由地址转换
ipvsadm -C ###清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 192.168.73.10:80 -s rr ###创建虚拟服务器
ipvsadm -a -t 192.168.73.10:80 -r 192.168.100.11:80 -m ###添加服务器节点
ipvsadm -a -t 192.168.73.10:80 -r 192.168.100.12:80 -m ###添加服务器节点
ipvsadm -Ln ###查看节点状态,“-n”以数字形式显示显示地址,端口信息
[root@LVS-Server ~]# sh nat.sh
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.73.10:80 rr
-> 192.168.100.11:80 Masq 1 0 0
-> 192.168.100.12:80 Masq 1 0 0
|
ipvsadm命令解析
1 2 3 4 5 6 7 8 9
| ipvsadm命令选项解析: -C:清除内核虚拟服务器表中的所有记录 -A:增加一台新的虚拟服务器 -t:说明虚拟服务器提供的是tcp的服务 -s rr:启用轮询算法 -a:在一个虚拟服务器中增加一台新的真实服务器 -r:指定真实服务器 -m:指定LVS的工作模式为NAT模式 ipvsadm:启用LVS功能
|
4)、Web服务器配置
1、网关为调度器内网IP;
2、route -n查看是否有默认路由生成;
3、挂载NFS共享
5)、验证方式
访问调度器外网IP,刷新看是否会轮询
3、LVS-DR
1)、特点
1、保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS
2、RS的RIP可以使用私有地址,但也可以使用公网地址
3、RS和director必须在同一物理网络中
4、请求报文有director调度,但响应报文不一定经由director
不支持端口映射
5、RS的网关不能指向DIP(LVS服务器IP)
2)、报文转发过程
1)client发送请求到vip,real-server配置限制对vip应答arp,而lvs会对vip响应arp,因此client将请求发到LVS。
2)LVS机器收到发往vip的报文后,根据目的IP和目的port匹配ipvs规则,将报文目的mac改为real server的mac,同时将源mac改为LVS的mac后,发送到real server。
3)real server收到之后,mac/IP都是本机的,就将报文交由系统处理。
4)回程报文因real server收到的报文源IP就是client IP,real server直接将请求回给client。如果client和real server是同一个网段,响应报文直接通过二层透传发送给client,报文目的mac即为client mac;如果client和real server不是同一个网段,响应报文先发送到gateway,再走三层转发返回client。
3)、环境
调度服务器一台;
Web服务器两台:
1 2 3
| IP地址:192.168.100.11(Server1)
IP地址:192.168.100.12(Server2)
|
NFS共享服务器一台:(可省略)
4)、调度器配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| [root@LVS-Server ~]# modprobe ip_vs ###加载LVS内核模块(LVS现已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。以下操作能够手动加载ip_vs模块,并查看当前系统中的ip_vs模块的版本信息) [root@LVS-Server ~]# cat /proc/net/ip_vs IP Virtual Server version 1.2.1 (size=4096) ###版本信息 Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@LVS-Server ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm ###安装管理软件ipvsadm,不需要启动
[root@LVS-Server ~]# vi /etc/sysctl.conf net.ipv4.ip_forward=1
[root@LVS-Server ~]# vi dr.sh ###编辑调度服务器脚本 #!/bin/bash ifconfig ens33:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up ###添加虚拟地址的虚接口 route add -host 192.168.100.100 dev ens33:0 ###给ens33:0添加路由 ipvsadm -C ###清除内核虚拟服务器表中的所有记录 ipvsadm -A -t 192.168.100.100:80 -s rr ###创建虚拟服务器 ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.11:80 -g ###添加服务器节点 ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.12:80 -g ###添加服务器节点 ipvsadm -Ln ###查看节点状态,加个“-n”将以数字形式显示地址、端口信息
[root@LVS-Server ~]# sh dr.sh IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.100:80 rr -> 192.168.100.12:80 Route 1 0 0 -> 192.168.100.11:80 Route 1 0 0
[root@LVS-Server ~]# ip addr ###看是否有虚拟路由生成 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:42:ea:42 brd ff:ff:ff:ff:ff:ff inet 192.168.100.10/24 brd 192.168.100.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.100.100/32 brd 192.168.100.100 scope global ens33:0 valid_lft forever preferred_lft forever inet6 fe80::a2b4:ea7e:78e6:4f86/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000 link/ether 52:54:00:ea:07:54 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000 link/ether 52:54:00:ea:07:54 brd ff:ff:ff:ff:ff:ff
|
5)、Web服务器配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| [root@Web1 ~]# vi web.sh #!/bin/bash ifconfig lo:0 192.168.100.100 broadcast 192.168.100.100 netmask 255.255.255.255 up route add -host 192.168.100.100 dev lo:0 echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce sysctl -p &> /dev/null
[root@Web1 ~]# sh web.sh [root@Web1 ~]# ifconfig ###查看是否有虚拟路由生成 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.11 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::e654:4e48:ec26:2279 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:9f:bd:e6 txqueuelen 1000 (Ethernet) RX packets 713398 bytes 1035992165 (987.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 59733 bytes 3967447 (3.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 164 bytes 18108 (17.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 164 bytes 18108 (17.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 192.168.100.100 netmask 255.255.255.255 loop txqueuelen 1 (Local Loopback)
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:dc:14:16 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
|
6)、验证方式
访问虚拟IP,看是否会进行轮询
四、负载均衡+高可用集群
1、LVS+Keepalived
1)、实现原理
1、由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务;
2、每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
3、若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
2)、故障切换
是由虚拟IP地址的漂移来实现的,适用于各种应用服务器
3)、主要优势
1、对LVS负载调度器实现热备切换,提高可用性
2、对服务器池中的节点进行健康检查,自动移除失效节点,恢复后再重新加入
4)、Master节点
(1)全局配置、热备参数配置
要为master和backup调度器实现热备功能,漂移地址使用LVS群集的VIP地址
(2)Web服务器池配置
在keepalived的热备配置基础上,添加“virtual_server VIP 端口 {…}”区段来配置虚拟服务器
包括负载调度算法、群集工作模式、健康检查间隔、真实服务器地址等参数
5)、Backup节点
和master服务器有三个配置要不相同,其余配置均相同:
1 2 3 4 5
| (1)router_id:设和其他web服务器不一样的名称
(2)state:设为BACKUP
(3)priority:值要低于主服务器
|
6)、具体配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| [root@Server1 ~]# modprobe ip_vs ###加载ip_vs模块 [root@Server1 ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm ###安装管理软件ipvsadm
[root@Server1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel [root@Server1 ~]# tar zxf keepalived-2.0.13.tar.gz [root@Server1 ~]# cd keepalived-2.0.13/ [root@Server1 keepalived-2.0.13]# ./configure --prefix=/ [root@Server1 keepalived-2.0.13]# make && make install [root@Server1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d ###加入系统管理服务 [root@Server1 keepalived-2.0.13]# systemctl enable keepalived.service ###设置开机自启动 [root@Server1 ~]# vi /etc/keepalived/keepalived.conf ###编辑配置文件 global_defs { #全局参数 router_id LVS_01 #指定名称,各个服务器名称要不一样 } vrrp_instance VI_1 { #指定vrrp热备参数 state MASTER #服务器角色是master,备份服务器设置为BACKUP interface ens33 #修改物理网卡名称,默认是centos6的eth0 virtual_router_id 51 #组号相同 priority 100 #优先级,主服务器设置要大于备服务器 authentication { auth_type PASS #验证类型和密码,不建议修改 auth_pass 1111 } virtual_ipaddress { 192.168.100.100 #漂移地址(VIP)地址,可以有多个 } } virtual_server 192.168.100.100 80 { #配置虚拟服务器 delay_loop 6 protocol TCP #健康检查用的是TCP还是UDP lb_algo rr #调度算法为轮询 lb_kind DR #LVS的工作模式为DR(直连路由)
real_server 192.168.100.12 80 { weight 1 TCP_CHECK { #健康检查参数 connect_port 80 #检查80端口连接是否正常 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.100.13 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
|
2、Haproxy
1)、与LVS的区别
1、LVS在企业应用中抗负载能力很强,但存在不足
LVS不支持正则处理,不能实现动静分离(nginx都支持)
对于大型网站,LVS的实施配置复杂,维护成本相对较高
2、Haproxy是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理的软件
适用于负载大的Web站点
运行在硬件上可支持数以万计的并发连接的连接请求
2)、Haproxy调度算法原理
第一种(RR):
RR算法是最简单最常用的一种算法,即轮询调度
理解举例
有三个节点A、B、C,第一个用户访问会被指派到节点A,第二个用户访问会被指派到节点B,第三个用户访问会被指派到C节点
第四个用户访问继续指派到节点A,轮询分配访问请求实现负载均衡效果
第二种(LC):
LC算法即最小连接数算法,根据后端的节点连接数大小动态分配前端请求
理解举例
有三个节点A、B、C,各节点的连接数分别为A:4、B:5、C:6,此时如果有第一个用户连接请求,会被指派到A上,连接数变为A:5、B:5、C:6
第二个用户请求会继续分配到A上,连接数变为A6、B:5、C:6;再有新的请求会分配给B,每次将新的请求指派给连接数最小的客户端
由于实际情况下A、B、C的连接数会动态释放,很难会出现一样连接数的情况,因此此算法相比较rr算法有很大改进,是目前用到比较多的一种算法
第三种(SH):
SH即基于来源访问调度算法,此算法用于一些有 Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度(上一次请求分给哪个web服务器的下次还是分给该服务器)
理解举例
有三个节点A、B、C,第一个用户第一次访问被指派到了A,第二个用户第次访问被指派到了B
当第一个用户第二次访问时会被继续指派到A,第二个用户第二次访问时依旧会被指派到B,只要负载均衡调度器不重启,第一个用户访问都会被指派到A,第二个用户访问都会被指派到B,实现集群的调度
此调度算法好处是实现会话保持,但某些IP访问量非常大时会引起负载不均衡,部分节点访问量超大,影响业务使用
3)、配置文件详解
1、global:全局配置
1 2 3 4 5 6 7 8 9
| 1、log127.0.0.1 lcal0:配置日志记录,local0为日志设备,默认存放到系统日志
2、log127.0.0.1 loca1 notice:notice为日志级别,通常有24个级别
3、maxconn4096:最大连接数
4、uid 99:用户uid
5、gid 99:用户gid
|
2、defaults:默认配置
一般会被应用组件继承,如果在应用组件中没有特别声明,将安装默认配置参数设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 1、log global:定义日志为global配置中的日志定义
2、mode http:模式为http
3、option httplog:采用http日志格式记录日志
4、retries 3:检查节点服务器失败连续达到三次则认为节点不可用
5、maxconn2000:最大连接数
6、contimeout5000:连接超时时间
7、clitimeout50000:客户端超时时间
8、srvtimeout50000:服务器超时时间
|
3、listen:应用组件配置
1 2 3 4 5 6 7 8 9 10 11
| 1、listen appli4- backup 0.0.0.0:10004:定义一个appli4- backup的应用
2、option httpchk /index.html检查服务器的index.html文件
3、option persist:强制将请求发送到已经down掉的服务器(注释掉,否则起服务会报错)
4、balance roundrobin:负载均衡调度算法使用轮询算法
5、server inst1 192.168.114.56:80 check inter 2000 fall 3:定义在线节点
6、server inst2 192.168 114.56:81 check inter 2000 fall 3 backup:定义备份节点
|
4)、具体配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [root@Haproxy haproxy]# vim haproxy.cfg
下面两项前面加上注释
\#chroot /usr/share/haproxy #固有目录,可注释掉
\#redispatch #当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。需要注释掉
将原来的listen配置项删除,添加如下参数:
listen webcluster 0.0.0.0:80
option httpchk GET /index.html
balance roundrobin
server web1 192.168.73.20:80 check inter 2000 fall 3
server web2 192.168.73.30:80 check inter 2000 fall 3
|
5)、日志管理
1、默认是输出到系统的syslog(系统日志)中,生成环境中一般单独定义
2、具体配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| [root@Haproxy ~]# vi /etc/haproxy/haproxy.cfg global log /dev/log local0 info log /dev/log local0 notice [root@Haproxy ~]# systemctl restart haproxy.service
[root@Haproxy ~]# vi /etc/rsyslog.d/haproxy.conf if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log &~ if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log &~ [root@Haproxy ~]# systemctl restart rsyslog.service [root@Haproxy ~]# systemctl restart haproxy.service
[root@Haproxy ~]# cd /var/log/haproxy/ ###可看日志信息 [root@Haproxy haproxy]# ll 总用量 8 -rw-------. 1 root root 329 11月 5 18:02 haproxy-info.log -rw-------. 1 root root 132 11月 5 18:02 haproxy-notice.log
|
6)、参数优化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 1、maxconn:最大连接数,根据应用实际情况进行调整,推荐使用10240
2、daemon:守护进程模式, Haproxy可以使用非守护进程模式启动,建议使用守护进程模式启动
3、nbproc:负载均衡的并发进程数,建议与当前服务器CPU核数相等或为其2倍
4、retries:重试次数,主要用于对集群节点的检查,如果节点多,且并发量大,设置为2次或3次
5、option http-server-close:主动关闭http请求选项,建议在生产环境中使用此选项
6、timeout http-keep-alive:长连接超时时间,设置长连接超时时间,可以设置为10s
7、timeout http-request:http请求超时时间,建议将此时间设置为5~10s,增加http连接释放速度
8、timeout client:客户端超时时间,如果访问量过大,节点响应慢,可以将此时间设置短一些,建议设置为1min左右就可以了
|
五、负载均衡+keepalived故障:
1.keepalived服务启动了,但是VIP没出来
主要是启动keepalived服务的时候不会报错;
vrrp_scripts{}中定义了一个函数,里面放了判断nginx存活的脚本,下面track_script{}注意位置,要包含在vrrp_instance{}实例中; (因为一个括号问题排障了接近一个多小时,VIP就是起不来)
2.负载均衡常见典型故障
后台服务器down了,nginx就不会分配请求给它了,但是如果没有down,只是返回异常状态码了,比如504、502、404等,这时需要多一个负载均衡的配置,如下:
proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;意思是,当其中一台返回错误码404,500…等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率
3.Nginx负载均衡优化
(1)健康检查
下载nginx_upstream_check模块第三方模块 master.zip
upstream web {
server 172.16.1.7:80 max_fails=2 fail_timeout=10s;
server 172.16.1.8:80 max_fails=2 fail_timeout=10s;
check interval=3000 rise=2 fall=3 timeout=1000 type=tcp;
#interval 检测间隔时间,单位为毫秒
#rise 表示请求2次正常,标记此后端的状态为up
#fall 表示请求3次失败,标记此后端的状态为down
#type 类型为tcp
#timeout 超时时间,单位为毫秒
location /upstream_check {
check_status;
(2)nginx配置文件中调优
1、worker_processes 8;
nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计为8)。
2、worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。
3、worker_rlimit_nofile 65535;
这个指令是指当一个nginx 进程打开的最多文件描述符数目,理论值应该是最多打开文
件数(ulimit -n)与nginx 进程数相除,但是nginx 分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
4、use epoll;
使用epoll 的I/O 模型
六、如何进一步优化负载均衡群集架构?
使用外部两台LVS作为接入入口;进入之后再用多台nginx来分担请求
1.在keepalived+nginx的主备容灾高可用的架构中,nginx是作为外部访问系统的唯一入口,理论上一台nginx的最大并发量可以高达50000,但是当并发量更大的时候,keepalived+nginx的高可用机制是没办法满足需求的,因为keepalived+nginx的架构中只有一台nginx在工作(VIP在一台上),只有当master宕机或异常时候,备份机才会上位。那么如何解决更大的高并发问题呢,也许会问能不能搭建nginx集群,直接对外提供访问?
很显然这是欠妥当的,因为当nginx作为外部的唯一访问入口,没办法直接以集群的形式对外提供服务。但是在内网环境下,是可以用nginx集群(nginx横向扩展服务集合)的,当然总得有一个对外入口,所以需要在nginx集群之上,在加一层负载均衡器(两个LVS),作为系统的唯一入口。
2.LVS都有哪些模式,你们公司用的哪一种?
DR模式:客户端请求是到负载均衡器,负载均衡器将请求分发给后面的真实服务器之后,服务器直接回应到客户端
优点:
DR模式相对于NAT模式,RealServer直接在不经DirectServer的情况下直接将客户端的访问结果返回至给客户端,效率更加高效;
缺点:
所有的RealServer和DirectServer必须在同一局域网中;
除了这个DR模式之外,我还了解过IP隧道模式和NAT模式,不过没有在生产中用过。
IPVS的运行,使用的服务器资源主要是 CPU、内存I/O、网络I/O;IPVS完全运行在内存中,并且运行在内核态。
当IPVS的应用在DR模式时,既不耗CPU,也不耗I/O,运行非常快,所以系统负载非常的低,跟据我的经验,一般负载总是0。所以 LVS 应用对服务器的配置要求非常低。以为 LVS 很重要,所以配置一个相当高端的服务器,实在是一种浪费。
其实我们可以做一下计算:
就是说,当系统当前有100 万连接的时候,才用去内存 208 M,所以 IPVS 的主机,即使是1G的内存,也足以承载负载。
七、Haproxy和LVS/NGINX对比
(1)LVS在企业应用中康复在能力很强,但存在不足,LVS不支持正则处理,不能实现动静分离,对于大型网站,LVS的实施配置复杂,维护成本相对较高。
(2)haproxy特别适用于那些高负载、访问量很大,但提供高可用性、负载均衡、及TCP(四层)和HTTP(七层)应用的代理的软件的业务应用,不能实现动静分离。
(3)nginx配置简单,可以在实现负载均衡的同时,处理静态页面,分担Tomcat的负担。
LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
LVS:Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
LVS: 是基于四层的转发
Nginx:Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
HAproxy:HAproxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性,负载均衡,以及基于TCP和HTTP的应用程序代理。
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
区别: LVS由于是基于四层的转发所以只能做端口的转发,而基于URL的、基于目录的这种转发LVS就做不了
总结:通过概念方面,我们可以看得出来,都可以提供高可用和负载均衡等的服务,所以从概念方面,没有什么区别
工作选择:
HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
配置简单,所以中小型企业推荐使用HAproxy