使用redis来实现web集群间的session共享


前言

Session复制是一种通过服务器间传输Session数据,使得每个服务器都拥有全量数据的方法。

Redis 是一個強大的內存數據結構存儲,用作數據庫、緩存和消息代理。

一、环境准备

角色IP地址主机名说明
proxy192.168.2.5proxy代理服务器
web1192.168.2.11web1web服务器
web2192.168.2.12web2web服务器

都关闭防火墙和selinux

二、部署LNMP和安装redis(web1和web2不装redis)

这里直接把需要的相关的软件包打包了
通过网盘分享的文件:lnmp_soft.tar.gz
链接: https://pan.baidu.com/s/1u66fYcN5W9x1UvWCAXkTfw 提取码: wv1h
通过网盘分享的文件:redis-4.0.8.tar.gz
链接: https://pan.baidu.com/s/1YaBIhTUemrf-gAigBJpEfg 提取码: 513q

1.下载依赖

yum -y install gcc pcre-devel openssl-devel  php php-fpm php-mysql  mariadb mariadb-server mariadb-devel #安装依赖包

2.安装Nginx

将lnmp包传到虚拟机上然后进行解压

tar -xf lnmp_soft.tar.gz
cd lnmp_soft
tar -xf nginx-1.17.6.tart.gz #这里选择的17版也可以选其他版本但是建议选高版本的
cd nginx-1.17.6

编译安装

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
make && make insatll

3.安装redis

将redis包传到虚拟机上

tar -xf redis-4.0.8.tar.gz
cd redis-4.0.8.tar.gz

编译安装

make && make install 
./utils/install_server.sh

一直回车最后会出现successful,表示安装成功

4.配置nginx.conf

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf
在server模块里插入以下代码段
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

这里做动静分离

三、启动服务(web1和web2一样)

[root@web1 ~]# /usr/local/nginx/sbin/nginx
[root@web1 ~]# systemctl restart mariadb
[root@web1 ~]# systemctl restart php-fpm
[root@web1 ~]# ss -antulp | grep 80
tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=7419,fd=("nginx",pid=7418,fd=6))
[root@web1 ~]# ss -antulp | grep 3306
tcp    LISTEN     0      50        *:3306                  *:*                   users:(("mysqld",pid=7627,fd=14))
[root@web1 ~]# ss -antulp | grep 9000
tcp    LISTEN     0      128    127.0.0.1:9000                  *:*                   users:(("php-fpm",pid=7682,fd=0),("php-fpm",pid=7681,fd=0),("php-fpm",pid=7680,fd=0),("php-fpm",pid=7679,fd=0),("php-fpm",pid=7678,fd=0),("php-fpm",pid=7676,fd=6))

只要端口监听到了对应服务就启动成功了

四、部署测试网站(web1和web2一样)

[root@web1 lnmp_soft]# cd

[root@web1 ~]# cd lnmp_soft/php_scripts/

[root@web1 php_scripts]# tar -xf php-memcached-demo.tar.gz

[root@web1 php_scripts]# cd php-memcached-demo/

[roo@web1 php-memcached-demo]#\cp -r * /usr/local/nginx/html/

这里为了区别web1和web2在index.php和home.php里加入背景颜色进行区别
web1加
web2不用加效果如下
web1
在这里插入图片描述
web2
在这里插入图片描述

五、部署代理服务器

配置nginx.conf

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf

upstream server {
server 192.168.2.11:80;
server 192.168.2.12:80;
}
# 插入在server外

 location / {
            proxy_pass http://server;
            root   html;
            index  index.html index.htm;
        }
#插入在server内

访问192.168.2.5会在web1和web2来回切换

六、session共享

1.安装PHP Redis扩展

[root@web1 ~]# yum -y install php php-devel autoconf automake #安装php支持redis扩展包的依赖
[root@web1 ~]# tar -xf php-redis-2.2.4.tar.gz #解压php支持redis的扩展源码包
[root@web1 ~]# cd phpredis-2.2.4/
[root@web1 phpredis-2.2.4]# phpize  #内部调用autoconf,使用模板生成configure脚本
[root@web1 phpredis-2.2.4]# ./configure --with-php-config=/usr/bin/php-config
[root@web1 phpredis-2.2.4]# make && make install

2.加载php和redis交互的模块

修改php的主配置文件

[root@web1 phpredis-2.2.4]# vim  /etc/php.ini
728 extension_dir = "/usr/lib64/php/modules/"        #指定扩展模块所在的目录
730 extension = "redis.so"                #修改extension_dir为extension,指定具体的模块名redis.so
[root@web1 phpredis-2.2.4]# systemctl restart php-fpm         #重启服务,让php的配置生效
[root@web1 phpredis-2.2.4]# php -m | grep -i redis              #查看php支持redis模块,存在

3.Redis连接

[root@web1 php-memcached-demo]# vim /etc/php-fpm.d/www.conf
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://192.168.2.5:6379?auth=123qqq...A&timeout=2.5&database=0"
#auth即redis服务配置的密码
#database=0 就是0号数据库(默认库)
#Redis 默认启动 16 个逻辑库,编号 0-15:
#指定 database=5 就等价于登录后执行 SELECT 5

重启服务登录

[root@web1 nginx]# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
[root@web1 nginx]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@web1 nginx]# redis-cli

测试:web1输入用户名和密码,提交,刷新页面后,没有回到web2登录页面,而是直接显示web2home页面,即实现了session共享

总结

验证了Redis作为Session共享方案的可行性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值