0551-期中集群架构nginx负载均衡实践

简介:

一    环境准备

服务器说明

外网IPNAT

内网IPNAT

主机名称规划

A1-nginx负载服务器01

10.0.0.5/24

172.16.1.5/24

lb01

A2-nginx负载服务器02

10.0.0.6/24

172.16.1.6/24

lb02

安装反向代理,负载均衡就是安装nginx,安装nginx和之前安装web一样的。


nginx反向代理负载均衡安装(和安装nginx web服务器一样的)
1 安装依赖软件包命令集合
yum install openssl openssl-devel pcre pcre-devel -y
rpm -qa openssl openssl-devel pcre pcre-devel
2 安装nginx软件包命令集合
mkdir -p /home/oldboy/tools
cd /home/oldboy/tools
wget -q http://nginx.org/download/nginx-1.6.3.tar.gz
ls -l nginx-1.6.3.tar.gz
useradd nginx -s /sbin/nologin -M
tar xf nginx-1.6.3.tar.gz
cd nginx-1.6.3
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.6.3 --with-http_stub_status_module --with-http_ssl_module
make
make install
ln -s /application/nginx-1.6.3 /application/nginx

3.配置
[root@lb01 nginx-1.6.3]# ll /application/nginx/
总用量 16
drwxr-xr-x 2 root root 4096 8月  30 22:39 conf
drwxr-xr-x 2 root root 4096 8月  30 22:39 html
drwxr-xr-x 2 root root 4096 8月  30 22:39 logs
drwxr-xr-x 2 root root 4096 8月  30 22:39 sbin
[root@lb01 nginx-1.6.3]# cd /application/nginx/conf/ 
[root@lb01 conf]# ll
总用量 60
-rw-r--r-- 1 root root 1034 8月  30 22:39 fastcgi.conf
-rw-r--r-- 1 root root 1034 8月  30 22:39 fastcgi.conf.default
-rw-r--r-- 1 root root  964 8月  30 22:39 fastcgi_params
-rw-r--r-- 1 root root  964 8月  30 22:39 fastcgi_params.default
-rw-r--r-- 1 root root 2837 8月  30 22:39 koi-utf
-rw-r--r-- 1 root root 2223 8月  30 22:39 koi-win
-rw-r--r-- 1 root root 3957 8月  30 22:39 mime.types
-rw-r--r-- 1 root root 3957 8月  30 22:39 mime.types.default
-rw-r--r-- 1 root root 2656 8月  30 22:39 nginx.conf
-rw-r--r-- 1 root root 2656 8月  30 22:39 nginx.conf.default
-rw-r--r-- 1 root root  596 8月  30 22:39 scgi_params
-rw-r--r-- 1 root root  596 8月  30 22:39 scgi_params.default
-rw-r--r-- 1 root root  623 8月  30 22:39 uwsgi_params
-rw-r--r-- 1 root root  623 8月  30 22:39 uwsgi_params.default
-rw-r--r-- 1 root root 3610 8月  30 22:39 win-utf
[root@lb01 conf]# egrep -v "#|^$" nginx.conf.default >nginx.conf
[root@lb01 conf]# vim nginx.conf
把17 18 19 20 行删除
 1 worker_processes  1;
  2 events {
  3     worker_connections  1024;
  4 }
  5 http {
  6     include       mime.types;
  7     default_type  application/octet-stream;
  8     sendfile        on;
  9     keepalive_timeout  65;
 10     server {
 11         listen       80;
 12         server_name  localhost;
 13         location / {
 14             root   html;
 15             index  index.html index.htm;
 16         }
 17         error_page   500 502 503 504  /50x.html;
 18         location = /50x.html {
 19             root   html;
 20         }
 21     }
 22 }
然后在server标签上面增加如下几行
    upstream www_server_pools { #<==这里是定义web服务器池,包含了7,8两个web节点
      server 10.0.0.7:80 weight=1;
      server 10.0.0.8:80 weight=1;
    }
