首页 > 系统相关 >Nginx+Keepalived 实践Nginx高可用方案

Nginx+Keepalived 实践Nginx高可用方案

时间:2024-04-23 16:12:22浏览次数:14  
标签:00 nginx Keepalived keepalived 实践 192.168 Nginx lft 节点

一、什么是keepalived的?

1.Keepalived是一款运行在Linux操作系统上的软件,其主要功能是提升本地网络服务的可用性和冗余度。Keepalived的工作机制主要基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)实现高可用性。

二、keepalived如何实现故障转移

1.keepalived对高可用服务之间的故障转移是通过VRRP来实现的。在keepalived服务正常工作时,Master节点会一直向backup(备)节点发送心跳消息,告诉backup节点自己还活着。当master节点出现故障的时候就无法发送这个消息,backup节点也就接受不到这个消息了。这时backup节点会调用自身的程序,去接管master节点的ip资源以及服务。当master节点恢复时,backup节点会释放ip资源以及服务,由master节点继续接管服务。

三、资源准备

名称 IP 安装服务
keepalived1 192.168.36.134 nginx、keepalived
keepalived2 192.168.36.135 nginx、keepalived
web1 192.168.36.136 nginx
web2 192.168.36.137 nginx
VIP 192.168.36.30

四、架构图

image
1.Vip一般是公网ip,绑定着域名。keepalived+nginx实现负载均衡以及高可用,两台web服务器都在内网,这边用的 web服务是nginx.

五、安装Keepalived

1.进入keepalived官网获取安装包。传送门
2.安装keepalived,两台安装方式一样

tar -zxvf keepalived-2.0.20.tar.gz -C /usr/local 

#编译安装
cd /usr/local/keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
make && make install

3.配置keepalived,主备略有区别

3.1主节点

点击查看代码
global_defs {
   notification_email {
   [email protected] #定义邮件地址
   }
   notification_email_from [email protected] 
   smtp_server 192.168.200.1 #邮件服务器
   smtp_connect_timeout 30
   router_id keep_134 #不与其他节点重名
   vrrp_skip_check_adv_addr
   script_user root #定义脚本的执行者
   enable_script_security #
}
vrrp_script chk_http_port{
    script "/etc/keepalived/nginx_check.sh" #nginx的检测脚本
    interval 2 #定义2秒执行一次
    weight 2 #脚本定义优先级
}

vrrp_instance VI_1 {
    state MASTER #该节点为master
    interface ens33 #网卡名称
    virtual_router_id 51 #同一个keepalived集群的virtual_router_id应该相同
    priority 100  #权重,MASTER节点的权重必须高于backup
    advert_int 1 #主备通讯时间间隔
    authentication { #设置密码, master和backup必须一致才能通讯
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      192.168.36.30/24 #vip,开启keepalived后会自动加入虚拟ip,这个ip可以有多个
    }
     #与上方nginx运行状态检测呼应
    track_script{
      chk_http_port
    }
}

3.2备用节点
点击查看代码
global_defs {
   notification_email {
   [email protected] #定义邮件地址
   }
   notification_email_from [email protected] 
   smtp_server 192.168.200.1 #邮件服务器
   smtp_connect_timeout 30
   router_id keep_135#不与其他节点重名
   vrrp_skip_check_adv_addr
   script_user root #定义脚本的执行者
   enable_script_security 
}
vrrp_script chk_http_port{
    script "/etc/keepalived/nginx_check.sh" #nginx的检测脚本
    interval 2 #定义2秒执行一次
    weight 2 #脚本定义优先级
}

vrrp_instance VI_1 {
    state BACKUP  #该节点为backup节点
    interface ens33 #网卡名称
    virtual_router_id 51 #同一个keepalived集群的virtual_router_id应该相同
    priority 90  #权重,backup节点的权重必须低于master
    advert_int 1 #主备通讯时间间隔
    authentication { #设置密码, master和backup必须一致才能通讯
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      192.168.36.30/24 #vip,开启keepalived后会自动加入虚拟ip,这个ip可以有多个
    }
     #与上方nginx运行状态检测呼应
    track_script{
      chk_http_port
    }
}


六、nginx检测监听脚本

#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ];then
        systemctl start nginx
        sleep 2 
        if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
                systemctl stop keepalived
        fi
fi

#授予执行权限
chmod  +x  /etc/keepalived/nginx_check.sh

七、在nginx上配置负载均衡(两台keepalived服务器一样)和web服务器
1.配置负载均衡

upstream myserver{
         server 192.168.36.136:80;
         server 192.168.36.137:80;
}

server{
        listen 80;
        location / {
                proxy_pass http://myserver/;
                index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   /var/nginx/html;
        }
}

2.配置web服务器(为了区别负载均衡生效需要弄两个不同的页面)

echo "137" > index.html
echo "136" > index.html

八、测试生效

1.启动所有服务
2.查看master节点的ip

[root@test01 conf.d]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 group default qlen 1000
    link/ether 00:0c:29:c1:34:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.36.135/24 brd 192.168.36.255 scope global noprefixroute dynamic ens33
       valid_lft 1279sec preferred_lft 1279sec
    inet 192.168.36.30/24 scope global secondary ens33  #可以看到130这个ip出现了
       valid_lft forever preferred_lft forever
    inet6 fe80::592c:a41d:2db5:1f2d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

