zoukankan      html  css  js  c++  java
  • nginx+keepalived实现主从高可用

    设备:

    主:192.168.200.122

    从:192.168.200.124

    安装:两台都分别安装nginx以及keepalived

    两台机步骤一致一主一从

    安装nginx的依赖包

    [root@localhost ~]#yum install gcc gcc-c++ make pcre-devel zlib-devel -y

    [root@localhost ~]#useradd -M -s /sbin/nologin nginx

    [root@localhost ~]#tail -l /etc/passwd;tail -l /etc/group

    [root@localhost ~]#rz                                 #导入nginx源码包                             

    [root@localhost ~]# ls
    anaconda-ks.cfg    nginx-1.15.9.tar.gz     original-ks.cfg     模板    图片    下载     桌面
    initial-setup-ks.cfg             公共                   视频      文档       音乐

    [root@localhost ~]# tar xf nginx-1.15.9.tar.gz -C /usr/src

    [root@localhost ~]# cd /usr/src/nginx-1.15.9

    [root@localhost ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install

    [root@localhost ~]# ls /usr/local/sbin

    做软连接方便查找nginx位置

    [root@localhost ~]# ln -s /usr/local/bin/nginx /usr/local/sbin

    [root@localhost ~]# ll /usr/local/sbin

    lrwxrwxrwx. 1 root root 27 10月 21 10:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

    [root@localhost ~]# cd /usr/local/nginx/conf

    [root@localhost conf]# vim nginx.conf

    user  nginx nginx;
    worker_processes  2;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    error_log  logs/error.log  info;
    
    pid        logs/nginx.pid;
    
    
    events {
        use epoll;
        worker_connections  10240;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
           charset utf-8;
    
            access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    
    
    }

    [root@localhost conf]#cd ../

    [root@localhost nginx]#cd html

    <p><em>Thank you for using nginx 192.168.200.122</em></p>                #从写192.168.200.124

    [root@localhost conf]#nginx -t

    [root@localhost conf]#nginx

    [root@localhost conf]#killall -HUP nginx

    安装keepalived

    [root@localhost ~]#yum install keepalived -y

    编写nginx脚本用以承载keepalived的依赖

    [root@localhost ~]# vim nginx.sh

    #!/bin/bash

    counter=$(ps -C nginx --no-heading | wc -l)
    if [ '${counter}' = '0' ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    counter=$(ps -C nginx --no-heading | wc -l)
    if [ '${counter}' = '0' ];then
    systemctl stop keepalived
    fi
    fi

    [root@localhost ~]#cd /etc/keepalived

    [root@localhost ~]#cp keepalived.conf keepalived.conf.bak

    [root@localhost ~]#vim keepalived.conf

    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
       route_id 192.168.200.122                 #主写122、从写124
    }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_script chk_http_port {
    script '/root/nginx.sh'              #启用nginx.sh脚本
    insterval 2
    weight -5
    fall 2
    rise 1
    }
    
    vrrp_instance VI_1 {
        state MASTER                    #主写MASTER、从写SLAVE
        interface ens33
        virtual_router_id 51
        priority 100                    #主写100、从写99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
       check_nginx
    }
    
        virtual_ipaddress {
            192.168.200.254
        }
    }

    [root@localhost ~]#service keepalived start

    关闭防火墙

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# iptables -F
    [root@localhost ~]# setenforce 0

    [root@localhost ~]#ip a

    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:f8:6e:73 brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.122/24 brd 192.168.200.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        inet 192.168.200.254/32 scope global ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fef8:6e73/64 scope link 
           valid_lft forever preferred_lft forever

    测试1:

    条件一:当两台机的nginx、keepalived都开启时

    主:192.168.200.122

    [root@locahost ~]#ip a

    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:3e:05:0e brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.122/24 brd 192.168.200.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        inet 192.168.200.254/32 scope global ens33
           valid_lft forever preferred_lft forever

    从:192.168.200.124

    [root@locathost ~]#ip a

    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f8:6e:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.122/24 brd 192.168.200.255 scope global noprefixroute ens33
    valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fef8:6e73/64 scope link
    valid_lft forever preferred_lft forever

    测试2:

    条件1:当关闭主的keepalived以及nginx服务时,IP192.168.200.254会不会漂移到从机上

    先关闭keepalived再关闭nginx服务

    [root@localhost ~]# service keepalived stop

    [root@localhost ~]# nginx -s quit

    主:192.168.200.122

    [root@locahost ~]#ip a

    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:3e:05:0e brd ff:ff:ff:ff:ff:ff
        inet 192.168.200.122/24 brd 192.168.200.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever

    从:192.168.200.124

    [root@locathost ~]#ip a

    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:3e:05:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.124/24 brd 192.168.200.255 scope global noprefixroute ens33
    valid_lft forever preferred_lft forever
    inet 192.168.200.254/32 scope global ens33
    valid_lft forever preferred_lft forever

  • 相关阅读:
    新框架的选择
    ‘’火星文‘’的解析
    http.request请求及在node中post请求参数解析
    http.request的请求
    ReactNative环境配置的坑
    return false与return true的区别
    什么是DOM,DOM level 123 的区别是什么
    页面重绘和回流以及优化
    时代人物之任正非
    Adriod与HTML+JS的交互
  • 原文地址:https://www.cnblogs.com/CMX_Shmily/p/11713340.html
Copyright © 2011-2022 走看看