- haproxy https实现
- 环境准备
- 1.准备web
- 1.1编译安装nginx
- 1.2nginx 启动文件
- 2.准备证书
- 2.1 生成ssl自签证书 生成自签名证书ca
- 2.2 为服务颁发证书
- 2.3签发证书
- 3. 准备haproxy
- 3.1安装lua
- 3.2haproxy配置文件
- 3.4验证
- 总结tomcat的核心组件以及根目录结构
- 1.目录结构
- 1.1bin
- 1.2conf
- 1.3 logs
- 2. Tomcat 核心组件
- 2.1 Server
- 2.2 Service
- 2.3 Connector
- 2.4 Engine
- 2.5 Host
- 2.6 Context
- tomcat实现多虚拟主机
- 1.下载jdk
- 2、安装tomcat
- 2.1 源码包下载及安装
- 3.配置虚拟主机
- 3.1 修改server.xml
- 3.2 准备数据目录
- 4、测试
- nginx实现后端tomcat的负载均衡调度
- 环境准备
- 1.安装nginx
- 参考1.1
- 2.安装tomcat
- 参考3.2
- 3.修改nginx代理
- 4.配置tomcat
- 4.1 配置node1
- 4.2验证
- 简述memcached的工作原理
- 5.1内存分配机制
- 5.2 懒过期 Lazy Expiration
- 5.3 LRU
- 5.4 集群
yum install -y gcc pcre-devel openssl-devel zlib-devel lrzsz make useradd -u 80 nginx -s /sbin/nologin wget https://nginx.org/download/nginx-1.20.1.tar.gz tar xf nginx-1.20.1.tar.gz cd nginx-1.20.1/ mkdir /apps/nginx -p ./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module make -j 4 && make install echo "PATH=/apps/nginx/sbin/:$PATH" >/etc/profile.d/nginx.sh . /etc/profile.d/nginx.sh chown nginx.nginx -R /apps/nginx/1.2nginx 启动文件
cat > /usr/lib/systemd/system/nginx.service <2.准备证书 2.1 生成ssl自签证书 生成自签名证书ca/apps/nginx/html/index.html systemctl daemon-reload systemctl start nginx
[root@centos7 ~]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt Generating a 4096 bit RSA private key ...++ ..............................................................................................................................................................................................................................................................................................................................................................................................................................................++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Shanghai Locality Name (eg, city) [Default City]:Shanghai Organization Name (eg, company) [Default Company Ltd]:test.org Organizational Unit Name (eg, section) []:test Common Name (eg, your name or your server's hostname) []:ca.test.org Email Address []:admin@123.org
[root@7-1 certs]#ll total 8 -rw-r--r-- 1 root root 2102 Nov 28 15:39 ca.crt -rw-r--r-- 1 root root 3272 Nov 28 15:39 ca.key2.2 为服务颁发证书
[root@7-1 certs]#openssl req -newkey rsa:4096 -nodes -sha256 -keyout www.test1.org.key -out www.test1.org.csr Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:test.org Organizational Unit Name (eg, section) []:nginx Common Name (eg, your name or your server's hostname) []:www.nginx.test.org Email Address []:root@test1.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: ##注意国家,省,公司这个三个参数要与CA的对应##2.3签发证书
[root@7-1 certs]#openssl x509 -req -days 3650 -in www.test1.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out www.test1.org.crt Signature ok subject=/C=CN/ST=Guangdong/L=Guangdong/O=test.org/OU=nginx/CN=www.nginx.test.org/emailAddress=root@test1.org Getting CA Private Key3. 准备haproxy 3.1安装lua
yum -y install gcc curl openssl-devel libnl3-devel net-snmp-devel make pcre-devel systemd-devel wget http://www.lua.org/ftp/lua-5.4.3.tar.gz tar zxf lua-5.4.3.tar.gz -C /usr/local/src cd /usr/local/src/lua-5.4.3 make all test #查看版本 lua -v 1.2编译安装haproxy mkdir /apps/haproxy -p mkdir /etc/haproxy/conf.d/ -p mkdir /var/lib/haproxy -p wget https://www.haproxy.org/download/2.4/src/haproxy-2.4.7.tar.gz tar xf haproxy-2.4.7.tar.gz cd && cd haproxy-2.4.7/ make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.3/src/ LUA_LIB=/usr/local/src/lua-5.4.3/src/ make install PREFIX=/apps/haproxy/ ln -sf /apps/haproxy/sbin/haproxy /usr/bin/ ln -sf /apps/haproxy/sbin/haproxy /usr/sbin/haproxy useradd -s /sbin/nologin -d /var/lib/haproxy haproxy 1.3准备haproxy service文件 cat >/usr/lib/systemd/system/haproxy.service<3.2haproxy配置文件 #将准备好的证书合并 cat www.test1.org.crt www.test1.org.key > /etc/haproxy/certs/pana.pam cat>> /etc/haproxy/haproxy.cfg<3.4验证 总结tomcat的核心组件以及根目录结构 1.目录结构 1.1bin 1.2conf 1.3 logs 2. Tomcat 核心组件
Tomcat核心组件有6个,分别为Tomcat有Server、Service、Connector、Engine、Host和Context等,下面为大家一一介绍:
2.1 ServerServer元素在最顶层,代表整个Tomcat容器,因此它必须是server.xml中唯一一个最外层的元素。一个Server元素中可以有一个或多个Service元素。
2.2 Service
Server的主要任务,就是提供一个接口让客户端能够访问到这个Service集合,同时维护它所包含的所有的Service的声明周期,包括如何初始化、如何结束服务、如何找到客户端要访问的Service。Service的作用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service可以包含多个Connector,但是只能包含一个Engine;其中Connector的作用是从客户端接收请求,Engine的作用是处理接收进来的请求。Tomcat可以提供多个Service,不同的Service监听不同的端口。
2.3 ConnectorConnector的主要功能,是接收连接请求,创建Request和Response对象用于和请求端交换数据;然后分配线程让Engine来处理这个请求,并把产生的Request和Response对象传给Engine。通过配置Connector,可以控制请求Service的协议及端口号。
2.4 EngineEngine组件在Service组件中有且只有一个;Engine是Service组件中的请求处理组件。Engine组件从一个或多个Connector中接收请求并处理,并将完成的响应返回给Connector,最终传递给客户端。
2.5 Host
实际上,Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。Host是Engine的子容器。Engine组件中可以内嵌1个或多个Host组件,每个Host组件代表Engine中的一个虚拟主机。Host组件至少有一个,且其中一个的name必须与Engine组件的defaultHost属性相匹配。
2.6 Context
Host虚拟主机的作用,是运行多个Web应用(一个Context代表一个Web应用),并负责安装、展开、启动和结束每个Web应用。Context元素代表在特定虚拟主机上运行的一个Web应用。每个Web应用基于WAR文件,或WAR文件解压后对应的目录(这里称为应用目录)。Context是Host的子容器,每个Host中可以定义任意多的Context元素。
tomcat实现多虚拟主机 1.下载jdk官网地址: https://www.oracle.com/java/technologies/downloads/#java8
1.1安装jdk#cat install_jdk.sh #!/bin/bash DIR=`pwd` JDK_FILE="jdk-8u291-linux-x64.tar.gz" JDK_DIR="/usr/local" color () { RES_COL=60 MOVE_TO_COL="echo -en \033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \033[1;32m" SETCOLOR_FAILURE="echo -en \033[1;31m" SETCOLOR_WARNING="echo -en \033[1;33m" SETCOLOR_NORMAL="echo -en E[0m" echo -n "$2" && $MOVE_TO_COL echo -n "[" if [ $1 = "success" -o $1 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $" OK " elif [ $1 = "failure" -o $1 = "1" ] ;then ${SETCOLOR_FAILURE} echo -n $"FAILED" else ${SETCOLOR_WARNING} echo -n $"WARNING" fi ${SETCOLOR_NORMAL} echo -n "]" echo } install_jdk(){ if ! [ -f "$DIR/$JDK_FILE" ];then color 1 "$JDK_FILE 文件不存在" exit; elif [ -d $JDK_DIR/jdk ];then color 1 "JDK 已经安装" exit else [ -d "$JDK_DIR" ] || mkdir -pv $JDK_DIR fi tar xvf $DIR/$JDK_FILE -C $JDK_DIR cd $JDK_DIR && ln -s jdk1.8.* jdk export JAVA_PATH="`ls /usr/local/jdk1.* -d`/bin/" cat > /etc/profile.d/jdk.sh <2、安装tomcat 2.1 源码包下载及安装color 1 "JDK 安装失败" ; exit; } } install_jdk #bash install_jdk.sh #wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.75/bin/apache-tomcat-8.5.75.tar.gz #tar xvf apache-tomcat-8.5.75.tar.gz -C /usr/local #cd /usr/local/ #ln -s apache-tomcat-8.5.75/ tomcat #echo 'PATH=/usr/local/tomcat/bin:$PATH' > /etc/profile.d/tomcat.sh #chmod +x /etc/profile.d/tomcat.sh #. /etc/profile.d/tomcat.sh 2.2 添加用户 #useradd tomcat -s /sbin/nologin #chown -R tomcat.tomcat /usr/local/tomcat/ #chown -R tomcat.tomcat /usr/local/apache-tomcat-8.5.75/ 2.3 启动tomcat #startup.sh3.配置虚拟主机 3.1 修改server.xml#vim /usr/local/tomcat/conf/server.xml ```bash ...省略 #在最下面添加以下内容3.2 准备数据目录...省略... # mkdir /data/tomcat/webapp{1..3}/ROOT -p # echo "www.a.com" > /data/tomcat/webapp1/ROOT/index.html; echo "www.b.com" > /data/tomcat/webapp2/ROOT/index.html; echo "www.c.com" > /data/tomcat/webapp3/ROOT/index.html # chown -R tomcat.tomcat /data/tomcat/ 重启tomcat # catalina.sh stop # catalina.sh start4、测试[root@8-1 ~]#curl www.a.com:8080 www.a.com [root@8-1 ~]#curl www.b.com:8080 www.b.com [root@8-1 ~]#curl www.c.com:8080 www.c.comnginx实现后端tomcat的负载均衡调度 环境准备 1.安装nginx 参考1.1 2.安装tomcat 参考3.2 3.修改nginx代理cat /apps/nginx/conf/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream tomcat-hosts { server 10.0.0.18:8080; server 10.0.0.28:8080; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location ~* .(jsp|do)$ { proxy_pass http://tomcat-server; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }4.配置tomcat 4.1 配置node1两台后端服务器配置大致相同,下面展示了node1的配置。
vim /usr/local/tomcat/conf/server.xml #添加虚拟主机,并且设置为默认主机 #准备文件目录 #mkdir /data/webapps/ROOT -pv mkdir: created directory '/data' mkdir: created directory '/data/webapps' mkdir: created directory '/data/webapps/ROOT'# vim /data/webapps/ROOT/index.jsp <%@ page import="java.util.*" %>tomcat test node1 On <%=request.getServerName() %><%=request.getLocalAddr() + ":" + request.getLocalPort() %>SessionID = <%=session.getId() %><%=new Date()%>#设置权限 # chown -R tomcat.tomcat /data/webapps/ # systemctl restart tomcat4.2验证在Windows端配置域名解析,然后打开浏览器访问test.node1.org:8080
简述memcached的工作原理 5.1内存分配机制
验证nginx代理应用程序运行需要使用内存存储数据,但对于一个缓存系统来说,申请内存、释放内存将十分频繁,非
5.2 懒过期 Lazy Expiration
常容易导致大量内存碎片,最后导致无连续可用内存可用。
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。memcached不会监视数据是否过期,而是在取数据时才看是否过期,如果过期,把数据有效期限标识为
5.3 LRU
0,并不清除该数据。以后可以覆盖该位置存储其它数据。当内存不足时,memcached会使用LRU(Least Recently Used)机制来查找可用空间,分配给新记录
5.4 集群
使用。Memcached集群,称为基于客户端的分布式集群,即由客户端实现集群功能,即Memcached本身不支
持集群
Memcached集群内部并不互相通信,一切都需要客户端连接到Memcached服务器后自行组织这些节
点,并决定数据存储的节点。



