Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享

一:redis介绍

redis数据库:是一个非关系型数据库。是一个开源的使用C语言编写支持网络,可基于内存可持久化得日志型的数据库。为了保证效率,数据都是缓存在内存中

redis服务器程序是单进程模型,可以在一台服务器上同时启动多个redis进程,实际处理速度完全依靠主进程的执行效率。

那么我们先了解一下关系型数据库与非关系型数据库。

1)关系型数据库:是一个结构化的数据库,创建在关系模型基础上,一般面向记录。它借助于集合代数等数学概念来处理数据库中的数据。SQL语句就是一种基于关系型数据库的语言,用来执行对关系型数据库中数据的检索和操作。

主流的关系型数据库包括:oracle MySQL SQLserver DB2等。

2)非关系型数据库:除主流的关系型数据库以外都是非关系型数据库。

主流的Nosql(非关系型数据库)有:redis Monbd hbase等。

非关系型数据库优势:非关系型,分布式,开源和横向扩展。

2>>>>>>:关系型数据库现有的问题:

1:对数据库高并发读写需求

2:对海量数据高效存储与访问需求

3:对数据库高扩展性与高可用性需求

 

关系型数据库关注在关系上,非关系型数据库关注在存储上

3>>>>>>:redis优点:

(1):具有极高的数据读写速度;数据读取速度最高可达每秒11万次。

(2):支持数据类型丰富;

(3):支持数据持久化,可将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

(4):支持数据备份。

二、如何保持session会话:

在集群系统下实现session统一的有如下几种方案:

1、请求精确定位:sessionsticky,例如基于访问ip的hash策略,即当前用户的请求都集中定位 到一台服务器中,这样单台服务器保存了用户的session登录信息,如果宕机,则等同于单点部 署,会丢失,会话不复制。

2session复制共享:sessionreplication,如tomcat自带session共享,主要是指集群环境下, 多台应用服务器之间同步session,使session保持一致,对外透明。 如果其中一台服务器发生 故障,根据负载均衡的原理,调度器会遍历寻找可用节点,分发请求,由于session已同步,故 能保证用户的session信息不会丢失,会话复制,。 此方案的不足之处: 必须在同一种中间件之间完成(如:tomcat-tomcat之间). session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化 较快时, 性能下降更加显著,会消耗系统性能。这种特性使得web应用的水平扩展受到了限制。 Session内容通过广播同步给成员,会造成网络流量瓶颈,即便是内网瓶颈。在大并发下表现并 不好

3、基于cache DB缓存的session共享

 基于memcache/redis缓存的 session 共享 即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在cache DB中,当 应用服务器发生故障时,调度器会遍历寻找可用节点,分发请求,当应用服务器发现session不 在本机内存时,则去cache DB中查找,如果找到则复制到本机,这样实现session共享和高可用。

三、nginx+tomcat+redis实现负载均衡、session共享

1、实验环境

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第1张图片

2、实验拓扑:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第2张图片

在这个图中,nginx做为反向代理,实现静动分离,将客户动态请求根据权重随机分配给两台tomcat 服务器,redis做为两台tomcat的共享session数据服务器,mysql做为两台tomcat的后端数据库。

3nginx安装配置

使用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现零宕机的 7x24效果。因为将会话存储在Redis中,因此Nginx就不必配置成stick粘贴某个Tomcat方式,这样 才能真正实现后台多个Tomcat负载平衡。

安装nginx:(之前我们有写过怎样安装nginx及各种优化可看之前的博文)

1):先使用yum安装缺少的依赖:

[root@localhost ~]# yum -y install pcre-devel

[root@localhost ~]# yum -y install pcre-devel

2):下载nginx源码包并编译安装:

[root@localhost ~]# tar zxf nginx-1.10.2.tar.gz

[root@localhost ~]#cd nginx-1.10.2/

[root@localhost nginx-1.10.2]# ./configure

[root@localhost nginx-1.10.2]# make && make install

优化nginx程序的执行路径并启动:

[root@localhost nginx-1.10.2]  ln -s /usr/local/nginx1.10/sbin/nginx /usr/local/sbin/

[root@localhost nginx-1.10.2] nginx

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第3张图片

配置nginx反向代理:反向代理+负载均衡+健康探测:

[root@localhost nginx-1.10.2] vim  /usr/local/nginx1.10/conf/nginx.conf

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第4张图片

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第5张图片

重启nginx服务,使修改生效:

[root@localhost nginx-1.10.2] nginx   -s   reload

4、安装部署tomcat应用程序服务器(下载安装tomcat源码包并编译安装)

Tomcat 1 tomcat 2 配置都要相同:

[root@localhost ~]#tar zxf apache-tomcat-8.5.35.tar.gz

将解压生成的文件夹移动到/usr/local/下,并改名为tomcat

 [root@localhost ~]#  mv apache-tomcat-8.5.35 /usr/local/tomcat

 [root@localhost ~]#  cd /usr/local/tomcat/

[root@localhost tomcat ~]# /usr/local/tomcat/bin/startup.sh

 [root@localhost tomcat ~]#  netstat -anput | grep 8080

防火墙规则配置:

