利用nginx实现基于传输层的四层负载均衡

nginx利用ngx_stream_core_module实现四层的负载均衡服务。作为四层负载均衡nginx和lvs的区别在于:

  • lvs工作于内核层,相对来说效率更高,性能更强;

  • nginx工作于用户空间;

  • lvs不会受到套接字数量的限制;

  • nginx作为四层负载均衡也需要监听套接字来和客户端,后台服务器进行连接,会受到套接字数量限制,不过这个问题可以通过keepalive长连接来避免;

一、实验环境

此次实验基于三台服务器实现,分别负载httpd服务、ssh服务和mysql服务:

  • nginx四层负载均衡器:192.168.11.100

  • 内网真实服务器RS-1:192.168.11.201;

  • 内网真实服务器RS-2:192.168.11.202;

二、实验配置步骤:

内网服务器配置:

  1. 内网两台服务器分别安装nginx、和mysql服务,并开启相关服务

    yum install -y nginx mariadb-server

nginx负载均衡器配置:

  1. 修改/etc/nginx/nginx.conf配置文件:

    #定义http、mysql和ssh的负载均衡集群并调用,默认算法为rr(轮询)# stream {         upstream websrvs {                 server 192.168.11.201:80;                 server 192.168.11.202:80;         }          upstream mysqlsrvs {                 server 192.168.11.201:3306;                 server 192.168.11.202:3306;         }          upstream sshsrvs {                 server 192.168.11.201:22;                 server 192.168.11.202:22;         }         server {                 listen 80;                 proxy_pass websrvs;         }         server {                 listen 10022;                 proxy_pass sshsrvs;         } }
  2. 测试是否可行:

    1. 测试http:

      利用nginx实现基于传输层的四层负载均衡

    2. 测试ssh:

      利用nginx实现基于传输层的四层负载均衡

      可以看到两次登录的主机名完全不一样

    3. 测试mysql:

      在一个数据库建立新库,名字为testdb,另一个不建立,然后用for循环查询库即可看到结果:

      利用nginx实现基于传输层的四层负载均衡

      可以看到每次呈现的数据库都不一样,所以说明是通过轮询方法连接到两台不同的数据库了。

原创文章,作者:王子豪,如若转载,请注明出处:http://www.178linux.com/79335

(1)
王子豪王子豪
上一篇 2017-07-03 12:30
下一篇 2017-07-03 15:42

相关推荐

  • 磁盘运作方式及分区,挂载等操作

    磁盘运作方式及分区,挂载等操作 磁盘是我们存储数据的空间,而为了方便我们对数据的管理,我们需要对磁盘进行分区。而在我们创建过分区之后 ,我们为了能 够访问磁盘 ,需要对磁盘进行挂载 。文件系统通过为每个文件在分区上分配文件块的方式把数据存储在硬盘上。所以,就是使用文件系统在 硬盘分区上对数据块的各种信息的操作。这样就需要我们了解磁盘的运作方式,学会磁盘的分区…

    Linux干货 2016-08-29
  • 计算机组成及Linux入门知识

    计算机的基本组成: 存储器:     实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器:     负责数据的算术运算和逻辑运算即数据的加工处理 控制器:     负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问 输入设备:    实现计算程序和原始数据的输入 输出设备:    实现计算结果输出 组成的联系: 图一 图二 计算…

    Linux干货 2016-09-16
  • 马哥教育网络班22期+第9周课程练习

    week9: 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin); 分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # SHELL1="/sbin/nologin" declare -i sum1=sum2=0 for&nb…

    Linux干货 2016-10-17
  • 数据结构-栈和队列

    1.栈 1.1 栈的定义 栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示: 结论:后进先出(Last In First Out),简称为LIFO线性表。 栈的基本运算有六种: 构造空栈:InitStack(S)、 判栈空: StackEmpty(S)、 判栈满: StackFull(S)、 …

    Linux干货 2015-04-07
  • Linux基础知识之选择循环执行

    1.选择执行:     a.单分支if语句:         if 判断条件;then(此处必须有;和then  then可以单独占一行)        &nb…

    Linux干货 2016-08-18
  • linux系统上的特殊权限SUID,SGID,STICKY

    特殊权限:SUID SGID STICKY     linux的安全上下文:     1.进程以用户的身份运行,进程是发起此用户的代理,因此以此用户的身份和权限完成所有的操作。     2.权限匹配模型:     1)判断进程的属主,是否以被访问的文件属主。如果是,则应用属主权限…

    Linux干货 2016-08-05