我们可以用多台LVS来做高可用。这里又会有两种选择:一是主备模式/主主模式,可以利用 Keepalived 的 VRRP 功能,但是大规模生产环境中,用集群模式更好,因为其同时提高了伸缩性和可用性,而前者只解决了可用性(当然,也更简单),
LVS是基于IP层的负载均衡,它通过修改数据包的目标IP或MAC地址来实现负载均衡,它不需要对数据包进行解析,所以性能很高,但也缺乏灵活性和功能性。LVS只能对TCP和UDP协议进行负载均衡,不能对HTTP等应用层协议进行负载均衡。
NGINX是基于HTTP层的负载均衡,它通过解析HTTP请求头来实现负载均衡,它可以根据URL,Cookie,参数等信息来选择合适的后端服务器,所以灵活性和功能性很强,但也会消耗一定的性能。NGINX不仅可以对HTTP协议进行负载均衡,还可以对其他协议如TCP, UDP, SMTP等进行负载均衡。
KEEPALIVED是基于VRRP协议的高可用软件,它通过在多台服务器之间共享一个虚拟IP地址(VIP)来实现故障转移和负载均衡,它可以监控服务器的健康状况,并在故障发生时自动切换VIP到备用服务器上。KEEPALIVED可以与LVS或NGINX结合使用,提供更高的可用性和可扩展性。
HAProxy是支持虚拟主机,可以工作在4、7层(支持多网段),能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;支持url检测后端的服务器,它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的,HAProxy 对后端的节点进行检测和负载均衡,不过在后端的数量超过10台时性能不如LVS,HAProxy的算法较多,达到8种。
简单对比的话
LVS: 基于四层的转发,只能做流量调度
HAproxy: 基于四层和七层的转发,是专业的代理服务器
Nginx: WEB服务器,缓存服务器,又是反向代理服务器,可以做基于四层和七层的转发
区别:
LVS只能做端口转发,而基于URL的、基于目录的这种转发LVS就做不了
HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
工作选择:
- 并发量很大时选择LVS
- 中小型公司并发量没那么大,选择HAproxy或者Nginx足已
- 中小型企业推荐使用HAproxy,HAproxy是专业的代理服务器,配置简单
- 公网ip不足,通过四层负载进行端口调度
常见的方式有:
主备模式:
lvs主备之间运行VRRP协议,日常态流量都从主走,当备检测到主挂了(停止收到主发来的VRRP通告后一段时间),便通过发送 free arp 来抢占vip,使得所有流量都从自己走,实现 failover
主主模式
互为主备,两台或多台同时使用,需要多个IP
集群模式: lvs集群和上联交换机运行OSPF,生成该vip的多路等价路由ecmp,这样流量就能根据用户自定义的策略流向 lvs。当某台lvs挂了,交换机会将其从路由表中剔除,实现 failover
比如下面的方式(具体配置可以自行实现):
lvs+keepalived+nginx 主备模式
资源浪费,无法支持大流量,简单,流量少可以用
lvs+keepalived+nignx 互为主备模式/双主模式
一般两个lvs设备 也可以多个lvs设备 可能出现流量不均的现象 容易脑裂 全靠gslb调度
ospf+lvs+keepalived+nignx
可以多台lvs ,方面扩展,需要交换机支持,随时切换
haproxy+keepalive+nginx+web
keepalive+nginx +web
nginx + web