【Nginx-Series】lvs+keepalived+Nginx搭建高可用nginx集群
目录
lvs+keepalived+Nginx搭建高可用nginx集群
lvs+keepalived+Nginx搭建高可用nginx集群
今天我同事着急的叫我,
我很礼貌的回应他说:发生肾么事了。
他说:你说单节点的nginx挂掉了,虽然咱们也有搭建后台服务集群,那么这样依然会崩溃呀。
我不假思索的回复他,啪,很快啊。说:小伙子,你不讲码德,我这不就是要给你讲,你怎么还抢问呢?
他说他是胡乱问的,诶,他可不是胡乱问的,他是有bear而来!!!
前言:当前行业内的前后端分离项目越来越火爆,而且为了让系统能够经受住压力,往往都会做集群部署,尽可能达到高可用,从而也可以使系统更为稳定的为用户服务,
前面我的文章讲到了单节点nginx搭建的负载均衡。可是会遇到一个问题,如果当前nginx节点的服务器挂掉依然会引起整个系统的崩溃,所以,本节就会讲到如何搭建nginx
的集群,并实现负载均衡,会用到两个技术lvs+keepalived。
LVS介绍
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的*软件项目之一。
宗旨:
使用集群技术和Linux操作系统实现一个高性能、高可用的服务器.
很好的可伸缩性(Scalability)
很好的可靠性(Reliability)
很好的可管理性(Manageability)。
负载均衡模式:
VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
NAT:基于网络地址的转换,通过lvs接收并响应请求。
TUN:IP隧道模式,该模式的硬性要求就是所有后面的server节点的服务器都要配置网卡用于建立隧道,工作模式是,所有请求会经过lvs,当server节点处理好响应之后会每个单独响应给用户,这样的话server集群的各个节点也会暴露在公网。
DR:直接路由模式,该工作模式是,所有请求会经过lvs,然后分发给server集群的各个节点,此时server的各个节点返回响应的话会经过一个路由,通过路由中转以后返回给用户。
keepalived介绍
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
作用:主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)。
nginx介绍
Linux下安装部署NGINX、Nginx配置文件nginx.conf详解以及负载均衡讲解
ip | 作用 |
---|---|
192.168.1.110 | lvs+keepalived(Master) |
192.168.1.111 | lvs+keepalived(BackUP) |
192.168.1.112 | nginx112 |
192.168.1.113 | nginx113 |
安装Keepalived
- 下载:keepalived-2.0.20.tar.gz
- 上传至110和111服务器/home/software/
- 解压编译、安装
-
tar -zxvf keepalived-2.0.18.tar.gz ./configure --prefix=/usr/locah/keepalived --sysconf=/etc (注意:一定要指定 --sysconf在/etc下) make && make install ##常见错误1 !!! OpenSSL is not properly installed on your system. !!! !!! Can not include OpenSSL headers files. !!! 解决方法: yum -y install openssl-devel ##常见错误2 this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.(此版本不支持使用IPv6的IPVS。 请安装libnl / libnl-3 dev库以支持带IPVS的IPv6。) 解决方法: yum -y install libnl libnl-devel ##常见问题3 configure: error: libnfnetlink headers missing 解决方法: yum install -y libnfnetlink-devel
- 将keepalived注册为系统服
-
cd /home/software/keepalived-2.0.20/keepalived/etc/ cp init.d/keepalived /etc/init.d/ cp sysconfig/keepalived /etc/sysconfig/ systemctl daemon-reload
- 启动、关闭、重启
-
systemctl start keepalived.service systemctl stop keepalived.service systemctl restart keepalived.service
安装ipvsadm
- 只在110和111上进行安装,用于查看lvs转发及代理情况的工具
- yum install ipvsadm -y
配置RS(两台Nginx服务器)
该步骤两台都要执行
- 关闭防火墙
-
systemctl stop firewalld.service systemctl disable firewalld.service systemctl mask firewalld.service
- 编辑realserver脚本文件
- cd /etc/init.d/
- vim realserver.sh
-
#!/bin/bash SNS_VIP=192.168.1.100 /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP 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 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
- 设置脚本权限
-
chmod u+x /etc/init.d/realserver.sh // 因为realserver脚本中用到了/etc/rc.d/init.d/functions,所以一并设置权限 chmod u+x /etc/rc.d/init.d/functions
-
启动
-
/etc/rc.d/init.d/realserver.sh start
- 查看执行结果 : ip addr
配置keepalived
配置 MASTER
- 进入192.168.1.110服务器
-
cd /etc/keepalived/ vim keepalived.conf
-
global_defs { router_id lvs_110 #router_id 机器标识 } vrrp_instance VI_1 { state MASTER #设置lvs的状态,MASTER和BACKUP两种,必须大写 interface ens33 #设置对外服务的接口 virtual_router_id 110 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 priority 100 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置验证类型和密码 auth_type PASS #主要有PASS和AH两种 auth_pass 1111 #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同 } virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个 192.168.1.100 } } #设置虚拟服务器,需要指定虚拟ip和服务端口,并和nginx80保持一致 virtual_server 192.168.1.100 80 { #健康检查时间间隔,单位秒 delay_loop 6 #负载均衡调度算法 lb_algo rr #负载均衡转发规则 lb_kind DR #设置会话保持时间,对动态网页非常有用 persistence_timeout 50 #指定转发协议类型,有TCP和UDP两种 -t protocol TCP #配置服务器节点1,需要指定real server的真实IP地址和端口 real_server 192.168.1.112 80 { #设置权重,数字越大权重越高 weight 1 TCP_CHECK { #连接超时为10秒 connect_timeout 10 #重连次数 retry 3 #重试间隔 delay_before_retry 3 #连接端口为80,要和上面的保持一致 connect_port 80 } } real_server 192.168.1.113 80 { weight 1 TCP_CHECK { connect_timeout 10 retry 3 delay_before_retry 3 connect_port 80 } } }
- 启动keepalived : systemctl start keepalived.service
配置BACKUP
- 进入192.168.1.111服务器
-
cd /etc/keepalived/ vim keepalived.conf
-
global_defs { router_id lvs_111 #router_id 机器标识 } vrrp_instance VI_1 { state BACKUP #设置lvs的状态,MASTER和BACKUP两种,必须大写 interface ens33 #设置对外服务的接口 virtual_router_id 110 #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示 priority 80 #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup advert_int 1 #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒 authentication { #设置验证类型和密码 auth_type PASS #主要有PASS和AH两种 auth_pass 1111 #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同 } virtual_ipaddress { #设置虚拟ip地址,可以设置多个,每行一个 192.168.1.100 } } #设置虚拟服务器,需要指定虚拟ip和服务端口,并和nginx80保持一致 virtual_server 192.168.1.100 80 { #健康检查时间间隔,单位秒 delay_loop 6 #负载均衡调度算法 lb_algo rr #负载均衡转发规则 lb_kind DR #设置会话保持时间,对动态网页非常有用 persistence_timeout 50 #指定转发协议类型,有TCP和UDP两种 -t protocol TCP #配置服务器节点1,需要指定real server的真实IP地址和端口 real_server 192.168.1.112 80 { #设置权重,数字越大权重越高 weight 1 TCP_CHECK { #连接超时为10秒 connect_timeout 10 #重连次数 retry 3 #重试间隔 delay_before_retry 3 #连接端口为80,要和上面的保持一致 connect_port 80 } } real_server 192.168.1.113 80 { weight 1 TCP_CHECK { connect_timeout 10 retry 3 delay_before_retry 3 connect_port 80 } } }
- 启动keepalived : systemctl start keepalived.service
由于本人电脑容量有限,搞不了演示,实际在公司内网已经测试完成,放心使用。
完成!打工搞成,搞IP的不要窝里斗,谢谢大家!!
本文地址:https://blog.csdn.net/weixin_44253327/article/details/110563379
上一篇: 无服务器架构
推荐阅读