紧接着前面的集群架构深化---中小型公司(拓展到大型公司业务)--下面图简单回顾一下之前做的及故障核心知识总结(等后期完全整理后,上传资源希望能帮大家)
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
![](https://i-blog.csdnimg.cn/direct/53b518636c6146268f123f892c4ebacc.png)
web02打开浏览器:
发现如果没有进行挂载,图片将不会存在
![](https://i-blog.csdnimg.cn/direct/c91639e3b2864f3e8cf4c00729afd086.png)
文字存在的原因是:写到了数据库;
这时候可以尝试将这个没有显示的图片,换一个页面进行打开发现:
这里没有出现的情况是没有挂载:
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(为例)-存储架构图
![](https://i-blog.csdnimg.cn/direct/ffb8aeac51034d4690c2a3cd67687519.png)
问题:负载均衡上的nginx用户需不需要也改成www?还是默认就可以?如果不改对内容有没有影响?
不需要改,负载均衡只需要进行做转发(但是一般还是会进行改掉的:方便批量进行管理)
dart
[root@lb01 ~]#vim /etc/nginx/conf.d/blog.conf
![](https://i-blog.csdnimg.cn/direct/f378bb30ac4442ad994db77f355bd1cb.png)
现在进行访问,不能直接判断是去了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
![](https://i-blog.csdnimg.cn/direct/c15100285011495a990a716e118c094c.png)
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)会话保持方案-架构设计图
![](https://i-blog.csdnimg.cn/direct/7e468f88d7d241539f013e844993a39a.png)
- 纯粹cookie
- cookie+session方式 + 统一存放session服务器(会话保持服务器)
- ip_hash方法
- 通过redis实现phpmyadmin、kodbox会话共享
部署:phpmyadmin:web页面版本的数据库管理工具,sql语句,php代码
部署流程
流程:
- db01服务器:phpmyadmin用户,权限大一些
- web服务器:部署代码,传输到另外一个web上
- 准备redis环境(db01)
- 修改php配置
- 接入负载均衡,访问与测试0
a)db准备phpmyadmin的用户
dart
grant all on *.* to 'phpmyadmin'@'172.16.1.%' identified by '1';
![](https://i-blog.csdnimg.cn/direct/229696a6a0cd485eb511105dfc8caaa2.png)
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
![](https://i-blog.csdnimg.cn/direct/887e10f275e14b41b5425ecf16dd6a9f.png)
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/
![](https://i-blog.csdnimg.cn/direct/c9dd003da99e4f40b3bf1cec86baf440.png)
浏览器访问admin.wylinlinux.cn出现phpmyadmin报错
![](https://i-blog.csdnimg.cn/direct/df5dca2aad654428aeb4ceef88f08e55.png)
问题:
刷新之后重新访问网站:
登录外界数据库发现登录失败:原因是这种登录方式为本地,所以登录会出现下图错误:
默认连接的是本地的数据库,怎么让它连接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://i-blog.csdnimg.cn/direct/fdb3f4f9ddce41f2812a02b9a665b38f.png)
然后我在访问的浏览器前面加上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
![](https://i-blog.csdnimg.cn/direct/a825a60583ce443ea26ab5f7efc30da1.png)
修改/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信息
![](https://i-blog.csdnimg.cn/direct/3126c4e54ee04f1caabffb6777e500b8.png)
以上成功测试完成!!!