Nginx+keepalived实现高可用集群

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 大型企业架构一般是用户先访问到四层负载均衡,在由四层负载均衡转发至七层服务在均衡,七层负载均衡再转发至后端服务器,四层负载均衡只起到一个分流的作用,根据用户访问的端口,比如说80端口就会跳转至七层的对应的集群,两台四层负载均衡配置是一模一样的,形成高可用,七层的配置也是一模一样的,当有1500个请求需要响应时,四层负载均衡就会平均将1500个请求分给急群中的lb,每个lb响应500个请求,减轻单点的压力。

回顾部分

1.图解Nginx七层与四层image.png

大型企业架构一般是用户先访问到四层负载均衡,在由四层负载均衡转发至七层服务在均衡,七层负载均衡再转发至后端服务器,四层负载均衡只起到一个分流的作用,根据用户访问的端口,比如说80端口就会跳转至七层的对应的集群,两台四层负载均衡配置是一模一样的,形成高可用,七层的配置也是一模一样的,当有1500个请求需要响应时,四层负载均衡就会平均将1500个请求分给急群中的lb,每个lb响应500个请求,减轻单点的压力。


负载均衡的选择

Nginx 四层和七层

LVS 四层,需要懂网络(NAT,iptables)

HAproxy 四层和七层

F5 四层和七层,硬件设备,不适合云平台

SLB 四层

session

会话保持,可以采用ip_hash

会话共享,最好写入 redis或者mysql

写入浏览器,由开发人员实现

2.负载均衡手机端配置

upstream firefox {
  server 172.31.57.133:80;
}
upstream chrome {
  server 172.31.57.133:8080;
}
upstream iphone {
  server 172.31.57.134:8081;
}
upstream android {
  server172.31.57.134:8081;
}
upstream default {
  server 172.31.57.134:80;
}
server {
  if ($http_user_agent ~* "iphone"){
    proxy_pass http://iphone;
  }
  if ($http_user_agent ~* "chrome"){
    proxy_pass http://chrome
  }
}

进入高可用环节

3.高可用概念

3.1.什么是高可用

一般指2台机器启动着相同的业务系统,当有一台机器down机了,另外一台服务器能快速的接管,对于访问当用户是无感知的

3.2.高可用使用场景

业务系统需要保证7x24小时不down机,作为业务来说要随机都可以用,让你的业务系统更顽强。

4.Keepalive工作 原理vrrp工作原理

1.将所有设备加入到一个虚拟组

2.具有相同的虚拟ip(会有对应的虚拟MAC地址)

3.主机会在发送数据的时候,在数据包的目标地址写上虚拟的IP及MAC

4.虚拟组收到数据后,会将目标地址转换成当前虚拟组的master设备的IP和MAC

vrrp角色:一主多备

实际工作角色:主

通过优先级来选举主备:优先级越高越优先

如果虚拟组中的服务器都认为自己是master这时就产生了裂脑

5.keepalived高可用安装部署

5.1.环境规划image.png5.2.在两台机器上分别安装keepalive

1.配置yum仓库,下载镜像源
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.安装keepalive,将软件包下载至本地推送至其他服务器,方便机器安装
[root@localhost ~]# yum -y install keepalived --downloaddir=/root/soft
[root@localhost ~]# scp keepalived-1.3.5-16.el7.x86_64.rpm root@192.168.81.220:/root
3.第二台机器直接安装下载好的rpm包即可
[root@localhost ~]# yum localinstall /root/keepalived-1.3.5-16.el7.x86_64.rpm -y

5.3.配置keepalive-master

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
   router_id lb01     //路由名称,不能使用相同的路由名称
}
vrrp_instance VI_1 {    //定义一个虚拟组实例,实例名是VI_1,不建议修改
    state MASTER        //服务器的状态
    interface ens33       //提供服务的网卡名称即通信端口
    virtual_router_id 51      //实例的ID
    priority 150      //优先级,master要比backup的高,默认100,最高255
    advert_int 1      //心跳建哥,也就是健康检测周期,1表示1秒内与backup进行健康检查,检查失败立刻抢占
    authentication {    
        auth_type PASS    //PASS认证类型,此参数备节点和主节点相同
        auth_pass 1111    //密码是1111,此参数备节点和主节点相同
    }   
    virtual_ipaddress {     //定义一个漂移ip
       192.168.81.100
    }
}

