安装Centos

添加当前账号加入sudoers,具备sudo功能

安装编辑器vim

Yum install vim

Su root

Cd cp /etc/sudoers /etc/sudoers[date]

Chmod 777 /etc/sudoers

编辑文本

Vim /etc/sudoers

添加 [当前账号]    All=(ALL)  ALL

:wq 保存

Chmod 420 /etc/sudoers

安装nginx和stream模块

http://nginx.com/products/application-load-balancing/

直接用Centos环境测试

一. gcc 安装

Sudo yum install gcc-c++

二. PCRE pcre-devel 安装

Sudo yum install -y pcre pcre-devel

三. zlib 安装

Sudo yum install -y zlib zlib-devel

四. OpenSSL 安装

Sudo yum install -y openssl openssl-devel

http://hg.nginx.org/nginx/ 自己找相关的平台和版本

sudo wget http://nginx.org/download/nginx-1.12.0.tar.gz

sudo tar zxvf ./nginx-1.12.0.tar.gz

sudo cd nginx-1.12.0

/configure  --with-stream

1、gcc、g++依赖库:sudo apt-get install build-essential,sudoapt-get install libtool
2、安装 pcre依赖库:sudo apt-get
install libpcre3 libpcre3-dev
3、安装 zlib依赖库:sudo apt-get
install zlib1g-dev
4、安装ssl依赖库:sudo apt-get
install openssl
5、安装nginx:sudo apt-get
install nginx

【Tips: 】.其他插件(含http NLB)

./configure --with-stream --with-http_stub_status_module --with-http_sub_module --prefix=/usr/local/nginx --with-debug 
 

./configure --with-stream --with-http_stub_status_module --with-http_sub_module --prefix=/data/nginx --with-debug --with-pcre=/data/pcre-8.40 --with-openssl=/usr/lib64/openssl

sudo make

sudo make install

【TIP2】:设置网络

修改/etc/network/interfacs
sudo nano(gedit)
/etc/network/interfaces

确认里面
auto eth{0}
iface eth{0} inet DHCP

 

重启网卡:

sudo service networking restart

【tips】

开机自启动

即在rc.local增加启动代码就可以了。

vi /etc/rc.local

增加一行 /usr/local/nginx/sbin/nginx
设置执行权限:

chmod 755 rc.local

修改 nginx.conf文件中的参数变量

#--在events

events {ls

worker_connections  1024;

}

#--之后添加

stream{

upstream 1666port{

hash $remote_addr consistent;

server 10.63.201.106:1666 max_fails=3 fail_timeout=3s;

server 10.63.201.141:1666 max_fails=3 fail_timeout=3s;

}

upstream 1888port{

hash $remote_addr consistent;

server 10.63.201.106:1888 max_fails=3 fail_timeout=3s;

server 10.63.201.141:1888 max_fails=3 fail_timeout=3s;

}

upstream 9396port{

hash $remote_addr consistent;

server 10.63.201.106:9396 max_fails=3 fail_timeout=3s;

server 10.63.201.141:9396 max_fails=3 fail_timeout=3s;

}

upstream 2999port{

hash $remote_addr consistent;

server 10.63.201.106:2999 max_fails=3 fail_timeout=3s;

server 10.63.201.141:2999 max_fails=3 fail_timeout=3s;

}

upstream 2000port{

hash $remote_addr consistent;

server 10.63.201.106:2000 max_fails=3 fail_timeout=3s;

server 10.63.201.141:2000 max_fails=3 fail_timeout=3s;

}

server {

listen 1666;

proxy_connect_timeout 1s;

proxy_timeout 3s;

proxy_pass 1666port;

}

server {

listen 1888;

proxy_connect_timeout 1s;

proxy_timeout 3s;

proxy_pass 1888port;

}

server {

listen 9396;

proxy_connect_timeout 1s;

proxy_timeout 3s;

proxy_pass 9396port;

}

server {

listen 2999;

proxy_connect_timeout 1s;

proxy_timeout 3s;

proxy_pass 2999port;

}

server {

listen 2000;

proxy_connect_timeout 1s;

proxy_timeout 3s;

proxy_pass 2000port;

}

}

------------------

安装ubuntu

开启root账号

sudo passwd root

安装nginx和stream模块

http://nginx.com/products/application-load-balancing/

直接用ubuntu环境测试

sudo apt-get install libpcre3 libpcre3-dev build-essential

http://hg.nginx.org/nginx/ 自己找相关的平台和版本

sudo wget http://nginx.org/download/nginx-1.12.0.tar.gz

sudo tar zxvf ./nginx-1.12.0.tar.gz

sudo cd nginx-1.12.0

/configure  --with-stream

