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

Nginx配合keepalived实现双主负载均衡,第1张

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

由于之前一直采用客户端-服务器高可用加后端负载,随着业务量的增加,高峰期前端服务有些困难。所以对之前的架构做了一点修改,将客户端-服务器升级为双服务器,可以充分利用现有的服务器资源。由于实验环境有限,后端测试只用了一个静态页面,没有搭建动态环境,也没有使用数据库。如有必要,请参考其他文件。

一、架构规划

1.服务器IP地址规划

VIP1:192.168.1.149

VIP2:192.168.1.150

保持激活1:192.168.1.151

保持激活2:192.168.1.152

网络服务器1:192.168.1.201

网络服务器2:192.168.1.202

2.服务器 *** 作系统

使用的 *** 作系统是CentOS版本6.6(最终版)x86_64,只需极少的安装。

3.网络拓扑图

其次,配置Nginx代理服务

节点1的这一部分与节点2具有相同的配置。

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初始化脚本:

#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-添加nginx

#chkconfignginxon

4.配置Nginx代理

#catnginx.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

需要在两台保持活动的机器上执行上述步骤。

以下是两个节点的配置文件。

节点一

! 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     }  }

节点2

! 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

#!/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

在后台执行脚本

#nohupsh/home/nginx_chk.sh&;

四。安装web服务器

这里为了测试,我直接用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

动词(verb的缩写)开始测试

首先测试两台web服务器的可用性


您可以看到两台web服务器都正常运行。

检查两个保持活动状态的节点的IP状态


使用两个VIP进行访问


停止保持激活的服务并检查IP

可以看到VIP已经成功转移到另一个节点,然后可以使用VIP进行访问,仍然可以正常访问。

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

这里配置基本完成。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/783629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存