Redis实现负载均衡后会话保持
会话保持方法
1 .session保存在本地 ---> nfs共享目录
2 .通过程序将session写入数据库 ---> 保存在磁盘
3 .通过程序将session存储在redis ---> 保存在内存数据库
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
环境准备
lb03 10.0.0.5 172.16.1.5 nginx 7层负载均衡 web01 10.0.0.31 172.16.1.31 nginx+php web02 10.0.0.32 172.16.1.32 nginx+php db01 10.0.0.51 172.16.1.51 mariadb redis01 10.0.0.61 172.16.1.61 redis
梳理步骤
1 、lb03 部署 7 层负载均衡代理 web01 web02
2 、db01 部署 Mariadb 授权远程访问用户
3 、web01 部署 phpmyadmin 网站,解析本机 IP 后,访问测试
4 、web02 部署 phpmyadmin 网站,从web01拷贝站点资源,解析本机 IP 后,访问测试
5 、解析 10.0 .0.5 php.myadmin.com 访问测试会话保持失败状态
6 、redis01 部署 redis 实现 session 共享
7 、访问 php.myadmin.com 测试会话保持成功状态
1、配置负载均衡
1 、
vim /etc/yum.repos.d/nginx.repo
[ nginx-stable]
name = nginx stable repo
baseurl = http://nginx.org/packages/centos/$releasever /$basearch /
gpgcheck = 1
enabled = 1
gpgkey = https://nginx.org/keys/nginx_signing.key
module_hotfixes = true
yum -y install nginx
2 、
[ root@lb01 ~]
upstream web {
server 172.16 .1.31:80;
server 172.16 .1.32:80;
}
server {
listen 80 ;
server_name _;
location / {
proxy_pass http://web;
include proxy_params;
}
}
3 、
[ root@lb01 ~]
proxy_set_header HOST $http_host ;
proxy_http_version 1.1 ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 8 8k;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
[ root@lb01 ~]
2、db01 授权远程访问用户
1 、安装mariadb
yum -y install mariadb-server
2 、启动并设置开机启动
systemctl start mariadb
systemctl enable mariadb
3 、设置mariadb用户root密码123456,必须启动数据库
mysqladmin -uroot password '123456'
mysql -u root -p123456
Enter password:
MariaDB [ ( none) ] > grant all on *.* to root@'172.16.1.%' identified by '123456' ;
3、web01 部署 phpmyadmin
部署 Nginx+PHP
yum -y install nginx
systemctl enable nginx
systemctl start nginx
1 、
cat > /etc/yum.repos.d/php.repo << EOF
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
EOF
2 、
yum remove php-mysql-5.4 php php-fpm php-common
3 、
yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
yum -y localinstall *.rpm
4 、
vim /etc/php.ini
upload_max_filesize = 200M
post_max_size = 200M
5 、
vim /etc/php-fpm.d/www.conf
user = www
group = www
6 、
systemctl enable php-fpm
systemctl start php-fpm
部署 phpmyadmin
mkdir -p /code
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
unzip -q phpMyAdmin-4.9.2-all-languages.zip
mv phpMyAdmin-4.9.2-all-languages /code/php
cp /code/php/config.sample.inc.php /code/php/config.inc.php
vim +32 /code/php/config.inc.php
$cfg [ 'Servers' ] [ $i ] [ 'host' ] = '172.16.1.51' ;
chown -R www.www /code
vim /etc/nginx/conf.d/php.myadmin.com.conf
server {
listen 80 ;
server_name php.myadmin.com;
location / {
root /code/php;
index index.php;
}
location ~ \ .php$ {
root /code/php;
fastcgi_pass 127.0 .0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ;
include fastcgi_params;
}
}
[ root@web01 ~]
$cfg [ 'AllowArbitraryServer' ] = true ;
C:\ Windows\ System32\ drivers\ etc\ hosts
10.0 .0.31 php.myadmin.com
php.myadmin.com
phpMyAdmin - Error
Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
session_start( ) : open( SESSION_FILE, O_RDWR) failed: Permission denied ( 13 )
session_start( ) : Failed to read session data: files ( path: /var/lib/php/session)
chown -R www.www /var/lib/php/session/
4、web02 部署 phpmyadmin
部署 Nginx+PHP
yum -y install nginx
systemctl enable nginx
systemctl start nginx
1 、
cat > /etc/yum.repos.d/php.repo << EOF
[php-webtatic]
name = PHP Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
EOF
2 、
yum remove php-mysql-5.4 php php-fpm php-common
3 、
yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
yum -y localinstall *.rpm
4 、
vim /etc/php.ini
upload_max_filesize = 200M
post_max_size = 200M
5 、
vim /etc/php-fpm.d/www.conf
user = www
group = www
6 、
systemctl enable php-fpm
systemctl start php-fpm
部署 phpmyadmin
[ root@web01 ~]
[ root@web01 ~]
[ root@web02 ~]
[ root@web02 ~]
C:\ Windows\ System32\ drivers\ etc\ hosts
10.0 .0.32 php.myadmin.com
php.myadmin.com
5、测试会话保持
C:\ Windows\ System32\ drivers\ etc\ hosts
10.0 .0.5 php.myadmin.com
php.myadmin.com
!Failed to set session cookie. Maybe you are using
HTTP instead of HTTPS to access phpMyAdmin.
6、redis01 部署 redis 实现session共享
部署 Redis
1 )安装redis
yum install -y redis
2 )修改redis配置文件
vim /etc/redis.conf
bind 127.0 .0.1 172.16 .1.61
3 )启动redis
systemctl enable redis
systemctl start redis
4 )配置php将session存储到redis
[ root@web01 ~]
; php_value[ session.save_handler] = files
; php_value[ session.save_path] = /var/lib/php/session
[ root@web01 ~]
session.save_handler = redis
session.save_path = "tcp://172.16.1.61:6379"
session.auto_start = 0
5 )同步php配置至web02
rsync -az /etc/php-fpm.d/www.conf 172.16 .1.32:/etc/php-fpm.d/
rsync -az /etc/php.ini 172.16 .1.32:/etc/
6 )配置完php,重启
systemctl restart php-fpm
7、测试会话保持
C:\ Windows\ System32\ drivers\ etc\ hosts
10.0 .0.5 php.myadmin.com
php.myadmin.com
[ root@redis01 ~]
127.0 .0.1:6379 > keys *
1 ) "PHPREDIS_SESSION:2e0c5f989eb5abfb378f9085cc169caf"
网页访问php.linux.com,按F12,依次点开Application> Cookies> https://php.linux.com
在右边name下面找到HTTPS对应的Value
phpMyAdmin 2e0c5f989eb5abfb378f9085cc169caf