3.访问网页,可以看到自己的页面,并且不断刷新,如果是在变化说明负载均衡成功了。
4.测试高可用是否成功。

#停掉主节点的keepalived
[root@test02 conf.d]# systemctl stop keepalived

#查看从节点
[root@test01 conf.d]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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 group default qlen 1000
    link/ether 00:0c:29:c1:34:9f brd ff:ff:ff:ff:ff:ff
    inet 192.168.36.135/24 brd 192.168.36.255 scope global noprefixroute dynamic ens33
       valid_lft 1774sec preferred_lft 1774sec
    inet 192.168.36.30/24 scope global secondary ens33 #可以发现30这个Ip以及漂移过来了
       valid_lft forever preferred_lft forever
    inet6 fe80::592c:a41d:2db5:1f2d/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

#检查脚本是否成功
[root@test01 conf.d]# systemctl stop nginx
[root@test01 conf.d]# systemctl status nginx
● nginx.service - nginx
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since 二 2024-04-23 16:03:37 CST; 3s ago
  Process: 16036 ExecStart=/usr/local/nginx/sbin/nginx (code=exited, status=0/SUCCESS)
 Main PID: 16037 (nginx)
   CGroup: /system.slice/nginx.service
           ├─16037 nginx: master process /usr/local/nginx/sbin/nginx
           └─16038 nginx: worker process

4月 23 16:03:37 test01 systemd[1]: Starting nginx...
4月 23 16:03:37 test01 systemd[1]: Started nginx.

#停掉后再次查看发现nginx自己起来了,说明成功了。

标签:00,nginx,Keepalived,keepalived,实践,192.168,Nginx,lft,节点
From: https://www.cnblogs.com/ellison123/p/18152931

相关文章

  • 配置nginx HTTPS证书
    配置nginxHTTPS证书安装CerbotLet‘sEncryptapt安装不了cerbot,换snapdsudoaptinstallsnapdsudosnapinstall--classiccertbot确保Certbot命令可以通过创建一个符号链接到/usr/bin目录中的命令来运行:sudoln-s/snap/bin/certbot/usr/bin/certbot生成证书ng......
  • Nginx安装配置
    Nginx安装配置安装首先检查是否已安装nginx-v并未安装,所以继续安装aptinstallnginx-corenginx安装完成后的文件位置/usr/sbin/nginx:主程序/etc/nginx:存放配置文件/usr/share/nginx:存放静态文件/var/log/nginx:存放日志启动nginx服务,在服务器(默认80端口)就可......
  • 【JavaScript】微信小程序:高效性能优化策略与实践
    ​本文作者:黄启聪,碧桂园服务前端开发高级工程师,专注于运用前沿的Web技术提升工作效率,并致力于打造卓越的交互式用户体验。​01前言目前,凤凰会商城支持全国商城、门店、酒司令、地推、群接龙等多种业务,并且具备多端能力。一套代码可以在凤凰会APP、移动端H5和微信小程序中运行......
  • 得物 ZooKeeper SLA 也可以 99.99%丨最佳实践
    作者:Bruce背景今天分享的案例来自于得物技术团队应用MSE-ZooKeeper过程中的最佳实践。原文得物ZooKeeperSLA也可以99.99%|得物技术。ZooKeeper(ZK)是一个诞生于2007年的分布式应用程序协调服务。尽管出于一些特殊的历史原因,许多业务场景仍然不得不依赖它。比如,Kafka、任......
  • 混淆原理与实践指南
     引言......
  • 4+1 视图建模及架构设计工程实践
    ​占春良:碧桂园服务技术专家,项目架构师,前阿里资深软件工程师,12年技术开发经验。​01前言架构设计建模的目的是通过统一的UML语言,完成业务的梳理,并对业务系统进行合理的组织(分层、分模块),以提高系统的可扩展性、可重用性、可移植性、易理解性和易测试性,从而达到一个高质量属性的......
  • docker - [05] 部署Nginx
    题记部分 一、查找镜像dockersearchnginx 二、拉取镜像dockerpullnginx 三、启动镜像Nginx默认端口号为80,可以在启动时指定Nginx使用的端口号(例如3344)那么容器外部访问Nginx使用3344端口,而容器内部则是80,两个端口号形成映射关系。dockerrun-d--namen......
  • 《技术预研与产品预研实践》课程大纲
    【课程背景】现代企业的竞争,实质上就是企业创新能力的竞争。一个企业要想在市场中占有一席之地,就必须使得技术开发、产品研发、管理能力等方面在同行业中处于领先地位,而产品与技术的持续创新是达成这一目标的唯一手段。而技术创新和产品创新是研发型企业的最为重要的创新途径和......
  • AIGC 在设计中的应用实践
    本文作者:齐亚宜,碧桂园服务高级视觉设计工程师AIGC(人工智能生成内容)在设计领域的应用实践已经引起了业界的广泛关注。行业普遍观点认为AIGC在提高效率、创新设计与提升用户体验等方面有着重要的作用。但AIGC在设计领域有着广泛的应用前景的同时也面临着一些挑战,比如如何保证生......
  • 容器化最佳实践
    容器构建最佳实践1.每个容器打包一个应用重要性:高由于容器与其托管的应用具有相同的生命周期,因此每个容器应仅包含一个应用。当容器启动时,应用也应该启动,当应用停止时,容器也应该停止。如果一个容器中具有多个应用,则这些应用可能具有不同的生命周期或处于不同状态。例如,到......