5.4.配置keepalive-backup

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
  router_id lb02
}
vrrp_instance VI_1 {
  state BACKUP
  interface ens33
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
      auth_type PASS
      auth_pass 1111
  }
  virtual_ipaddress {
     192.168.81.100
  }
}

5.5.启动主备服务器的keepalived

keepalived-master
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived
keepalived-backup
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived

6.检查虚拟IP是否漂移

虚拟IP漂移时会产生一个丢包现象,master或者slave将进行抢占image.png下面开始验证,具体思路:

1.主节点查看是否存在虚拟ip

2.主节点停掉keepalived进程

3.观察丢包

4.从节点验证是否存在虚拟ip

5.主节点开启keepalived进程

6.主节点查看是否抢占成功虚拟ip

在keepalive-master上操作

已经获得漂移ip
[root@jxl ~]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:46:66:34 brd ff:ff:ff:ff:ff:ff
    inet 192.168.81.220/24 brd 192.168.81.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.81.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe46:6634/64 scope link 
       valid_lft forever preferred_lft forever

在keepalive-master上恢复master节点并验证是否存在漂移ip

[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:55:83:b7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.81.210/24 brd 192.168.81.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.81.100/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe55:83b7/64 scope link 
       valid_lft forever preferred_lft forever

在keepalive-backup上验证漂移ip是否已丢失

[root@jxl ~]# ip add show dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:46:66:34 brd ff:ff:ff:ff:ff:ff
    inet 192.168.81.220/24 brd 192.168.81.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe46:6634/64 scope link 
       valid_lft forever preferred_lft forever

7.keepalived主备配置区别image.png8.keepalived高可用配置

8.1.环境规划image.png8.2.实现思路

1.先部署web节点,在web节点上部署LNMP平台,并部署网站源码包

2.部署nginx负载均衡,再第一台部署好后直接推送过去

3.部署keepalive主备

8.3.部署web节点

详细部署步骤请参考https://blog.csdn.net/weixin_44953658/article/details/105928687

8.4.部署nginx负载均衡

lb01配置
[root@localhost ~]# yum -y install nginx 
[root@localhost ~]# cd /etc/nginx/conf.d
[root@localhost ~]# vim lb_wecenter.conf
upstream lb_wecenter {
  server 192.168.81.230 weight=1 max_fails=3 fail_timeout=60;
  server 192.168.81.240 weight=1 max_fails=3 fail_timeout=60;
}
server {
  listen 80;
  server_name jxl.wecenter.com;
  client_max_body_size 200m;
  access_log /nginx_log/lb_jxl_wecenter_access.log main;
  location / {
    proxy_pass http://lb_wecenter;
    proxy_set_header HOST $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_buffering on;
    proxy_buffer_size 256k;
    proxy_buffers 4 256k;
  }
}
lb02配置
[root@localhost ~]# yum -y install nginx
然后在lb01使用scp将配置文件推送到lb02上
[root@localhost ~]# scp -rp /etc/nginx/* root@192.168.81.220:/etc/nginx/
在两台机器上启动nginx
[root@localhost ~]# systemctl start nginx 
[root@localhost ~]# systemctl enable nginx

8.5.配置keepalived主备

8.5.1.在两台机器上分别安装keepalive

1.配置yum仓库,下载镜像源
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.安装keepalive,将软件包下载至本地推送至其他服务器,方便机器安装
[root@localhost ~]# yum -y install keepalived --downloaddir=/root/soft
[root@localhost ~]# scp keepalived-1.3.5-16.el7.x86_64.rpm root@192.168.81.220:/root
3.第二台机器直接安装下载好的rpm包即可
[root@localhost ~]# yum localinstall /root/keepalived-1.3.5-16.el7.x86_64.rpm -y

8.5.2.配置keepalive-master

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
   router_id lb01     //路由名称,不能使用相同的路由名称
}
vrrp_instance VI_1 {    //定义一个虚拟组实例,实例名是VI_1,不建议修改
    state MASTER        //服务器的状态
    interface ens33       //提供服务的网卡名称即通信端口
    virtual_router_id 51      //实例的ID
    priority 150      //优先级,master要比backup的高,默认100,最高255
    advert_int 1      //心跳建哥,也就是健康检测周期,1表示1秒内与backup进行健康检查,检查失败立刻抢占
    authentication {    
        auth_type PASS    //PASS认证类型,此参数备节点和主节点相同
        auth_pass 1111    //密码是1111,此参数备节点和主节点相同
    }   
    virtual_ipaddress {     //定义一个漂移ip
       192.168.81.100
    }
}