1、gcc、g++依赖库:sudo apt-get install build-essential,sudoapt-get install libtool
2、安装 pcre依赖库:sudo apt-get
install libpcre3 libpcre3-dev
3、安装 zlib依赖库:sudo apt-get
install zlib1g-dev
4、安装ssl依赖库:sudo apt-get
install openssl
5、安装nginx:sudo apt-get
install nginx

【Tips: 】.其他插件(含http NLB)

./configure --with-stream --with-http_stub_status_module --with-http_sub_module --prefix=/usr/local/nginx --with-debug 
 

 

sudo make

sudo make install

【TIP2】:设置网络

修改/etc/network/interfacs
sudo nano(gedit)
/etc/network/interfaces

确认里面
auto eth{0}
iface eth{0} inet DHCP

 

重启网卡:

sudo service networking restart

修改 nginx.conf文件中的参数变量

#--在events

events {

worker_connections  1024;

}

#--之后添加

stream{

upstream 1666port{

hash
$remote_addr consistent;

server
10.63.201.106:1666 max_fails=3 fail_timeout=3s;

server 10.63.201.141:1666
max_fails=3 fail_timeout=3s;

}

upstream
1888port{

hash $remote_addr consistent;

server 10.63.201.106:1888 max_fails=3
fail_timeout=3s;

server 10.63.201.141:1888
max_fails=3 fail_timeout=3s;

}

upstream 9396port{

hash $remote_addr consistent;

server 10.63.201.106:9396 max_fails=3
fail_timeout=3s;

server 10.63.201.141:9396
max_fails=3 fail_timeout=3s;

}

upstream
2999port{

hash $remote_addr consistent;

server 10.63.201.106:2999 max_fails=3
fail_timeout=3s;

server 10.63.201.141:2999
max_fails=3 fail_timeout=3s;

}

upstream
2000port{

hash $remote_addr consistent;

server 10.63.201.106:2000 max_fails=3
fail_timeout=3s;

server 10.63.201.141:2000
max_fails=3 fail_timeout=3s;

}

server {

listen
1666;

proxy_connect_timeout
1s;

proxy_timeout
3s;

proxy_pass
1666port;

}

server
{

listen
1888;

proxy_connect_timeout
1s;

proxy_timeout
3s;

proxy_pass
1888port;

}

server
{

listen
9396;

proxy_connect_timeout
1s;

proxy_timeout
3s;

proxy_pass
9396port;

}

server
{

listen
2999;

proxy_connect_timeout
1s;

proxy_timeout
3s;

proxy_pass
2999port;

}

server
{

listen
2000;

proxy_connect_timeout
1s;

proxy_timeout
3s;

proxy_pass
2000port;

}

}

stream core 一些变量

注意:变量支持是从 nginx 1.11.2版本开始的

$binary_remote_addr

二进制格式的客户端地址

$bytes_received

从客户端接收到的字节数

$bytes_sent

发往客户端的字节数

$hostname

连接域名

$msec

毫秒精度的当前时间

$nginx_version

nginx 版本

$pid

worker进程号

$protocol

通信协议(UDP or TCP)

$remote_addr

客户端ip

$remote_port

客户端端口

$server_addr

接受连接的服务器ip,计算此变量需要一次系统调用。所以避免系统调用,在listen指令里必须指定具体的服务器地址并且使用参数bind。

$server_port

接受连接的服务器端口

$session_time

毫秒精度的会话时间(版本1.11.4开始)

$status

会话状态(版本1.11.4开始), 可以是一下几个值:

200

成功

400

不能正常解析客户端数据

403

禁止访问

500

服务器内部错误

502

网关错误,比如上游服务器无法连接

503

服务不可用,比如由于限制连接等措施导致

$time_iso8601

ISO 8601时间格式

$time_local

普通日志格式的时间戳

stream 模块

目前官网上列出的第三方模块、简直就是http模块的镜像、比如access模块访问控制ip和ip段,map模块实现映射、 geo模块实现地理位置映射、等等。使用这些模块的时候一定要看是哪个版本才支持的、比如log模块,只有在nginx-1.11.4才支持。

ngx_stream_core_module

ngx_stream_access_module

ngx_stream_geo_module

ngx_stream_geoip_module

ngx_stream_js_module

ngx_stream_limit_conn_module

ngx_stream_log_module

ngx_stream_map_module

ngx_stream_proxy_module

ngx_stream_realip_module

ngx_stream_return_module

ngx_stream_split_clients_module

ngx_stream_ssl_module

ngx_stream_ssl_preread_module

ngx_stream_upstream_module

ngx_stream_upstream_hc_module

参考:

Nginx 的 TCP 负载均衡介绍

Nginx 始具有TCP负载均衡的功能。从Nginx
1.9版本开始加入的,Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。

