• 安装 nginx与keepalived


    • 首先安装 openssl、perl pcre 、 zlib 库和模块

    openssl 库

    wget https://www.openssl.org/source/openssl-1.1.1-pre8.tar.gz
    tar -zxvf openssl-1.1.1-pre8.tar.gz
    cd openssl-1.1.1-pre8
    ./config && make && make install

    然后再设置一下软连接

    ln -sf /usr/local/lib64/libssl.so.1.1 /lib64/libssl.so.1.1
    ln -sf /usr/local/lib64/libcrypto.so.1.1 /lib64/libcrypto.so.1.1

    perl pcre 模块

    wget https://ftp.pcre.org/pub/pcre/pcre-8.42.tar.gz
    tar -zxvf pcre-8.42.tar.gz
    cd pcre-8.42
    ./configure && make && make install

    zlib 库

    wget http://www.zlib.net/fossils/zlib-1.2.11.tar.gz
    tar -zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11
    ./configure && make && make install
    • 创建系统用户
    groupadd -r nginx
    useradd -r -g nginx nginx
    passwd nginx // 输入 nginx 作为密码
    • 安装 nginx 软件
    wget http://nginx.org/download/nginx-1.15.7.tar.gz
    tar -zxvf nginx-1.15.7.tar.gz
    cd nginx-1.15.7
    ./configure 
    --with-http_realip_module 
    --with-http_addition_module 
    --with-http_sub_module 
    --with-http_dav_module 
    --with-http_gunzip_module 
    --with-http_gzip_static_module 
    --with-http_random_index_module 
    --with-http_secure_link_module 
    --with-http_stub_status_module 
    --with-http_auth_request_module 
    --with-threads 
    --with-stream_ssl_module 
    --with-http_slice_module 
    --with-file-aio 
    --with-http_v2_module 
    --with-http_ssl_module 
    --with-http_flv_module 
    --with-http_mp4_module 
    --with-http_stub_status_module 
    --with-http_gzip_static_module 
    --with-stream 
    --with-pcre=/root/nginx_keepalived/nginx/pcre-8.42 
    --with-zlib=/root/nginx_keepalived/nginx/zlib-1.2.11 
    --with-openssl=/root/nginx_keepalived/nginx/openssl-1.1.1-pre8
    
    make -j 4 && make install

    ⚠️注意:

    --with-pcre、--with-zlib和 --with-openssl 三个参数,需要填写刚才编译安装的完整地址,避免出现错误

      

    • 配置 service 服务

    新建一个脚本文件 /etc/init.d/nginx,内容如下

    #! /bin/bash
    # chkconfig: - 85 15
    PATH=/usr/local/nginx
    DESC="nginx daemon"
    NAME=nginx
    DAEMON=$PATH/sbin/$NAME
    CONFIGFILE=$PATH/conf/$NAME.conf
    PIDFILE=$PATH/logs/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    set -e
    [ -x "$DAEMON" ] || exit 0
    do_start() {
    $DAEMON -c $CONFIGFILE || echo -n "nginx already running"
    }
    do_stop() {
    $DAEMON -s stop || echo -n "nginx not running"
    }
    do_reload() {
    $DAEMON -s reload || echo -n "nginx can't reload"
    }
    case "$1" in
    start)
    echo -n "Starting $DESC: $NAME"
    do_start
    echo "."
    ;;
    stop)
    echo -n "Stopping $DESC: $NAME"
    do_stop
    echo "."
    ;;
    reload|graceful)
    echo -n "Reloading $DESC configuration..."
    do_reload
    echo "."
    ;;
    restart)
    echo -n "Restarting $DESC: $NAME"
    do_stop
    do_start
    echo "."
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
    exit 3
    ;;
    esac
    exit 0

    *****************

    添加执行权限

    chmod a+x /etc/init.d/nginx

    增加 nginx 服务

    chkconfig --add nginx

    如果要设置开机自启动,则执行以下命令

    chkconfig nginx on
    • 启动、停止、重启和重新加载 nginx服务和配置文件的命令

    启动 nginx

    systemctl start nginx.service

    停止nginx服务

    systemctl stop nginx.service

    重启nginx服务

    systemctl restart nginx.service

    重新读取nginx配置(这个最常用, 不用停止nginx服务就能使修改的配置生效)

    systemctl reload nginx.service

    在 nginx 配置文件 -- /usr/local/nginx/conf/nginx.conf 末尾增加以下内容

    stream {
       upstream cloudsocket {
          hash $remote_addr consistent;
          server 192.168.10.210:3309 weight=5 max_fails=3 fail_timeout=30s;
       }
       server {
          listen 3308;#数据库服务器监听端口
          proxy_connect_timeout 10s;
          proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
          proxy_pass cloudsocket;
       }
    }

    ⚠️注意:

    配置中的 192.168.10.210:3309,是我机器的IP 地址和 mysql 的服务端口;

    3308 是未来 nginx 启动后,对外提供的服务端口

    安装 keepalived 软件

    wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
    tar -zxvf keepalived-2.0.20.tar.gz
    cd keepalived-2.0.20/
    export LIBRARY_PATH=/usr/local/lib64
    ./configure
    make -j 4 && make install

    在编译 keepalived 时,如果没有正确配置 openssl 的so 动态库,可能会出现如下错误信息

    keepalived-2.0.20/keepalived/check/check_ssl.c:81:对‘OPENSSL_init_ssl’未定义的引用
    check/libcheck.a(check_ssl.o):在函数‘init_ssl_ctx’中:
    check_ssl.c:(.text+0x284):对‘OPENSSL_init_ssl’未定义的引用
    check_ssl.c:(.text+0x29a):对‘TLS_method’未定义的引用
    collect2: 错误:ld 返回 1
    make[2]: *** [keepalived] 错误 1
    make[2]: 离开目录“/root/nginx_keepalived/keepalived-2.0.20/keepalived”
    make[1]: *** [all-recursive] 错误 1
    make[1]: 离开目录“/root/nginx_keepalived/keepalived-2.0.20/keepalived”
    make: *** [all-recursive] 错误 1

    此时,只要找到 openssl 的so 安装目录,一般就是 /usr/local/lib64,然后执行以下命令,就可以解决

    export LIBRARY_PATH=/usr/local/lib64

     为系统增加 keepalived 服务

    cp keepalived/etc/init.d/keepalived /etc/init.d/
    chmod a+x /etc/init.d/keepalived
    chkconfig --add keepalived

     设置 keepalived 开启自启动

    chkconfig keepalived on

    设置 keepalived 的启动参数,打开 /usr/local/etc/sysconfig/keepalived 文件,修改里面的内容

    KEEPALIVED_OPTIONS="-D -f /usr/local/etc/keepalived/keepalived.conf"

    为 keepalived 增加一个 nginx 的检测脚本 /usr/local/etc/keepalived/nginx_check.sh

    #!/bin/bash
    set -x
    
    A=`ps -C nginx --no-header |wc -l`
    if [ $A -eq 0 ];then
    
       echo `date`':  nginx is not healthy, try to killall keepalived' >> /usr/local/etc/keepalived/keepalived.log
       killall keepalived
    fi

    ##

    设置 keepalived 的服务,打开 /usr/local/etc/keepalived/keepalived.conf 文件

    为主的 keepalived 设置

    ! Configuration File for keepalived
     
    global_defs {
       router_id lvs-01
    }
     
    vrrp_script chk_nginx { 
        script "/usr/local/etc/keepalived/nginx_check.sh" 
        interval 3 
        weight -20 
    }
     
    vrrp_instance VI_1 {
        state MASTER
        interface eth1
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        ## 将 track_script 块加入 instance 配置块 
        track_script {
            chk_nginx  ## 执行 Nginx 监控的服务
        }
        virtual_ipaddress {
          10.211.55.23
        }
    }

    为备的 keepalived 设置

    ! Configuration File for keepalived
     
    global_defs {
       router_id lvs-02
    }
     
    vrrp_script chk_nginx { 
        script "/usr/local/etc/keepalived/nginx_check.sh" 
        interval 3 
        weight -20 
    }
     
    vrrp_instance VI_1 {
        state MASTER
        interface eth1
        virtual_router_id 51
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        ## 将 track_script 块加入 instance 配置块 
        track_script {
            chk_nginx  ## 执行 Nginx 监控的服务
        }
        virtual_ipaddress {
          10.211.55.23
        }
    }

    主和备 之间的差距

    router_id  *** 设置的值不一样
    priority   *** 权重不同, 主的权重更高
    interface  *** 修改为当前机器的具体网卡名字

    启动 keepalived 服务

    systemctl start keepalived.service

    停止 keepalived 服务

    systemctl stop keepalived.service

    查看 keepalived 设置的虚拟 IP 地址是否生效,可以通过以下命令查看

    ip a

    参考博客:
    https://www.cnblogs.com/taiyonghai/p/6728707.html
    https://www.cnblogs.com/heruiguo/p/8962243.html

    这个博客介绍了如何注册service 服务
    https://www.cnblogs.com/yanqingxu/p/7927830.html

    以下博客介绍了 keepalived 的部署和设置

    https://www.cnblogs.com/cxbhakim/p/9068833.html
    https://www.cnblogs.com/zyxnhr/p/11167401.html

  • 相关阅读:
    C#文件拖放至窗口的ListView控件获取文件类型
    android内存释放处理
    赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印
    POJ 3070 Fibonacci 矩阵高速求法
    poj 3261 后缀数组 找反复出现k次的子串(子串能够重叠)
    Codeforces Round #313 C. Gerald's Hexagon(放三角形)
    HTTP服务端JSON服务端
    iPad popView封装
    OpenCv 人脸检測的学习
    《深入理解java虚拟机》:类的初始化
  • 原文地址:https://www.cnblogs.com/chenfool/p/10576795.html
Copyright © 2020-2023  润新知