8.5.3.配置keepalive-backup

[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak
[root@localhost keepalived]# vim keepalived.conf
global_defs {
  router_id lb02
}
vrrp_instance VI_1 {
  state BACKUP
  interface ens33
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
      auth_type PASS
      auth_pass 1111
  }
  virtual_ipaddress {
     192.168.81.100
  }
}

8.5.4.启动主备服务器的keepalived

keepalived-master
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived
keepalived-backup
[root@localhost keepalived]# systemctl start keepalived
[root@localhost keepalived]# systemctl enable keepalived

8.6.页面访问image.png8.7.抓包验证image.png

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3月前
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
115 0
|
3月前
|
负载均衡 前端开发 应用服务中间件
FastDFS+Nginx+fastdfs-nginx-module集群搭建
FastDFS+Nginx+fastdfs-nginx-module集群搭建
|
3月前
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
73 1
|
3月前
|
应用服务中间件 Nacos 数据库
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
Nacos 1.2.1 集群搭建(三) Nginx 配置 集群
64 1
|
3月前
|
物联网 应用服务中间件 Linux
CentOS7.9 Nginx+EMQX集群组建MQTTS平台
通过以上步骤,您已成功搭建了一个基于CentOS 7.9、Nginx和EMQX的MQTTS平台。这个平台既能保证数据传输的安全性,又能利用Nginx的负载均衡能力和EMQX的高性能、高并发处理能力,实现稳定高效的消息服务。在部署和配置过程中,务必注意证书、域名以及EMQX配置的正确性,确保系统安全和稳定运行。此外,定期更新软件和系统,以及监控系统性能,也是保证MQTTS平台长期稳定运行的重要环节。
101 4
|
3月前
|
物联网 应用服务中间件 Linux
CentOS7.9 Nginx+EMQX集群组建MQTTS平台
通过以上步骤,您已成功搭建了一个基于CentOS 7.9、Nginx和EMQX的MQTTS平台。这个平台既能保证数据传输的安全性,又能利用Nginx的负载均衡能力和EMQX的高性能、高并发处理能力,实现稳定高效的消息服务。在部署和配置过程中,务必注意证书、域名以及EMQX配置的正确性,确保系统安全和稳定运行。此外,定期更新软件和系统,以及监控系统性能,也是保证MQTTS平台长期稳定运行的重要环节。
127 3
|
4月前
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
141 1
|
3月前
|
物联网 应用服务中间件 Linux
CentOS7.9 Nginx+EMQX集群组建MQTTS平台
通过以上步骤,您已成功搭建了一个基于CentOS 7.9、Nginx和EMQX的MQTTS平台。这个平台既能保证数据传输的安全性,又能利用Nginx的负载均衡能力和EMQX的高性能、高并发处理能力,实现稳定高效的消息服务。在部署和配置过程中,务必注意证书、域名以及EMQX配置的正确性,确保系统安全和稳定运行。此外,定期更新软件和系统,以及监控系统性能,也是保证MQTTS平台长期稳定运行的重要环节。
93 0
|
6月前
|
监控 负载均衡 应用服务中间件
Keepalive 解决nginx 的高可用问题
Keepalive 解决nginx 的高可用问题
|
5月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用