HTTP负载均衡,也就是我们通常所有“七层负载均衡”,工作在第七层“应用层”。而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”。例如,LVS(Linux Virtual Server,Linux虚拟服务)和F5(一种硬件负载均衡设备),也是属于“四层负载均衡”。

TCP负载均衡的配置方式

Nginx使用了一个新的stream模块来实现TCP负载均衡,这个模块,类似于http和mail模块,允许我们配置一组监听TCP连接的服务。允许你配置多个服务的TCP连接,通过在upstream的server组中配置proxy_pass指令。

修改nginx.conf文件,在http模块的统计目录,添加一个stream模块(和http等同级):

MySQL

stream {

server {

listen 1034;

proxy_pass app;

}

upstream app {

server 192.168.0.3:1034;

server 192.168.0.4:1034;

server 192.168.0.6:1034;

}

}

stream {

server {

listen 1034;

proxy_pass app;

}

upstream app {

server 192.168.0.3:1034;

server 192.168.0.4:1034;

server 192.168.0.6:1034;

}

}

TCP负载均衡的执行原理

当Nginx从监听端口收到一个新的客户端链接时,立刻执行路由调度算法,获得指定需要连接的服务IP,然后创建一个新的上游连接,连接到指定服务器。

TCP负载均衡支持Nginx原有的调度算法,包括Round
Robin(默认,轮询调度),哈希(选择一致)等。同时,调度信息数据也会和健壮性检测模块一起协作,为每个连接选择适当的目标上游服务器。如果使用Hash负载均衡的调度方法,你可以使用$remote_addr(客户端IP)来达成简单持久化会话(同一个客户端IP的连接,总是落到同一个服务server上)。

和其他upstream模块一样,TCP的stream模块也支持自定义负载均和的转发权重(配置“weight=2”),还有backup和down的参数,用于踢掉失效的上游服务器。max_conns参数可以限制一台服务器的TCP连接数量,根据服务器的容量来设置恰当的配置数值,尤其在高并发的场景下,可以达到过载保护的目的。

Nginx监控客户端连接和上游连接,一旦接收到数据,则Nginx会立刻读取并且推送到上游连接,不会做TCP连接内的数据检测。Nginx维护一份内存缓冲区,用于客户端和上游数据的写入。如果客户端或者服务端传输了量很大的数据,缓冲区会适当增加内存的大小。

当Nginx收到任意一方的关闭连接通知,或者TCP连接被闲置超过了proxy_timeout配置的时间,连接将会被关闭。对于TCP长连接,我们更应该选择适当的proxy_timeout的时间,同时,关注监听socke的so_keepalive参数,防止过早地断开连接。

服务健壮性监控

TCP负载均衡模块支持内置健壮性检测,一台上游服务器如果拒绝TCP连接超过proxy_connect_timeout配置的时间,将会被认为已经失效。在这种情况下,Nginx立刻尝试连接upstream组内的另一台正常的服务器。连接失败信息将会记录到Nginx的错误日志中。

如果一台服务器,反复失败(超过了max_fails或者fail_timeout配置的参数),Nginx也会踢掉这台服务器。服务器被踢掉60秒后,Nginx会偶尔尝试重连它,检测它是否恢复正常。如果服务器恢复正常,Nginx将它加回到upstream组内,缓慢加大连接请求的比例。

之所“缓慢加大”,因为通常一个服务都有“热点数据”,也就是说,80%以上甚至更多的请求,实际都会被阻挡在“热点数据缓存”中,真正执行处理的请求只有很少的一部分。在机器刚刚启动的时候,“热点数据缓存”实际上还没有建立,这个时候爆发性地转发大量请求过来,很可能导致机器无法“承受”而再次挂掉。以mysql为例子,我们的mysql查询,通常95%以上都是落在了内存cache中,真正执行查询的并不多。

其实,无论是单台机器或者一个集群,在高并发请求场景下,重启或者切换,都存在这个风险,解决的途径主要是两种:

(1)请求逐步增加,从少到多,逐步积累热点数据,最终达到正常服务状态。

(2)提前准备好“常用”的数据,主动对服务做“预热”,预热完成之后,再开放服务器的访问。

TCP负载均衡原理上和LVS等是一致的,工作在更为底层,性能会高于原来HTTP负载均衡不少。但是,不会比LVS更为出色,LVS被置于内核模块,而Nginx工作在用户态,而且,Nginx相对比较重。

TCP负载均衡原理上和LVS等是一致的,工作在更为底层,性能会高于原来HTTP负载均衡不少。但是,不会比LVS更为出色,LVS被置于内核模块,而Nginx工作在用户态,而且,Nginx相对比较重。

---------------------

安装keepalived

1、sudo apt-get install libpopt-dev
cd /usr/local/keepalived
2、下载源码
sudo wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz

tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/usr/local/keepalived
make
make install

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

mkdir -p /etc/keepalived/

