LNMT: Linux nginx mysql tomcatphp
LNMP: Linux nginx mysql php/pythonhtml
LAMP: Linux apache mysql phppython
做用:可使用架构处理动态请求mysql
Linux:linux
1) 系统安全服务须要关闭 selinux iptablesnginx
2) 确认系统/tmp目录权限 777web
nginx:redis
1) 安装 yum 官方源nginxsql
mysql/maridb:mongodb
1.# 下载安装数据库程序软件 yum install mariadb-server mariadb -y 2.# 启动数据库程序服务进程 systemctl start mariadb.service systemctl enable mariadb.service
启动服务异常: 没法启动服务
缘由: 服务配置文件不正确
\cp /usr/share/mysql/my-small.cnf /etc/my.cnf
数据库特殊的管理命令: SQL语句(库 -- 表 -- 列/行(字段-数据信息))
show databases; --- 查看全部数据库信息
use 数据库名称; --- 切换数据库
show tables; --- 查看库中全部表信息
select * from user;--- 查看表中的数据信息
数据库服务设置登陆密码信息
mysqladmin -uroot password "oldboy123" --- 设置密码或者修改密码
mysql -uroot -poldboy123
错误缘由:数据库没有启动
PHP服务部署 http://php.net/ # 解决yum安装软件冲突问题 yum remove php-mysql php php-fpm php-common # 准备yum安装软件扩展源信息 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 更新yum源以后,新生成的文件信息: webtatic-archive.repo/webtatic.repo/webtatic-testing.repo epel.repo.rpmnew/epel-testing.repo # 利用yum安装PHP相关软件信息 yum install -y 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 # 修改php服务进程管理用户信息(建议修改的用户和nginx worker进程用户一致) vim /etc/php-fpm.d/www.conf 8 user = www 10 group = www # 启动运行php-fpm程序
nginx (fastcgi_pass) -接口fastcgi- (php-fpm进程) php -- php解释器 --> 数据库服务(SQL语句)
增 删 改 查
第一个历程: 创建nginx--php通信过程 1) 编写nginx配置 server { listen 80; server_name blog.oldboy.com; location / { root /html/blog; index index.php index.html; } location ~ \.php$ { root /html/blog; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 2) 进行动态访问测试 vim test_phpinfo.php <?php phpinfo(); ?> 第二个历程: php + mariadb创建联系 编写代码信息 vim test_mysql.php <?php $servername = "localhost"; $username = "root"; $password = "oldboy123"; //$link_id=mysql_connect('主机名','用户','密码'); //mysql -u用户 -p密码 -h 主机 $conn = mysqli_connect($servername, $username, $password); if ($conn) { echo "mysql successful by root !\n"; }else{ die("Connection failed: " . mysqli_connect_error()); } ?>
第一个历程: 下载获取动态网站代码信息 博客网站开源代码: wordpress --- blog.oldboy.com 代码下载地址: https://cn.wordpress.org/download/ 论坛网站开源代码: discuz --- bbs.oldboy.com 代码下载地址: https://www.discuz.net/thread-3796882-1-1.html 官方网站开源代码: dedecms/phpcms --- www.oldboy.com phpcms http://www.phpcms.cn/html/download/phpcms/#content dedecms 知乎网站开源代码: wecenter --- zhihu.oldboy.com 第二个历程: 将代码信息进行上传/修改代码文件权限 chown -R www.www /html/blog/ 第三个历程: 进行网站页面初始化/和网站数据库服务创建链接 建立数据库信息: create database wordpress; 建立管理数据库用户信息: grant all on wordpress.* to 'wordpress'@'localhost' identified by 'oldboy123'; select user,host from mysql.user;
方法一: 修改目录权限信息 chmod o+w /html/blog/wp-content 方法二: 修改目录属主信息(php进程用户信息) chown apache.apache xxx 方法三: 保证nginx程序和php程序进程用户一致 chown nginx和php进程用户 修改php-fpm进程用户信息 vim /etc/php-fpm.d/www.conf 8 user = www 10 group = www
5.2 博客网站如何更改主题
常见错误: 上传数据达到了nginx程序最大限制 413 Request Entity Too Large 如何解决: client_max_body_size 10m; --- 将指令放入到server http location区域中 默认wordpress程序会有上传文件大小限制 vim /etc/php.ini upload_max_filesize = 10M --- 指定最大上传文件大小限制 post_max_size = 10M --- 请求主体最大尺寸 max_execution_time = 300 --- 执行上传数据操做最大执行时间
5.3 利用负载均衡访问网站页面有报错信息 静态页面排错思路
1. 域名解析问题 --> 负载均衡VIP 2.利用lb01访问后端每个节点 curl -v -H host:www.oldboy.com 10.0.0.9 3.检查负载均衡配置 4.检查确认后端节点 nginx.conf 扩展.conf nginx -t eror.log
分离数据库做用: 1) 可让数据进行统一存储 2) 磁盘空间限制问题 分离数据库过程(迁移数据过程) 第一个历程: 部署数据库服务器 yum install -y mariadb mariadb-server systemctl start mariadb.service mysqladmin -uroot password 'oldboy123' 第二个历程: 数据迁移过程 1) 先进行数据备份 mysqldump -uroot -poldboy123 -A >/tmp/mysql_backup.sql 2) 将备份数据传输到新的数据库服务器中 scp/rsync -rp /tmp/mysql_backup.sql 172.16.1.51:/tmp 3) 将备份数据进行还原 mysql -uroot -poldboy123 < /tmp/mysql_backup.sql 第三个历程: 实现网站链接新的数据库 a 修改代码文件链接新的数据库 vim /html/blog/wp-config.php 32 define( 'DB_HOST', '172.16.1.51' ) b 修改数据库用户信息, 容许内网网段地址链接 grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123';
mysql数据库: 备份数据库: 全部数据信息 -转换-> 命令信息(SQL) 恢复数据库: 执行SQL语句 建立库 建立表 添加没有信息 mysql.user: 用户信息记录表 grant 受权操做 ---> 当即生效 insert 插入操做 ---> 不会当即生效 ---> flush privileges(刷新权限) 恢复完数据以后 ---> flush privileges(刷新权限) --> 识别到root用户的密码信息 第一个历程: 在web01服务器上备份数据 第二个历程: 将备份数据传输到51数据库服务器 第三个历程: 在51数据库服务器中安装mariadb服务, 恢复数据 第四个历程: 空密码直接进入数据库,刷新权限 第五个历程: 从新登陆数据 mysql -uroot -poldboy123
6.2 网站数据库链接不上排错问题
1) 检查链接数据库代码文件配置是否正确 mysql -uwordpress -p211314 -h172.16.1.51 2) 修改数据库用户信息 方法一: 容许用户使用 wordpres@'web01' 链接 grant all on wordpress.* to 'wordpress'@'web01' identified by 'oldboy123'; 方法二: 关闭数据库反向解析操做(跳过反向解析过程) delete from mysql.user where user='wordpress' and host='web01'; 删除表信息 flush privileges; vim /etc/my.cnf [mysqld] skip-name-resolve 重启数据库服务
如何让 web + nfs 创建关系 第一个历程: 找出web服务器本地存储数据目录信息 /html/blog/wp-content/uploads 第二个历程: 将存储数据进行迁移保存 mv /html/blog/wp-content/uploads/* /tmp/wordpress_bak/ 第三个历程: 确认存储服务部署完毕 # showmount -e 172.16.1.31 Export list for 172.16.1.31: /data/bbs 172.16.1.0/24 /data/www 172.16.1.0/24 /data/blog 172.16.1.0/24 useradd www -u 1003 chown -R www.www /data/ 第四个历程: web服务器进行挂载存储服务操做 mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads 第五个历程: 还原以前备份数据 mv /tmp/wordpress_bak/* /html/blog/wp-content/uploads/
第一个历程: 修改nginx配置文件信息 server_name blog.oldboy.com blog.oldgirl.com; 第二个历程: 修改代码或数据库信息 第四个历程: 编写DNS域名解析信息 第三个历程: 重启nginx程序服务
01: 对用户访问请求进行调度处理
02:减小web服务器访问压力
硬件方式实现:F5 A10 (厂商培训)
软件方式实现:
nginx:利用网络4层或7层实现负载均衡
Lvs : 利用网络4层功能负载
haproxy : 利用网络4层或7层功能实现负载均衡(功能配置更强大/网站页面图形界面)
对台服务器完成相同的工做(提升网站架构并发处理能力/架构伸缩性更高/架构冗余能力强/架构成本下降)
1):部署软件程序相同
2):部署软件配置相同
3):部署网站代码相同
可让外网用户 -- 访问 --内网主机服务器
外网用户--> nginx(方向代理)--发送给内网web服务器
可让内网主机 --访问 --外网主机服务器
内网用户访问 --代理服务器(正向代理)-->国外网站服务器
第一个历程: 编写配置web集群服务器 www.conf server { listen 80; server_name www.oldboy.com; root /html/www; index index.html; } } rsync -avz /etc/nginx/conf.d/www.conf 172.16.1.7:/etc/nginx/conf.d/ rsync -avz /etc/nginx/conf.d/www.conf 172.16.1.9:/etc/nginx/conf.d/ 第二个历程: 编写站点目录测试文件 web01: echo web01.oldboy.com >/html/www/oldboy.html web02: echo web02.oldboy.com >/html/www/oldboy.html web03: echo web03.oldboy.com >/html/www/oldboy.html 第三个历程: 进行访问测试 [root@oldboyedu ~]# curl -H host:www.oldboy.com 10.0.0.7/oldboy.html web01.oldboy.com [root@oldboyedu ~]# curl -H host:www.oldboy.com 10.0.0.8/oldboy.html web02.oldboy.com [root@oldboyedu ~]# curl -H host:www.oldboy.com 10.0.0.9/oldboy.html web03.oldboy.com 第四个历程: 部署负载均衡服务 更新yum源 yum install -y nginx vim /etc/nginx/nginx.conf upstream 设置负载均衡 upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } proxy 设置反向代理 proxy_pass http://oldboy;
[root@lb01 nginx]# vim /etc/nginx/nginx.conf worker_processes 1; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream oldboy { -------设置负载均衡(此配置不能放在server中) #least_conn; #ip_hash; #server 172.16.1.7:80 max_fails=3 fail_timeout=60s; #server 172.16.1.8:80 max_fails=3 fail_timeout=60s; server 172.16.1.9:80 max_fails=3 fail_timeout=60s; } server { listen 80; server_name localhost; location / { root html; index index.html index.htm; proxy_pass http://oldboy; ---设置反向代理 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } } }
分配后端节点方式方法: 1. 根据能力进行分配用户访问请求 weight --权重 按比例进行权重分配访问资源 upstream oldboy { server 10.0.0.7:80 weight=3; server 10.0.0.8:80 weight=1; server 10.0.0.9:80 weight=2; } 2. 根据后端节点健康状态分配资源 max_fails=3 --- 向有问题的节点发送请求的次数 fail_timeout=5s --- 指定多久之后给用问题节点再次发送请求
注意:在特大并发状况下,后端upstream出现 no live upstream 须要关闭这个 max_fails=0 3. 根据后端节点状态进行热备节点使用 upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80 backup; } 4. 根据后端节点链接数进行分配请求 least_conn 链接数少的多分配请求; upstream oldboy { least_conn; server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } 5. 根据用户源IP地址hash值分配请求 ip_hash; 缺陷: 负载不均 企业不使用了? (企业:session回话共享(缓存))
--- 每次IP同样访问同一个web,不设置的话在登陆wordpress会无线登陆 10.0.0.1 --- 100 0 - 100 web01 wordpress 10.0.0.2 --- 202 负载均衡 101 - 200 web02 wordpress 10.0.0.3 --- 300 201 - 300 web03 wordpress
Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except 第一个功能配置: 通过负载均衡访问网站看到不一样的页面信息 环境准备: 第一个历程: web01-web03服务器配置三个网站文件 第二个历程: 配置站点目录资源 web01 mkdir /html/{www,bbs,blog} -p for name in www bbs blog; do echo "web01 $name.oldboy.com" >/html/$name/oldboy.html;done web02 mkdir /html/{www,bbs,blog} -p for name in www bbs blog; do echo "web02 $name.oldboy.com" >/html/$name/oldboy.html;done web03 mkdir /html/{www,bbs,blog} -p for name in www bbs blog; do echo "web03 $name.oldboy.com" >/html/$name/oldboy.html;done proxy_set_header -- 修改请求头信息 proxy_set_header Host $host; upstream oldboy { 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; proxy_set_header Host $host; } } 第二个功能配置: 让web节点日志中显示真实用户IP地址 proxy_set_header -- 在请求头中添加信息 upstream oldboy { 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; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } } 第三个功能配置: 根据页面显示信息进行健康检查 server { listen 80; server_name localhost; location / { proxy_pass http://oldboy; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout invalid_header http_404; } } 说明: 给用户显示的页面必定是正常的页面信息
补充: 页面出现错误代码如何进行健康检查 location / { root html; index index.html index.htm; proxy_pass http://oldboy; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout invalid_header http_403 http_502; }
扩展proxy模块参数
proxy_buffer_size 设置缓存区大小,默认该缓存区等于
proxy_buffers设置的大小 设置代理服务器,保存用户头信息缓冲区大小
默认:proxy_buffer_size 4k
proxy_buffering 主要实现被代理服务器数据和客户端的请求异步
默认:proxy_buffering on;
proxy_buffers 设置缓存区数量大小,nginx代理的后端服务器获取响应信息会放置到缓存区
默认proxy_buffers 8 4k; 具体取决于平台
proxy_busy_buffers_size 用于设置系统很忙时可使用的proxy_buffers大小
默认:proxy_busy_buffers_size 8K;
*********企业中配置: ********
proxy_buffering off;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
准备环境: 动态集群: web01 uri /dynamic --- 显示页面 dynamic.oldboy.com 静态集群: web02 uri /static --- 显示页面 static.oldboy.com 上传集群: wen03 uri /upload --- 显示页面 upload.oldboy.com web01:
mkdir /html/www/dynamic echo dynamic.oldboy.com >/html/www/dynamic/index.html web02:
mkdir /html/www/dynamic echo static.oldboy.com >/html/www/static/index.html web03:
mkdir /html/www/upload echo upload.oldboy.com >/html/www/upload/index.html 负载均衡服务器配置: upstream dynamic { server 10.0.0.7:80; } upstream static { server 10.0.0.8:80; } upstream upload { server 10.0.0.9:80; } server { listen 80; server_name localhost; location /dynamic/ { proxy_pass http://dynamic; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout invalid_header 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 invalid_header 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 invalid_header http_404; } }
准备环境: iphone iphone web01 iphone.oldboy.com chrome chrome web02 chrome.oldboy.com default default web03 default.oldboy.com web01 echo iphone.oldboy.com > /html/bbs/index.html web02 echo chrome.oldboy.com > /html/bbs/index.html web03 echo default.oldboy.com > /html/bbs/index.html 配置负载均衡服务器: location / { if ($http_user_agent ~* Android) { ---匹配请求头中的user_agent proxy_pass http://iphone; } if ($http_user_agent ~* chrome) { proxy_pass http://chrome; } proxy_pass http://default; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout invalid_header http_404; }
10.0.0.6 - - [14/Nov/2019:14:16:35 +0800] "GET /index.html HTTP/1.0" 200 18 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1" "10.0.0.1"