基于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 10:34
下一篇 2016-11-07 10:37

相关推荐

  • N21天天第十四周课程练习

    系统的INPUT和OUTPUT默认策略为DROP; #把默认策略设置为DROP [root@localhost ~]# iptables -P INPUT DROP [root@localhost ~]# iptables -P OUTPUT DROP 1、限…

    Linux干货 2016-12-05
  • 马哥教育网络班21期-第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@localhost ~…

    Linux干货 2016-08-29
  • 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述         在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算…

    Linux干货 2015-07-28
  • 6

    请详细总结vim编辑器的使用并完成以下练习题; 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/ rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; #   cp /etc/rc.d/rc.sysinit /tmp/ #   vim…

    Linux干货 2017-02-07
  • linux的发展史

                  linux的发展史     1  Linux的诞生:    1988年:芬兰赫尔辛基大学迎来一位新生-linus benedict torvalds (后面简称linus)   2 &nbsp…

    Linux干货 2016-10-19
  • lvs 基本概念

    LVS(linux virtual machine) 的简写,是一个虚拟的服务器集群系统,主要用于4层负载均衡。 宗旨: 使用集群技术和Linux操作系统实现一个高性能、高可用的服务器. 很好的可伸缩性(Scalability) 很好的可靠性(Reliability),应该还是高可用吧 很好的可管理性(Manageability…

    Linux干货 2015-09-14