基于keepalived实现高可用nginx服务

基于keepalived实现高可用nginx服务

环境及配置前提说明

主机1,ip:192.168.25.140 运行web服务

主机2,ip:192.168.25.141 运行web服务

主机3,ip:192.168.25.138 运行nginx服务和keepalived服务

主机4,ip:192.168.25.139 运行nginx服务和keepalived服务

1两台nginx主机编译安装nginx服务

    # 下载源码包
    ]# yum install -y make
    ]# yum install -y gcc
    ]# yum -y groupinstall "Development Tools" "Server Platfrom Development"
    ]# yum install pcre-devel openssl-devel zlib-devel -y  手动解决最重要的依赖关系包
    ]# useradd -r nginx 增加一个系统用户
    ]# tar -xf nginx-1.10.0.tar.gz
    ]# cd nginx-1.10.0/
    nginx-1.10.0]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/va/log/nginx.log 
    --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock 
    --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_dav_module 
    --with-http_stub_status_module --with-threads --with-file-aio
    ]# make && make install
    ]# vim /etc/profile.d/nginx.sh
        export PATH=/usr/local/nginx/sbin:$PATH
    ]# . /etc/profile.d/nginx.sh
    ]# nginx -t 检测错误
    ]# nginx -h 可查看命令使用帮助
    启动服务,检测端口是否已经启用
    ]# /usr/local/nginx/sbin/nginx 启动服务
    ]# ss -tnlp 查看80端口是否已经启用,注意,如果httpd服务已经启用了话 这里会启动失败

2两台nginx主机安装keepalived服务

]# yum install keepalived -y

2.1为两台keepalived主机编辑邮件通知脚本

]# vim notify.sh
#!/bin/bash
#
contact='root@localhost'

notify() {
        mailsubject="$(hostname) to be $1, vip floating"
        mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
        echo "$mailbody" | mail -s "$mailsubject" $contact
}

case $1 in
master)
        notify master
        ;;
backup)
        notify backup
        ;;
fault)
        notify fault
        ;;
*)
        echo "Usage: $(basename $0) {master|backup|fault}"
        exit 1
        ;;
esac

2.2将脚本移动至/etc/keepalived/目录下,并且给脚本执行权限

]# mv notify.sh /etc/keepalived/
]# chmod +x notify.sh

3配置nginx的反代配置文件

    ]# vim /etc/nginx/nginx.conf 编辑主配置文件,在http上下文编辑upstream server,如下;

基于keepalived实现高可用nginx服务

4配置两台keepalived节点主机配置文件

]# vim  keepalived.conf,详细配置如下;
4.1节点一配置
! Configuration File for keepalived

    global_defs {
       notification_email {
         root@localhost
       }
       notification_email_from keepalived@localhost
       smtp_server 172.0.0.1
       smtp_connect_timeout 30
       router_id node1
       vrrp_mcast_group4 224.0.100.19

    }

    vrrp_script chk_down {
            script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
            interval 1
            weight -5
    }
    vrrp_script chk_nginx {
            script "killall -0 nginx && exit 0 || exit 1"
            interval 1
            weight -5
    }

    vrrp_script chk_nginx
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 1
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass cb77b8da
        }

    virtual_ipaddress {
            192.168.25.142/32 dev eth0 #nginx外网地址
        }
    track_script {
            chk_down
            chk_nginx
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }
4.2节点二配置
! Configuration File for keepalived

    global_defs {
       notification_email {
         root@localhost
       }
       notification_email_from keepalived@localhost
       smtp_server 172.0.0.1
       smtp_connect_timeout 30
       router_id node1
       vrrp_mcast_group4 224.0.100.19

    }

    vrrp_script chk_down {
            script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
            interval 1
            weight -5
    }
    vrrp_script chk_nginx {
            script "killall -0 nginx && exit 0 || exit 1"
            interval 1
            weight -5
    }

    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 1
        priority 98
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass cb77b8da
        }
        virtual_ipaddress {
            192.168.25.142/32 dev eth0 #nginx外网地址
        }


    track_script {
            chk_down
            chk_nginx
        }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
    }

5为两台RS web服务器编辑主页以便进行测试

]# vim /var/www/html/index.html
    <h1>RS 1</h1> #RS1的主页
    <h1>RS 2</h1> #RS2的主页

6进行访问测试

原创文章,作者:M20-1马星,如若转载,请注明出处:http://www.178linux.com/58159

(0)
M20-1马星M20-1马星
上一篇 2016-11-07
下一篇 2016-11-07

相关推荐

  • 网络服务之Nginx

      在之前一篇博客中我们讲述了httpd网络服务器,那么httpd是个非常稳定安全的一个服务器,这次我们介绍一个新的网络服务器—-nginx。   Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器(我们主要围绕这两…

    2017-06-07
  • “拆”解RAID工作原理

    一、什么是RAID RAID:Redundant Arrays of Inexpensive(Independent)Disks,廉价(独立)的冗余磁盘阵列。1988年由加利福尼亚大学伯克利分校提出。使用多个相对便宜的磁盘通过某种方式组合成一个“阵列”,来提供更好的性能、冗余,或两者同时提供。 性能提高:     &n…

    Linux干货 2016-11-22
  • LVM2详解

    1、什么是lvm LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样…

    Linux干货 2017-01-03
  • 马哥教育网络班22期+第1周课程练习

    第1周课程练习 一、描述计算机的组成及其功能。     CPU (运算器+控制器), 存诸器(内存与外部存储),输入输出设备。      运算器:对数据进行处理(包括算述运算与逻辑运算)。      控制器:负责从存储器取出指令,按指令的要求发出控制信号,使各…

    Linux干货 2016-08-15
  • 文件挂载

    (1)创建目录 /mnt/file,利用dd命令创建一个大文件; (2)将文件格式化,这个文件有文件系统,相当于一个分区; (3)直接用blkid 看不到文件,可以用mount -o loop 挂载文件,挂载上后,文件就可以当作分区来用了; (4)挂载文件的优势在于,方便移动。分区不能随便移动而文件可以; centos6是要加-o loop的 centos7…

    2017-05-03
  • RHCE基础实验

    实验:配额实现 1. 启用配额功能 vim /etc/fstab defaults usrquota,grpquota mount -o remount /home 2. 创建配额数据库 quotacheck -cug /home 3. 启用数据库 quotaon /home quotaon -p /home 查看 4. edquota wang setqu…

    Linux干货 2017-05-02