1. nginx负载均衡实战

nginx提供了 4 7层负载均衡. 可根据业务需求选择不同负载均衡策略.

1.1.1 nginx四层负载均衡[网络层TCP负载]

不支持动静分离,但支持 http mysql redis这些.

实验环境:

服务器IP 服务器用途
10.0.0.64 redis服务器
10.0.0.65 nginx反向代理服务器
10.0.0.66 测试通过nginx访问redis

TCP负载均衡请求流程:

请求过程: 用户 --> 负载均衡 --> 真实服务器

响应过程: 真实服务器 --> 负载均衡 --> 用户

1.1.2 10.0.0.64 redis安装配置

## 安装服务器: 10.0.0.64:

通过redis+nginx来测试4层负载:
mkdir /server/tools -p
cd /server/tools
echo 'PATH=/usr/local/redis/src:$PATH' >>/etc/profile
wget http://download.redis.io/releases/redis-3.2.12.tar.gz
tar xf redis-3.2.12.tar.gz -C /usr/local/
\mv /usr/local/redis-3.2.12 /usr/local/redis
rm -f redis-3.2.12.tar.gz
cd /usr/local/redis
make
source /etc/profile
echo never > /sys/kernel/mm/transparent_hugepage/enabled
redis-server & #非必要操作: 拷贝可执行文件到其他服务器进行连接测试:
scp -r /usr/local/redis/src/redis-cli root@10.0.0.65:/usr/sbin/redis-cli
scp -r /usr/local/redis/src/redis-cli root@10.0.0.66:/usr/sbin/redis-cli
1. redis允许远程访问: vim /usr/local/redis/redis.conf
bind 127.0.0.1 #<--------- 这里添加允许访问的IP
#命令修改:
sed -i "s#^bind 127.0.0.1#bind 10.0.0.65 10.0.0.66#g" /usr/local/redis/redis.conf 2. 设置密码访问:
连接到redis后执行:
config set requirepass 123456 #密码设置为123456
AUTH '123456' # redis-cli进入后输入密码验证
config get requirepass #查看设置的密码 本地机器和 客户端连接:
redis-cli -h 10.0.0.64 -a 123456 #直接带密码连接
redis-cli -h 10.0.0.64 #进入后输入 auth 123456 连接. 可用性测试:
服务端添加一个参数:
[root@k8s-master2]# redis-cli -a 123456
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b" 客户端取值:
主机1[10.0.0.65]:
[root@k8s-node2]# redis-cli -h 10.0.0.64 -a 123456
10.0.0.64:6379> get a
"b" 主机2[10.0.0.66]:
[root@k8s-node1]# redis-cli -h 10.0.0.64 -a 123456
10.0.0.64:6379> get a
"b"
验证配置无误. 3.启动redis:
redis-server & 密码设置完毕,现在需要通过负载均衡来访问这个redis.

1.1.3 TCP负载均衡配置[需要添加 --with-stream 四层负载均衡模块]

10.0.0.66服务器做TCP代理10.0.0.64的redis,通过10.0.0.66访问10.0.0.65来获取10.0.0.64redis数据

### 1. 配置nginx[10.0.0.66]:

