keepalived实现高可用nginx反向代理的简单案例



写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正。如有不明白的地方,愿可一起探讨。



案例拓扑图



安装keepalived和nginx



安装keepalived

# yum -y install keepalived

创建nginx用户组及nginx用户

# groupadd -r nginx
# useradd -g nginx -r nginx

编译安装nginx-1.4.7

# tar xf nginx-1.4.7.tar.gz 
# cd nginx-1.4.7
# ./configure   --prefix=/usr   --sbin-path=/usr/sbin/nginx   --conf-path=/etc/nginx/nginx.conf   --error-log-path=/var/log/nginx/error.log   --http-log-path=/var/log/nginx/access.log   --pid-path=/var/run/nginx/nginx.pid    --lock-path=/var/lock/nginx.lock   --user=nginx   --group=nginx   --with-http_ssl_module   --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/usr/local/nginx/client/   --http-proxy-temp-path=/usr/local/nginx/proxy/   --http-fastcgi-temp-path=/usr/local/nginx/fcgi/   --http-uwsgi-temp-path=/usr/local/nginx/uwsgi   --http-scgi-temp-path=/usr/local/nginx/scgi   --with-pcre
# make && make install

检查配置文件是否有语法错误

[[email protected] nginx-1.4.7]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] mkdir() "/usr/local/nginx/client/" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed

修改错误

# mkdir /usr/local/nginx

再次检查配置文件是否有语法错误

[[email protected] nginx-1.4.7]# nginx -t

为nginx提供SysV init脚本

# vim /etc/rc.d/init.d/nginx
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse #               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed ‘s/[^*]*--user=\([^ ]*\).*/\1/g‘ -`
   options=`$nginx -V 2>&1 | grep ‘configure arguments:‘`
   for opt in $options; do
       if [ `echo $opt | grep ‘.*-temp-path‘` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

赋予nginx脚本执行权限

# chmod +x /etc/rc.d/init.d/nginx

添加至服务管理列表,并让其开机自动启动

# chkconfig --add nginx
# chkconfig nginx on

提示:在两个keepalived+nginx主机上都需安装keepalkved和nginx服务

配置nginx为反向代理服务器



编辑nginx.conf配置文件

# cd /etc/nginx/
# vim nginx.conf

在nginx.conf配置文件中的http段内添加如下内容

upstream webservers {
    server 10.170.2.101;
    server 10.170.2.102;
}
server {
    listen 80;
    server_name www.muluhe.com;
    location / {
        proxy_pass http://webservers;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

提示:在两台keepalived+nginx主机的nginx.conf的配置文件所添加的内容一样

配置keepalived



编辑keepalived.conf配置文件

# cd /etc/keepalived/
# vim keepalived.conf

IP地址为10.170.2.60的配置文件内容为:

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 15
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 111111
    }
    virtual_ipaddress {
        10.170.2.100
    }
    notify_master "/etc/init.d/nginx start"
    notify_backup "/etc/init.d/nginx stop"
    notify_fault "/etc/init.d/nginx stop"
}

IP地址为10.170.2.61的配置文件内容为

! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 15
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 111111
    }
    virtual_ipaddress {
        10.170.2.100
    }
    notify_master "/etc/init.d/nginx start"
    notify_backup "/etc/init.d/nginx stop"
    notify_fault "/etc/init.d/nginx stop"
}

配置web1和web2服务器



编辑web1测试页面

# vim /var/www/html/index.html
内容为:<h1>www1.muluhe.com</h1>

启动httpd服务

# /etc/init.d/httpd start

编辑web2测试页面

# vim /var/www/html/index.html
内容为:<h1>www2.muluhe.com</h1>

启动httpd服务

# /etc/init.d/httpd start

启动keepalived服务并进行测试



启动keepalived+nginx两台主机的keepalived服务

# /etc/init.d/keepalived start

在浏览器中键入10.170.2.100,刷新几下,可得到如下结果

关闭IP地址为10.170.2.60那台主机的keepalived服务

# /etc/init.d/keepalived stop

再次在浏览器中键入10.170.2.100,刷新几下,查看结果如下

由以上结果可以,keepalived实现了nginx反向代理的高可用以及nginx实现了web的负载均衡效果。

时间: 2024-10-26 04:40:52

keepalived实现高可用nginx反向代理的简单案例的相关文章

Keepalived实现高可用Nginx反向代理和基于NAT的LVS及分析

