集群架构-web服务器(接入负载均衡+数据库+会话保持redis)--15454核心配置详解

紧接着前面的集群架构深化---中小型公司(拓展到大型公司业务)--下面图简单回顾一下之前做的及故障核心知识总结(等后期完全整理后,上传资源希望能帮大家)


web集群架构-接入负载均衡部署web02服务器等

web集群-搭建web02节点

dart 复制代码
[root@web02 ~]#yum install php


[root@web01 ~]#cd /etc/nginx/conf.d/
[root@web01 /etc/nginx/conf.d]#ll
-rw-r--r-- 1 root root  581 6月   5 20:58 blog.wulinlinux.cn.conf
-rw-r--r-- 1 root root  321 5月  26 10:42 buy.wulinlinux.cn.conf
-rw-r--r-- 1 root root  236 6月   4 18:53 cfg.wulinlinux.cn.conf
-rw-r--r-- 1 root root 1072 4月  24 02:24 default.conf
-rw-r--r-- 1 root root  151 5月  26 10:43 hs.wulin.cn.conf
-rw-r--r-- 1 root root  262 6月   3 20:37 proxy.wulinlinux.cn.conf
-rw-r--r-- 1 root root  111 5月  26 10:44 wy.wulinlinux.cn.conf

[root@web01 /etc/nginx/conf.d]#cd /etc/php
php.d/     php-fpm.d/ php-zts.d/ 
[root@web01 /etc/nginx/conf.d]#cd /etc/php-fpm.d/
[root@web01 /etc/php-fpm.d]#ll
总用量 20
-rw-r--r-- 1 root root 17964 6月   5 20:54 www.conf

[root@web01 /etc/php-fpm.d]#scp www.conf 192.168.65.8:`pwd`
root@192.168.65.8's password: 
www.conf                                                                                                                                  100%   18KB  17.6MB/s   00:00 
dart 复制代码
[root@web01 /etc/php-fpm.d]#cd /app/code/blog/
[root@web01 /app/code/blog]#ll
总用量 232
-rw-r--r--  1 www  www    405 2月   6 2020 index.php
-rw-r--r--  1 www  www  19416 5月  26 15:39 license.txt
-rw-r--r--  1 www  www   7348 5月  26 15:39 readme.html
drwxr-xr-x  3 root root    21 6月   5 21:36 up-content
-rw-r--r--  1 www  www   7387 5月  26 15:39 wp-activate.php
drwxr-xr-x  9 www  www   4096 5月  26 15:39 wp-admin
-rw-r--r--  1 www  www    351 2月   6 2020 wp-blog-header.php
-rw-r--r--  1 www  www   2323 5月  26 15:39 wp-comments-post.php
-rw-rw-rw-  1 www  www   3283 5月  26 14:32 wp-config.php
-rw-r--r--  1 www  www   3328 5月  26 15:39 wp-config-sample.php
drwxr-xr-x  7 www  www     99 5月  27 16:59 wp-content
-rw-r--r--  1 www  www   5638 5月  26 15:39 wp-cron.php
drwxr-xr-x 30 www  www  12288 5月  26 15:39 wp-includes
-rw-r--r--  1 www  www   2502 11月 27 2022 wp-links-opml.php
-rw-r--r--  1 www  www   3927 5月  26 15:39 wp-load.php
-rw-r--r--  1 www  www  50917 5月  26 15:39 wp-login.php
-rw-r--r--  1 www  www   8525 5月  26 15:39 wp-mail.php
-rw-r--r--  1 www  www  28427 5月  26 15:39 wp-settings.php
-rw-r--r--  1 www  www  34385 5月  26 15:39 wp-signup.php
-rw-r--r--  1 www  www   4885 5月  26 15:39 wp-trackback.php
-rw-r--r--  1 www  www   3246 5月  26 15:39 xmlrpc.php
  • 打包代码排除上传目录
dart 复制代码
[root@web01 /app/code/blog]#tar zcf ~/wordpress-no-uploads.tar.gz   .  --exclude=wp-content/uploads/*
[root@web01 /app/code/blog]#tar tf ~/wordpress-no-uploads.tar.gz  |grep uploads
./wp-content/uploads/
[root@web01 ~]#scp wordpress-no-uploads.tar.gz  192.168.65.8:`pwd`

