CentOS Linux 负载均衡高可用WEB集群之Nginx+Keepalived配置

Nginx+Keepalived实现负载均衡高可用的WEB服务集群,nginx作为负载均衡器,keepalived作为高可用,当其中的一台负载均衡器(nginx)发生故障时可以迅速切换到备用的负载均衡器(nginx),保持业务的连续性。

1、服务器的环境配置及IP分配

操作系统:CentOS release 6.7 (Final)

nginx版本:nginx/1.8.0

keepalived版本:Keepalived v1.2.13

Nginx + keepalived服务器的IP分配表

服务器名称            IP                 作用

DR1          192.168.171.10              提供负载均衡

DR2          192.168.171.20              提供负载均衡

192.168.171.100             网站的VIP地址

RS1          192.168.171.30           提供web服务

RS2          192.168.171.40          提供web服务

2、分别在DR1和DR2上安装Nginx负载均衡器和相关的脚本

1)、添加运行nginxd的用户组www及nginx存放日志的位置,并且安装gcc的基础库(使用yum安装)

yum install -y make apr* autoconf automakecurl curl-devel gcc gcc-c++ gtk+-devel zlib-devel openssl openssl-develpcre-devel gd kernel keyutils patch perl kernel-headers compat*  cpp glibc libgomp libstdc++-develkeyutils-libs-devel libsepol-devel libselinux-devel krb5-devel  libXpm* freetype freetype-devel freetype*fontconfig fontconfig-devel  libjpeg*libpng* php-common php-gd gettext gettext-devel ncurses* libtool* libxml2libxml2-devel patch policycoreutils bison pcre pece-devel

groupadd www                  #创建组

groupadd –g www www            #创建www用户并加入www组

mkdir –p /data/logs/          #存放日志的目录

chown R www.www /data/logs/     #修改所有者和所属组

2)、下载并安装ngixn-1.8.0,默认下载到/usr/local/src/目录下

cd /usr/local/src

wget http://nginx.org/download/nginx-1.8.0.tar.gz   #下载nginx

tar zxvf nginx-1.8.0.tar.gz

cd nginx-1.8.0

./configure --prefix=/usr/local/nginx--with-http_realip_module --with-http_sub_module --with-http_gzip_static_module--with-http_stub_status_module --with-pcre --with-http_ssl_module

make && make install

3)、配置nginx,默认的配置文件是在/usr/local/nginx/conf/nginx.conf

vim /usr/local/nginx/conf/nginx.conf

user www www;               #使用的用户

worker_processes 2;

error_log/usr/local/nginx/logs/nginx_error.log crit;

pid /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 51200;

events

{

use epoll;

worker_connections 6000;

}

http

{

include mime.types;

default_type application/octet-stream;

server_names_hash_bucket_size 3526;

server_names_hash_max_size 4096;

log_format combined_realip ‘$remote_addr $http_x_forwarded_for[$time_local]‘

‘$host "$request_uri" $status‘

‘"$http_referer" "$http_user_agent"‘;           #日志的格式

sendfile on;

tcp_nopush on;

keepalive_timeout 30;

client_header_timeout 3m;

client_body_timeout 3m;

send_timeout 3m;

connection_pool_size 256;

client_header_buffer_size 1k;

large_client_header_buffers 8 4k;

request_pool_size 4k;

output_buffers 4 32k;

postpone_output 1460;

client_max_body_size 10m;

client_body_buffer_size 256k;

client_body_temp_path /usr/local/nginx/client_body_temp;

proxy_temp_path /usr/local/nginx/proxy_temp;

fastcgi_temp_path /usr/local/nginx/fastcgi_temp;

fastcgi_intercept_errors on;

tcp_nodelay on;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 8k;

gzip_comp_level 5;

gzip_http_version 1.1;

gzip_types text/plain application/x-javascript text/css text/htmapplication/xml;

#定义负载均衡的配置模块

upstream myserver {

ip_hash;  #测试的时候建议注释掉

server 192.168.171.30:80 weight=1 max_fails=3 fail_timeout=20s;

server 192.168.171.40:80 weight=1 max_fails=3 fail_timeout=20s;

}

server {

listen  80;

server_name www.balichlb.org ;

index index.htm index.html;

location / {

proxy_pass http://myserver;

proxy_set_header Host $Host;

proxy_next_upstream errortimeout http_500 http_502 http_504;

proxy_read_timeout 10s;

proxy_set_header X-Real-IP$remote_addr;

proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

}

access_log/data/lgos/access.log combined_realip;      #访问的日志

}

}

