文章目录
前言
Session复制是一种通过服务器间传输Session数据,使得每个服务器都拥有全量数据的方法。
Redis 是一個強大的內存數據結構存儲,用作數據庫、緩存和消息代理。
一、环境准备
| 角色 | IP地址 | 主机名 | 说明 |
|---|---|---|---|
| proxy | 192.168.2.5 | proxy | 代理服务器 |
| web1 | 192.168.2.11 | web1 | web服务器 |
| web2 | 192.168.2.12 | web2 | web服务器 |
都关闭防火墙和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共享方案的可行性。
1410

被折叠的 条评论
为什么被折叠?



