Processing math: 100%

Nginx+Keepalived实现Web服务器负载均衡

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介:

说明:

操作系统:CentOS 5.X 64位

Web服务器:192.168.21.127、192.168.21.128

站点:bbs.osyunwei.com和sns.osyunwei.com部署在两台Web服务器上

实现目的:

增加两台服务器(主主模式),通过Nginx+Keepalived实现Web服务器负载均衡

架构规划:

负载均衡服务器:192.168.21.129、192.168.21.130

虚拟服务器(VIP):192.168.21.252、192.168.21.253

部署完成之后:

1、VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.252指向192.168.21.130;

2、当192.168.21.129宕机时,VIP:192.168.21.253漂移到192.168.21.130上;

3、当192.168.21.130宕机时,VIP:192.168.21.252漂移到192.168.21.129上;

这样的主主模式好处是,两台服务器在提供服务的同时,又互为对方的备份服务器。

具体操作:

第一部分:在两台Nginx服务器上分别操作

一、关闭SElinux、配置防火墙

1、vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq!  #保存退出

setenforce 0 #使配置立即生效

2、vi /etc/sysconfig/iptables  #编辑

-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT  #允许组播地址通信

-A RH-Firewall-1-INPUT -p    vrrp    -j ACCEPT  #允许VRRP(虚拟路由器冗余协)通信

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  #允许80端口通过防火墙

:wq! #保存退出

/etc/init.d/iptables restart #重启防火墙使配置生效

二、安装Nginx

1、安装编译工具包(使用CentOS yum命令安装,安装的包比较多,方便以后配置lnmp环境)

yum install -y make apr* autoconf automake curl curl-devel gcc gcc-c++ gtk+-devel zlib-devel openssl openssl-devel pcre-devel gd kernel keyutils patch perl kernel-headers compat*  cpp glibc libgomp libstdc++-devel keyutils-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* libxml2 libxml2-devel patch policycoreutils bison

2、下载软件包

(1)http://nginx.org/download/nginx-1.4.7.tar.gz  #下载Nginx

(2)ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz  #下载pcre (支持nginx伪静态)

(3)http://labs.frickle.com/files/ngx_cache_purge-2.1.tar.gz  #下载ngx_cache_purge(方便以后扩展配置nginx缓存服务器)

上传以上软件包到/usr/local/src 目录

3、安装pcre

cd /usr/local/src

mkdir /usr/local/pcre #创建安装目录

tar zxvf pcre-8.34.tar.gz

cd pcre-8.34

./configure --prefix=/usr/local/pcre #配置

make

make install

4、安装Nginx

cd /usr/local/src

groupadd  www  #添加www组

useradd -g www www -s /bin/false  #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统

cd /usr/local/src  #进入安装目录

tar  zxvf  ngx_cache_purge-2.1.tar.gz  #解压

tar  zxvf nginx-1.4.7.tar.gz  #解压

cd nginx-1.4.7

./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/local/src/pcre-8.34  --add-module=../ngx_cache_purge-2.1  #配置

注意:--with-pcre=/usr/local/src/pcre-8.34指向的是源码包解压的路径,而不是安装的路径,否则会报错

make  #编译

make install #安装

/usr/local/nginx/sbin/nginx #启动nginx

设置nginx开启启动

vi /etc/rc.d/init.d/nginx #编辑启动文件添加下面内容

=======================================================


=======================================================

:wq! #保存退出

chmod 775 /etc/rc.d/init.d/nginx #赋予文件执行权限

chkconfig nginx on #设置开机启动

/etc/rc.d/init.d/nginx restart  #重新启动Nginx

service nginx restart

=======================================================

三、配置Nginx

cp /usr/local/nginx/conf/nginx.conf  /usr/local/nginx/conf/nginx.confbak  #备份nginx配置文件

1、设置nginx运行账

vi  /usr/local/nginx/conf/nginx.conf  #编辑,修改

找到user nobody;修改为

user www www;    #在第一行

:wq! #保存退出

2、禁止nginx空主机头

vi /usr/local/nginx/conf/nginx.conf   #编辑

找到server,在上面一行添加如下内容:

##############################

server {

listen       80 default;

server_name  _;

location / {

root   html;

return 404;

}

location ~ /.ht {

deny  all;

}

}

##############################

:wq! #保存退出

/etc/rc.d/init.d/nginx restart     #重启nginx

这样设置之后,空主机头访问会直接跳转到nginx404错误页面。

3、添加nginx虚拟主机包含文件

cd /usr/local/nginx/conf/   #进入nginx安装目录

mkdir vhost   #建立虚拟目录

vi  /usr/local/nginx/conf/nginx.conf   #编辑

找到上一步添加的代码,在最后添加如下内容:

include  vhost/*.conf;

:wq! #保存退出

例如:

##############################

server {

listen       80 default;

server_name  _;

location / {

root   html;

return 404;

}

location ~ /.ht {

deny  all;

}

}

include  vhost/*.conf;

##############################

4、添加Web服务器列表文件

cd  /usr/local/nginx/conf/   #进入目录

touch  mysvrhost.conf  #建立文件

vi  /usr/local/nginx/conf/nginx.conf   #编辑

找到上一步添加的代码,在下面添加一行

include  mysvrhost.conf;

:wq! #保存退出

5、设置nginx全局参数

vi  /usr/local/nginx/conf/nginx.conf   #编辑

worker_processes 2;   # 工作进程数,为CPU的核心数或者两倍

events

{

use epoll;   #增加

worker_connections 65535;    #修改为65535,最大连接数。

}

#############以下代码在http { 部分增加与修改##############

server_names_hash_bucket_size 128;   #增加

client_header_buffer_size 32k;       #增加

large_client_header_buffers 4 32k;   #增加

client_max_body_size 300m;           #增加

tcp_nopush     on;      #修改为on

keepalive_timeout  60;  #修改为60

tcp_nodelay on;        #增加

server_tokens off;     #增加,不显示nginx版本信息

gzip  on;  #修改为on

gzip_min_length  1k;      #增加

gzip_buffers     4 16k;   #增加

gzip_http_version 1.1;    #增加

gzip_comp_level 2;        #增加

gzip_types       text/plain application/x-javascript text/css application/xml;  #增加

gzip_vary on;  #增加

6、设置Web服务器列表

cd  /usr/local/nginx/conf/   #进入目录

vi mysvrhost.conf  #编辑,添加以下代码

upstream  osyunweihost {

server 192.168.21.127:80 weight=1 max_fails=2 fail_timeout=30s;

server 192.168.21.128:80 weight=1 max_fails=2 fail_timeout=30s;

ip_hash;

}

7、新建虚拟主机配置文件

cd /usr/local/nginx/conf/vhost   #进入虚拟主机目录

touch osyunwei.conf #建立虚拟主机配置文件

vi  osyunwei.conf #编辑

log_format  access  'remoteaddrremote_user [timelocal]request '

'"status"body_bytes_sent "$http_referer" '

'"httpuseragent""http_x_forwarded_for"';

server

{

listen       80;

server_name bbs.osyunwei.com sns.osyunwei.com;

location /

{

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://osyunweihost;

#proxy_redirect off;

proxy_set_header Host  $host;

proxy_set_header X-Forwarded-For  $remote_addr;

}

location /NginxStatus {

stub_status on;

access_log  on;

auth_basic  "NginxStatus";

#auth_basic_user_file  pwd;

}

access_log  /usr/local/nginx/logs/access.log  access;

}

:wq!  #保存配置

service nginx restart  #重启nginx

四、安装keepalived

系统运维  www.osyunwei.com  温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接

下载keeplived:http://www.keepalived.org/software/keepalived-1.2.12.tar.gz

上传keepalived-1.2.12.tar.gz到/usr/local/src目录

cd /usr/local/src

tar zxvf keepalived-1.2.12.tar.gz

cd keepalived-1.2.12

./configure  --prefix=/usr/local/keepalived  #配置,必须看到以下提示,说明配置正确,才能继续安装

Use IPVS Framework : Yes

IPVS sync daemon support : Yes

Use VRRP Framework       : Yes

make #编辑

make install  #安装

cp /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/keepalived

mkdir /etc/keepalived

ln -s /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/rc.d/init.d/

chmod +x /etc/rc.d/init.d/keepalived  #添加执行权限

chkconfig keepalived on  #设置开机启动

service keepalived start #启动

service keepalived stop  #关闭

service keepalived restart  #重启

五、配置keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /usr/local/keepalived/etc/keepalived/keepalived.conf-bak

vi /usr/local/keepalived/etc/keepalived/keepalived.conf  #编辑,修改为以下代码

#########################################################

#以下为192.168.21.129服务器

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_nginx {

script "/etc/keepalived/check_nginx.sh"  #Nginx服务监控脚本

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_nginx #监测nginx进程状态

}

virtual_ipaddress {

192.168.21.253

}

notify_master "/etc/keepalived/clean_arp.sh  192.168.21.253"  #更新虚拟服务器(VIP)地址的arp记录到网关

}

vrrp_instance VI_2 {

state BACKUP

interface eth0

virtual_router_id 52

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.21.252

}

notify_master "/etc/keepalived/clean_arp.sh  192.168.21.252"  #更新虚拟服务器(VIP)地址的arp记录到网关

}

#########################################################

:wq! #保存退出

#########################################################

#以下为192.168.21.130服务器

! Configuration File for keepalived

global_defs {

notification_email {

acassen@firewall.loc

failover@firewall.loc

sysadmin@firewall.loc

}

notification_email_from Alexandre.Cassen@firewall.loc

smtp_server 192.168.200.1

smtp_connect_timeout 30

router_id LVS_DEVEL

}

vrrp_script chk_nginx {

script "/etc/keepalived/check_nginx.sh"  #Nginx服务监控脚本

interval 2

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

virtual_router_id 51

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_nginx #监测nginx进程状态

}

virtual_ipaddress {

192.168.21.253

}

notify_master "/etc/keepalived/clean_arp.sh  192.168.21.253"  #更新虚拟服务器(VIP)地址的arp记录到网关

}

vrrp_instance VI_2 {

state MASTER

interface eth0

virtual_router_id 52

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

virtual_ipaddress {

192.168.21.252

}

notify_master "/etc/keepalived/clean_arp.sh  192.168.21.252"  #更新虚拟服务器(VIP)地址的arp记录到网关

}

#########################################################

:wq! #保存退出

六、设置nginx服务监控脚本

touch /usr/local/keepalived/check_nginx.sh

ln -s /usr/local/keepalived/check_nginx.sh  /etc/keepalived/check_nginx.sh

vi  /etc/keepalived/check_nginx.sh #编辑,添加以下代码

#########################################################

#!/bin/sh

if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then

/etc/rc.d/init.d/nginx  start

fi

sleep 2

if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then

/etc/rc.d/init.d/keepalived  stop

fi

#########################################################

:wq! #保存退出

chmod +x /usr/local/keepalived/check_nginx.sh   #添加执行权限

七、设置更新虚拟服务器(VIP)地址的arp记录到网关脚本

touch  /usr/local/keepalived/clean_arp.sh

ln -s  /usr/local/keepalived/clean_arp.sh  /etc/keepalived/clean_arp.sh

vi  /etc/keepalived/clean_arp.sh  #编辑,添加以下代码

#!/bin/sh

VIP=$1

GATEWAY=192.168.21.2 #网关地址

/sbin/arping -I eth0 -c 5 -s VIPGATEWAY &>/dev/null

:wq!  #保存退出

chmod +x /usr/local/keepalived/clean_arp.sh  #添加脚本执行权限

service nginx restart #重启nginx

service keepalived restart  #重启keepalived

第二部分:测试Nginx+Keepalived是否正常运行

一、bbs.osyunwei.com 解析到192.168.21.253;sns.osyunwei.com 解析到192.168.21.252;

在两台Nginx服务器:192.168.21.129、192.168.21.130上执行命令:ip addr

如下图所示:

系统运维  www.osyunwei.com  温馨提醒:qihang01原创内容版权所有,转载请注明出处及原文链接

可以看出现在VIP:192.168.21.253指向192.168.21.129;VIP:192.168.21.252指向192.168.21.130;

在浏览器中打开

http://bbs.osyunwei.com/

http://sns.osyunwei.com/

如下图所示:

此时,bbs和sns域名都被均衡到192.168.21.127上面

二、停止192.168.21.127上面的nginx服务

service nginx stop

继续打开上面的两个网址,如下图所示:

此时,bbs和sns域名都被均衡到192.168.21.128上面(由于192.168.21.127服务器nginx服务被关闭,实现了故障转移)

三、关闭192.168.21.129上面的Keepalived服务

service keepalived stop

此时,在两台Keepalived服务器:192.168.21.129、192.168.21.130上执行命令:ip addr

如下图所示:

可以看出VIP:192.168.21.253和192.168.21.252均指向到192.168.21.130;

此时,打开http://bbs.osyunwei.com/如下图所示:

可以正常访问

四、恢复192.168.21.129上面的keepalived服务,恢复192.168.21.127上面的nginx服务,停止192.168.21.130上面的Keepalived服务

service keepalived stop

在两台Keepalived服务器:192.168.21.129、192.168.21.130上执行命令:ip addr

如下图所示:

可以看出VIP:192.168.21.253和192.168.21.252均指向到192.168.21.129;

此时,打开http://sns.osyunwei.com/如下图所示:

可以正常访问

至此,Nginx+Keepalived实现Web服务器负载均衡配置完成。










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1681712,如需转载请自行联系原作者
相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2天前
|
Ubuntu 应用服务中间件 网络安全
Nginx伪流媒体服务器搭建详细说明以及案例
Nginx伪流媒体服务器搭建步骤如下:1. 安装Nginx,根据系统选择命令;2. 编辑配置文件(/etc/nginx/nginx.conf),添加mp4相关设置;3. 创建视频目录/usr/share/nginx/html/videos并上传视频;4. 重启Nginx应用更改;5. 通过浏览器访问视频,如http://your_server_ip/videos/example.mp4。注意启用mp4模块,确保视频格式支持伪流媒体播放。
|
22天前
|
应用服务中间件 PHP nginx
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样
|
3月前
|
存储 编解码 应用服务中间件
使用Nginx搭建流媒体服务器
本文介绍了流媒体服务器的特性及各种流媒体传输协议的适用场景,并详细阐述了使用 nginx-http-flv-module 扩展Nginx作为流媒体服务器的详细步骤,并提供了在VLC,flv.js,hls.js下的流媒体拉流播放示例。
357 1
|
3月前
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
227 3
|
4月前
|
负载均衡 监控 应用服务中间件
配置Nginx反向代理时如何指定后端服务器的权重?
配置Nginx反向代理时如何指定后端服务器的权重?
267 61
|
4月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
100 3
|
5月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
72 3
|
7月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
351 0
|
7月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
62 0
|
7月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
83 0