然后在index这行的下面增加如下内容:
proxy_pass http://www_server_pools;
然后把代理的服务器localhost修改为代理的服务器,例如:www.etiantian.org
最后完成的nginx.conf配置如下
[root@lb01 conf]# cat nginx.conf 
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream www_server_pools { 
        server 10.0.0.7:80   weight=1;
        server 10.0.0.8:80   weight=1;
    }
    server {
        listen       80;
        server_name  www.etiantian.org;
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://www_server_pools;
        }
    }
}
这样负载均衡就配置完成了。
接下来nginx语法检查,启动nginx服务。
[root@lb01 conf]# ../sbin/nginx -t
nginx: the configuration file /application/nginx-1.6.3/conf/nginx.conf syntax is ok
nginx: configuration file /application/nginx-1.6.3/conf/nginx.conf test is successful
[root@lb01 conf]# ../sbin/nginx
[root@lb01 conf]# ../sbin/nginx -s reload
[root@lb01 conf]# lsof -i :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   4285  root    6u  IPv4  17693      0t0  TCP *:http (LISTEN)
nginx   4288 nginx    6u  IPv4  17693      0t0  TCP *:http (LISTEN)

lb01作为客户端测试下:
[root@lb02 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5      lb01 www.etiantian.org etiantian.org blog.etiantian.org bbs.etiantian.org
172.16.1.6      lb02
172.16.1.7      web02
172.16.1.8      web01 
172.16.1.51     db01 db01.etiantian.org
172.16.1.31     nfs01
172.16.1.41     backup
172.16.1.61     m01
[root@lb02 ~]# for n in `seq 100`;do curl www.etiantian.org;sleep 1;done
[root@lb02 ~]# for n in `seq 100`;do curl www.etiantian.org/index.html;sleep 1;done
nginx www
apache www
nginx www
apache www
[root@lb02 ~]# for n in `seq 100`;do curl www.etiantian.org;sleep 1;done           
nginx www
apache www
nginx www
apache www
nginx www
负载到两个web服务器上面来回切换。
proxy_pass http://www_server_pools;这行后面加一样添加请求头。
            proxy_set_header Host $host;  ##加请求头。
客户端请求www.etiantian.org给负载均衡nginx,默认nginx是不带请求头的,如果加了请求头就可以找到想要的虚拟主机了。
默认情况下web节点的access.log 日志里面IP不是用户的ip地址,而是代理的IP。
要想实现节点中记录用户的ip地址,需要在proxy_set_header Host $host;后面再加一行,如下:
proxy_set_header X-Forwarded-For $remote_addr;
[root@web01 logs]# pwd
/application/nginx/logs
[root@web01 logs]# cat access.log

同理,把lb02也配置和lb01一样的负载均衡。
lb02里面的nginx.conf配置要和lb01一样
先把lob01机器停掉。
[root@lb01 ~]# pkill nginx
然后在m01机器里面测试
for n in `seq 100`;do curl 172.16.1.6/index.html;sleep 1;done
可以看到lb02代理服务器一会代理web01一会代理web02
[root@m01 ~]# for n in `seq 100`;do curl 172.16.1.6/index.html;sleep 1;done
nginx www
apache www
如何实现lb高可用呢?
负载均衡器的VIP规划为10.0.0.3/24
在两台机器上面配置辅助IP 
[root@lb01 ~]# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
windows hosts文件增加解析:
10.0.0.3 www.etiantian.org bbs.etiantian.org blog.etiantian.org etiantian.org
然后lb01再配置反向代理
在ie中输入http://blog.etiantian.org/就可以访问blog了,可以看到博客文字和图片。
然后ie中ping blog.etiantian.org 就可以看到返回的lb01虚ip地址了10.0.0.3
C:\Users\Administrator>ping blog.etiantian.org
正在 Ping www.etiantian.org [10.0.0.3] 具有 32 字节的数据:
来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64
来自 10.0.0.3 的回复: 字节=32 时间<1ms TTL=64

10.0.0.3 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms
继续把lb02里面的nginx.conf配置和lb01一样的,然后配置和lb01一样的虚ip地址
[root@lb02 conf]# ip addr add 10.0.0.3/24 dev eth0 label eth0:0
这样lb01和lb01就实现了负载均衡反向代理。

下面用keepalived实现
lb01和lb01同时按照yum install keepalived -y 
[root@lb01 ~]# yum install keepalived -y

编辑/etc/keepalived/keepalived.conf文件为如下内容:
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf    
! Configuration File for keepalived

global_defs {
   notification_email {
   13779258@qq.com
   }
   notification_email_from 13779258@qq.com
   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 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    10.0.0.3/24 dev eth0 label eth0:1
    }
}
然后scp拷贝给lb02机器
[root@lb01 ~]# scp /etc/keepalived/keepalived.conf root@172.16.1.6:/etc/keepalived/
然后修改lb02的keepalived.conf配置文件,修改完成后一定要重启下nginx服务。
[root@lb02 conf]# vim /etc/keepalived/keepalived.conf
修改的内容为:
router_id LVS_DEVEL1
state BACKUP
priority 100