# 添加upstream模块:
cd /server/tools/
git clone https://github.com/gnosek/nginx-upstream-fair.git
mv /server/tools/nginx-upstream-fair /server/tools/upstream
yum install -y pcre pcre-devel openssl openssl-devel gd-devel zlib-devel gcc
wget https://www.chenleilei.net/soft/nginx-1.16.1.tar.gz
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
[编译需要拿上次辩词参数进行 nginx -V 然后添加 --with-stream 添加TCP负载模块]
./configure --prefix=/application/nginx-1.16 --user=nginx --group=nginx --with-http_image_filter_module --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream #全新安装这样做,如果是更新nginx make后不要执行mske install 把nginx二进制文件拷贝到sbin目录
make && make install
echo 'PATH=/application/nginx-1.16/sbin:$PATH' >>/etc/profile
source /etc/profile
mkdir /root/.vim -p
\cp -r contrib/vim/* ~/.vim/
egrep -v "#|^$" /application/nginx/conf/nginx.conf.default >/application/nginx-1.16/conf/nginx.conf 内容修改为以下:
#-----------------------------------------
worker_processes 1;
events {
worker_connections 1024;
}
stream {
log_format leilei '$remote_addr - [$time_local]'
'"$protocol" $status $bytes_sent $bytes_received'
'"$session_time" - "$upstream_addr"';
access_log logs/access.log leilei;
upstream web {
server 10.0.0.64:6379 weight=1;
}
server {
listen 6381;
proxy_pass web;
access_log logs/access.log leilei;
}
}
#----------------------------------------- 这段配置是将 10.0.0.64:6379端口代理为 10.0.0.66的6381端口.

1.1.4 测试TCP负载均衡

配置完毕后通过连接redis测试:[10.0.0.64 10.0.0.65 10.0.0.66 测试连接10.0.0.66的redis 6381端口]

10.0.0.64添加数据:
[root@k8s-master2 redis]# redis-cli -a 123456
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b" 1. 10.0.0.66测试连接代理服务器[10.0.0.66] 访问到10.0.0.64redis服务:
[root@k8s-node2 html]# /root/redis-cli -h 10.0.0.66 -p 6381
10.0.0.66:6381> AUTH 123456
OK
10.0.0.66:6381> get a
"b" 2. 10.0.0.65测试连接代理服务器[10.0.0.66] 访问到10.0.0.64redis服务:
[root@k8s-node1 html]# /root/redis-cli -h 10.0.0.66 -p 6381
10.0.0.64:6381> auth 123456
OK 3. 10.0.0.64测试连接代理服务器[10.0.0.66] 访问到10.0.0.64的redis服务:
[root@k8s-master2 redis]# redis-cli -h 10.0.0.66 -p 6381
10.0.0.66:6381> AUTH 123456
OK
10.0.0.66:6381> get a
"b" 4. 10.0.0.64测试连接本地服务器[127.0.0.1 redis服务:
[root@k8s-master2 redis]# redis-cli -h 10.0.0.64 -p 6381
10.0.0.64:6379> AUTH 123456
OK
10.0.0.64:6379> get a
"b" 5. 使用本地IP访问:
[root@k8s-master2 redis]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> AUTH 123456
OK
127.0.0.1:6379> get a
"b" 那这样配置就达到了 任意服务器通过 10.0.0.66 来访问 10.0.0.64 redis服务的负载访问了.
本地服务器 直接访问本地6379能够获取到数据, 走TCP连接到10.0.0.64也可以获取到数据.
这也就说明.我们TCP四层反向代理 就成功实现了,他是基于TCP连接实现的反向代理. 主要配置在: upstream 区块.

1.2 http负载均衡 nginx七层负载均衡[应用层 http协议.]

七层反向代理支持nginx+php动静分离.

http {
...
...
upstream web {
server 10.0.0.10:80;
server 10.0.0.20:80;
}
server {
listen 80;
location / {
proxy_pass http://web;
}
}
...
...
} --------------------------------------
支持的参数:
weight 权重
max_fails 失败次数后停止该服务器
fail_timeout 踢出后重新检测时间.
backup 备用服务器
max_conns 允许最大连接数
slow_start 节点恢复后不理解加入到集群. 参数配置案例:
1. weight (轮询,权重):
upstream leilei{
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=4;
server 127.0.0.1:8083 weight=6;
} 额外可选参数 :
max_conns 最大连接数,如: server 127.0.0.1:8081 weight=2 max_conns=100;
max_fails 失败重试次数,如: server 127.0.0.1:8081 weight=2 max_conns=100 max_fails=1;
fail_timeout 多久内达到其他条件 如10秒内请求失败2次,则等待10秒:
server 127.0.0.1:8081 weight=2 max_conns=100 max_fails=1 fail_timeout=10; 2. max_conns 限制最大连接数限制为100
upstream leilei{
server 127.0.0.1:8081 weight=2 max_conns=100;
server 127.0.0.1:8082 weight=4;
server 127.0.0.1:8083 weight=6;
} 3. max_fails 失败1次后停止该服务器
upstream leilei{
server 127.0.0.1:8081 weight=2 max_fails=1;
server 127.0.0.1:8082 weight=4;
server 127.0.0.1:8083 weight=6;
} 4. backup 备份服务器,在其他服务器都挂了的情况下启用备份服务器.
upstream leilei{
server 127.0.0.1:8081 weight=2;
server 127.0.0.1:8082 weight=4 backup;
server 127.0.0.1:8083 weight=6;
} 5.slow_start 节点恢复后不理解加入到集群.

1.3 会话保持nginx-sticky-module模块[基于cookie的会话保持]

wget https://www.chenleilei.net/soft/nginx-sticky-module.zip
unzip nginx-sticky-module.zip
cd /server/tools/nginx-1.16.1
./configure --prefix=/application/nginx-1.16 --user=nginx --group=nginx --with-http_image_filter_module --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-stream --add-module=/server/tools/nginx-goodies-nginx-sticky-module-ng-08a395c66e42
make
cp -af objs/nginx /application/nginx-1.16/sbin/nginx
kill -USR2 `cat /application/nginx/logs/nginx.pid`
kill -WINCH `cat /application/nginx/logs/nginx.pid`
kill -QUIT `cat /application/nginx/logs/nginx.pid` #配置nginx-sticky:
参考配置参数:https://www.cnblogs.com/tssc/p/7481885.html#_label0
-----------------------------------------------------------------------------
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream web {
sticky expires=1h domain=chenleilei.net;
server 10.0.0.65:80;
server 10.0.0.66:80;
}
server {
listen 88;
server_name localhost;
index index.html;
set $proxy_pass web;
location / {
proxy_pass http://web;
add_header Cache-Control no-store;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
-----------------------------------------------------------------------------

nginx四层负载nginx七层负载,nginx基于nginx-sticky会话保持.的更多相关文章

  1. nginx 七层负载均衡

    [tcp] nginx 七层负载均衡 nginx负载均衡概述 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡, ...

  2. 13、Nginx七层负载均衡

    1.Nginx负载均衡基本概述 1.1为什么需要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡, ...

  3. Linux架构之Nginx 七层负载均衡

    第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...

  4. 第十五章 nginx七层负载均衡

    一.Nginx负载均衡 1.为什么做负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到 ...

  5. linux负载均衡总结性说明(四层负载/七层负载)

    在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同?废话不多说,详解如下: 一,什么是负载均衡1)负载均衡(Load Balance)建立在现有网络结 ...

  6. 四层and七层负载均衡

    四层负载/七层负载 在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 1.    什么是负载均衡 1)负载均衡(Load ...

  7. 四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比

    一.四层与七层负载均衡在原理上的区别 图示: 四层负载均衡与七层负载均衡在工作原理上的简单区别如下图: 概述: 1.四层负载均衡工作在OSI模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和 ...

  8. Nginx七层负载均衡的几种调度算法

      Nginx是一款轻量级的高性能web服务器,同时也是一款非常优秀的负载均衡器和反向代理服务器.由于支持强大的正则匹配规则.动静分离.URLrewrite功能及安装配置简单且对网络稳定性依赖非常小等 ...

  9. Web负载均衡学习笔记之四层和七层负载均衡的区别

    0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...

  10. 高可用 & 七层负载均衡与四层负载均衡

    内容概要 高可用 七层负载均衡 和 四层负载均衡 内容详细 一.高可用 1.什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用 ...

随机推荐

  1. BTC的数据结构

    区块链是一个个block所构成的链,或者链表状的数据结构,在比特币中或者区块链中,一个重要的组成部分是哈希指针 指针 在程序运行过程中,需要用到数据.最简单的是直接获取数据,但当数据本身较大,需要占用 ...

  2. 重新整理.net core 计1400篇[四] (.net core 修改sdk )

    前言 可能有些人还不知道什么是sdk,software development kit,中文是软件开发包的意思. 然后什么是软件开发包? 软件开发工具包是一些被软件工程师用于为特定的软件包.软件框架. ...

  3. 重新整理数据结构与算法(c#)——算法套马踏棋算法[三十三]

    前言 马踏棋盘 概念在这,不做过多复述. https://baike.sogou.com/v58959803.htm?fromTitle=马踏棋盘 思路是这样子的,一匹马有上面几种做法,然后进行尝试, ...

  4. 2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。 游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值。勇者们有一次机会可以击破一个节点泡

    2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」. 游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值.勇者们有一次机会可以击破一个节点泡 ...

  5. Kotlin 使用协程编写高效的并发程序

    概念: 轻量级的线程 协程允许我们在单线程模式下模拟多线程编程的效果,代码执行时的挂起与恢复完 全是由编程语言来控制的,和操作系统无关.这种特性使得高并发程序的运行效率得到了极大的提升. 依赖库: d ...

  6. Flink 自定义 ClickHouse Table Connector 的简单实现

    本次实现基于 Flink 1.18 版本,具体的对象之间的关系可以先参考官网的图: 先拿官网上的 Socket 示例来说一下实现过程: 首先编写 SocketDynamicTableFactory 实 ...

  7. 龙蜥开源内核追踪利器 Surftrace:协议包解析效率提升 10 倍! | 龙蜥技术

    ​简介:如何将网络报文与内核协议栈清晰关联起来精准追踪到关注的报文行进路径呢? ​ 文/系统运维 SIG Surftrace 是由系统运维 SIG 推出的一个 ftrace 封装器和开发编译平台,让用 ...

  8. 重磅官宣:Nacos2.0 发布,性能提升 10 倍

    简介: 继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,并构建起强大的生态.但是随着用户深入使用,逐渐暴露一些性能问题,因此我们启动了 Nacos 2.0 的隔代产品设计,时隔 ...

  9. Serverless 工程实践 | Serverless 应用开发观念的转变

    ​简介: Serverless 架构带来的除了一种新的架构.一种新的编程范式,还包括思路上的转变,尤其是开发过程中的一些思路转变.有人说要把 Serverless 架构看成一种天然的分布式架构,需要用 ...

  10. [Py] Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work

    当通过常规命令安装 pip install pydot 和 brew install graphviz 之后,在代码中 import pydot 依旧不生效. 比如:在 tensorflow 使用 t ...