web02:查看并解压到对应的目录

dart 复制代码
[root@web02 ~]#ll
总用量 27752
-rw-------. 1 root root     1588 5月   4 19:50 anaconda-ks.cfg
-rw-r--r--  1 root root 28411082 7月  13 19:14 wordpress-no-uploads.tar.gz
[root@web02 ~]#tar xf wordpress-no-uploads.tar.gz -C /app/code/blog/
[root@web02 ~]#ll /app/code/blog/
总用量 232
-rw-r--r--  1 www  www    405 2月   6 2020 index.php
-rw-r--r--  1 www  www  19416 5月  26 15:39 license.txt
-rw-r--r--  1 www  www   7348 5月  26 15:39 readme.html
drwxr-xr-x  3 root root    21 6月   5 21:36 up-content
-rw-r--r--  1 www  www   7387 5月  26 15:39 wp-activate.php
drwxr-xr-x  9 www  www   4096 5月  26 15:39 wp-admin
-rw-r--r--  1 www  www    351 2月   6 2020 wp-blog-header.php
-rw-r--r--  1 www  www   2323 5月  26 15:39 wp-comments-post.php
-rw-rw-rw-  1 www  www   3283 5月  26 14:32 wp-config.php
-rw-r--r--  1 www  www   3328 5月  26 15:39 wp-config-sample.php
drwxr-xr-x  7 www  www     99 5月  27 16:59 wp-content
-rw-r--r--  1 www  www   5638 5月  26 15:39 wp-cron.php
drwxr-xr-x 30 www  www  12288 5月  26 15:39 wp-includes
-rw-r--r--  1 www  www   2502 11月 27 2022 wp-links-opml.php
-rw-r--r--  1 www  www   3927 5月  26 15:39 wp-load.php
-rw-r--r--  1 www  www  50917 5月  26 15:39 wp-login.php
-rw-r--r--  1 www  www   8525 5月  26 15:39 wp-mail.php
-rw-r--r--  1 www  www  28427 5月  26 15:39 wp-settings.php
-rw-r--r--  1 www  www  34385 5月  26 15:39 wp-signup.php
-rw-r--r--  1 www  www   4885 5月  26 15:39 wp-trackback.php
-rw-r--r--  1 www  www   3246 5月  26 15:39 xmlrpc.php
dart 复制代码
[root@web02 ~]#yum insatll -y nfs-utils
[root@web02 ~]#ll /app/code/blog/wp-content/
总用量 12
-rw-r--r-- 1 www www   28 1月   9 2012 index.php
drwxr-xr-x 4 www www 4096 5月  26 15:39 languages
drwxr-xr-x 3 www www   55 5月  29 15:55 plugins
drwxr-xr-x 6 www www  118 5月  29 15:55 themes
drwxr-xr-x 2 www www    6 5月  27 16:58 upgrade
drwxr-xr-x 3 www www   18 5月  26 14:36 uploads

[root@web02 ~]#ll /app/code/blog/wp-content/uploads/
总用量 0
drwxr-xr-x 3 root root 16 6月   4 20:26 2024
[root@web02 ~]#tree /app/code/blog/wp-content/uploads/
/app/code/blog/wp-content/uploads/
└── 2024
    └── 05
        └── 109951165166142900.jpg

2 directories, 1 file
[root@web02 ~]#cd /app/code/blog/wp-content/uploads/
[root@web02 /app/code/blog/wp-content/uploads]#ll
总用量 0
drwxr-xr-x 3 root root 16 6月   4 20:26 2024
[root@web02 /app/code/blog/wp-content/uploads]#rm -fr 2024/
[root@web02 /app/code/blog/wp-content/uploads]#ll
总用量 0
[root@web02 /app/code/blog/wp-content/uploads]#cd ..
[root@web02 /app/code/blog/wp-content]#ll
总用量 12
-rw-r--r-- 1 www www   28 1月   9 2012 index.php
drwxr-xr-x 4 www www 4096 5月  26 15:39 languages
drwxr-xr-x 3 www www   55 5月  29 15:55 plugins
drwxr-xr-x 6 www www  118 5月  29 15:55 themes
drwxr-xr-x 2 www www    6 5月  27 16:58 upgrade
drwxr-xr-x 2 www www    6 7月  13 19:21 uploads

