Nginx

337 阅读4分钟

Nginx

Nginx 和 Tengine的区别

Tenginx 的 安装

Nginx 负载均衡配置

注意 如果需要增加check_status,编写安装Tengine时需要把check_module编译进来才行 ./configure --with-http_upstream_check_module

  • 给 101,102,103 分别安装Tomcat服务并启动.
  • 修改./webapps/ROOT/index.jsp
<!-- body 中添加H1标签区分机器 -->
<body>
<h1>Node(x)<h1>
<body>
  • 启动Tomcat ./bin/catalina.sh run
  • 修改Nginx.conf。 vim /usr/local/tengine/conf/nginx.conf
    upstream tomcats{
        # ip_hash;
        server 192.168.31.101:8080 weight=2;
        server 192.168.31.102:8080 weight=2;
        server 192.168.31.103:8080 weight=2;
    }
     server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://tomcats;
        }
        location status{
             check_status;
        }
    }
    

Nginx + Tomcat8 + Memcached实现负载均衡 + session共享

Memcached是一个免费并且开源的高性能内存键值数据库.它主要用于系统缓存,通过缓存数据库中的结果来提高应用的相应速度.

  1. memcache本身没有像 redis 所具备的数据持久化功能,比如 RDB 和 AOF 都没有,但是可以通过做集群同步的方式,让各 memcache 服务器的数据进行同步,从而实现数据的一致性,即保证各 memcache的数据是一样的,即使有任何一台 memcache 发生故障,只要集群种有一台 memcache 可用就不会出现数据丢失,当其他 memcache 重新加入到集群的时候可以自动从有数据的 memcache 当中自动获取数据并提供服务。
  2. Memcache借助了操作系统的 libevent 工具做高效的读写。 libevent 是个程序库,它将 Linux 的 epoll、BSD 类操作系统的 kqueue 等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高性能。memcached使用这个 libevent 库,因此能在 Linux、BSD、Solaris 等操作系统上发挥其高性能 。
  3. Memcache 支持最大的内存存储对象为 1M 超过 1M 的 数据可以使用客户端压缩或拆分报包放到多个key中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcache最适合保存用户的session实现 session共享Memcached 存储数据时 , Memcached 会去申请 1MB 的内存 , 把该块内存称为一个slab,也称为一个page。

官方session共享文档地址

image.png

当前我使用Ubuntu18.04 上安装和配置最新版本的Memcached. 需要给每个机器都安装Memcached,然后按照下面的方式配置好并启动.

# 更新Apt软件包
sudo apt update
# 安装Memcached
sudo apt install memcached libmemcached-tools
# 启动memcached
sudo systemctl start memcached
# 查看memcached的状态
sudo systemctl status memcached
  • 修改vim /etc/memcached.conf,实现可以远程访问.
-p 11211
-u memcache
# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
# Note that the daemon will grow to this size, but does not start out holding this much
# memory
-m 64
#最大连接数
# Limit the number of simultaneous incoming connections. The daemon default is 1024
# -c 1024

# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it's listening on a firewalled interface.
# 注释下面这样
#-l 127.0.0.1
  • 启动成功
 memcached.service - memcached daemon
   Loaded: loaded (/lib/systemd/system/memcached.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2021-08-04 14:39:42 UTC; 15h ago
     Docs: man:memcached(1)
 Main PID: 9551 (memcached)
    Tasks: 10 (limit: 4629)
   CGroup: /system.slice/memcached.service
           └─9551 /usr/bin/memcached -m 64 -p 11211 -u memcache -P /var/run/memcached/memcached.pid

Aug 04 14:39:42 wangyp systemd[1]: Started memcached daemon.
  • 查看memcached监听的端口,监听的是11211端口。
ss -nlt

State              Recv-Q               Send-Q                              Local Address:Port                              Peer Address:Port              
LISTEN             0                    128                                       0.0.0.0:22                                     0.0.0.0:*                 
LISTEN             0                    128                                     127.0.0.1:6010                                   0.0.0.0:*                 
LISTEN             0                    128                                       0.0.0.0:13306                                  0.0.0.0:*                 
LISTEN             0                    128                                     127.0.0.1:6011                                   0.0.0.0:*                 
LISTEN             0                    128                                       0.0.0.0:16379                                  0.0.0.0:*                 
LISTEN             0                    128                                       0.0.0.0:11211                                  0.0.0.0:*                 
LISTEN             0                    128                                       0.0.0.0:80                                     0.0.0.0:*                 
LISTEN             0                    128                                 127.0.0.53%lo:53                                     0.0.0.0:*                 
LISTEN             0                    128                                          [::]:22                                        [::]:*                 
LISTEN             0                    128                                         [::1]:6010                                      [::]:*                 
LISTEN             0                    128                                          [::]:13306                                     [::]:*                 
LISTEN             0                    128                                         [::1]:6011                                      [::]:*                 
LISTEN             0                    128                                          [::]:16379                                     [::]:*                 
LISTEN             0                    128                                          [::]:11211                                     [::]:*  

配置Tomcat,
  • 导入memcached 所需要的jar包到Tomcat的lib目录:
asm-5.2.jar
kryo-4.0.2.jar
kryo-serializers-0.45.jar
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc8-2.3.2.jar
minlog-1.3.1.jar
msm-kryo-serializer-2.3.2.jar
objenesis-3.0.1.jar
reflectasm-1.11.9.jar
spymemcached-2.12.3.jar
  • 配置vim ./tomcat/conf/context.xml,在Context中添加Manager标签,并做如下配置. 主要修改memcachedNodes
<Context>
<!--
n1:192.168.31.101:11211
n2:192.168.31.102:11211
n3:192.168.31.103:11211
主要修改memcachedNodes="n1:192.168.31.101:11211,n2:192.168.31.102:11211,n3:192.168.31.103:11211"
-->
        <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:192.168.31.101:11211,n2:192.168.31.102:11211,n3:192.168.31.103:11211"
                failoverNodes="n1"
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
                />
</Context>

  • 在index.jsp显示当前服务器的ip+port,并且显示出现当时的session会话的Id; vim ./tomcat/webapps/ROOT/index.jsp
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ page import="java.util.*" %>
<body>
        <h1> tomcat node1 </h1>
        <div>On <%=request.getServerName() %></div>
        <div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
        <div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
        <%=new Date()%>
</body>
  • 查看服务器的状态
# Nginx http upstream check status

## Check upstream server number: 3, generation: 2

| Index | Upstream | Name                | Status | Rise counts | Fall counts | Check type | Check port |
| ----- | -------- | ------------------- | ------ | ----------- | ----------- | ---------- | ---------- |
| 0     | tomcats  | 192.168.31.101:8080 | up     | 70          | 0           | http       | 0          |
| 1     | tomcats  | 192.168.31.102:8080 | up     | 22          | 0           | http       | 0          |
| 2     | tomcats  | 192.168.31.103:8080 | up     | 57          | 0           | http       | 0
  • 访问nginx服务这时候就可以看到,3个服务器每次访问SessionId都没变.大功告成

# tomcat node2

On tomcats

192.168.31.102:8080

SessionID9071C8EE6A373762E4F2F8AF50336625-n2

Thu Aug 05 06:50:57 UTC 2021

# tomcat node1

On tomcats

192.168.31.102:8080

SessionID9071C8EE6A373762E4F2F8AF50336625-n2

Thu Aug 05 06:49:59 UTC 2021


# tomcat node3

On tomcats

192.168.31.103:8080

SessionID9071C8EE6A373762E4F2F8AF50336625-n2

Thu Aug 05 06:49:21 UTC 2021