基于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

相关推荐

  • 第三周学习总结之用户管理

    写在前面 我们知道作为一个系统管理员,对系统内人员的管理是非常频繁的,今天给张三添加某个权限,明天李四离职需要删除账号、回收权限,后天王五部门调动,都需要涉及到人员账号的相应调整。因此用户的管理就变得尤其重要。 用户管理 Linux系统的用户有普通用户和特权用户之分,特权用户是可以执行特权操作的一个或一类用户,而普通用户则只能执行普通的操作,没有特权操作权利…

    2017-12-19
  • 对虚拟机键入Ctrl+Alt+Delete的详细说明

            日常中我们用Windows系统时经常使用Ctrl+Alt+Delete来换出任务管理的菜单,进行任务管理,linux中也有这样的键入命令,但不是管理任务,而是重启系统!!!那么我们就应该注意了,不要误操作重启服务器。       &n…

    2017-03-28
  • Python基础语法习题

    1、~12为什么是-13?解1:12 二进制:0000 1100补码: 0000 1100按位取反 :1111 0011求这个原码,即负数求补码的逆过程:先减1,再取反 (符号位不变)-1 1111 0010取反 1111 1101 还原成十进制-13 2、10^9等于?10^-9等于?解:(1)10^910的二进制:0000 10109的二进制: 0000…

    Linux干货 2018-03-24
  • RAID级别及各个级别特性

    1、什么RAID      RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列。 2、RAID的级别及各个级别的特性:     (1)RAID-0:无差错控制的条带化:   &nbs…

    Linux干货 2016-04-12
  • Linux boot分区意外格式化或清除之后…

    boot分区在没有备份的情况下意外被清空,包括启动引导信息也没了。这时若Linux还在运行,那你是幸运的, 修复的方法: 1. cat  /etc/*release      #赶快先确定当前系统的具体版本。有ISO镜像赶快挂载上来.   &nbsp…

    Linux干货 2016-03-22
  • 17周博客作业 LVS+nginx+php(nginx与php分离)

    1、结合图形描述LVS的工作原理; LVS是一种用软件实现的LB集群; 作用于传输层; LVS工作原理:通过Director调度把用户请求按照分配算法分配给后端的Real server,然后由后端Real server响应客户请求; lvs模式分为三种。 lvs-nat: 多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某…

    Linux干货 2016-11-07