三十八、Nginx

Nginx

1. nginx简介

(1)、Nginx是什么?

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。

(2)、发布版本时间

第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

(3)、Nginx开发者

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发。

(4)、特点

占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用

(5)、户有

新浪、网易、腾讯等。

(6)、功能

web服务器、web reverse proxy、smtp reverse proxy

2. nginx安装

1、依赖

gcc openssl-devel pcre-devel zlib-devel

安装:yum install gcc openssl-devel pcre-devel zlib-devel

 

2、创建用户和用户组。

为了方便nginx运行而不影响linux安全

创建组:groupadd -r nginx

创建用户:useradd -r -g nginx  -M nginx

-M 表示不创建用户的家目录。

 

3、解压tengine

tar zxvf tengine*.tar.gz

 

4、进入解压目录

编译 ./configure --prefix=/usr/tengine(如果不指定就默认local下)

注释:

(1)、configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。其中--prefix选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较凌乱。

(2)、如果配置--prefix,如:./configure --prefix=/usr/local/test,可以把所有资源文件放在/usr/local/test的路径中,不会杂乱。用了—prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。

(3)、当然要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。

5、安装(编译并安装)

make && make install

6、启动

进入安装文件路径  cd  /usr/tengine/sbin中启动

./nginx

killall nginx 是杀掉所有nginx进程

 

 

7、配置Nginx为系统服务,以方便管理

(1)、在/etc/rc.d/init.d/目录中建立文本文件nginx

(2)、在文件中粘贴nginx.txt文件的内容:必须vim nginx手动粘贴

 

8、修改nginx文件的执行权限

 chmod +x nginx

 

9、添加该文件到系统服务中去

chkconfig --add nginx

查看是否添加成功

chkconfig --list nginx

启动,停止,重新装载

service nginx start|stop

设置终端模式开机启动:

chkconfig nginx on

注意:在nginx配置中

nginx="/usr/tengine/sbin/nginx",NGINX_CONF_FILE="/usr/tengine/conf/nginx.conf"

这两个路径一定是安装目录的路径

./configure --prefix=/usr/tengine

10、重新加载配置文件命令

service nginx reload

3. nginx配置

1、进入nginx目录下的conf

2、打开nginx.conf

 

3、nginx.conf配置详情

(1)、#运行用户

user nobody;

(2)、#启动进程

通常设置成和cpu(核心)的数量相等

worker_processes  1;

也可以设置为worker_processes  auto,但是只在tengine中有,nginx没有。

(3)、#全局错误日志及PID文件

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid   logs/nginx.pid;

(4)、#工作模式及连接数上限

events {

    #epoll是多路复用IO(I/O Multiplexing)中的一种方式,

    #仅用于linux2.6以上内核,可以大大提高nginx的性能

    use   epoll;

    #单个后台worker process进程的最大并发链接数   

    worker_connections  1024;

    # 并发总数是 worker_processes 和 worker_connections 的乘积

    # 即 max_clients = worker_processes * worker_connections

    # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4  为什么

    # 为什么上面反向代理要除以4,应该说是一个经验值

    # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000

    # worker_connections 值的设置跟物理内存大小有关

    # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数

    # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右

    # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:

    # $ cat /proc/sys/fs/file-max

    # 输出 34336

    # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内

    # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置

    # 使得并发总数小于操作系统可以打开的最大文件数目

    # 其实质也就是根据主机的物理CPU和内存进行配置

    # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。

    # ulimit -SHn 65535

}

