zoukankan      html  css  js  c++  java
  • nginx+keepalived实现主从模式双机热备份

    主从模式就是一台机器提供服务,另一台机器作为备份机,当主机的服务停止时,备份机立刻接替主机的服务。

    安装

    • 安装nginx
    wget http://nginx.org/download/nginx-1.19.6.tar.gz
    tar -zxvf nginx-1.19.6.tar.gz
    cd nginx-1.19.6
    
    # 编译安装
    ./configure
    make && make install
    
    • 安装keepalived
      编译安装会出错,直接使用yum安装
    yum install -y keepalived
    

    nginx 负载均衡

    一共两个tomcat服务,分别位于两台服务器上。用nginx负责两个服务的负载均衡。再用轮询的方式。映射关系如下:

    • 注意tomcat的服务名称不能含有下划线,比如 tomcat_servers ,否则会报错。
    • 可以更改 webapps/ROOT/index.jsp文件,部署成功后,访问192.168.158.3可以看到内容在两个tomcat之间切换。
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
        keepalive_timeout  65;
    
        # 配置tomcat服务
        upstream tomcatservers{
            server 192.168.158.3:8080 weight=1;             # 访问服务的权重
            server 192.168.158.4:8080 weight=2;
        }
    
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   html;
                index  index.html index.htm;
                proxy_pass http://tomcatservers;        # 配置代理关系
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    

    keepalived 实现映射虚拟vip

    通过映射一个虚拟的ip(vip)到已有的两台机器上,实现ip的“飘移”。虚拟ip本身不代表任何服务器,正常情况下vip映射到主机上,当主机停止服务后,vip就映射到备份机上。

    • 修改 /etc/keepalived/keepalived.conf 配置文件
    ! Configuration File for keepalived
    
    
    # 检查nginx状态的脚本
    vrrp_script ckeck_nginx {
        script "/etc/keepalived/check_nginx.sh"
        interval 2
        weight 2
    }
    
    # 配置虚拟ip
    vrrp_instance VI_1 {
        state MASTER                    # 主机-MASTER,备份机-BACKUP
        interface ens33                 # 网卡名称
        virtual_router_id 51            # 同一组服务用id相同
        priority 100                    # 主机的优先级应高于backup
        advert_int 1                    # master和backup的同步时间
        authentication {                # 认证信息
            auth_type PASS
            auth_pass 1111
        }
        track_script {                  # 上面配置的脚本
            ckeck_nginx
        }
        virtual_ipaddress {             # 配置虚拟ip,可配置多个,一行一个
            192.168.158.10
            192.168.158.20
        }
    }
    
    • backup机器的配置如下,和master基本一致。
    ! Configuration File for keepalived
    
    vrrp_script ckeck_nginx {
        script "/etc/keepalived/check_nginx.sh"
        interval 2
        weight 2
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        track_script {
            ckeck_nginx
        }
        virtual_ipaddress {
            192.168.158.10
            192.168.158.20
        }
    }
    
    • 这里用到的检查脚本如下,他用来检查nginx的状态,当nginx停止服务后,尝试重启服务。如果启动失败,就停止keepalived服务。重新映射vip到backup机器上。
    #!/bin/bash
    #检测nginx是否启动了
    A=`ps -C nginx --no-header |wc -l`        
    if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        
          systemctl start nginx                #重启nginx
          if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
                  killall keepalived                    
          fi
    fi
    
    • ip add show ens33 查看网卡的vip。可以看到
    [root@twilight0319 keepalived]# ip add show ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:67:8a:94 brd ff:ff:ff:ff:ff:ff
        inet 192.168.158.4/24 brd 192.168.158.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet 192.168.158.10/32 scope global ens33
           valid_lft forever preferred_lft forever
        inet 192.168.158.20/32 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe67:8a94/64 scope link 
           valid_lft forever preferred_lft forever
    

    另一台机器就不会有vip,因为vip只会映射到一个ip上。当主机的keepalived服务停止后,会自动将vip映射到另一台机器上。

    [root@twilight0319 keepalived]# ip add show ens33
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:6a:a6:17 brd ff:ff:ff:ff:ff:ff
        inet 192.168.158.3/24 brd 192.168.158.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe6a:a617/64 scope link 
           valid_lft forever preferred_lft forever
    
  • 相关阅读:
    关于数据库,程序员应该了解的那些事
    Kafka实战宝典:如何跨机房传输数据
    数据挖掘从入门到放弃(三):朴素贝叶斯
    面试官:数据库自增ID用完了会怎么样?
    《我想进大厂》之网络篇夺命连环12问
    面试官:缓存一致性问题怎么解决?
    空指针的传说
    淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)
    苦修月余,斩获bigo、腾讯offer,面经奉上!
    《我想进大厂》之Spring夺命连环10问
  • 原文地址:https://www.cnblogs.com/twilight0402/p/14221114.html
Copyright © 2011-2022 走看看