老男孩教育61期--week16--网站架构(LNMP)/负载均衡/高可用
01. 课程介绍部分:
1. LNMP架构配置过程
2. LNMP架构代码上线
3. LNMP架构优化部署
a 数据库数据信息迁移
b 将数据信息共享存储
4. LNMP架构安全访问
5. LNMP网页伪静态访问
6. 负载均衡服务(nginx)
如何进行配置
7. 负载均衡指令模块
8. 实现架构动静分离
9. 实现不同客户端显示不同页面
02. 知识重点回顾:
1. nginx网站服务状态监控功能
2. nginx网站日志信息配置
3. nginx网站页面跳转功能 rewrite url -- url uri -- uri 伪静态
四种跳转方式: last break redirect permanent
4. nginx网站地址匹配功能 =(匹配uri精确路径信息) ~ ~* ^~ // /
= / = /路径/文件信息.jpg
5. nginx网站页面安全访问 HTTPS 私钥(openssl)-->csr--->CA申请
6. 网站特殊架构LNMP架构 实现访问动态资源
03. LNMP架构配置过程
01. 配置nginx文件 (nginx--php建立连接)
vim blog.conf
[root@web01 conf.d]# cat blog.conf
server {
listen 80;
server_name blog.oldboy.com;
location / {
root /html/blog;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /html/blog;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; --- fastcgi内置变量记录文件
}
}
nginx -- /html/blog/test_info.php --- /html/blog/test_info.php --- php
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
编写动态页面:
cd /html/blog
echo "" > /html/blog/test_info.php
02. PHP -- mysql
mysqladmin -uroot password "oldboy123" --- 给数据库设置密码
mysql -uroot -poldboy123
03. 实现代码上线
第一个历程: 获取代码信息
第二个历程: 将代码解压放置站点目录中
第三个历程: 调整站点目录数据权限
chown -R www.www blog/ --- 属主为nginx worker进程用户
vim /etc/php-fpm.d/www.conf
user = www
group = www
第四个历程: 进行网站页面初始化配置
创建数据库:
show databases; --- 查看数据库信息
create database wordpress; --- 创建数据库
创建数据管理用户:
grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123';
select user,host from mysql.user;
413 Request Entity Too Large --- 上传的数据大于程序默认大小
client_max_body_size 5m; --- 设置请求主体最大尺寸
04. 数据库如何进行迁移
第一个历程: 备份数据库
mysqldump -uroot -poldboy123 -A >/tmp/backup.sql
第二个历程: 将数据进行传输
scp -rp /tmp/backup.sql 172.16.1.51:/tmp
第三个历程: 恢复数据
mysql -uroot -poldboy123 就说明你已经进入到mysql数据库里了。
4、进数据库后,use mysql //选择mysql这个库,因为mysql的root密码存放在这个数据库里。
5、show tables //查看下mysql库里有哪些表,我们需要操作的用户名密码都在user表里。
6、desc user //查看下user表有哪些字段。
7、update user set password=password('123456') where user="root"; //用户选root,可以随便更改成任意密码,我这里设置的123456,password()是mysql密码加密的一个函数。
有些数据要执行update user set authentication_string=password('coship') where user="root";才行
8、flush privileges; //刷新下密码,使更改的生效。
9、exit //退出数据库。
10、退出数据库,重新登录
mysql -uroot -p //回车输入刚刚更改的密码,就能进去了。
然后再次进入配置文件vi /etc/my.cnf 把skip-grant-tables去掉。
05. 如何实现数据共享存储
第一个历程: 确认数据本地存储位置
方式一: 复制图片地址
http://blog.oldboy.com/wp-content/uploads/2019/07/1_oldboy01-300x300.jpg
方式二: 利用命令操作
inotify + rsync --> 脚本
inotify + rsync --> sersync 实时同步
inotifywait -mrq /html/blog
find /html/blog/ -type f -name "oldboy02*" -mmin -3
本地存储目录--blog
/html/blog/wp-content/uploads/ --- 存储服务挂载点
第二个历程: 将本地存储数据进行移动备份
mv /html/blog/wp-content/uploads/* /tmp/blog_backup/
第三个历程: 实现存储目录挂载操作
mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads
第四个历程: 还原原来数据
mv /tmp/blog_backup/* /html/blog/wp-content/uploads/
第五个历程: 检查测试
06. LNMP架构安全访问:
第一个历程: 创建私钥和证书信息
第二个历程: 编写配置文件 blog.conf
# cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.com;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name blog.oldboy.com;
client_max_body_size 5m;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
location / {
root /html/blog;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /html/blog;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
07. 实现blog网站伪静态配置
第一个历程: 修改网站后台设置
设置---固定链接---自定义结构
/%post_id%.html
第二个历程: 编写nginx配置文件
[root@web01 html]# cat /etc/nginx/conf.d/blog.conf
server {
listen 80;
server_name blog.oldboy.com;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
server_name blog.oldboy.com;
client_max_body_size 5m;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
rewrite /wp-admin$ $scheme://$host$uri/ permanent; --- 伪静态地址信息重写
location / {
root /html/blog;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php?$args==$uri; --- 访问伪静态页面
}
location ~ \.php$ {
root /html/blog;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
08. 反向代理负载均衡服务概述
集群: 一群完成相同工作的服务器 服务软件相同 配置文件信息相同
作用: 1. 提高服务器处理能力 2. 价格有保证 3. 冗余能力
分类: 1. 负载均衡集群--lb 2. 高可用集群 3. 高性能运算集群 (沈阳飞机 南京地质勘探)
负载均衡:
1. 实现用户访问请求进行调度处理
2. 实现访问压力负载分担
反向代理(中介): lvs 负载均衡 数据转发(外包)
用户 -- 负载均衡 --- web服务器 反向代理 外网主机 --- 互联网 --- 主机(中介) --- 内网服务器
<-- <--
用户 -- 正向代理 --- 网站服务器(google) 正向代理 内网主机 --- 互联网 --- 主机(中介) --- 外网服务器 翻墙
09. 反向代理负载均衡配置过程
环境准备
lb01 负载均衡服务器 10.0.0.5
web01 web集群服务器 10.0.0.7
web02 web集群服务器 10.0.0.8
web03 web集群服务器 10.0.0.9
第一个历程: web服务器进行环境配置
配置文件内容: www.conf
server {
listen 80;
server_name www.oldboy.com;
location / {
root /html/www/;
index index.html;
}
}
#web01
mkdir /html/www/ -p
echo "web01 www.oldboy.com" >/html/www/oldboy.html
#web02
mkdir /html/www/ -p
echo "web02 www.oldboy.com" >/html/www/oldboy.html
#web03
mkdir /html/www/ -p
echo "web02 www.oldboy.com" >/html/www/oldboy.html
第二个历程: 在负载均衡服务器上进行测试
[root@lb01 ~]# curl -H host:www.oldboy.com 10.0.0.7/oldboy.html
web01 www.oldboy.com
[root@lb01 ~]# curl -H host:www.oldboy.com 10.0.0.8/oldboy.html
web02 www.oldboy.com
[root@lb01 ~]# curl -H host:www.oldboy.com 10.0.0.9/oldboy.html
web03 www.oldboy.com
第三个历程: 负载均衡配置部署
upstream --- 负载均衡模块
proxy_pass --- 反向代理模块
[root@lb01 nginx]# cat nginx.conf
user www;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
keepalive_timeout 0;
upstream oldboy { --- 定义可以进行负载的web节点信息
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://oldboy; --- 反向代理将请求发送给指定集群
}
}
}
第四个历程: 进行访问测试
DNS解析
10.0.0.5 www.oldboy.com
10. 负载均衡模块详细说明: upstream 负载均衡模块
Syntax: upstream name { ... }
Default: —
Context: http
upstream backend {
server backend1.example.com weight=5;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server unix:/tmp/backend3;
server backup1.example.com backup;
}
upstream模块功能参数:
1) weight: 权重参数
可以实现权重轮训分配资源, 默认是轮训分配资源
upstream oldboy {
server 10.0.0.7:80 weight=3;
server 10.0.0.8:80 weight=2;
server 10.0.0.9:80 weight=1;
}
2) least_conn: 按照节点连接数分配资源
upstream oldboy {
least_conn;
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
3) ip_hash: 确保一个用户多次访问, 负载均衡都会分配给相同web节点 了解
用户01(100人): 10.0.0.1 --- 001 web01
用户02: 11.0.0.1 --- 011 web02
用户03: 12.0.0.1 --- 112 web03
000 ~ 150
000 ~ 050 --> web01 100
051 ~ 100 --> web02
101 ~ 150 --> web03
负载不均情况
优选:
用户01 --> web01(缓存客户端 memcache-php) 用户01登录信息
用户02 ---> lb01 --> web02(缓存客户端 memcache-php) 用户02登录信息 --> 缓存服务器 memcached (会话记录)
用户03 --> web03(缓存客户端 memcache-php) 用户03登录信息 session会话共享服务器
upstream oldboy {
ip_hash;
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
4) 负载均衡节点健康检查
max_fails=3 --- 最大的失败次数 lb01 --- http请求 --- web02
fail_timeout=30s --- 失败超时时间
请求 --- web01 1次失败 2次失败 3次失败 1次失败 30s
请求 --- web02 1次成功
upstream oldboy {
server 10.0.0.7:80 max_fails=10 fail_timeout=60s;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
5) 节点备份功能
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80 backup;
}
11. 反向代理模块详细说明: proxy 反向代理模块
proxy_pass: 反向代理指令
proxy_set_header: 设置请求头信息
01. 访问负载均衡可以显示不同网站页面
proxy_set_header Host $host;
02. 使网站节点日志可以记录真实IP地址
proxy_set_header X-Forwarded-For $remote_addr;
03. 检查网站页面是否正确
proxy_next_upstream error timeout http_404;
location / {
proxy_pass http://oldboy;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404;
}
12. 反向代理负载均衡企业应用
1) 网站服务动静分离
上传集群 upload 10.0.0.7 web01 uri==upload index.html upload page
静态集群 static 10.0.0.8 web02 uri==static index.html static page
默认集群 default 10.0.0.9 web03 uri index.html default page
第一个历程: 部署web集群服务
#web01:
mkdir /html/www/upload/
echo "upload page" >/html/www/upload/index.html
#web02
mkdir /html/www/static/
echo "static page" >/html/www/static/index.html
#web03
echo "default page" >/html/www/index.html
第二个历程: 编写负载均衡配置
[root@lb01 nginx]# cat nginx.conf
user www;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
keepalive_timeout 0;
upstream upload {
server 10.0.0.7:80;
}
upstream static {
server 10.0.0.8:80;
}
upstream default {
server 10.0.0.9:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://default;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404;
}
location /upload/ {
proxy_pass http://upload;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404;
}
location /static/ {
proxy_pass http://static;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404;
}
}
}
2) 网站服务根据客户端显示不同页面
iphone --> wap集群 web01 index.html iphone page
Chrome --> web集群 web02 index.html chrome page
other --> default 集群 web03 index.html default page
第一个历程: 部署web集群服务
web01:
echo iphone page > /html/www/index.html
web02:
echo chrome page > /html/www/index.html
web03:
echo "default page" >/html/www/index.html
第二个历程: 修改负载均衡配置文件
[root@lb01 nginx]# cat nginx.conf
user www;
worker_processes 2;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
keepalive_timeout 0;
upstream iphone {
server 10.0.0.7:80;
}
upstream chrome {
server 10.0.0.8:80;
}
upstream default {
server 10.0.0.9:80;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://default;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_next_upstream error timeout http_404;
if ($http_user_agent ~* iphone) {
proxy_pass http://iphone;
}
if ($http_user_agent ~* Chrome) {
proxy_pass http://chrome;
}
}
}
}
13. 课程知识总结
1. LNMP架构部署配置:
a nginx-php建立关系
b php-mysql建立关系 代码
2. LNMP架构代码上线
a 下载代码文件, 上传到站点目录
b 对代码数据信息进行授权
c 进行网站页面初始化
d 创建网站数据 登录数据库用户/密码
3. 数据库迁移过程
4. 数据共享存储
01. 本地存储目录信息
02. 和存储目录进行挂载
5. 网站页面安全访问 HTTPS
6. 网站页面伪静态配置 开发人员配合
7. 网站负载均衡功能 集群 负载均衡 反向代理
8. 负载均衡服务部署 lvs haproxy
upstream 负载均衡模块 详细说明
proxy 反向代理模块 详细说明
9. 负载均衡服务企业应用
a 企业架构动静分离
b 根据用户客户端显示不同页面
作业:
- 部署好LNMP架构 部署好负载均衡
访问wordpress --- 负载均衡(https信息) --- web01/web02/web03 服务端口80
http访问 --- https访问 - 如何部署www网站 bbs网站 zhihu网站
- 高可用服务 zabbix/防火墙