分别在两台nginx(DR1和DR2)执行:/usr/local/nginx/sbin/nginx 命令启动nginx服务,然后使用lsof –i:80命令检查(当然可以可以编写nginx的启动脚本)

vim /etc/init.d/nginx        #编写nginx启动、关闭、脚本

#!/bin/bash

# chkconfig: - 30 21

# description: http service.

# Source Function Library

. /etc/init.d/functions

# Nginx Settings

NGINX_SBIN="/usr/local/nginx/sbin/nginx"

NGINX_CONF="/usr/local/nginx/conf/nginx.conf"

NGINX_PID="/usr/local/nginx/logs/nginx.pid"

RETVAL=0

prog="Nginx"

start() {

echo -n $"Starting $prog: "

mkdir -p /dev/shm/nginx_temp

daemon $NGINX_SBIN -c $NGINX_CONF

RETVAL=$?

echo

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

killproc -p $NGINX_PID $NGINX_SBIN -TERM

rm -rf /dev/shm/nginx_temp

RETVAL=$?

echo

return $RETVAL

}

reload(){

echo -n $"Reloading $prog: "

killproc -p $NGINX_PID $NGINX_SBIN -HUP

RETVAL=$?

echo

return $RETVAL

}

restart(){

stop

start

}

configtest(){

$NGINX_SBIN -c $NGINX_CONF -t

return 0

}

case "$1" in

start)

start

;;

stop)

stop

;;

reload)

reload

;;

restart)

restart

;;

configtest)

configtest

;;

*)

echo $"Usage: $0{start|stop|reload|restart|configtest}"

RETVAL=1

esac

exit $RETVAL

:wq 保存退出。

chmod 755 /etc/init.d/nginx             #修改权限

chkconfig --add nginx                 #增加系统服务列表

/etc/init.d/nginx start             #启动nginx服务

3、安装keepalived,让其作为web和nginx的HA(高可用)

yum install keepalived

1)、分别配置在主和备nginx上的keepalived的配置文件,默认在/etc/keepalived/keepalived.conf

先在主nginx上配置:

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

#全局定义部分

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_instance VI_1 {

state MASTER        #主服务器是MASTER,备用服务器是BACKUP

interface eth0

virtual_router_id 51

mcast_src_ip    192.168.171.10          #主nginx服务的ip地址

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.171.100         #设置虚拟IP地址,可以多个,一行一个

}

}

在备用的服务器行的配置也基本相同,需要修改的地方如下:

state MASTER         >> state BACKUP

priority 100         >> priority 99            #修改为小于主服务器上的

mcast_src_ip  192.168.171.10   >>mcast_src_ip  192.168.171.20     #备用ngixn的ip

分别在两台负载均衡器上启动keepalived服务(先主后从)

/etc/init.d/keepalived start

可以通过日志信息查看keepalived的启动,此时在主nginx会有一个VIP绑定到eth0:0上。

现在的nginx确实可以对后端的web服务实现负载均衡了,但是如果nginx服务出现了故障,keepalived服务还在运行,无法把vip转移到备用的服务器上。可以使用如下脚本实现:

vim /etc/keepalived/nginx_pid.sh

#!/bin/bash

while :

do

nginxpid=`ps-C nginx --no-header |wc -l`

if[ $nginxpid -eq 0 ];then

/etc/init.d/nginxstart

sleep 3

if[ $nginxpid -eq 0];then

/etc/init.d/keepalivedstop

fi

fi

sleep 5

done

将其放在后台上运行:nohup /bin/bash /etc/keepalived/nginx_pid.sh &

4、模拟故障

1)、关闭主nginx的服务,测试脚本是否可以让正常运行。之间关闭keepalived服务,切换是否正常。

2)、主nginx服务修复后,重启在次启动keepalived服务后,能否重新接管服务。

3)、直接断开网络,查看服务。

时间: 2024-10-05 00:01:09

CentOS Linux 负载均衡高可用WEB集群之Nginx+Keepalived配置的相关文章

CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置

CentOS Linux 负载均衡高可用WEB集群之LVS+Keepalived配置 LB集群是locd balance集群的简称.翻译成中文是:负载均衡集群的意思:集群是一组相互独立的.通过高速网络互联的计算机相互之间构成一个组合,并以单一的系统的模式加以管理.LVS是Linux Virtual Server的简写,翻译中文是Linux虚拟服务器,是一个虚拟的服务器集群系统. 负载均衡集群:是为了企业提供更为实用,性价比更高的系统机构解决方案.负载均衡集群把用户的请求尽可能的平均分发到集群的各

