实战案例 : Tomcat9 利用memcached1.6实现会话Cluster (同一主机no sticky 模式)

Posted njsummer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战案例 : Tomcat9 利用memcached1.6实现会话Cluster (同一主机no sticky 模式)相关的知识,希望对你有一定的参考价值。

Tomcat9 利用memcached1.6.15实现no sticky模式的会话Cluster复制和高可用性。 Tomcat9 和 memcached 1.6.15安装在同一台主机(也可以安装在不同主机上,通过网络通信交互数据,考虑到实验的快捷,本次就安装在同一主机上),采用no sticky 模式实现。并编写一个 showmemcached.py 的python程序,直观观测 session 在memcached 内的存放规律。

1. 理解MSM的no sticky工作模式

no sticky工作模式:在t1 Tomcat主机上接到访问请求后,在(t1)本机上不存任何session,只会在后端的m1 和 m2 存放 session (后端一般是由memcached 或 redis搭建),如果 t1 选择了 m2 上为主存放session的位置,同时它也会在m1放同一份session的副本,m1 被标定为 “ bak: ” 。当m1故障了,新session会被写入全部到 m2 上去,同时m1故障发生同时存活在m2上的bak session 会被提升为主,m1修复后 会在其上生成 m2 主session 的一些bak session,同时它会去接收新的session,并以主存放节点工作。

<t1>   <t2>
. \\ / .
. X .
. / \\ .
<m1> <m2>

2. 架构拓扑及主机

实战案例


环境准备:
时间同步,确保NTP或Chrony服务正常运行。
防火墙规则
禁用SELinux
三台主机

3. nginx 反向代理服务器配置

简要说明:实际生成中可以用 Nginx 和 HAPROXY 最为反向代理,本实践中用NGINX来完成。

# 需要关闭防火墙、同时时钟等优化工作,再修改好规划好的主机名称等
[root@nginx08 ]#hostnamectl set-hostname proxy8.shone.cn
[root@nginx08 ]#exit
[root@proxy8 ]#timedatectl set-timezone Asia/Shanghai
[root@proxy8 ]#sed -i s/pool 2.centos.pool.ntp.org iburst/server ntp1.aliyun.com iburst/g /etc/chrony.conf

# 按照规划修改好主机的DNS域名解析 (本次通过修改hosts文件来模拟)
[root@proxy8 ]#cat /etc/hosts
172.16.0.8 proxy8.shone.cn nginx08.shone.cn nginx08
172.16.0.38 t38.shone.cn t38
172.16.0.48 t48.shone.cn t48
[root@proxy8 ]#

# 配置nginx
[root@proxy8 ]#cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events
worker_connections 1024;


http
include /etc/nginx/mime.types;
default_type application/octet-stream;

upstream tomcat-servers
server t38.shone.cn:8080;
server t48.shone.cn:8080;


server
location ~* \\.(jsp|do)$
proxy_pass http://tomcat-servers;



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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;

[root@proxy8 ]#

[root@proxy8 ]#systemctl enable --now nginx
[root@proxy8 ]#systemctl restart nginx
[root@proxy8 ]#

4. 配置后端两台服务器

4.1 配置基础环境

4.1.1 主机 t38

#### t38 的配置过程
[root@CentOS84-IP172-38 ]#hostnamectl set-hostname t38.shone.cn
[root@CentOS84-IP172-38 ]#exit
[root@t38 ]#timedatectl set-timezone Asia/Shanghai
[root@t38 ]#sed -i s/pool 2.centos.pool.ntp.org iburst/server ntp1.aliyun.com iburst/g /etc/chrony.conf
[root@t38 ]#systemctl enable --now chronyd.service
[root@t38 ]#systemctl restart chronyd.service

# 上传必须的软件包和一键安装脚本,快速完成基础环境的配置
[root@t38 ]#cd /data
[root@t38 ]#rz
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring apache-tomcat-9.0.62.tar.gz...
100% 11290 KB 1026 KB/sec 00:00:11 0 Errors
Transferring install_tomcat2022.sh...
100% 3 KB 3 KB/sec 00:00:01 0 Errors
Transferring install-memcached.sh...
100% 1 KB 1 KB/sec 00:00:01 0 Errors
Transferring jdk-8u291-linux-x64.tar.gz...
100% 141539 KB 687 KB/sec 00:03:26 0 Errors

