Nginx-负载均衡-phpMyAdmin&redis会话共享【实践】
1、会话共享基础
1.1、什么是会话保持
当用户登陆一个网站服务器,网站服务器会将用户的登陆信息存储下来(存储下来的内容叫Session ) ,以保证我们能够一直处于"登陆在线"状态。
1.2、为什么需要会话保持
由于我们使用的是负载均衡轮询机制,会导致用户请求分散在不同的节点,从而造成会话无法保持。
假设用户A,通过负载均衡登陆了网站,此时会话信息存储在A节点,那么当它一刷新,负载均衡会将请求分发给B节点,那么B节点没有用户A的登陆信息,就会提示用户A登陆,当A用户点击登陆时又会将请求分发给C节点,从而造成用户A无法实现会话保持。
1.3、 如何实现会话保持
1、粘性session ︰指Ngnix每次都将同一用户的所有请求转发至同一台服务器上,及Nginx的ip_hash。 2、session复制 :每次session发生变化,就广播给集群中的服务器,使所有的服务器上的session相同。 3、session共享 :缓存session至内存数据库中,使用redis,memcached实现。
4、session持久化 :将session存储至数据库中,像操作数据一样操作session。
2、部署phpMyAdmin
2.1、部署节点
web01 192.168.10.5 web02 192.168.10.7
2.2、部署教程
2.3、确认web01和web02能正常访问phpMyAdmin
2.4、此时由于会话没有共享,要分别登陆各自的
3、Nginx-配置负载均衡
3.1、配置nginx
cat >/etc/nginx/conf.d/phpadmin.cyc.com.conf<<'EOF' upstream phpadmin { server 192.168.10.5:80; server 192.168.10.7:80; } server{ listen 80; server_name phpadmin.cyc.com; location / { proxy_pass http://phpadmin; include proxy_params; } } EOF
# 需要配置会话共享,不然会导致登陆成功,又要登陆一次
4、安装redis
4.1、安装
yum install redis -y
4.2、修改配置
sed -i '/^bind/c bind 0.0.0.0' /etc/redis.conf
4.3、启动redis
systemctl enable redis
systemctl start redis
5、PHP配置
主要修改php web01 \ web02
5.1、php安装redis插件
5.2、修改会话共享至redis
php.ini
]# vi /usr/local/php/etc/php.ini session.save_handler = redis session.save_path = "tcp://192.168.10.8:6379" # 如果redis设置密码配置方法 # session.save_path = "tcp://192.168.10.8:6379?auth=password"
php-fpm 如果有配置的话,就注释掉即可 ]# vi /usr/local/php/etc/php-fpm.d/www.conf ;session.save_handler = file ;session.save_path = "/tmp"
5.3、重启php-fpm
systemctl restart php-fpm
6、测试集群会话共享
6.1、登陆phpMyAdmin
6.2、查询redis数据
]# redis-cli 127.0.0.1:6379> KEYS * 1) "PHPREDIS_SESSION:b4bc0698t844sb6d8g7kh7ld9j"
6.3、小结
Cookie的值与redis的值一致,说明会话已经共享成功