zoukankan      html  css  js  c++  java
  • nginx+keepalived实现双机热备高可用性

    搭建准备:

    机器两台 ip分别为192.168.100.128 192.168.100.129(能够用虚拟机測试。虚拟机网络模式为NET模式。且为静态ip)

    另外须要准备一个虚拟ip对外提供服务。即通过该ip訪问web程序。

    (keepalive会将虚拟ip绑定到两台机器上)keepalived的核心原理是vrrp协议。英文好能够查看最新协议RFC3768。

    1.nginx安装

    两台机器都须要安装。能够參考我的上篇博文 Linux tar包安装Nginx http://blog.csdn.net/caicongyang/article/details/46388845

    2.安装keepalived (两台机器都要安装,而且都要做例如以下操作!)

    下载最新版本号的keepalived-1.2.17.tar.gz 下载地址:http://www.keepalived.org/download.html

    将文件上传到/usr/local/文件夹下

    #tar -zxvf keepalived-1.2.17.tar.gz

    将解压出来的目录重命名

    #mv keepalived-1.2.17 keeplived
    

    进入目录,编译安装

    #cd keepalived
    #./configure --prefix=/usr/local/keepalived
    #make && make install
    

    改动配置文件 /usr/local/keepalived/etc/keepalived/keepalived.conf

    主机器配置文件例如以下:

    global_defs {
    notification_email {
    1491318829@qq.com               #接收警报的email地址,能够加入多个
    }
    notification_email_from admin@caicongyang.com   ###发件人地址
    smtp_server 127.0.0.1          ###发送邮件的服务器
    smtp_connect_timeout 30      ###超时时间
    router_id LVS_DEVEL      ####load balancer 的标识 ID,用于email警报
    }
    vrrp_script chk_http_port {
    script “/opt/nginx_pid.sh” ####检測nginx状态的脚本路径
    interval 2
    weight -20
    }
    vrrp_instance VI_1 {
    state MASTER ############ 辅机为 BACKUP
    interface eth0 ####HA 监測网络接口  此项默觉得eth0,由于本人在虚拟机下做測试所以将其改为eth2,能够用ifconfing
    virtual_router_id 51 #主、备机的 virtual_router_id 必须同样
    mcast_src_ip 192.168.100.128 ###本机IP地址
    priority 100 ########### 权值要比 back 高
    advert_int 1 #主备之间的通告间隔秒数
    authentication {
    auth_type PASS ###默认配置 主备切换时的验证 
    auth_pass 1111
    }
    track_script {
    chk_http_port ### 运行监控的服务
    }
    virtual_ipaddress {
    192.168.100.133/24 ####虚拟ip,vip的地址
    }
    }

    backup机器配置文件

    global_defs {
    notification_email {
    1491318829@qq.com               #接收警报的email地址,能够加入多个
    }
    notification_email_from admin@caicongyang.com   ###发件人地址
    smtp_server 127.0.0.1          ###发送邮件的服务器
    smtp_connect_timeout 30      ###超时时间
    router_id LVS_DEVEL      ####load balancer 的标识 ID,用于email警报
    }
    vrrp_script chk_http_port {
    script “/opt/nginx_pid.sh” ####检測nginx状态的脚本路径
    interval 2
    weight -20
    }
    vrrp_instance VI_1 {
    state BACKUP ############ 辅机为 BACKUP
    interface eth2 ####HA 监測网络接口 注意。此项默觉得eth0,由于本人在虚拟机下做測试所以将其改为eth2。能够先查看自己的网络端口
    virtual_router_id 51 #主、备机的 virtual_router_id 必须同样
    mcast_src_ip 192.168.100.129 ###本机IP地址
    priority 90 ########### 权值要比 back 高
    advert_int 1 #主备之间的通告间隔秒数
    authentication {
    auth_type PASS ###主备切换时的验证
    auth_pass 1111
    }
    track_script {
    chk_http_port ### 运行监控的服务
    }
    virtual_ipaddress {
    192.168.100.133/24 ####虚拟ip,vip的地址
    }
    }
    将keepalived安装成Linux系统服务

    #cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 
    
    #cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
    
    #mkdir /etc/keepalived 
    
    #cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
    
    #cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

    设置开机启动服务

    # chkconfig --level 2345 keepalived on

    在/opt/下编写校验脚本,/opt/nginx_pid.sh(已配置在keepalived.conf中)

    nginx_pid.sh :假设nginx停止执行,尝试启动。假设无法启动杀死本机keepalived进程,keepalied将虚拟ip绑定到备用机器上

    建议脚本用vi或者vim在linux下编辑。由于linux的换行符和windows的不同,假设在windowsx下编辑,在传上去可能没法用!

    #!/bin/bash
    A=`ps -C nginx -–no-header |wc -l`
    if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx ##这个地方写你nginx启动命令的路径
    sleep 3
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    killall keepalived
    fi
    fi

    測试:

    分别启动两台机器上nginx 和 keepalived

    利用命令查看虚拟ip是否绑定成功

    #ip a

    主机的结果是

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:ff:ca:24 brd ff:ff:ff:ff:ff:ff
        inet 192.168.100.128/24 brd 192.168.100.255 scope global eth1
        <span style="color:#ff6666;">inet 192.168.100.133/32 scope global eth1</span>
        inet6 fe80::20c:29ff:feff:ca24/64 scope link 
           valid_lft forever preferred_lft forever
    

    能够看到 虚拟IP 192.168.100.133已经绑定到128的机器上了

    另外可以利用杀死主服务的nginx进程。訪问192.168.100.133是否依旧可以訪问web页面,再次利用#ip a 命令查看备用机器虚拟ip是否绑定成功!


    也能够用以下的命令查看keepalived启动过程日志

    #tail -f /var/log/messages
    


    后记:双机热备模式尽管可用性高,可是有一台机器处于被分在状态。资源有点浪费。楼主将在下篇文章配置双机互为双主的模式。


    不懂运维的程序猿。不是好的project师!



    我的个人站点:http://www.caicongyang.com

    我的CSDN博客地址: http://blog.csdn.net/caicongyang 








  • 相关阅读:
    DB开发之oracle存储过程
    DB开发之mysql
    DB开发之oracle
    DB开发之postgresql
    Object-C开发之instancetype和id关键字
    Linux 学习笔记
    Java开发之JDK配置
    Android开发在路上:少去踩坑,多走捷径
    C/C++之Qt正则表达式
    Linux 安全配置指南
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6789084.html
Copyright © 2011-2022 走看看