一、负载均衡会话保持
当用户访问页面登录后,会在服务器上生成一个session文件,并且返回给浏览器一个session_id内容的cookie,cookie会存在浏览器中,下一次访问cookie会携带session_id来到服务器验证,没有变化则说明是登录状态,不需要重新登录。
在搭建phpmyadmin配置负载均衡的时候,会出现cookie被占用的情况,那是因为session不在一个文件。下面来说说解决方法。
1.seesion共享的方法
1.把seesion文件保存在本地的nfs挂载目录
2.通过程序将seesion写入数据库
3.通过程序将seesion存入redis
2.搭建phpmyadmin
这里搭建phpmyadmin的过程就不多说了,并且两个web服务器配置要一模一样。
这里要注意以下几个地方:
1)配置连接数据库代码,搭建完phpmyadmin要配置数据库为远程的数据库(不能在本地,因为我们要多台服务器共享)
[root@web01 code]# cd phpmyadmin/ [root@web01 phpmyadmin]# cp config.sample.inc.php config.inc.php [root@web01 phpmyadmin]# vim config.inc.php $cfg['Servers'][$i]['host'] = '172.16.1.52';
注意:远程数据库要授权
MariaDB [(none)]> grant all on *.* to root@'172.16.1.%' identified by '123456';
2.给session文件授权
[root@web01 conf.d]# chown -R www.www /var/lib/php/session
二、使用redis实现session共享
1.安装redis
[root@db01 ~]# yum install -y redis
2.配置redis
[root@db01 ~]# vim /etc/redis.conf bind 127.0.0.1 172.16.1.51
3.启动redis
[root@db01 ~]# systemctl start redis
4.配置php服务将session存到redis
[root@web01 conf.d]# vim /etc/php.ini #原内容 session.save_handler = files 需要改为:session.save_handler = redis #原内容 ;session.save_path = "/tmp" 需要改为:session.save_path = "tcp://172.16.1.51:6379"
[root@web01 conf.d]# vim /etc/php-fpm.d/www.conf #注释原内容 ;php_value[session.save_handler] = files ;php_value[session.save_path] = /var/lib/php/session
5.同步配置至web02
因为两台web服务器要一模一样所以要scp推过去(最好不要再配置一遍,防止出错)
[root@web01 conf.d]# scp /etc/php.ini 172.16.1.8:/etc/ root@172.16.1.8's password: php.ini 100% 61KB 1.2MB/s 00:00 [root@web01 conf.d]# scp /etc/php-fpm.d/www.conf 172.16.1.8:/etc/php-fpm.d/ root@172.16.1.8's password: www.conf 100% 18KB 1.1MB/s 00:00 [root@web01 conf.d]#
6.重启php
[root@web01 conf.d]# systemctl restart php-fpm [root@web02 conf.d]# systemctl restart php-fpm
7.查看redis里面的session
[root@db01 ~]# redis-cli 127.0.0.1:6379> 127.0.0.1:6379> keys * 1) "PHPREDIS_SESSION:1c222f693e1ab3ae2b9a688f00a40531" 127.0.0.1:6379>