[root@tomcat ~]# firewall-cmd --permanent --add-port=8080/tcp

success

[root@tomcat ~]# firewall-cmd --reload

success

按照相同方法在tomcat-2也安装。

打开浏览器分别对tomcat-1和tomcat-2访问测试

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第6张图片

如果想关闭tomcat则运行/usr/local/tomcat7/bin/shutdown.sh命令 好了,大家可以看到访成功。说明我们的tomcat安装完成,下面我们来修改配置文件

[root@tomcat ~]# vim /usr/local/tomcat/conf/server.xml

修改默认虚拟主机,并将网站文件路径指向/web/webapp1,在host段增加context

增加文档目录与测试文件:

[root@tomcat ~]# mkdir -p /web/webapp1

 [root@tomcat ~]# cd /web/webapp1/

[root@ tomcat webapp1]# vi index.jsp

index.jsp内容如下:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第7张图片

停止tomcat运行,检查配置文件并启动tomcat

Tomcat-2节点与tomcat-1节点配置基本类似,只是jvmRoute不同,另外为了区分由哪个节点 提供访问,测试页标题也不同(生产环境两个tomcat服务器提供的网页内容是相同的)。其 他的配置都相同。

用浏览器访问nginx主机,验证负载均衡 第一次访问的结果

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第8张图片

第二次访问的结果:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第9张图片

从上面的结果能看出两次访问,nginx把访问请求分别分发给了后端的tomcat-1和tomcat-2客户端的访问请求实现了负载均衡,sessionid并不一样。所以,到这里我们准备工作就全 部完成了,下面我们来配置tomcat通过redis实现会话保持。

5、安装redis

下载redis源码,并进行相关操作,如下: wget http://download.redis.io/releases/redis-3.2.3.tar.gz

解压安装redis

[root@localhost ~]#tar zxf redis-4.0.14.tar.gz

[root@localhost ~]#cd redis-4.0.14/

[root@localhost redis-4.0.14 ~]# make&& make install

root@localhost redis-4.0.14 ~]#cd utils/

root@localhost utlis~]# ./install_server.sh

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第10张图片

通过上图,我们可以很容易的看出,redis安装到 /usr/local,/usr/local/bin,/usr/local/share,/usr/local/include,/usr/local/lib,/usr/l ocal/share/man目录下。

然后再切换到utils目录下,执行redis初始化脚本install_server.sh,如下:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第11张图片

修改redis配置文件:

[root@localhost utils]# vim /etc/redis/6379.conf

重新启动redis服务:

[root@redis ~]# systemctl restart redis_6379.service

redis配置文件配置完毕后,我们来启动redis并进行简单的操作。如下:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第12张图片

关于redis-cli -h 192.168.1.50 -p 6379 -a 123.com的参数解释 这条命令是说要连接redis服务器,IP192.168. 1.50,端口是6379,密码是123.com keys *是查看redis所有的键值对。

6、配置tomcat session redis同步(回到tomcat两台操作相同)

回到tomcatlib目录下添加:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第13张图片

 

修改tomcatcontext.xml

[root@localhost lib]# vim /usr/local/tomcat/conf/context.xml

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第14张图片

重启tomcat服务:

说明:

maxInactiveInterval="60":session的失效时间

tomcat-2执行和tomcat-1相同的操作

通过浏览器访问http://192.168.1.10/index.jsp测试页

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第15张图片

刷新页面

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第16张图片

可以看出,分别访问了不同的tomcat,但是得到的session却是相同的,说明达到了集群的目的。

查看redis是否有保存session会话:

7tomcat连接数据库:

192.168.1.40作为mysql数据库服务器

[root@db ~]# mysql –u root -p123

mysql> grant all on *.* to javauser@'192.168.1.%' identified by '123.com';

Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> create database javatest;

 Query OK, 1 row affected (0.01 sec)

mysql> use javatest;

Database changed

mysql> create table testdata(id int not null auto_increment primary key,foo varchar(25),bar int);

 Query OK, 0 rows affected (0.02 sec)

插入些数据:

mysql> insert into testdata(foo,bar) values

('lvranbo','123456'),('lrb','654321');

Query OK, 2 rows affected (0.04 sec)

Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from testdata;

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第17张图片

mysql防火墙配置

# firewall-cmd –-permanent –add-port=3306/tcp

# firewall-cmd –reload

配置tomcat服务器连接mysql数据库(回到tomcat)

[root@localhost lib]# vim /usr/local/tomcat/conf/context.xml

保存修改并退出:

[root@tomcat ~]# mkdir /web/webapp1/WEB-INF

[root@tomcat ~]# vi /web/webapp1/WEB-INF/web.xml

添加内容如下:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第18张图片

保存修改并退出,重启tomcat服务(tomcat2相同配置)

[root@tomcat ~]# vim /web/webapp1/test.jsp

添加内容如下:

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第19张图片

通过浏览器访问http://192.168.1.10/test.jsp测试页

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第20张图片

Linux学习笔记--- redis缓存服务器(linux+nginx+mysql+redis+tomcat)实现session会话共享_第21张图片

总结:这篇博文告诉我们session会话如何保持一致性。

你可能感兴趣的:(Linux--各项服务优化)