企业级memcache解决session会话共享问题(PHP编译安装的)
一、session共享问题介绍
session主要用于服务端存储用户会话信息,cookie用于浏览器存储用户会话信息。单系统服务session都存在同一个web容器中,例如tomcat中,用户请求都只访问这个容器中的session信息,除非容器挂了,否者不存在session取不到的情况。随着业务的扩展,应用用户的增加,当个容器存放系统应用消耗服务的cup和内存会不断增加,导致应用性能下降。此时考虑用nginx集群做应用的负载均衡请求分发,假设用ngnix集群三个服务,分别用A、B、C表示。按照未做session共享,仍然使用Servlet中HttpSession情景,假设此时访问的是A服务,那么session将存储在A服务中,此处如果A服务宕机,ngnix会将用户的请求分发到B或者C服务,但是B和C服务中没有存A存放的Session信息,那么用户访问的数据将会丢失。为了解决session数据丢失,需要将session共享,主流做法是将session存储在nosql数据库中,例如memcache、redis等。也有很多人通过spring session 实现共享,原理大致一样,下面主要实现了memcache缓存session共享。
二、环境准备
1.三台或四台虚拟机
[root@web01 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
web01 10.0.0.7 #web节点
web02 10.0.0.8 #web节点
lb01 10.0.0.5 #负载均衡
db01 10.0.0.51 #数据库服务和memcache服务端
2.编译安装nginx
第一个里程:下载nginx程序软件包
[root@web01 ~]# wget http://nginx.org/download/nginx-1.14.0.tar.gz
#解压
[root@web01 ~]# tar xf nginx-1.14.0.tar.gz
第二个里程:解决软件依赖问题
[root@web01 ~]# yum install openssl-devel pcre-devel -y
openssl-devel --- 为了让nginx服务可以实现https访问的功能
pcre-devel --- 兼容perl语言的正则表达式(^ shell:以什么开头 perl:^/)
nginx使用时会应用一个参数rewrite 正则表达式信息(perl)
第三个里程:创建worker进程的管理用户组和用户
[root@web01 ~]# groupadd -g 666 www
[root@web01 ~]# useradd -u666 -g666 www
第四个里程:编译安装软件
#编译之前,创建程序目录
[root@web01 ~]# mkdir /application
[root@web01 ~]# cd nginx-1.14.2
#初始化
[root@web01 nginx-1.14.2]# ./configure --prefix=/application/nginx-1.14.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
#进行软件的编译(将各个语言编写代码翻译成系统可以识别的二进制信息)
[root@web01 nginx-1.14.2]# make
#进行编译安装(将软件最终安装到系统中)
[root@web01 nginx-1.14.2]# make install
第五个里程:创建程序软链接
[root@web01 nginx-1.14.2]# ln -s /application/nginx-1.14/ /application/nginx
第六个里程:启动nginx服务
[root@web01 nginx-1.14.2]# /application/nginx/sbin/nginx
3.编译安装PHP
第一个里程:下载软件程序,并上传到虚拟机中
#下载地址
https://www.php.net/
第二个里程:下载依赖包
[root@web01 ~]# yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel libmcrypt-devel mhash mcrypt -y
第三个里程:解压和初始化
#解压并进入解压之后的目录
[root@web01 ~]# tar xf php-5.5.32.tar.gz
[root@web01 ~]# cd php-5.5.32
#初始化
[root@web01 php-5.5.32