1. 前言 keepalived是一个C语言开发的,能够基于Linux基础架构提供一个HA实现的软件.HA是基于VRRP协议实现,可以为LVS.Nginx.HAProxy等实现的LB提供高可用. 下图是keepalived的软件架构图 主要核心模块: Checkers:负责对Real Server进行健康检查. VRRP栈:实现了VRRP协议,实现了vrrp_sync_group扩展,不依赖于LVS可以独立的使用.例如下面第一个实验keepalived+nginx反代. IPVS Wrapper

Keepalived实现高可用Nginx反向代理

由于好久没有接触过负载相关的调试了复习一下 实验系统: (1)CentOS 6.5_x86_64: (2)共有二台主机,本实验以ip地址来命名主机,即10主机.11主机. 实验前提:防火墙和selinux都关闭,主机之间时间同步 实验软件:nginx-1.10.2-1.el6.x86_64.keepalived-1.2.13-5.el6_6.x86_64.httpd-2.2.15-59.el6.centos.x86_64为了方便实验只起了2台虚机方便测试,每台虚机上都安装nginx.keepal

用HAProxy和KeepAlived构建高可用的反向代理

用HAProxy和KeepAlived构建高可用的反向代理 前言对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡.而如果实 现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请求进行分发,这台服务器即反向代理.由于反向代理服务器是网站的入口,其负载压力大且易遭 到攻击,存在单点故障的风险,所以我们需要一个高可用的方案来实现当一台反向代理服务器宕机的时候,另一台服务器会自动接管服务.基于以上要求,我们使用 H

keepalived的高可用nginx和lvs实现负责均衡

keepalived VRRP协议 VRRP(virtual route Redundancy Protocol),虚拟路由冗余协议.因为每个设备的都只有一个默认网关指向,一旦这个默认指向的网关处理问题.我们就需要重新设定默认网关的指向.VRRP就是解决这个问题出现,VRRP协议是将一组路由划分起来.在这组路由器中只设置一个虚拟IP和虚拟MAC地址,然后根据设定的规则在这组路由器中转移.每个路由器都有各自网卡和IP地址,同时在主路由上有VIP(飘移IP).在这组路由中,通过投票选举的方式选出主路

学习Nginx反向代理实现简单负载均衡

 Nginx proxy作为Nginx的重要功能,使用nginx proxy基本可以实现一个完整的7层负载均衡.其特色如下:1.功能强大,性能卓越,运行稳定.2.配置简单灵活. Nginx proxy作为Nginx的重要功能,使用nginx proxy基本可以实现一个完整的7层负载均衡. 其特色如下: 1.功能强大,性能卓越,运行稳定. 2.配置简单灵活. 3.能够自动剔除工作不正常的后端服务器. 4.上传文件使用异步模式. 5.支持多种分配策略,可以分配权重,分配方式灵活 配置环境: 三台

lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(一) 简介

一. 为什么这样构架 1. 系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后 很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的 配置文件,并能实现无缝配置变更!nginx提供反向代理,而tomcat则提供web服务. 二.LVS LVS是Linux Virtual Server的简写,意即Linux虚拟

利用keepalived实现高可用nginx

实验拓扑图(1)本次基于VMware Workstation搭建一个四台Linux(CentOS 7.4)系统所构成的一个服务器集群,其中两台nginx做前端调度服务器(一台为主机,另一台为备机),另外两台作为真实的Web服务器(向外部提供http服务,这里仅仅使用了CentOS默认自带的http服务,没有安装其他的类似Tomcat.Jexus服务). (2)本次实验设置了一个VIP(Virtual IP)为172.18.38.99,用户只需要访问这个IP地址即可获得网页服务.其中,nginx主

lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(二) LVS

一.安装lvs sudo apt-get install ipvsadm 二.安装keepalived sudo apt-get install keepalived 三.创建keepalived.conf文件 sudo gedit /etc/keepalived/keepalived.conf 四.配置keepalived.conf # Global Configuration global_defs { lvs_id director1 } # VRRP Configuration vrrp

keepalived高可用+nginx证书代理

安装nginx yum -y install gcc pcre-devel openssl-devel        #安装依赖包 wget   http://nginx.org/download/nginx-1.12.2.tar.gz     (也可配置阿里源用yum安装) tar -xf nginx-1.12.2.tar.gz ./configure  \ --prefix=/usr/local/nginx \                #指定安装路径 --user=nginx \