[root@t38 ]#ll /data/
total 152840
-rw-r--r-- 1 root root 11560971 Apr 14 20:12 apache-tomcat-9.0.62.tar.gz
-rw-r--r-- 1 root root 1590 Apr 14 20:17 install-memcached.sh
-rw-r--r-- 1 root root 3104 Apr 14 20:30 install_tomcat2022.sh
-rw-r--r-- 1 root root 144935989 Sep 1 2021 jdk-8u291-linux-x64.tar.gz

# 一键安装 memcached 的脚本
[root@t38 ]#cat /data/install-memcached.sh
#!/bin/bash
MEMCACHED=memcached-1.6.15
INSTALL_DIR=/apps/memcached

if which memcached &>/dev/null ; then
echo -e "\\033[31mYou have installed memcached on your system,please uninstall it first!\\033[0m"
exit 1
fi

yum -y install gcc libevent-devel
wget http://memcached.org/files/$MEMCACHED.tar.gz
tar xvf $MEMCACHED.tar.gz
cd $MEMCACHED/
./configure --prefix=$INSTALL_DIR
make && make install

echo PATH=$INSTALL_DIR/bin:$PATH > /etc/profile.d/memcached.sh
. /etc/profile.d/memcached.sh

useradd -r -s /sbin/nologin memcached

cat > /etc/sysconfig/memcached <<EOF
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
EOF

cat > /lib/systemd/system/memcached.service <<EOF
[Unit]
Description=memcached daemon
Before=httpd.service
After=network.target
[Service]
EnvironmentFile=/etc/sysconfig/memcached
ExecStart=$INSTALL_DIR/bin/memcached -p \\$PORT -u \\$USER -m \\$CACHESIZE -c \\$MAXCONN \\$OPTIONS
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now memcached.service
. /etc/init.d/functions
action "Memcached编译安装成功" || action "Memcached编译安装失败"
[root@t38 ]#


# 一键安装 JDK 和 tomcat 的脚本
[root@t38 ]#cat /data/install_tomcat2022.sh
#!/bin/bash

DIR=`pwd`
JDK_FILE="jdk-8u321-linux-x64.tar.gz"
TOMCAT_FILE="apache-tomcat-9.0.62.tar.gz"
JDK_DIR="/usr/local"
TOMCAT_DIR="/usr/local"

color ()
RES_COL=60
MOVE_TO_COL="echo -en \\\\033[$RES_COLG"
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 jdk* jdk

cat > /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=$JDK_DIR/jdk
export JRE_HOME=\\$JAVA_HOME/jre
export CLASSPATH=\\$JAVA_HOME/lib/:\\$JRE_HOME/lib/
export PATH=\\$PATH:\\$JAVA_HOME/bin
EOF
. /etc/profile.d/jdk.sh
java -version && color 0 "JDK 安装完成" || color 1 "JDK 安装失败" ; exit;



install_tomcat()
if ! [ -f "$DIR/$TOMCAT_FILE" ];then
color 1 "$TOMCAT_FILE 文件不存在"
exit;
elif [ -d $TOMCAT_DIR/tomcat ];then
color 1 "TOMCAT 已经安装"
exit
else
[ -d "$TOMCAT_DIR" ] || mkdir -pv $TOMCAT_DIR
fi
tar xf $DIR/$TOMCAT_FILE -C $TOMCAT_DIR
构建Docker镜像实战之构建Tomcat9.0镜像(RPM一键安装Java环境)

liunx系统虚拟机下安装tomcat9以及访问tomcat案例

Python实战案例,利用OpenCV,实现猫脸检测

实战案例分享:利用Python实现多任务进程

机器学习 视频教程 数据挖掘 实战 开发 应用 算法 案例 R语言

机器学习实战应用案例100篇(十四)-飞蛾扑火优化算法从原理到实战应用案例