然后lb01和lb02都启动keepalived
[root@lb01 ~]# /etc/init.d/keepalived start
正在启动 keepalived:                                      [确定]
[root@lb02 conf]# /etc/init.d/keepalived start                                    
正在启动 keepalived:                                      [确定]
启动后主keepalivedlb01先获取到资源,只有当主的挂了从lb02才启动。
检查有没有启动:
[root@lb01 ~]# ip addr|grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0:0
[root@lb02 conf]# ip addr|grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0:0
先把手工配置的虚IPdown了,要不冲突了。
[root@lb01 ~]# ifconfig eth0:0 down
[root@lb01 ~]# ip addr|grep 10.0.0.3
[root@lb02 conf]# ifconfig eth0:0 down
[root@lb02 conf]# ip addr|grep 10.0.0.3

重启服务器后发现只有lb01主keepalived有虚ip,从lb01keepalived没有虚ip,这就说明成功了。
[root@lb01 ~]# /etc/init.d/keepalived restart
停止 keepalived:                                          [确定]
正在启动 keepalived:                                      [确定]
[root@lb01 ~]# ip addr|grep 10.0.0.3         
    inet 10.0.0.3/24 scope global secondary eth0:1

[root@lb02 conf]# /etc/init.d/keepalived restart
停止 keepalived:                                          [确定]
正在启动 keepalived:                                      [确定]
[root@lb02 conf]# ip addr|grep 10.0.0.3   

如果两个都有IP就说明会列脑了。出问题了

然后ie再访问http://blog.etiantian.org/
就可以看到图片和文字的博客了。

现在测试把lb01机器挂掉,然后查看lb01是否有虚ip地址:
[root@lb02 conf]# ip addr|grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0:1
然后在登录ie测试:可以正常登录blog.etiantian.org

然后测试:
把主lb01从挂载状态打开到正常开机状态,那么lb01就自动把虚ip从lb02抢过来了。
抢过来的证据如下所示:
[root@lb01 ~]# ip addr|grep 10.0.0.3
    inet 10.0.0.3/24 scope global secondary eth0:1
[root@lb01 ~]#

[root@lb02 conf]# ip addr|grep 10.0.0.3
[root@lb02 conf]# 
再次用ie打开blog.etiantian.org可以正常打开博客。

本文转自sandshell博客51CTO博客,原文链接http://blog.51cto.com/sandshell/1961261如需转载请自行联系原作者

sandshell
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
10月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
8月前
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
911 0
|
6月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
10月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
324 21
|
10月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
312 14
|
10月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
410 11
|
11月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
10月前
|
应用服务中间件 Linux 网络安全
Centos 8.0中Nginx配置文件和https正书添加配置
这是一份Nginx配置文件,包含HTTP与HTTPS服务设置。主要功能如下:1) 将HTTP(80端口)请求重定向至HTTPS(443端口),增强安全性;2) 配置SSL证书,支持TLSv1.1至TLSv1.3协议;3) 使用uWSGI与后端应用通信(如Django);4) 静态文件托管路径设为`/root/code/static/`;5) 定制错误页面(404、50x)。适用于Web应用部署场景。
934 87
|
6月前
|
编解码 应用服务中间件 Linux
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
centos配置nginx-rtmp实现ffmpeg转码rtsp为rtmp视频流
557 1
|
10月前
|
负载均衡 应用服务中间件 nginx
Nginx配置与命令
Nginx 是一款高性能的 HTTP 和反向代理服务器,其配置文件灵活且功能强大。本文介绍了 Nginx 配置的基础结构和常用指令,包括全局块、Events 块、HTTP 块及 Server 块的配置方法,以及静态资源服务、反向代理、负载均衡、HTTPS 和 URL 重写等功能实现。此外,还提供了常用的 Nginx 命令操作,如启动、停止、重载配置和日志管理等,帮助用户高效管理和优化服务器性能。
954 14