vim /etc/keepalived/keepalived.conf

/usr/local/keepalived/sbin/keepalived

----------------------------

Tips:

应用nginx的stream模块实现的tcp的nlb,能够较好的支持wcf的透明负载均衡,结合keepalived实现多个linux服务器之间的float ip(virual IP-vip)高可用切换,但是在包转发的时候存在一定的延迟,性能在100多倍(从毫秒级到百毫秒级-貌似与业务的复杂度无关,允许多个并发同时进行,吞吐量很大,并发性能优异,但每个进程还是有握手、仲裁、建立iptable虚表、转发的性能损耗)

nginx在centos & ubuntu上的安装的更多相关文章

  1. centos, ubuntu 上docker 安装

    参考中国官网,可以愉快的访问,各种系统,在线/离线部署都有说明.中文哦!! https://docs.docker-cn.com/engine/installation/linux/docker-ce ...

  2. 手把手教你在Ubuntu上分别安装Nginx、PHP和Mysql

    手把手教你在Ubuntu上分别安装Nginx.PHP和Mysql

  3. Redis在CentOS 7上的安装部署

    简介: Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集( ...

  4. Ubuntu上如何安装Java,Eclipse,Pydev,Python(自带,不用装),BeautifulSoup

    如何安装Java,如果出于编程的需要安装Java,需要安装的是JDK,而不仅仅是JRE,下面说说如何在Ubuntu下如何安装JDK:只有两步,1.下载并解压,2.配置环境变量1.下载并解压:下载地址: ...

  5. Ubuntu 上如何安装Docker

    Docker 是一个开源项目,为开发者和系统管理员提供了一个开放的平台,在任何地方通过打包和运行应用程序作为一个轻量级的容器.Docker 在软件容器内自动部署应用程序.Docker 最开始由 Sol ...

  6. FFMpeg在Ubuntu上的安装和使用

    在Ubuntu Server上编译FFmpeg FFmpeg是最流行的开源视频转码工具包,在Ubuntu上可以直接通过apt-get安装,但是默认的编码器不提供x264这些non-free的编码器,所 ...

  7. ubuntu 上已经安装libxml2还提示需要reinstall的解决方法

    最近在ubuntu上配置环境,遇到一些奇怪的问题,已经安装了libxml2了,运行 apt-get install libxml2提示已经是最新版本了,可以在安装软件的时候还是提示没有libxml2, ...

  8. CentOS/ubuntu/Solaris软件包安装

    一.CentOS/Red Hat yum = Yellow dog Updater, Modified     (1)yum配置文件      (在CentOS下,默认安装yum,无须配置即可使用) ...

  9. ubuntu上的安装.netcore2.1

    .net core 在ubuntu上安装比较容易,依次执行正面语句即可 sudo apt-get install curl curl https://packages.microsoft.com/ke ...

随机推荐

  1. Object是个什么鬼

    引言 老人常说,在js中,一切皆对象,那对象又是什么涅,最常用的我们都知道,对象有方法和属性.由一些键值对构成的集合,然后随便用个大括号括起来就形成了一个对象.看起来蛮简单的,但是真是这么简单么,当我 ...

  2. 共享内存创建shmget控制操作shmat,shmctl

    1.共享内存的数据结构 共享内存就是分配一块能被其他进程访问的内存.每个共享内存段在内核中维护着一个内部结构: struct shmid_ds { struct ipc_perm shm_perm; ...

  3. mrh支付宝玩转福

    支付宝扫福 都会玩了 2017

  4. 跟我一起学习ASP.NET 4.5 MVC4.0(五)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  5. 51nod1563

    题解: 其实只要排个序贪心一下就好了...代码600B不到... 代码: #include<bits/stdc++.h> using namespace std; ,INF=1e9; in ...

  6. 模拟QQ分组(具有伸缩功能) (添加开源框架的光闪烁效果)SimpleExpandableListAdapter 适配器的用法,并且可添加组及其组内数据。

    package com.lixu.qqfenzu; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...

  7. 栈(stack),C++模板实现

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  8. vsftp服务器同步文件

    首先vsftp同步文件,并没有好的解决方案,网上有一些软件是可以定时同步文件的,我是用的是linux上的一款工具Rsync 首先先了解一下Rsync与scp的区别:点我 1.安装Rsync 两种安装方 ...

  9. SharePoint 服务应用程序管理-PowerShell

    1. 安装所有可用的服务应用程序 Install-SPService -Provision 2. 显示场中所有可用的服务应用程序 Get-SPServiceApplication 3. 获取指定的服务 ...

  10. C一次将整个文件读入内存

    最近工作,有个需求需要将YUV的整个文件读入内存,然后处理这些YUV数据,一种比较有效的方法如下: #include <stdio.h> #include <stdlib.h> ...