lamp架构
一、网站的LNMP架构是什么:
L --- linux系统 注意: a selinux必须关闭 防火墙关闭 b /tmp 1777 mysql服务无法启动
N --- nginx服务部署 作用: 处理用户的静态请求 html jpg txt mp4/avi
P --- php服务部署 作用:
-
处理动态的页面请求
-
负责和数据库建立关系
M --- mysql服务部署 (yum会很慢 编译安装会报错) mariadb 作用: 存储用户的字符串数据信息
二、网站的LNMP架构部署
nginx服务 --- ansible一键化部署 修改yum源 mysql服务部署: 第一个历程: 安装数据库软件 yum install mariadb-server mariadb -y
补充: 数据库初始化过程 mysql_install_db --basedir=path The path to the MariaDB installation directory. 指定mysql程序目录 --datadir=path The path to the MariaDB data directory. 指定数据信息保存的目录 --user=mysql 让mysql管理数据目录 700
信息输出内容: 创建数据库的密码信息: PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /application/mysql/bin/mysqladmin -u root password 'new-password' --- 给本地数据库设置密码 /application/mysql/bin/mysqladmin -u root -h web01 password 'new-password' --- 给远程数据库设置密码
第二个历程: 启动数据库服务 systemctl start mariadb.service systemctl enable mariadb.service
第三个历程: 给mysql数据库服务设置密码 mysqladmin -u root password 'oldboy123' --- 设置密码 mysql -u root -poldboy123
PHP服务部署流程:
第一个历程: 更新yum源/卸载系统自带的PHP软件 yum remove php-mysql php php-fpm php-common 更新源 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
第二个历程: 安装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
第三个历程: 编写配置文件 vim /etc/php-fpm.d/www.conf user = www nginx---www group = www PS: 保证nginx进程的管理用户和php服务进程的管理用户保持一致
第四个历程: 启动php服务 systemctl start php-fpm
三、LNMP架构的原理
用户访问网站--->nginx(fastcgi_pass) --FastCGI-->(php-fpm -- wrapper) php (php解析器) ---> mysql(读取或写入)
-
实现LNMP之间建立关系
-
实现nginx + php 建立关系 第一个历程: 编写nginx文件 在blog.conf编写nginx配置文件 在index添加php文件server_name www.yzh123.stop;
location / {
root /html/blog;
index index.php index.html;
}
location ~ \.php$ {
root /html/blog;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
}
}
-
重启nginx服务
第二个历程: 编写动态资源文件 [root@web01 conf.d]# cat /html/blog/test_php.php <?php phpinfo(); ?>
第三个历程: 进行访问测试 blog.oldboy.com/test_php.php
四、实现php + mysql 建立关系 (搭建一个博客网站)
编写php代码文件 [root@web01 blog]# 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()); } ?>
-
部署搭建网站页面(代码上线) 第一个历程: 获取代码信息(git)---使用开源的网站代码 www网站页面: http://www.dedecms.com/ --管理系统 bbs网站页面: http://www.discuz.net/forum.php --论坛 blog网站页面: https://cn.wordpress.org/ --博客 wecenter网站页面: http://www.wecenter.com/?copyright --知乎
第二个历程:将压缩包拉到linux, 将代码解压,将解压后信息放入到站点目录中 tar xf wordpress-5.2.1.tar.gz mv wordpress/* blog
第三个历程: 修改站点目录权限
chown -R www.www blog
第四个历程: 进行网站页面初始化操作 第五个历程: 对数据库服务进行配置 登录数据库:mysql -u root -p123456
创建数据库: create database wordpress;
检查: show databases; 创建数据库管理用户: grant all on wordpress.* to 'wordpress'@'localhost' identified by '123456'; 检查: select user,host from mysql.user
第六个历程: 利用blog网站发布博文
补充:
出现错误01:若后台页面错乱在blog.conf server中添加fastcgi_buffers 256 4k;
参考链接:http://blog.sina.com.cn/s/blog_6ab0cbbe0102w6tb.html
出现错误02:上传图片,主题500报错
参考链接:https://blog.csdn.net/peng2hui1314/article/details/105572626
五、疑问:
上传wordpress主题,报413错误,如何解决?
总结: 第一个历程: 修改nginx配置文件 vim blog.conf server { client_max_body_size 50m; --- 指定用户上传数据的大小限制(默认1M) }
第二个历程: 修改php.ini配置文件 vim /etc/php.ini
upload_max_filesize = 50M --- 使PHP接收用户上传的更大的数据(默认2M)
如何让LNMP架构和存储服务器建立关系
第一个历程: 找出图片存储的目录 01方法: 根据图片链接地址获取图片存储位置 http://blog.oldboy.com /wp-content/uploads/2019/05/meinv-1024x1024.jpg url uri 02方法: 先定位数据存放在站点目录中 find /html/blog -type f -mmin -5 inotifywait -mrq /html/blog
第二个历程: 使web服务器和存储服务器建立关系 检查存储服务是否正常 mount -t nfs 172.16.1.31:/data /mnt
编写存储服务配置文件 vim /etc/exports 添加信息
[root@nfs01 ~]# 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
mkdir /data/{bbs,blog,www}
移出web存储目录文件 mv /html/blog/wp-content/uploads/2021 /tmp
挂载web共享目录 mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads/2021
将web服务器blog存储的数据进行迁移 mv /tmp/2021/ /html/blog/wp-content/uploads/
默认存储服务器无法存储数据: 管理用户无法存储: root_squash --- nfsnobody 普通用户无法存储: no_all_squash 解决: 第一个历程: 修改nfs配置文件,定义映射用户为www useradd www -u 2010 chown -R www /data
第二个历程: 使root用户可以上传数据 sed -ri.bak 's#(sync)#\1,anonuid=2010,anongid=2010#g' /etc/exports
如何让LNMP架构和数据库服务器建立关系
第一个历程: 将web服务器本地数据库数据进行备份 web01 mysqldump -uroot -poldboy123 --all-database >/tmp/web_bak.sql
第二个历程: 将备份数据进行迁移 web01 scp -rp /tmp/web_back.sql 172.16.1.51:/tmp
第三个历程: 恢复数据信息 db01 yum install -y mariadb-server mariadb --安装数据库软件
mysqladmin -u root password '123456' --设置数据库密码
mysql -uroot -p123456 </tmp/web_bak.sql --恢复数据库数据
第四个历程: 修改数据库服务器中数据库用户信息 db01 MariaDB [(none)]> select user,host from mysql.user; +-----------+-----------+ | user | host | +-----------+-----------+ | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | wordpress | localhost | | | web01 | | root | web01 | +-----------+-----------+ 7 rows in set (0.00 sec)
优化: 删除无用的用户信息 delete from mysql.user where user="" and host="localhost"; delete from mysql.user where user="" and host="web01";
添加: 添加新的用户信息 grant all on wordpress.* to 'wordpress'@'172.16.1.%' identified by 'oldboy123'; flush privileges;
第五个历程: 修改web服务器代码文件信息(web01) vim wp-config.php /** MySQL hostname */ define( 'DB_HOST', '172.16.1.51' );
第六个历程: 停止web服务器上数据库服务 systemctl stop mariadb.service systemctl disable mariadb.service --关闭web01数据服务
问题01: 数据库服务没有正确启动: Error establishing a database connection 连接不上3306端口 问题02: PHP服务没有开启,报502错误
-
web01代码信息迁移到web02服务器,并且修改了网站域名无法正确访问 访问新域名会自动跳转到老的域名 方法一: 修改wordpres后台设置信息,将后台中老的域名改为新的域名 方法二: 修改数据库中的一个表, 在表中修改一个和域名有关的条目信息 (update phpmyadmin)
六、(反向代理)负载均衡的概念说明
什么是集群? 完成相同任务或工作的一组服务器 (web01 web02 web03 -- web集群)
什么是负载均衡?
-
实现用户访问请求进行调度分配
-
实现用户访问压力分担
什么是反向代理? 反向代理: 外网 ---> (eth0外网) 代理服务器 (eth1内网) ---> 公司网站服务器web(内网) 外网用户(客户端) --- 代理服务器 (服务端) 代理服务器(客户端) --- web服务器(服务端) 正向代理: 内网(局域网主机) --- (内网)代理服务器(外网) --- 互联网 --- web服务器(日本) FQ的操作
七、准备负载均衡的环境
集群服务器部署: PS: 集群中每天服务器的配置一模一样 企业中:
-
先部署好一台LNMP服务器,上传代码信息
-
进行访问测试
-
批量部署多台web服务器
-
将nginx配置文件进行分发
-
将站点目录分发给所有主机 教学中:
-
将web01作为模板主机克隆 sed -i 's#.7#.8#g' /etc/sysconfig/network-scripts/ifcfg-eth[01] hostnamectl set-hostname web02 systemctl restart network 利用手动方式实现负载均衡: mount -t nfs 172.16.1.31:/data/blog /html/blog/wp-content/uploads/
修改hosts主机地址和域名映射文件
负载均衡服务器部署: 第一个历程: 安装部署nginx软件 ....
第二个历程: 编写nginx负载服务配置文件 ngx_http_upstream_module --- upstream 负载均衡 OK ngx_http_proxy_module --- proxy_pass 反向代理
cp nginx.conf{,.bak}
grep -Ev '^$|#' nginx.conf.bak >nginx.conf --美化配置文件
useradd www -u 2010 --创建www用户
vim /etc/nginx/nginx.conf --更改user
vim /etc/nginx/conf.d/lb.conf
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80; --定义可以将请求分配给哪些web服务器
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.oldboy.com;
location / {
proxy_pass http://oldboy; --将请求分配给指定的集群
}
}
useradd www -u 2010 --创建www用户
第三个历程: 实现负载功能测试 搭建集群测试环境: for name in www bbs blog;do echo "$name 10.0.0.7">/html/$name/wenwen.html;done for name in www bbs blog;do echo "$name 10.0.0.8">/html/$name/wenwen.html;done for name in www bbs blog;do echo "$name 10.0.0.9">/html/$name/wenwen.html;done 修改windows解析文件 10.0.0.5 www.oldboy.com blog.oldboy.com bbs.oldboy.com
负载均衡访问网站异常排错思路: 第一步: 负载均衡 测试后端web节点服务器是否能够正常访问 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.7/wenwen.html www 10.0.0.7 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.8/wenwen.html www 10.0.0.8 [root@lb01 conf.d]# curl -H host:www.oldboy.com 10.0.0.9/wenwen.html www 10.0.0.9
第二步: 负载均衡 利用curl命令访问负载均衡服务器 查看两个配置文件
第三步: 打开一个xshell连接 ping www.oldboy.com 第四步: 配置文件编写不正确
八、负载均衡配置模块详细说明
ngx_http_upstream_module --- upstream 实现不同调度功能
-
轮询分配请求(平均)
-
权重分配请求(能力越强责任越重) 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; }
-
实现热备功能(备胎功能) upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80 backup; }
-
定义最大失败次数 健康检查参数 max_fails=5
-
定义失败之后重发的间隔时间 健康检查参数 fail_timeout=10s 会给失败的服务器一次机会
实现不同调度算法
-
rr 轮询调度算法
-
wrr 权重调度算法
-
ip_hash 算法 (出现反复登录的时候)
-
least_conn 根据服务器连接数分配资源
ngx_http_proxy_module --- proxy_pass
-
访问不同的网站地址,不能显示不同的网站页面 (面试题) proxy_set_header Host $host;
-
访问网站用户地址信息无法进行分析统计 (面试题) proxy_set_header X-Forwarded-For $remote_addr;
-
访问负载均衡会出现错误页面,影响用户体验(其中一个web服务器数据缺失) proxy_next_upstream error timeout http_404 http_502 http_403;