zoukankan      html  css  js  c++  java
  • Nginx主从配置、Keepalived、VRRP协议

    实现方法

    1、部署两台nginx服务器
    2、在上面两台服务器中下载安装keepalived,yum -y install keepalived, 生产上最好使用源码安装方式,因为它为外部调用
    3、配置keepalived.conf,vim /etc/keepalived/keepalived.conf


    keepalived.conf原文件

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL # 默认是LVS_DEVEL,/etc/hosts里需要配置127.0.0.1为LVS_DEVEL
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    
    # 检测脚本设置,这个原文件没有
    vrrp_script chk_http_port {
        script "/usr/local/src/nginx_check.sh"
        interval 2 # 检测脚本执行的间隔,秒
        weight 2
    }
    
    # 虚拟ip配置
    vrrp_instance VI_1 {
        state MASTER    # 主 MASTER  从 BACKUP
        interface ens33    # 网卡
        virtual_router_id 51    # 主从必须相同,标识主从服务器为一组,一方出错另一方替代
        priority 100    # 主备优先级,主100,从90
        advert_int 1    # 发送心跳间隔时间
        authentication {# 权限
            auth_type PASS # 使用密码方式校验
            auth_pass 1111 # 密码是1111
        }
        virtual_ipaddress { # 虚拟地址,可以绑定多个
            192.168.200.16    
            192.168.200.17
            192.168.200.18
        }
    }
    
    virtual_server 192.168.200.100 443 {
        delay_loop 6
        lb_algo rr
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.201.100 443 {
            weight 1
            SSL_GET {
                url {
                  path /
                  digest ff20ad2481f97b1754ef3e12ecd3a9cc
                }
                url {
                  path /mrtg/
                  digest 9b3a0c85a887a256d6939da88aabd8cd
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.2 1358 {
        delay_loop 6
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        sorry_server 192.168.200.200 1358
    
        real_server 192.168.200.2 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.3 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334c
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    
    virtual_server 10.10.10.3 1358 {
        delay_loop 3
        lb_algo rr 
        lb_kind NAT
        persistence_timeout 50
        protocol TCP
    
        real_server 192.168.200.4 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    
        real_server 192.168.200.5 1358 {
            weight 1
            HTTP_GET {
                url { 
                  path /testurl/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl2/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                url { 
                  path /testurl3/test.jsp
                  digest 640205b7b0fc66c1ea91c463fac6334d
                }
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
            }
        }
    }
    View Code

    脚本文件,由keepalived.conf文件指定了路径

    #!/bin/bash
    A=`ps -C nginx -no-header | wc -1`
    if [ $A -eq 0 ];then
        /usr/local/nginx/sbin/nginx
        sleep 2
        if [ `ps -C nginx --no-header | wc -1` -eq 0 ];then
            killall keepalived
        fi
    fi
    View Code

    Keepalived与VRRP协议

    Keepalived有VRRP的功能,VRRP(虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行。
    VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。
    虚拟路由器,虚拟路由器是VRRP备份组中所有路由器的集合,它是一个逻辑概念,并不是正真存在的。从备份组外面看备份组中的路由器,感觉组中的所有路由器就像一个一样,可以理解为在一个组中: 主路由器+所有备份路由器=虚拟路由器。虚拟路由器有一个虚拟的IP地址和MAC地址。
    主路由器(MASTER),虚拟路由器通过虚拟IP对外提供服务,而在虚拟路由器内部同一时间只有一台物理路由器对外提供服务,这台提供服务的物理路由器被称为主路由器。一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP。
    备份路由器(BACKUP),虚拟路由器中的其他物理路由器不拥有对外的虚拟IP,也不对外提供网络功能,仅接受MASTER的VRRP状态通告信息,这些路由器被称为备份路由器。当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。
    这些路由器使用VRRP协议,会根据优先级确定自己在备份组中的角色。优先级高的路由器成为Master 路由器,优先级低的成为Backup 路由器。Master 拥有对外服务的虚拟IP,提供各种网络功能,并定期发送VRRP 报文,通知备份组内的其他设备自己工作正常;Backup 路由器只接收Master 发来的报文信息,用来监控Master 的运行状态。当Master 失效时,Backup 路由器进行选举,优先级高的Backup 将成为新的Master 。


    Keepalived对服务器运行状态和故障隔离的工作原理

    Keepalived工作在TCP/IP参考模型的三层、四层、五层(物理层,链路层):
    网络层(3):Keepalived通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。
    传输层(4):Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。
    应用层(5):,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。


    keepalived进程

    keepalived运行时,会启动3个进程,分别为:core(核心进程),check和vrrp
    core:负责主进程的启动,维护和全局配置文件的加载;
    check:负责健康检查
    vrrp:用来实现vrrp协议
    [root@bogon ~]# systemctl start keepalived
    [root@bogon ~]# ps -ef | grep keepalived
    root 1643 1 0 15:54 ? 00:00:00 /usr/sbin/keepalived -D
    root 1644 1643 0 15:54 ? 00:00:00 /usr/sbin/keepalived -D
    root 1645 1643 0 15:54 ? 00:00:00 /usr/sbin/keepalived -D
    root 1648 1587 0 15:54 pts/3 00:00:00 grep --color=auto keepalived


    Keepalived配置

    主服务器上keepalived.conf配置

    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id 127.0.0.1
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }           
                
    vrrp_instance VI_1 {
        state MASTER
        interface ens33
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.16
            192.168.200.17
            192.168.200.18
        }
    } 
    View Code

    从服务器上keepalived.conf配置

    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id 127.0.0.1
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }           
                
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33
        virtual_router_id 51
        priority 90 
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.200.16
            192.168.200.17
            192.168.200.18
        }
    } 
    View Code
  • 相关阅读:
    从零搭建Spring Boot脚手架(6):整合Redis作为缓存
    MyBatis初级实战之三:springboot集成druid
    table布局
    【JVM之内存与垃圾回收篇】直接内存
    【JVM之内存与垃圾回收篇】对象实例化内存布局与访问定位
    【JUnit测试】总结
    【JVM之内存与垃圾回收篇】方法区
    【JVM之内存与垃圾回收篇】堆
    【JVM之内存与垃圾回收篇】本地方法栈
    【JVM之内存与垃圾回收篇】本地方法接口
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/12986621.html
Copyright © 2011-2022 走看看