(5)、http {

    #设定mime类型,类型由mime.type文件定义

    include    mime.types;

    default_type  application/octet-stream;

    #设定日志格式

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                     '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

                       access_log  logs/access.log  main;

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,

    #对于普通应用,必须设为 on,

    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,

    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.

    sendfile     on;

    #tcp_nopush     on;

    #连接超时时间

    #keepalive_timeout  0;

    keepalive_timeout  65;

    tcp_nodelay     on;

    #开启gzip压缩

    gzip  on;

    gzip_disable "MSIE [1-6].";

    #设定请求缓冲

    client_header_buffer_size    128k;

    large_client_header_buffers  4 128k;

(6)、 #设定虚拟主机配置

一个server代表一个虚拟主机

    server {

        #侦听80端口

        listen    80;

        #定义使用 www.nginx.cn访问

        server_name  www.nginx.cn;

        #定义服务器的默认网站根目录位置

        root html;

        #设定本虚拟主机的访问日志

        access_log  logs/nginx.access.log  main;

        #默认请求

        location / {       

            #定义首页索引文件的名称

            index index.php index.html index.htm;  

        }

        # 定义错误提示页面

        error_page   500 502 503 504 /50x.html;

        location = /50x.html {

        }

        #静态文件,nginx自己处理

        location ~ ^/(images|javascript|js|css|flash|media|static)/ {          

            #过期30天,静态文件不怎么更新,过期可以设大一点,

            #如果频繁更新,则可以设置得小一点。

            expires 30d;

        }

        #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.

        location ~ .php$ {

            fastcgi_pass 127.0.0.1:9000;

            fastcgi_index index.php;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            include fastcgi_params;

        }

        #禁止访问 .htxxx 文件

            location ~ /.ht {

            deny all;

        }

    }

}

htttp{

server{

   #表示一个虚拟主机

    }

}

(7)、location 映射

   location [ = | ~ | ~* | ^~ ] uri { ... }

   location URI {}:

      对当前路径及子路径下的所有对象都生效;

   location = URI {}: 必须执行一个具体文件路径(不能使用目录)

      精确匹配指定的路径,不包括子路径,因此,只对当前资源生效;

   location ~ URI {}:

   location ~* URI {}:

      模式匹配URI,此处的URI可使用正则表达式,~区分字符大小写,~*不区分字符大小写;

   location ^~ URI {}:

      不使用正则表达式

   优先级:= > ^~ > ~|~* >  /|/dir/

1)、创建html

2)、配置location

3)、浏览器访问

4)、

为什么不是http://192.168.239.141/test/opt/test1.html 

因为location配置的是 /test/自动去找opt目录下的test1.html

 

(8)、访问控制

            IP访问控制

            location  {

               deny  IP /IP段

               deny  192.168.1.109;

               allow 192.168.1.0/24;

            }

 

(9)、用户认证访问(需要输入用户名和密码)

一、模块ngx_http_auth_basic_module 允许使用HTTP基本认证协议验证用户名和密码来限制对资源的访问。

            location / {

                        auth_basic           "closed site";

                        auth_basic_user_file /var/users;

          }

二、Apache发行包中的htpasswd命令来创建user_file 文件

htpasswd -c -m /var/users username   

1)、安装httpd

2)、添加用户和密码格式

创建用户名zs 、密码123456

3)进入配置文件nginx.conf添加localtion

4)、退出后重新加载

5)浏览器访问,这时会要求输入用户名和密码

 

(10)、autoindex 在浏览器中列出当前目录的文件索引

1)、autoindex  on;

退出重启

效果

2)、启用访问状态模块

 location /status{

            stub_status on;

 }

 

 

4. 动静分离配置

1、Apache 和 nginx(web服务器)

(1)、多台集群机器联合处理一个任务。

(2)、一台机器处理不同的多个任务。

特点:

   处理静态数据速度快(自动html静态数据的缓存)

   并发数一般要比J2EE服务器要高。

 

2、搭建tomcat集群和动静分离

(1)、上传tomcat进行解压

tomcat直接解压就可使用了

如果觉得名字太长可以重新命名

(2)、进入tomcat1目录下的ROOT创建

添加

 

(3)、在复制一个tomcat,作为tomcat2

修改ROOT下的test1.jsp,标识一个信息为tomcat2,方便看效果

(4)、修改tomcat2的修改端口号

因为两个tomcat端口不能一样

进入conf

修改

(5)、分别启动tomcat1、tomcat2

启动tomcat1

查看是否启动成功

如下代表启动成功

tomcat2启动方式和tomcat1一样,在此略

查看进程可以直接查java,因为tomcat也是java程序

(6)、启动nginx

(7)、进入 opt/test/下

上传一张图片作为静态资源

cp ~/1.jpg . 拷贝根目录root下的1.jpg到当前目录

温馨提示linux命令:4 yy -p 从当前光标开始复制4行

(8)、进入nginx.conf配置

添加tomcat集群组,upstream backend 意思是允许定义一组服务器(集群)

其中weight代表权重,就是并发量多的时候分配的优先级,数字一样代表相同

 

(9)、分别进入tomcat1,tomcat2

添加图片

(10)、退出重新加载nignx配置文件

(11)、测试效果

图片是静态访问的,tomcat字体是动态的,实现了tomcat集群动态分离

(12)、测试2

其实tomcat就是java进程,以下命令查找可以查询出tomcat进行

杀掉一个tomcat进行,保留一个,在浏览器访问这时候只有一个tomcat服务

5. session共享

1、原理图

https://blog.csdn.net/u010651369/article/details/72899524

用户通过浏览器访问,经过服务器nginx服务请求,把随机分配给tomcat集群处理,在这过程中会产生数据不一致,例如

登录功能(在tomcat1服务器上已经登录,但是刷新之后又可能随机在tomcat2上服务,tomcat上由于没有用户账号密码

的session,会判断用户没有登录,但是用户已经在tomcat1登录了,这样会造成用户体验出问题),所以为了保证session

一致,搭建session缓存服务器,当用户第一次访问tomcat1时候将session写入session缓存服务器,用户再次访问时候去

session服务器中读取session判断是否已经登录,两台tomcat为了保证取到的是同一份session数据,主要是通过sessoinId

,如果两个sessionId是一样就取同一个session值。

sessionId的生命周期:

当 session.setAttribute("data", "孤傲苍狼");

-->就会在服务器端产生了sessionId

-->服务器端并响应数据(包括sessionId)返回给客户端

-->客户端把返回的数据保存cookie中

-->客户端再次请求时也会把cookie中的数据发送给服务器

-->服务器发现sessionId一致(拿不到新的session),判断出还处于一次会话中

注:sessionId在客户端和服务端之间流转

 

2、搭建session服务器

(memcached 缓存服务)和修改tomcat配置

(1)、连接session缓存服务器

修改sessoin缓存服务器yum源,并删除

进入session缓存服务器/etc/yum.repos.d/

远程复制tomcat集群下的服务器/etc/yum.repos.d/*.repo 

 

(2)、删除掉epel.repo,并创建 vi my.repo

添加

保存退出后

 

(3)、安装memcached

安装成功后启动服务

永久关闭防火墙

 

(4)、将以下jar分别拷贝到tomcat1、tomcat2的lib目录下

 

(5)配置tomcat,每个tomcat里面的context.xml中加入:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

      memcachedNodes="n1:192.168.197.128:11211"

    sticky="false"

    lockingMode="auto"

    sessionBackupAsync="false"

      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    sessionBackupTimeout="1000" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

 

 

 

(6)、验证是否实现了session共享

进入tomcat1、tomcat2的ROOT下

分别添加以下代码

退出启动,查看是否启动成功

 

浏览器端

经常容易出错

注意:如果两个服务器(session缓存服务器,tomcat服务器)相差时间只能是3到4s,

如果两台tomcat不在同一台机器上必须保证时间一致,因为sessionId是根据MD5算法通过系统时间来计算的

6. 健康检查

1、健康检查配置

进入tengine的nginx.conf文件

添加健康检查动作

 #gzip  on;

    upstream my_servers {

        server localhost:8080 weight=5;

        server localhost:8081 weight=5;

        check interval=3000 rise=2 fall=2 timeout=1000 type=http;

        check_http_send "HEAD /check.jsp HTTP/1.0\r\n\r\n";

        check_http_expect_alive http_2xx http_3xx;

    }

 

 

2、添加健康检查状态页面

location /status {

            check_status;

            access_log   off;

        }

 

3、保存退出后,在tomcat服务器添加检查状态页面

 

4、健康检查结果,浏览器端

7. 动态网页静态化

1、使用nginx完成SEO中的,动态网页静态化。

http://192.168.239.3/test.action?id=1

http://192.168.239.3/test.action?id=2

http://192.168.239.3/test.action?id=3

 

8. 反向代理

1、反向代理含义

(1)、反向代理:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,简单来说就是真实的服务器不能直接被外部网络访问,想要访问必须通过代理。

(2)、反向代理的主要作用是分发请求。

(3)、反向代理的工作流程:

1)、用户通过域名发出访问请求,该域名被解析为反向代理服务器的IP地址;

2)、反向代理服务器接收用户的请求;

3)、反向代理服务器在本地缓存查找是否存在当前用户所请求的内容,找到则直接把内容返回给用户;

4)、如果本地没有用户请求的内容,反向代理服务器会以自己的身份去后端服务器请求同样的信息内容,并把信息内容发给用户,如果信息内容是可以被缓存的,则会将该内容缓存在代理服务器的本地缓存中。

(4)、反向代理的好处:

1)、解决了网站服务器对外可见的问题,提高了网站服务器的安全性;

2)、节约了有限的IP地址资源,后端服务器均可使用私有IP地址与代理服务器进行通信;

3)、加速了网站的访问速度,减轻了真是web服务器的负荷

(5)、正向代理:意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),

然后代理向原始服务器转交请求并将获得的内容返回给客户端。

 

2、操作步骤

(1)、在nginx.conf配置文件http下面添加属性

upstream  名字

  server  IP:PORT;

  server  IP:PORT;

说明:表示两个服务器的负载以那个响应速度快的优先承担upstream转发来的请求,起到了路径从速的负载作用,逻辑上实现了地区就近负载的功效

 

(2)、对Tengine的nginx.conf进行编辑

           location  /  {

                        proxy_pass http://名字;

           }

比如:

location /forum/ {

   proxy_pass http://192.168.80.11:8080/bbs/;

}

 

(3)、退出重新启动tomcat,tengine

 

(4)、打开浏览器,输入URL进行查看

使用F5不断地刷新浏览器—–刷新三下,显示两次tomcat1,显示一次tomcat2

 

(5)、改变反向代理时,apache记录的日志

httpd.conf

  LogFormat %{X-Real_IP}i

 

 

9. tengine集群

1、为什么要搭建tengine集群

因为tomcat是多台,在客户访问量过大的时候单个tengine服务器就回出现瓶颈了,为了解决这个问题搭建tengine集群

,这两台tengine集群完全一样,在工作的叫master,当master挂了之后,backup立即起作用,但是这个过程就引发了ip

问题,为了解决这个问题使用vip(虚拟ip),当一台tengine挂掉之后,vip会漂移到另一台。如果在配置多台tengine只需

要绑定 一台vip就可以了。

方法:Keepalived : 提供高可用,vrrp协议,实现IP的漂移

      Zookeeper:选举、心跳机制提供接管

 

 

 

2、Keepalived 原理 - IP漂移

(1)、IP漂移 

针对的是VIP  集群正常运作的情况下,服务器上有DIP、VIP(客户端访问的是VIP),VIP绑定在DR Master上,

当这台服务器挂掉之后,IP漂移到DR Backup上, 是对哪个IP进行漂移??  -- VIP

也就是说当Master挂掉,VIP马上切换 绑定到Backup上

除此之外、Keepalived还对后端的服务器进行监控,并且可以发邮件给你、当你的集群出现问题的时候(rs宕机)

Keepalived除了对LVS做高可用, 还可对Nginx 应用服务器。。做高可用

##zookeeper 性能更好

##zookeeper VS Keepalived

Keepalived进行ip漂移的过程中进行主机检测,中间会有时间空隔

zookeeper处理机制是 在你请求后端服务器之前会先进行选举 然后选择后端服务器。。。

 

3、怎么新建新的网络接口

(1)、添加一个新的网络接口

(2)、ping ip看是否可以访问

(3)、去掉网络接口

 

 

4、tengine集群配置和vip

(1)、准备两台tengine服务器(big_data02,linux02),分别安装keepalived

操作big_data02服务器

若产生错误,解决办法,如果勾选不生效,重启一下

 

(2)、修改big_data02服务器的tengine配置文件

改为本机的ip

(3)、将big_data2的tengine配置文件拷贝给第二台linux02

在big_data2输入

linux02服务器(先安装tengine)也按照安装keepalived(1步骤),不用修改nginx配置文件

 

(4)、big_data02服务器进入keepalived目录下

vi keepalived.conf

修改vip

 

(5)、curl

输入,命令窗口会多了200

(6)、新建脚本

添加

 

修改tengine配置文件

重新加载tengine,启动脚本

同样原理,把check_nginx.sh添加到linux02服务器的/home下(第二台tengine)

 

(7)、在big_data02下

进入

添加

退出添加权限

第二台也是同样的配置

第二台keepalived配置文件改为

 

(8)、启动步骤

先启动master主服务器,后启动backup副服务器

1)、关闭两台tengine服务器防火墙

2)、启动sessoin共享服务器

3)、启动big_data2服务器的tomcat

4)、启动keepalived

如果tengine没有开就会显示

查看日志

5)、重复(3)--(4)步骤启动linux02(第二台tengine)

6)、浏览器访问

一开始只有一台tengine有vip,停掉一台tengine,在浏览器再次访问,在shell可以看到停掉的这一台已经没有vip了,但是任然可以访问,因为vip漂移到了第二台tengine服务器

 

 

 

5、以上安装文档描述

两台tengine主机 安装Keepalived

  yum install keepalived

** rpm -ql keepalived 查看安装目录

** man Keepalived 查看文档

**查看配置的帮助手册

man keepalived.conf

看着文档修改/etc/keepalived/keepalived.conf配置文件

##配置邮件提醒

global_defs {

   notification_email {

     root@localhost

   }

   notification_email_from keepalived@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

##IP漂移设置

vrrp_instance VI_1 {

    state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备

    interface eth0 #绑定的vip

    virtual_router_id 51 #虚拟路由编号,主备要一致

    priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR

    advert_int 1 #检查间隔,默认为1s

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.183.200/24 dev eth0 label eth0:1 #定义虚拟IP(VIP)为192.168.2.33,可多设,每行一个  可以为多个服务高可用 我们现在只对LVS

        格式: ip地址/网络段 brd广播地址 dev网络设备(eth0网卡) label别名

    }

}

# 定义对外提供服务的LVS的VIP以及port

virtual_server 192.168.183.200 80 {  如果对数据库。。做高可用 端口。。 

    delay_loop 6 # 设置健康检查时间,单位是秒                   

    lb_algo wrr # 设置负载调度的算法为wlc

    lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式

    nat_mask 255.255.255.0

    persistence_timeout 50 #会话保持

    protocol TCP

    real_server 192.168.183.111 80 {  # 指定real server1的IP地址

        weight 3   # 配置节点权值,数字越大权重越高             

        HTTP_CHECK {  #健康检查  选择HTTP_CHECK

            url {

              path /index.html  #健康检查地址

              #digest 返回结果

              status_code 200 #状态码

            }

        connect_timeout 3  连接超时时间  

        nb_get_retry 3  #允许尝试3次

        delay_before_retry 3  #检查时间间隔

        } 

    }

    real_server 192.168.183.112 80 {  # 指定real server2的IP地址

        weight 3   # 配置节点权值,数字越大权重越高             

        HTTP_CHECK {  #健康检查  选择HTTP_CHECK

            url {

              path /index.html  #健康检查地址

              #digest 返回结果

              status_code 200 #状态码

            }

        connect_timeout 3  连接超时时间  

        nb_get_retry 3  #允许尝试3次

        delay_before_retry 3  #检查时间间隔

        } 

     } 

}

##备用的主机 Keepalived

**拷贝配置文件过去 scp /etc/keepalived/keepalived.conf ...

##修改  只需要修改下边的配置

vrrp_instance VI_1 {

    state BACKUP #指定Keepalived的角色,MASTER为主,BACKUP为备   

    priority 50 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR

}

##启动Keepalived  service keepalived start

查看IP地址 ifconfig

帮我们绑定了ip地址 eth0:1

ipvsadm -Ln  帮我们启动了realserver

停掉第一台主机 init 6

查看第二台主机 ifconfig 出现了eth0:1

  ipvsadm

查看页面效果

启动第一天Keepalived

ifconfig 出现了eth0:1

ipvsadm 第一台重新接管了

mail 查看邮件

10. lvs(linux虚拟服务器)

1、lvs(linux虚拟服务器)的作用

用户发送请求到达nginx,nginx与tomcat之间进行数据响应,在此过程中会影响nginx服务器,如果是文件下载响应

文件流,所有的响应文件流都由tomcat响应给nginx,在此过程中进行数据响应流太频繁会到达IO的瓶颈,IO会造成

阻塞,所以在此使用lvs解决,lvs会将数据直接发送给客户端,LVS解决了前端服务器访问IO/网络瓶颈问题

LVS官网 http://www.linuxvirtualserver.org/Documents.html

 

2、原理

CIP:客户端ip,VIP虚拟iP,DIP转发ip,RIP真是ip

注意:如果没有保证VIP是隐藏的会造成ip冲突

LVS 组成 :lvs && ipvsadm

 

3、负载均衡实现方式

  1、硬件服务器 F5  - 看ZOL报价

  2、软件LVS

 

4、调度算法

  1、静态

  rr:轮循、wrr:、dh: 、sh:

  2、动态

  lc: 最少连接、 wlc: 加权最少连接、sed: 最短期望延迟、nq: never queue、LBLC: 基于本地的最少连接

  DH: 、LBLCR: 基于本地的带复制功能的最少连接、默认方法:wlc

 

5、LVS模式、看官网

三种类型:NAT、DR - 重点、TUN

 

6、IP:

  VIP: 虚拟服务器地址、DIP: 转发的网络地址、RIP: 后端真实主机(后端服务器)、CIP: 客户端IP地址

 

7、NAT

Network Address Translation 网络地址转换(将内部地址转化为Internets上可用的外部地址)

 工作原理:

    报文头(目标地址、源地址和端口等)被正确改写后,客户相信它们连接一个IP地址,

    而不同IP地址的服务器组也认为它们是与客户直接相连的。

    由此,可以用NAT方法将不同IP地址的并行网络服务变成在一个IP地址上的一个虚拟服务。

 

 

 

看图:

 

  客户端通过虚拟服务器ip(virtul ipaddress)访问网络服务,发送请求到调度器服务器,调度器根据一些调度算法()从真实的服务器集群中,选取一台服务器作为请求响应的服务器,并将客户端发来的请求中报文的目标地址virtual ip address改写为选定的服务器的ip地址、报文的目标端口改写成选定服务器的相应端口,由该服务器响应客户端发来的请求,当响应请求处理完成之后,服务器还是将响应数据发送给调度器服务器(前端服务器),调度器再重写报文,将响应返回给客户端。。。

问题:

  处理流程上跟Nginx基本类似,调度器服务器(前端服务器)的高负载、单点故障问题还是存在的。。。(真实服务器10-20之间,负载调度器成为限制集群系统的瓶颈)

 

8、TUN IP隧道

工作原理:

将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。

IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),

在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

看图:

request   --virtual ipaddress-->  | load balancer linux box    |  === IP TUNNEL ===>   |   real server

连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,

再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,

所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

适用场景:

性能肯定要高于NET模式,但是它内部处理很复杂,性能上不如另外一种也是我们主要要介绍的DR模式

IP TUN模式主要超大型网站,需要跨网段、跨域场景,像一些全球性的互联网网站

 

9、DR 直接路由 Direct Routing

工作原理:

跟TUN方法相同,DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而真实服务器直接将响应返回给客户,从而极大地提高整个集群系统的吞吐量。

看图:

request   --virtual ipaddress-->  | load balancer linux box    |  === Internal Network 内网 ===>   |   real server

调度服务器和服务器集群 必须要有一个网卡 使他们在同一个局域网段内 - ARP/RARP是作用于局域网内的协议

工作流程:

连接调度和管理的方式与NAT、TUN是相同的,报文转发有所差别:

由调度器的负载均衡算法选择出响应的服务器,报文不做任何修改直接发送给后端真实的服务器处理,

那么我们的报文中请求和响应报文的vip自始至终都是不变的,当客户端接受到响应时会发现一切正常,他不会知道具体我们哪台服务器处理的。。。

(网络通信,使用IP进行通信的,但是硬件底层只能识别mac地址,因为设备传输之间会通过ARP和RARP协议将ip与mac之间进行相互的解析)

(网络七层协议:7应用层 6表示层 5会话层 4传输层 3网络层 2数据链路层 1物理层 | ARP、RARP属于数据链路层 - 它介乎于物理层和网络层之间,为网络层提供服务:

其中一项主要的服务就是 - 将数据组合成数据块,在数据链路层中称这种数据块为帧)

DR模式 转发报文的过程中 就是将数据帧的MAC地址改为调度器选出真实服务器的MAC地址,再把修改后的数据帧发送到服务器集群的局域网内

此时,因为这个MAC地址是集群里真实服务器的MAC地址,所以服务器肯定可以接收到这个数据帧,从中可以拿到相对应的IP报文。

 

10、三种模式比较

(1)、NET模式 伸缩能力太差,服务器节点增多以后,调度器负载压力瓶颈

(2)、TUN模式 可以处理超大数量级别的请求 但是太大了 适合于构建 高性能的超级服务器

(3)、DR模式  与NET相比,伸缩性很好,便于服务器集群的扩张;使用以及性能上 不像TUN那么庞杂

-- 重点。。。(但是LVS只有超大并发量的网站才会使用到,可能大部分人以后都不会遇到)

 

11、Lvs DR(转发)模式集群步骤

(准备三台服务器,两台分别装有tomcat,另一台作为lvs服务器,在这里叫linux1、linux2(这两台作为tomcat服务器)、linux3作为lvs服务器)

(1)找一台主机作为DR(虚拟服务器),linux03安装ipvsadm

yum install ipvsadm

进入network-scripts目录

在DR设置两个IP地址:

a)DIP: 192.168.1.134 ,设置静态ID(在这里暂时不操作)

b)VIP:192.168.239.200 , ifconfig eth0:1 192.168.239.200/24

网盘,一个网盘可以对应多个ip

 

(2)找多台机器作为RS( apeche或者tomcat ),这里使用linux1、linux2

修改报文源IP的设置,需要设置内核参数

在此用tomcat所在的服务器作为RS,在两台tomcat服务器上输入以下命令

echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

在两台机器(RS)上,设置网卡的别名IP:192.168.1.200  

ifconfig lo:0 192.168.239.100 netmask 255.255.255.255 broadcast 192.168.239.100

输入ifconfig

验证是否成功,在windows的cmd下

 

在两台机器(RS)上,添加一个路由

route add -host 192.169.239.200 dev lo:0

如果另一台RS服务器没有tomcat,那么将含有一台tomcat的服务器拷贝给它

拷贝jdk

进入bash_profile

修改配置文件

重新加载配置文件

两台tomcat都修改为80端口

 

在lvs服务器上使用ipvsadm添加集群服务

a)、ipvsadm -C 清空原来的设置

b)、ipvsadm -A -t 192.168.239.100:80 -s wlc

c)、ipvsadm -a -t 192.168.239.100:80 -r 192.168.1.111 -g -w 1

d)、ipvsadm -a -t 192.168.239.100:80 -r 192.168.1.112 -g -w 1

 

 

设置三台机器统一时间

 

 

浏览器端输入

 

11. Ipvsadm命令

1、管理集群服务

添加:-A -t|u|f service-address [-s scheduler]

   -t: TCP协议的集群

   -u: UDP协议的集群

      service-address:     IP:PORT

   -f: FWM: 防火墙标记

      service-address: Mark Number

   修改:-E

   删除:-D -t|u|f service-address

   # ipvsadm -A -t 172.16.100.1:80 -s rr

2、管理集群服务中的RS

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

    -t|u|f service-address:事先定义好的某集群服务

    -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;

     [-g|i|m]: LVS类型

      -g: DR、-i: TUN、-m: NAT

        [-w weight]: 定义服务器权重

      修改:-e

      删除:-d -t|u|f service-address -r server-address

 

      # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g

      # ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g

   查看

      -L|l

        -n: 数字格式显示主机地址和端口

        --stats:统计数据

        --rate: 速率

        --timeout: 显示tcp、tcpfin和udp的会话超时时长

        -c: 显示当前的ipvs连接状况

   删除所有集群服务

      -C:清空ipvs规则

   保存规则

      -S

      # ipvsadm -S > /path/to/somefile

   载入此前的规则:

      -R

      # ipvsadm -R < /path/form/somefile

 

 

12. 名词理解

(1)、高并发:

在一个时间段内大量的线程访问,解决集群,但是引发Session共享,解决Session共享mencach

(2)、集群:

多台服务器运行,它们构成了一个组,并以单一系统的模式加以管理。

(3)、负载均衡:

对系统中的负载情况进行动态调整,减少系统中各节点负载不均衡的现象。

(4)、高可用:

当一台服务器挂了之后,另一台服务器立即作用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值