HAproxy+Keepalived负载均衡-高可用web站

haproxy+keepalived负载均衡高可用web站   OS IP 子网掩码 路由网关 Centos6.6 HAproxy Keepalived Eth0:192.168.26.210 255.255.252.0 192.168.25.3 VIP:192.168.27.210 Centos6.6 HAporxy Keepalived Eth0:192.168.26.211 255.255.252.0 192.168.25.3 VIP:192.168.27.210 Centos6.6(WE

Keepalived+Nginx+Tomcat 实现高可用Web集群(转)

Keepalived+Nginx+Tomcat 实现高可用Web集群 溯水心生 关注 2018.01.08 20:28* 字数 1382 阅读 965评论 1喜欢 9 集群规划图片 一.Nginx的安装过程 1.下载Nginx安装包,安装依赖环境包 (1)安装 C++编译环境 yum -y install gcc #C++ (2)安装pcre yum -y install pcre-devel (3)安装zlib yum -y install zlib-devel (4)安装Nginx 定位到n

heartbeat httpd nfs 实现高可用web集群

一 环境准备 二 拓扑结构 三 前提条件 四 安装相关软件 五 配置heartbeat 六 测试web集群 七 问题汇总 八 共享存储 一 环境准备 操作系统 centos 6.4 x86_64 最小化安装 如使用yum 安装的方式 centos5.5 安装的是V2.X ,centos 6.4 安装的是V3.X YUM 安装 Vim man ntp "development tools" "server platform development" "des

corosycn&pacemaker的高可用web集群

基本拓扑: 两台高可用节点: node1:192.168.191.112 node2:192.168.191.113 NFS服务器:192.168.191.111 web服务的流动IP:192.168.191.199 一.准备工作: 1).node1---node2 基于主机名通信 1.编辑/etc/hosts文件添加如下内容 192.168.191.112 node1.liaobin.com node1 192.168.191.113 node2.liaobin.com node2 2.编辑/

Nginx+Tomcat+Keepalived实现高可用web集群

Nginx+Tomcat+Keepalived实现高可用web集群: 环境:CenOS 6.5Nginx-Master:10.10.10.128Nginx-Backup:10.10.10.129Tomcat1:10.10.10.130Tomcat2:10.10.10.131VIP:10.10.10.100 一.环境基础配置1.更换国内yum源2.关闭防火墙.SELinux3.时间同步 二.Web端安装Web服务 1.查看是否安装JDK [[email protected] ~]# java -v

搭建高可用mongodb集群(一)——配置mongodb

搭建高可用mongodb集群(一)--配置mongodb 在大数据的时代,传统的关系型数据库要能更高的服务必须要解决高并发读写.海量数据高效存储.高可扩展性和高可用性这些难题.不过就是因为这些问题Nosql诞生了. NOSQL有这些优势: 大数据量,可以通过廉价服务器存储大量的数据,轻松摆脱传统mysql单表存储量级限制. 高扩展性,Nosql去掉了关系数据库的关系型特性,很容易横向扩展,摆脱了以往老是纵向扩展的诟病. 高性能,Nosql通过简单的key-value方式获取数据,非常快速.还有N

Linux HA Cluster高可用服务器集群,所谓的高可用不是主机的高可用,而是服务的高可用。

什么叫高可用:一个服务器down掉的可能性多种多样,任何一个可能坏了都有可能带来风险,而服务器离线通常带来的代价是很大的,尤其是web站点,所以当某一台提供服务的的服务器down掉不至于服务终止的就叫高可用. 什么叫心跳:就是将多台服务器用网络连接起来,而后每一台服务器都不停的将自己依然在线的信息很简短很小的通告给同一个网络中的备用服务器的主机,告诉其实主机自己依然在线,其它服务器收到这个心跳信息就认为本机是在线的,尤其是主服务器. 心跳信息怎么发送,由谁来收,其实就是进程中的通信两台主机是没法

Centos 7部署docker+nginx+keepalived实现高可用web集群

一.体系架构 在Keepalived + Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故障时,热备服务器可以瞬间将VIP自动切换过来,实际运行中体验只有2秒钟切换时间,DNS服务可以负责前端VIP的负载均衡.nginx负责控制后端web服务器的负载均衡,将客户端的请求按照一定的算法转发给后端Real Server处理,而Real Server将响应直接返回给客户端. 二.简单原理 NG