略略略
七层负载均衡实现Redis会话共享?------------
1.session 由服务端程序生成, 生成的是 一个 叫 session_ID 的编号。 存储在服务端( 没登录状态 )
2.应用程序Nginx,会将程序生成的Session_ID 回传给 浏览器 ,通过的Header方式 set-cookies
3.浏览器 收到服务端的Session_ID 会将该Session_ID 存储至 Cookies中。
4.当我尝试登陆网站时,输入用户名称 + 用户密码 + Session_ID
5.登陆成功,我们的服务端会存储该 Session 至 本地,并将该sessionID与对应登陆的用户名称捆绑,标记已登陆
6.当浏览器再起发送请求, 还会携带 cookies 中的 Session_ID,服务端校验Session_ID, 比对成功,则会话保持。
实现操作:
1.搭建nginx+web的轮序调度
[root@web01 ~]# unzip phpMyAdmin-5.0.2-all-languages.zip -d /code/ #解压下载软件包
[root@web01 code]# ln -s /code/phpMyAdmin-5.0.2-all-languages/ /code/phpmyadmin #将代码做软连接方便升级
[root@web01 code]# cd /code/phpmyadmin/
[root@web01 phpmyadmin]# cp config.sample.inc.php config.inc.php
[root@web01 phpmyadmin]# vim config.inc.php #编写配置文件
/* Server parameters */
$cfg['Servers'][$i]['host'] = '172.16.1.51'; #告诉软件程序连接的那个数据库
#授权,session_id存放位置
[root@web01 phpmyadmin]# chown -R www.www /var/lib/php/
#Nginx配置文件
[root@web01 code]# cat /etc/nginx/conf.d/phpmyadmin.wyk.com.conf
server {
listen 80;
server_name phpmyadmin.wyk.com;
root /code/phpmyadmin;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@web01 code]# nginx -t
[root@web01 code]# systemctl reload nginx
[root@lb01 ~]# cat /etc/nginx/conf.d/proxy_phpmyadmin.wyk.com.conf
upstream php {
server 172.16.1.7:80;
server 172.16.1.8:80;
}
server {
listen 80;
server_name phpmyadmin.wyk.com;
location / {
proxy_pass http://php;
include proxy_params;
}
}
nginx -t
systemctl restart nginx
2.将存储在本地的Session,让其存储在Redis中
1.安装Redis
[root@db01 ~]# yum install redis -y
2.配置 Redis (这个IP地址是本机的内网IP地址)
[root@db01 ~]# sed -i '/^bind/c bind 127.0.0.1 172.16.1.51' /etc/redis.conf
3.启动Redis
[root@db01 ~]# systemctl start redis
[root@db01 ~]# systemctl enable redis
[root@db01 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 172.16.1.51:6379 0.0.0.0:* LISTEN 8966/redis-server 1
- 修改( web01 web02 ) php程序,将原本存储至本地的SessionID,修改为存储至远程的Redis服务器,所有节点都要做一遍
[root@web02 ~]# vim /etc/php.ini
session.save_handler = redis
session.save_path = "tcp://172.16.1.51:6379?weight=1&timeout=2.5" #连接redis
;session.save_path = "tcp://172.16.1.51:6379?auth=123456&weight=1&timeout=2.5" #redis有密码
#注释php-fpm中控制session存储的路径
[root@web02 ~]# vim /etc/php-fpm.d/www.conf
;php_value[session.save_handler] = files
;php_value[session.save_path] = /var/lib/php/session
重启php-fpm
[root@web02 ~]# systemctl restart php-fpm