上面发现挂载的时候,发现不是空的原因是之前所有的文件是从web01上进行copy过来的:

dart[root@web02 复制代码
[root@web02 ~]#tar xf wordpress-no-uploads.tar.gz -C /app/code/blog/
[root@web02 ~]#ll /app/code/blog/wp-content/uploads/
总用量 0
[root@web02 ~]#ll /app/code/blog/
总用量 232
-rw-r--r--  1 www  www    405 2月   6 2020 index.php
-rw-r--r--  1 www  www  19416 5月  26 15:39 license.txt
-rw-r--r--  1 www  www   7348 5月  26 15:39 readme.html
drwxr-xr-x  3 root root    21 6月   5 21:36 up-content
-rw-r--r--  1 www  www   7387 5月  26 15:39 wp-activate.php
drwxr-xr-x  9 www  www   4096 5月  26 15:39 wp-admin
-rw-r--r--  1 www  www    351 2月   6 2020 wp-blog-header.php
-rw-r--r--  1 www  www   2323 5月  26 15:39 wp-comments-post.php
-rw-rw-rw-  1 www  www   3283 5月  26 14:32 wp-config.php
-rw-r--r--  1 www  www   3328 5月  26 15:39 wp-config-sample.php
drwxr-xr-x  7 www  www     99 5月  27 16:59 wp-content
-rw-r--r--  1 www  www   5638 5月  26 15:39 wp-cron.php
drwxr-xr-x 30 www  www  12288 5月  26 15:39 wp-includes
-rw-r--r--  1 www  www   2502 11月 27 2022 wp-links-opml.php
-rw-r--r--  1 www  www   3927 5月  26 15:39 wp-load.php
-rw-r--r--  1 www  www  50917 5月  26 15:39 wp-login.php
-rw-r--r--  1 www  www   8525 5月  26 15:39 wp-mail.php
-rw-r--r--  1 www  www  28427 5月  26 15:39 wp-settings.php
-rw-r--r--  1 www  www  34385 5月  26 15:39 wp-signup.php
-rw-r--r--  1 www  www   4885 5月  26 15:39 wp-trackback.php
-rw-r--r--  1 www  www   3246 5月  26 15:39 xmlrpc.php

[root@web02 ~]#systemctl enable nginx php-fpm
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
[root@web02 ~]#systemctl restart nginx php-fpm
[root@web02 ~]#ps -ef |grep www
apache     2614   2611  0 19:30 ?        00:00:00 php-fpm: pool www
apache     2615   2611  0 19:30 ?        00:00:00 php-fpm: pool www
apache     2616   2611  0 19:30 ?        00:00:00 php-fpm: pool www
apache     2617   2611  0 19:30 ?        00:00:00 php-fpm: pool www
apache     2618   2611  0 19:30 ?        00:00:00 php-fpm: pool www
root       2623   2062  0 19:30 pts/0    00:00:00 grep --color=auto www

web02打开浏览器:

发现如果没有进行挂载,图片将不会存在

文字存在的原因是:写到了数据库;

这时候可以尝试将这个没有显示的图片,换一个页面进行打开发现:

这里没有出现的情况是没有挂载:

dart 复制代码
mkdir -p /app/code/blog/wp-content/uploads
mount -t /nfs 172.16.1.31:/nfs/wordpress/  /app/code/blog/wp-content/uploads/
记得要永久挂载

这时候再刷新页面,图片才能加载出来(图片在nfs服务器存储上面)

web集群lnmp-wordpress(为例)-存储架构图

问题:负载均衡上的nginx用户需不需要也改成www?还是默认就可以?如果不改对内容有没有影响?

不需要改,负载均衡只需要进行做转发(但是一般还是会进行改掉的:方便批量进行管理)

dart 复制代码
[root@lb01 ~]#vim /etc/nginx/conf.d/blog.conf

现在进行访问,不能直接判断是去了web01上,还是web02上(进一步判断:看日志记录、抓包)

dart 复制代码
[root@lb01 ~]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 ~]#systemctl reload nginx
[root@web02 ~]#tail -f /var/log/nginx/blog-access.log 
dart 复制代码
[root@web01 ~]#tail -f /var/log/nginx/blog-access.log

