Nginx配合keepalived实现双主负载均衡

一、架构规划

1、服务器IP地址规划

VIP1:192.168.1.149

VIP2:192.168.1.150

Keepalived1:192.168.1.151

Keepalived2:192.168.1.152

WebServer1:192.168.1.201

WebServer2:192.168.1.202

2、服务器操作系统

所使用的操作系统均为CentOS release 6.6 (Final) x86_64,最小化安装。

3、网络拓扑图

二、配置Nginx代理服务器

此部分Node1与Node2的配置完全相同。

1,准备编译环境


1

# yum –y install gccgcc-c++ pcre-devel openssl openssl-devel wget

2,编译安装nginx

# ./configure \   --prefix=/usr/local/nginx \   --sbin-path=/usr/local/nginx/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-pcre  # make && make install

3,为nginx提供SysV init脚本:

# vi /etc/rc.d/init.d/nginx

添加如下内容

#!/bin/sh  #  # nginx - this script starts and stopsthe 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/local/nginx/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

而后为此脚本赋予执行权限:

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

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

# chkconfig --add nginx

# chkconfig nginx on

4,配置Nginx代理

# cat nginx.conf

user nginx nginx;      worker_processes 1;      pid /var/run/nginx/nginx.pid;      worker_rlimit_nofile 51200;      events      {      use epoll;      worker_connections 51200;      }      http{      include       mime.types;      default_type application/octet-stream;      server_names_hash_bucket_size 128;      client_header_buffer_size 32k;      large_client_header_buffers 4 32k;      client_max_body_size 8m;      sendfile on;      tcp_nopush     on;      keepalive_timeout 60;      tcp_nodelay on;      fastcgi_connect_timeout 300;      fastcgi_send_timeout 300;      fastcgi_read_timeout 300;      fastcgi_buffer_size 64k;      fastcgi_buffers 4 64k;      fastcgi_busy_buffers_size 128k;      fastcgi_temp_file_write_size 128k;      gzip on;      gzip_min_length 1k;      gzip_buffers     4 16k;      gzip_http_version 1.0;      gzip_comp_level 2;      gzip_types       text/plain application/x-javascript text/css application/xml;      gzip_vary on;      upstream backend      {      ip_hash;      server 192.168.1.201:80;      server 192.168.1.202:80;      }      log_format access ‘$remote_addr - $remote_user [$time_local] "$request" ‘      ‘$status $body_bytes_sent "$http_referer" ‘      ‘"$http_user_agent" $http_x_forwarded_for‘;      access_log /var/log/nginx/access.log access;      server {      listen 80;      server_name www.test.com;      location / {      root /var/www/html ;      index index.php index.htm index.html;      proxy_redirect off;      proxy_set_header Host $host;      proxy_set_header X-Real-IP $remote_addr;      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;      proxy_pass http://backend;      }      location /nginx {      access_log off;      auth_basic "NginxStatus";      }      }  }

三、安装与配置keepalived

# wgethttp://www.keepalived.org/software/keepalived-1.2.16.tar.gz    # yum -y install libnl-devel  # ./configure --prefix=/usr/local/keepalived    # make && make install    # cp /usr/local/keepalived/sbin/keepalived /usr/sbin/   # cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/   # cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/   # mkdir /etc/keepalived    # cd /etc/keepalived/  # vim keepalived.conf

以上步骤在两台keepalived机器上都需要进行

下面分别是两节点的配置文件

节点一

! Configuration File for keepalived         global_defs {       notification_email {             [email protected] #接收警报的email地址,可以添加多个     }       notification_email_from [email protected] #发件人地址     smtp_connect_timeout 3  #超时时间     smtp_server 127.0.0.1  #发送邮件的服务器     router_id LVS_DEVEL  #load balancer的标识ID,用于email警报  }    vrrp_instance VI_1 {        state MASTER      interface eth0      virtual_router_id 51       priority 100    # 权值要比 back 高      advert_int 1      authentication {            auth_type PASS            auth_pass 123456      }        virtual_ipaddress {            192.168.1.149 #vip的地址    }  }    vrrp_instance VI_2 {        state BACKUP      interface eth0        virtual_router_id 52       priority 90      advert_int 1       authentication {            auth_type PASS            auth_pass 123456       }        virtual_ipaddress {            192.168.1.150      }   }

节点二

! Configuration File for keepalived  global_defs {     notification_email {           [email protected]     }     notification_email_from [email protected]     smtp_connect_timeout 3     smtp_server 127.0.0.1     router_id LVS_DEVEL  }  vrrp_instance VI_1 {      state BACKUP      interface eth1      virtual_router_id 51      priority 90      advert_int 1      authentication {          auth_type PASS          auth_pass 123456      }      virtual_ipaddress {          192.168.1.149    }  }  vrrp_instance VI_2 {       state MASTER      interface eth1       virtual_router_id 52      priority 100      advert_int 1      authentication {          auth_type PASS          auth_pass 123456      }      virtual_ipaddress {          192.168.1.150      }  }

为两节点添加nginx状态监控脚本,由于keepalived本身不能检测到nginx的存活状态,需要借助于第三方脚本来实现,下面是出自余洪春前辈的一个检测脚本,在这里借用一下。

# vim /home/nginx_chk.sh

# chmod +x /home/nginx_chk.sh

#!/bin/bash  while  :  do  nginxpid=`ps -C nginx --no-header | wc -l`   if [ $nginxpid -eq 0 ];then    /usr/local/nginx/sbin/nginx    sleep 5  nginxpid=`ps -C nginx --no-header | wc -l`    echo $nginxpid      if [ $nginxpid -eq 0 ];then   /etc/init.d/keepalived stop     fi   fi   sleep 5  done
# chmod +x /home/nginx_chk.sh
后台执行该脚本
# nohup sh /home/nginx_chk.sh &

四、安装web server

这里为了测试我直接使用yum安装两台服务器上的nginx服务。

增加额外资源库

# yum -y install yum-priorities  # rpm -Uvh http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm   # rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm   # yum -y install nginx  # /etc/init.d/nginx start

五、启动测试

首先测试两台WebServer的可用性


可以看到两台WebServer都运行正常

查看两台keepalived节点的IP情况


使用两个VIP进行访问


停掉一台keepalived服务,查看IP


可以看到VIP已经成功流转到另一节点上,再使用VIP进行访问,依然可以正常访问。


这时重新启动节点一上的keepalived服务,可以看到属于节点一的VIP又重新回到了节点一上。

基本配置到这里就完成了。

时间: 2024-10-17 04:48:30

Nginx配合keepalived实现双主负载均衡的相关文章

Nginx+keepalived构建双主负载均衡代理服务器

引言 Nginx是一个高性能的代理服务器,单台Nginx容易出现单点故障,使用keepalived可以实现Nginx的故障转移,保证了网站的高可用性 一.使用Nginx+keepalived的两种方案 1.主从模式 使用一个VIP,前端有2台服务器,一主一从,正常情况下是主服务器提供服务只有当主服务器不能正常提供服务之后,从服务器才提供服务,此时总会有一台服务器是空闲状态. 2.双主模式 使用两个VIP,前段有2台服务器,互为主从,两台服务器同时工作,不存在资源浪费情况.同时在前段的DNS服务器

Haproxy+keepalived实现双主负载均衡高可用集群

项目说明 1.         使用LVS负载均衡用户请求到后端web服务器,并且实现健康状态检查 2.         使用keepalived高可用LVS,避免LVS单点故障 3.         集群中分别在LK-01和LK-02运行一个VIP地址,实现LVS双主 4.         用户通过DNS轮训的方式实现访问集群的负载均衡(不演示) 实验拓扑 环境介绍: IP地址 功能描述 HK-01 172.16.4.100 调度用户请求到后端web服务器,并且和LK-02互为备份 HK-02

nginx结合keepalived实现高可用负载均衡

1 规划和准备 需要统一接入的应用系统   应用系统 域名/虚拟目录 应用服务器及URL svn dev.mycompany.com/svn http://50.1.1.21/svn svn web管理 dev.mycompany.com/submin http://50.1.1.21/submin 网站 www.mycompany.com http://50.1.1.10; http://50.1.1.11; http://50.1.1.12 OA oa.mycompany.com http:

keepAlived+nginx实现高可用双主模型LVS

实验目的: 利用keepalived实现高可用反向代理的nginx.以及双主模型的ipvs 实验环境: node1:在nginx做代理时做反向代理节点,在keepalived实现LVS时做Director.VIP1:172.16.18.22 VIP2:172.16.18.23 node2:在nginx做代理时做反向代理节点,在keepalived实现LVS时做Director.VIP1:172.16.18.22 VIP2:172.16.18.23 node3:在nginx做代理时做web服务器.

nginx结合keepalived做高可用负载集群服务

一.概述 前面几篇介绍了nginx做web网站以及https网站,反向代理,LVS的NAT与DR调度负载,但由于nginx本身负载是七层,需要套接字,即使基于upstream模块模拟成四层代理也是瓶颈,因此本文介绍nginx基于keepalived做高可用负载均衡集群服务,目标就是两台keepalived对nginx反向代理负载服务做检查与调度,做成双主模式,nginx负载调度后端的httpd网站,任何一台调度器(nginx或keepalived服务)故障,不影响业务;后端任何一台web故障也不

LVS基础及LVS+Keepalived实现双主高可用负载均衡

LVS基础及LVS+Keepalived实现双主高可用负载均衡 LB集群: (Load  Balancing)即负载均衡集群,其目的是为了提高访问的并发量及提升服务器的性能,其    实现方式分为硬件方式和软件方式. 硬件实现方式: 常用的有 F5公司的BIG-IP系列.A10公司的AX系列.Citrix公司的 NetScaler系列等 软件实现方式: LVS工作于传输层.nginx工作于应用层.haproxy工作于传输层和应用层 本文主要讲解LVS. 一.什么是LVS ? 1. LVS:(Li

Keepalived+Haproxy双主高可用负载均衡web和mysql综合实验

日期及版本:2014.5.4v1.0 架构图 实验目的: 1.Haproxy+Keepalived双主双机高可用模型,keepalived为Haproxy主从提供高可用保证haproxy-master若挂掉haproxy-backup能无缝接管,haproxy为后端Web提供负载均衡,缓解并发压力,实现WEB站点负载均衡+高可用性: 2. Haproxy反代web做动静分离: 3. Haproxy反代mysql 算法leastconn和roundrobin的不同效果: 系统环境: OS:cent

nginx+keepalived的高可用负载均衡集群构建

实验架构图: 实验环境 Nginx和Keepalived原理介绍 参考博客:http://467754239.blog.51cto.com/4878013/1541421 1.nginx Nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发, 从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(wor

Nginx+Keepalived搭建高可用负载均衡集群

Nginx+Keepalived搭建高可用负载均衡集群   一. 环境说明 前端双Nginx+keepalived,nginx反向代理到后端的tomcat集群实现负载均衡,Keepalived实现集群高可用. 操作系统: Centos 6.6_X64 Nginx版本: nginx-1.9.5 Keepalived版本:keepalived-1.2.13 结构: Keepalived+nginx-MASTER:10.6.1.210         Keepalived+nginx-BACKUP: