第19周-2022-05-09

1、haproxy https实现

环境:
haproxy服务器:192.168.184.101
nginx后端:192.168.184.102

nginx后端页面:

[root@centos7-02 ~]# cat /usr/local/nginx/html/test.html 
<h1>https://www.example.com</h1>
<h2>192.168.184.102</h2>

haproxy配置:

#生成证书
[root@centos7-01 conf.d]# mkdir /etc/haproxy/certs/
[root@centos7-01 conf.d]# cd /etc/haproxy/certs/
[root@centos7-01 certs]# openssl genrsa -out example.key 2048
[root@centos7-01 certs]# openssl req -new -x509 -key example.key -out example.crt -days 365 -subj "/CN=www.example.com"
[root@centos7-01 certs]# cat example.key example.crt > example.pem

#修改配置文件
[root@centos7-01 certs]# cat /etc/haproxy/conf.d/test.cfg 
frontend example_http_port
  bind 192.168.184.101:80
  bind 192.168.184.101:443 ssl crt /etc/haproxy/certs/example.pem
  redirect scheme https if !{ ssl_fc }
  http-request set-header X-forwarded-Port %[dst_port]
  http-request add-header X-forwarded-Proto https if { ssl_fc }
  mode http
  balance roundrobin
  log global
  option httplog
  acl acl_example_domain hdr_dom(host) -i www.example.com
  use_backend example_hosts if acl_example_domain
backend example_hosts
  mode http
  server web1 192.168.184.102:80 check inter 2000 fall 3 rise 5
[root@centos7-01 certs]# systemctl restart haproxy

windows上修改DNS解析:192.168.184.101 www.example.com
测试访问:

2、总结tomcat的核心组件以及根目录结构

tomcat核心组件:

  • 顶级组件
    Server,代表整个Tomcat容器,一台主机可以启动多tomcat实例,需要确保端口不要产生冲突
  • 服务类组件
    Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
  • 连接器组件
    Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
  • 容器类
    Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。
  • 内嵌类
    可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。
  • 集群类组件
    listener、cluster

目录结构:
bin:服务启动、停止等相关程序和文件
conf:配置文件
lib:库目录
logs:日志目录
webapps:应用程序,应用部署目录
work:jsp编译后的结果文件,建议提前预热访问

3、tomcat实现多虚拟主机

安装jdk

#下载安装包:https://www.oracle.com/java/technologies/downloads/archive/
[root@centos7-01 local]# tar xvf jdk-8u331-linux-x64.tar.gz -C /usr/local/
[root@centos7-01 ~]# cd /usr/local/
[root@centos7-01 local]# ln -s jdk1.8.0_331/ jdk
#配置环境变量
[root@centos7-01 local]# cat /etc/profile.d/jdk.sh 
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
[root@centos7-01 local]# . /etc/profile.d/jdk.sh

二进制安装tomcat

[root@centos7-01 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.78/bin/apache-tomcat-8.5.78.tar.gz
[root@centos7-01 ~]# tar xf apache-tomcat-8.5.78.tar.gz -C /usr/local/
[root@centos7-01 ~]# cd /usr/local/
[root@centos7-01 local]# ln -s apache-tomcat-8.5.78/ tomcat
[root@centos7-01 local]# echo 'PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh
[root@centos7-01 local]# . /etc/profile.d/tomcat.sh
#创建tomcat专用帐户
[root@centos7-01 local]# useradd -r -s /sbin/nologin tomcat
#准备service文件中相关环境文件
[root@centos7-01 local]# vi /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/usr/local/jdk
[root@centos7-01 local]# chown -R tomcat.tomcat /usr/local/tomcat/
#创建tomcat.service文件
[root@centos7-01 local]# cat /lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat
#After=syslog.target network.target remote-fs.target nss-lookup.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
[root@centos7-01 local]# systemctl daemon-reload
[root@centos7-01 local]# systemctl enable --now tomcat

多虚拟主机配置

[root@centos7-01 local]# vi /usr/local/tomcat/conf/server.xml
#在文件最后面增加下面内容
      ...
      <Host name="web1.example.com" appBase="/data/webapps/web1" unpackWARs="True"
          autoDeploy="false">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
          prefix="web1_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="web2.example.com" appBase="/data/webapps/web2" unpackWARs="True"
          autoDeploy="false">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
          prefix="web2_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>
#准备虚拟主机的数据目录
[root@centos7-01 local]# mkdir -p /data/webapps/web{1,2}/ROOT
[root@centos7-01 local]# echo web1.example.com > /data/webapps/web1/ROOT/index.html
[root@centos7-01 local]# echo web2.example.com > /data/webapps/web2/ROOT/index.html
[root@centos7-01 local]# systemctl restart tomcat

验证:

#配置hosts解析
[root@centos7-03 ~]# vi /etc/hosts
192.168.184.101 web1.example.com web2.example.com
#测试访问
[root@centos7-03 ~]# curl http://web1.example.com:8080
web1.example.com
[root@centos7-03 ~]# curl http://web2.example.com:8080
web2.example.com

4、nginx实现后端tomcat的负载均衡调度

tomcat1 192.168.184.101
tomcat2 192.168.184.102
nginx 192.168.184.103

tomcat配置

#tomcat1和tomcat2添加以下配置
[root@centos7-01 ~]# vi /usr/local/tomcat/conf/server.xml
      <Host name="tomcat-server" appBase="/data/webapps" unpackWARs="True" autoDeploy="false">
      </Host>

#在tomcat1和tomcat2创建相同页面文件
[root@centos7-01 ~]# mkdir -p /data/webapps/ROOT
#编写测试jsp文件
[root@centos7-01 ~]# vi /data/webapps/ROOT/index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>

#配置权限
[root@centos7-01 ~]# chown -R tomcat.tomcat /data/webapps/
[root@centos7-01 ~]# systemctl restart tomcat

nginx配置

[root@centos7-03 ~]# vi /etc/nginx/nginx.conf
#在http语句块中修改
    upstream tomcat-server {
      server t1.example.com:8080;
      server t2.example.com:8080;
    }
    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
        location ~* \.jsp$ {
          proxy_pass http://tomcat-server;
        }

#修改hosts文件
[root@centos7-03 ~]# vi /etc/hosts
192.168.184.101 t1.example.com
192.168.184.102 t2.example.com

测试访问



5、简述memcached的工作原理

1.内存分配机制
应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非常容易导致大量内存碎片,最后导致无连续可用内存可用。
Memcached采用了Slab Allocator机制来分配、管理内存。

  • Page:分配给Slab的内存空间,默认为1MB,分配后就得到一个Slab。Slab分配之后内存按照固定字节大小等分成chunk。
  • Chunk:用于缓存记录k/v值的内存空间。Memcached会根据数据大小选择存到哪一个chunk中,假设chunk有128bytes、64bytes等多种,数据只有100bytes存储在128bytes中,存在少许浪费。
    • Chunk最大就是Page的大小,即一个Page中就一个Chunk
  • Slab Class:Slab按照Chunk的大小分组,就组成不同的Slab Class, 第一个Chunk大小为 96B的Slab为Class1,Chunk 120B为Class 2,如果有100bytes要存,那么Memcached会选择下图中Slab Class 2 存储,因为它是120bytes的Chunk。Slab之间的差异可以使用Growth Factor 控制,默认1.25。

2.懒过期 Lazy Expiration
memcached不会监视数据是否过期,而是在取数据时才看是否过期,如果过期,把数据有效期限标识为0,并不清除该数据。以后可以覆盖该位置存储其它数据。

3.LRU
当内存不足时,memcached会使用LRU(Least Recently Used)机制来查找可用空间,分配给新记录使用。

4.集群
Memcached集群,称为基于客户端的分布式集群,即由客户端实现集群功能,即Memcached本身不支持集群
Memcached集群内部并不互相通信,一切都需要客户端连接到Memcached服务器后自行组织这些节点,并决定数据存储的节点。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容