会发现两边都会出现记录:

会话保持

(1)概述

  • 用户的请求,登录的请求,经过负载的均衡后落到后面的web服务器上,登录的状态、信息也会记录在web服务器上,就会导致不通的web服务器上,登录的状态不统一,造成用户频繁需要登录

  • 会话:用户登录状态、购物车状态

  • 目标:如何实现会话保持,会话共享?

(2)cookie vs session

开发中核心概念:知晓cookie与sesion含义,大致区别:

技术点 共同点 区别 其他
cookie 存放用户的信息,登录信息 存放在客户端浏览器 服务器给客户端响应,进行设置set-cookie,未来再次访问携带者cookie访问服务端
session 存放用户的信息,登录信息 存放服务端(文件,数据) 浏览器cookie与服务端的session

浏览器F12查看cookie信息:

(3)会话保持方案-架构设计图

  • 纯粹cookie
  • cookie+session方式 + 统一存放session服务器(会话保持服务器)
  • ip_hash方法
  • 通过redis实现phpmyadmin、kodbox会话共享

部署:phpmyadmin:web页面版本的数据库管理工具,sql语句,php代码

部署流程

流程:

  1. db01服务器:phpmyadmin用户,权限大一些
  2. web服务器:部署代码,传输到另外一个web上
  3. 准备redis环境(db01)
  4. 修改php配置
  5. 接入负载均衡,访问与测试0

a)db准备phpmyadmin的用户

dart 复制代码
grant all on *.* to 'phpmyadmin'@'172.16.1.%' identified by '1';

b)部署代码



下载官方包:

上传到linux中:

dart 复制代码
#查看压缩包格式
[root@web01 ~]#ll phpMyAdmin-5.2.1-all-languages.zip 
-rw-r--r-- 1 root root 15096155 7月  16 13:30 phpMyAdmin-5.2.1-all-languages.zip
dart 复制代码
##解压到当前目录
unzip phpMyAdmin-5.2.1-all-languages.zip 
[root@web01 ~]#mkdir -p /app/code/admin
[root@web01 ~]#mv phpMyAdmin-5.2.1-all-languages/*  /app/code/admin/

浏览器访问admin.wylinlinux.cn出现phpmyadmin报错

问题:

刷新之后重新访问网站:

登录外界数据库发现登录失败:原因是这种登录方式为本地,所以登录会出现下图错误:

默认连接的是本地的数据库,怎么让它连接db01服务器呢?

解决方式:手动创建连接数据库的配置文件

dart 复制代码
cp config.sample.inc.php 
grep -n host config.inc.php
30:$cfg['servers']['$i']['host']='172.16.1.51';


chown -R www.www /var/lib/php/session
ll -d /var/lib/php/session





以上就成功连接到别的数据库:

dart 复制代码
[root@web01 /app/code]#scp -r admin/ 192.168.65.8:`pwd`
[root@web01 /app/code]#cd /etc/nginx/conf.d/
[root@web01 /etc/nginx/conf.d]#scp phpmyadmin.wulinlinux.cn.conf  192.168.65.8:`pwd`
root@192.168.65.8's password: 
phpmyadmin.wulinlinux.cn.conf                                                                                                             100%  592   719.3KB/s   00:00 
[root@web02 ~]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web02 ~]#systemctl  reload nginx
[root@web02 ~]#chown -R www.www /var/lib/php/session


检查语法

dart 复制代码
[root@lb01 /etc/nginx/conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb01 /etc/nginx/conf.d]#systemctl reload nginx.service 

本地解析:

访问浏览器,刷新之后要重新登录:

突然出现报错:

然后我在访问的浏览器前面加上https,然后登录没有报错,但是重新登录又出现报错(反复),

所以这也就模拟成功了myadmin会话保持的问题

3)部署redis

dart 复制代码
yum install -y redis

修改/etc/redis.conf

bind 127.0.0.1  172.16.1.51 # 172.16.1.51本地的网卡的ip



systemctl  enable  --now redis

systemctl  start  redis

ss -lntup |grep redis

安装redis,并且编辑redis文件:

检查语法,过滤端口:

4)lb01服务器配置文件

dart 复制代码
[root@lb01 /etc/nginx/conf.d]#cat phpmyadmin.wulinlinux.cn.conf

upstream phpmyadmin_pools {

   server 10.0.0.7:80;
   server 10.0.0.8:80;  

}

server {

   listen 80;
  server_name phpmyadmin.wulinlinux.cn;

    #error_log
    #access_log
    location / {
        proxy_pass http://phpmyadmin_pools;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

这里模拟为了节省机器,不单独创建一个会话共享的服务器,用db01这个服务器做

5)php配置文件指定会话存放位置

dart 复制代码
[root@web01 ~]#cd /etc/nginx/conf.d/
[root@web01 /etc/nginx/conf.d]#
[root@web01 /etc/nginx/conf.d]#cd /etc/php-fpm.d/
[root@web01 /etc/php-fpm.d]#ll
总用量 20
-rw-r--r-- 1 root root 17964 6月   5 20:54 www.conf
[root@web01 /etc/php-fpm.d]#cp www.conf session.conf
[root@web01 /etc/php-fpm.d]#vim session.conf
[root@web01 /etc/php-fpm.d]#egrep -v '^$|;' session.conf 

创建新的子配置文件:


通知php指定会话保持位置:redis tcp://172.16.1.51:6379

修改/etc/php-fpm.d/www.conf

php_value[session.save_handler] = redis

php_value[session.save_path] = tcp://172.16.1.51:6379

  • session.conf
dart 复制代码
[session]
user = www
group = www
listen = 127.0.0.1:9001
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
verwritten from PHP call 'ini_set'.
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = tcp://172.16.65.7:6379
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache

检查语法:

dart 复制代码
[root@web01 /etc/php-fpm.d]#systemctl reload php-fpm.service #重启

过滤端口:


  • 修改nginx配置文件 ,将admin转发到9001端口的php处理

  • 检查语法,重启

  • 最终的测试:

dart 复制代码
[root@web01 /etc/php-fpm.d]#scp session.conf web02:`pwd`
root@web01's password: 
session.conf                                                                                           100%  766     2.6MB/s   00:00 

[root@web02 ~]#systemctl reload nginx
[root@web02 ~]#chown -R www.www /var/lib/php/session/
[root@web02 ~]#systemctl reload php-fpm.service 

重新登录,不会出现前面反复登录的情况:

session信息写入到了redis(会话共享服务器中):

如果删掉服务端这里的session,将要重新登录,重新进去创建session信息

以上成功测试完成!!!

相关推荐
jump68012 小时前
axios
前端
spionbo12 小时前
前端解构赋值避坑指南基础到高阶深度解析技巧
前端
用户40993225021212 小时前
Vue响应式声明的API差异、底层原理与常见陷阱你都搞懂了吗
前端·ai编程·trae
开发者小天12 小时前
React中的componentWillUnmount 使用
前端·javascript·vue.js·react.js
lcanfly12 小时前
Mysql作业4
数据库·mysql
永远的个初学者13 小时前
图片优化 上传图片压缩 npm包支持vue(react)框架开源插件 支持在线与本地
前端·vue.js·react.js
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ13 小时前
npm i / npm install 卡死不动解决方法
前端·npm·node.js
Kratzdisteln13 小时前
【Cursor _RubicsCube Diary 1】Node.js;npm;Vite
前端·npm·node.js
喜欢踢足球的老罗13 小时前
认证与授权:详解大型系统中用户中心与RBAC的共生关系
数据库·rbac
杰克尼13 小时前
vue_day04
前端·javascript·vue.js