zoukankan      html  css  js  c++  java
  • 双机热备之nginx和keepalived

    一:安装前配置:
    主机:192.168.220.133
    辅机:192.168.220.134
    虚拟ip:192.168.220.136

    (注:192.168.220.133 对应的是mengyan133主机名,192.168.220.134对应的是mengyan134主机名.这个ip和主机名做了映射,两台服务器做了免密登录操作)
    1.1首先安装yum -y install gcc pcre-devel zlib-devel openssl-devel
    下载安装包keepalived-1.3.4.tar.gz和nginx-1.9.9.tar.gz
    1.2安装nginx
    执行tar zxvf nginx-1.9.9.tar.gz -C /usr/local/src/
    进入nginx目录:cd /usr/local/src/nginx-1.9.9
    添加www用户,其中-M参数表示不添加用户家目录,-s参数表示指定shell类型
    useradd www -M -s /sbin/nologin
    vi auto/cc/gcc
    #将这句注释掉 取消Debug编译模式 大概在179行
    #CFLAGS="$CFLAGS -g"
    执行configure:
    ./configure --prefix=/usr/local/nginx
    然后make:
    make && make install
    将nginx服务加入开机启动服务
    echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local
    启动nginx :
    在/usr/local/nginx/sbin下执行./nginx
    停止:./nginx -s stop
    查看nginx的进程:ps -ef|grep nginx
    将nginx写入环境变量,这样在哪个目录下都可以执行nginx命令:
    vi /etc/profile 在文件最下面添加如下:
    #NGINX_HOME
    export NGINX_HOME=/usr/local/nginx
    export PATH=$PATH:$NGINX_HOME/sbin
    保存退出 ,执行source /etc/profile使文件生效
    执行 nginx就是启动,执行nginx -s stop就是关闭
    nginx -s reload重启
    1.3安装keepalived
    先删除keepalived
    rm -f /usr/local/sbin/keepalived rm -f /usr/local/etc/rc.d/init.d/keepalived
    rm -f /usr/local/etc/sysconfig/keepalived rm -rf /usr/local/etc/keepalived
    rm -f /usr/local/bin/genhash rm -rf /usr/local/keepalived rm -rf /etc/keepalived
    rm -f /etc/rc.d/init.d/keepalived rm -f /usr/sbin/keepalived
    rm -f /etc/sysconfig/keepalived rm -f /etc/systemd/system/multi-user.target.wants/keepalived.service
    执行tar -zvxf keepalived-1.3.4.tar.gz -C /usr/local/src/
    进入/usr/local/src/keepalived-1.3.4/
    执行./configure
    然后:make && make install
    将下面的加入配置
    cp /usr/local/src/keepalived-1.3.4/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/
    cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
     mkdir /etc/keepalived
    配置文件:
    cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/local/sbin/keepalived /usr/sbin/
    将keepalive服务加入开机启动服务:
    chkconfig keepalived on
    启动keepalived:
    在安装目录下:service keepalived start
    状态:service keepalived status
    nginx中配置tomcat:
    进入到/usr/local/nginx/conf目录下
    vi nginx.conf
    在server上面在加一个:
    upstream tomcatservers {
    server mengyan133:8080 weight=10;
    server mengyan134:8080 weight=10;
    }
    然后在server下的location中把欢迎页去掉,加上:
    location / {
    # root html;
    proxy_pass http://tomcatservers;
    index index.html index.htm;
    }
    重启nginx:nginx -s reload
    在页面中查看:
     
    二:将keepalived主副机关联
    2.1找到keepalived.conf: vi /etc/keepalived/keepalived.conf
    主机:
    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.220.136
    }
    介绍:主节点为MASTER,备份节点为BACKUP
    virtual_router_id 51## 虚拟路由ID号
    priority 100  ##优先级配置(0-254的值)virtual_ipaddress:虚拟ip(vip),可以指定多个
    辅机:
    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.220.136
    }
    }
    两台keepalived重启,主机输入 ip add show ens33 (注:这里的ens33是网卡,不知道网卡是多少的可以敲击:ip a 查看):
     
    在去查看辅机的:ip add show ens33 :
    可以看到136现在在主机上。停止主机的keepalived:service keepalived stop
    再去查看主机的:
    查看辅机的:
    自动切换到辅机上。在重启主机的keepalived:service keepalived restart
    可以看到主机占的权重大,每次主机启动虚拟ip就会跑到主机上
    三:将keepalived和nginx自身关联起来并和主副机的keepalived和nginx关联
    3.1keepalived只是保证两台服务器之间通信的,不是来看keepalived挂不挂,只是来看nginx挂没挂。nginx挂了但是keepalived没挂虚拟ip不会飘到另一台服务器。所以需要keepalived和nginx相关联(要挂一起挂,虚拟ip才能飘到另一台服务器上):
    在/etc/keepalived下创建:nginx_check.sh, vi nginx_check.sh:
    #!/bin/bash
    d=`date --date today +%Y%m%d_%H:%M:%S`
    n=`ps -C nginx --no-heading|wc -l`
    if [ $n -eq 0 ]; then
        echo "`date "+%Y-%m-%d--%H:%M:%S"` nginx stop" >> /var/log/check_ng.log
        /usr/local/nginx/sbin/nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
            echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
            service keepalived stop
        fi
    fi

    权限: chmod 777 nginx_check.sh
    (注:除非遇到特殊情况,不然人为的停止nginx,脚本立刻就能再次启动nginx,从而保证服务器正常运行下去。虚拟ip到底怎么飘到另一台服务器上上面已经做了演示。如果想看关闭nginx直接关闭keepalived从而虚拟ip直接飘到另一台服务器的用这个脚本:)
    #!/bin/bash
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    service keepalived stop
    fi

    然后在keepalived.conf中配置:
    vrrp_script check_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
    }
    track_script {
            check_nginx
        }
    这里需要主机从起nginx然后重启keepalived
    介绍:
    vrrp_script check_nginx放到vrrp_instance VI_1上面
    script "/etc/keepalived/nginx_check.sh" ##执行脚本位置
        interval 2 ##检测时间间隔
        weight -20 ## 如果条件成立则权重减20(-20)
    check_nginx 监控脚本放到virtual_ipaddress上面就行
    重启keepalived: service keepalived restart
    记住:如果用虚拟ip无法访问并且无法ping通的话,原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。详情请见:
     
  • 相关阅读:
    【MyLocations】标记位置App开发体会
    iOS开发-Core Location和Map Kit
    iOS开发-轻点、触摸和手势
    iOS开发-GCD和后台处理
    iOS开发-block使用与多线程
    iOS开发-数据持久化
    iOS开发-为程序添加应用设置
    对iOS中MVC的理解
    docker
    linux shell
  • 原文地址:https://www.cnblogs.com/gxbmjz0721/p/15138151.html
Copyright © 2011-2022 走看看