Nginx 反向代理,负载均衡及搭建高可用集群( 三 )


  1. 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器 , 如果后端服务器 down 掉 , 能自动剔除 。
  2. weight weight 代表权,重默认为 1,权重越高被分配的客户端越多 指定轮询几率 , weight 和访问比率成正比 , 用于后端服务器性能不均的情况 。例如: upstream server_pool { server 121.111.2.34 weight = 10; server 121.111.2.35 weight = 10; } 复制代码
  3. ip_hash 每个请求按访问 ip 的 hash 结果分配 , 这样每个访客固定访问一个后端服务器 , 可以解决 session 的问题 。upstream server_pool{ ip_hash; server 121.111.2.34 weight = 10; server 121.111.2.35 weight = 10; } 复制代码
  1. fair(第三方)
按后端服务器的响应时间来分配请求 , 响应时间短的优先分配 。
upstream server_pool{fair;server 121.111.2.34 weight = 10;server 121.111.2.35 weight = 10;}复制代码实例在http中添加upstream关键字:
http{……upstream myserver{# 拥有两台服务器fair # 表示 按照相应的时间进行分配哪个服务来相应当前的请求。server 121.111.2.34:8080;server 121.111.2.35:8080;# 注意 这里是模拟两台服务器 , 对于没有两台真实的服务器的 , 可以开两个tomcat 服务 配置不同的端口server 121.111.2.34:8080;server 121.111.2.34:8081;}server{listen 80;server_name 121.111.2.34;……location /{proxy_pass http://myserver# myserver 和上面自己所起的upstream 相对应……}}复制代码这样就可以在访问到本机的80端口时候进行数据的转发处理 , 选择一个特定的主机进行服务的相应接收
高可用简介关于这部分知识 , 之前在学习基于MySQL与redis集群上项目负载均衡时候有使用的到Docker 来搭建后端的nginx负载均衡,同时 , 这部分的具体完成的信息也在我的个人githubgithub项目地址账户上有所体现 。
无论是nginx集群的创建 , 还是负载均衡的完成上 , 对于docker 来说都为我们提供了很大的便利 , 当时的docker配置上夹杂了一些其他的配置 , 可能把这部分分割出来还是需要点时间去理解 , 这里就单独进行分析与学习 。
实例关于具体的逻辑信息 , 在我如上的基于Mysql与Redis集群上项目负载均衡 , 主要就是说:为了防止只有一个nginx导致问题的出现的问题 , 然后添加两个nginx进行轮询 , 但是这个轮询的工作不需要我们自行完成 , 而是借助第三方的工具Keepalived , 帮助我们完成系列的工作,见下图:利用心跳检测 , 来具体检测出故障的机器 , 并且进行ip的虚拟化 , 只需要记录一个ip信息 , 然后后面的操作
Nginx 反向代理,负载均衡及搭建高可用集群

文章插图
 
  1. 首先是有两台服务器 , 然后在其上都进行keepalived的安装 yum install keepalived -y # 安装 rpm -q -a keepalived # 查看安装的情况 cd /etc/keepalived vi keepalived.conf 复制代码
  2. 然后修改两台keepalived中的文件的配置信息:
global_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 121.111.2.34smtp_connect_timeout 30router_id LVS_DEVEL #唯一}vrrp_script chk_http_port {script "/usr/local/src/nginx_check.sh"interval 2#(检测脚本执行的间隔)2 s执行一次weight 2# 脚本成立 权重增加2 。}vrrp_instance VI_1 {state BACKUP# 备份服务器上将 MASTER(主) 改为 BACKUPinterface ens33 # 网卡virtual_router_id 51# 主、备机的 virtual_router_id 必须相同priority 100# 主、备机取不同的优先级 , 主机值较大 , 备份机值较小advert_int 1 # 进行心跳检测 每隔一秒 发送检测信息 查看是否存活authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {121.111.2.20 # 虚拟地址}}复制代码
  1. 脚本文件的编写,不同于使用docker 的方式 , 如下是使用到dcoker 的解决方案,配置文件的不同 。
如下我们编写具体的信息查看nginx是否存活 。存放的目录是/usr/local/src/ 。
#!/bin/bashA = `ps -C nginx –no-header |wc -l`if [$A - eq 0]; then/ usr / local / nginx / sbin / nginx# 查看nginx 是否还存活sleep 2if [`ps -C nginx --no-header |wc -l` - eq 0]; then killall keepalivedfifi复制代码
  1. 完成之后对nginx和keepalived 进行启动即可keepalived 启动命令:systemctl start keepalived


    推荐阅读