文章目錄
- 一、LNMP架構基本概念
- 1.1 什么是LNMP
- 1.2 LNMP實作程序
- 1.3 LNMP實作細節
- 二、LNMP架構環境安裝
- 2.1 nginx安裝
- 2.2 php安裝
- 2.3 MySQL安裝
- 三、LNMP架構環境配置
- 3.1 Fastcgi代理語法
- 3.2 Nginx集成PHP
- 3.3 PHP集成MySQL
- 四、LNMP架構在單臺主機上部署開源產品
- 4.1 部署開源知乎產品Wecenter
- 4.2 部署開源博客系統wordpress
- 4.3 部署相親站點OElove
- 4.4 部署商城網站ShopXO
- 五、LNMP架構多臺主機部署開源專案
- 5.1 拆分資料庫至獨立服務器
- 5.2 資料庫拆分架構演變
- 5.3 環境準備
- 5.4 資料庫實作步驟
- 5.4.1 web服務操作如下
- 5.4.2 資料庫服務器db01操作如下
- 5.6停止web01上的資料庫服務,讓它不在提供資料庫服務,啟用新的資料庫
- 5.7 修改web01上部署的專案代碼,讓其指向新資料庫db01
- 六、擴展多臺相同的Web服務器組成web集群
- 6.1 為何要擴展多臺web節點
- 6.2 擴展多web節點架構演變
- 6.3 擴展多web節點環境準備
- 6.4 擴展多臺web節點實作步驟
- 6.4.1 創建相同用戶身份便于運行行程
- 6.4.2 安裝nginx
- 6.4.3 安裝php
- 6.4.4 nginx與php配置匯入
- 6.4.5 將web01 上部署的所有代碼打包上傳到web02
- 6.4.6 在web02上啟動nginx與php并加入開機自啟
- 6.4.7 修改本地hosts檔案,瀏覽器訪問測驗,
- 七、拆分靜態資源至獨立服務器
- 7.1 為何要拆分靜態資源
- 7.2 拆分靜態資源架構演變
- 7.3 增加共享存盤nfs環境準備
- 7.4 共享存盤實作步驟
- 7.4.1 配置nfs 建議另外配置硬碟
- 7.4.2 匯入靜態資源至共享存盤
- 八、展節點帶來的新問題
一、LNMP架構基本概念
1.1 什么是LNMP
- LNMP 是一套技術的組合,L=Linux、N=Nginx、M=[MySQL8.0|Mariadb5.5]、P=[PHP|Python]
- nginx僅支持決議html檔案;圖片傳輸;視頻傳輸;不支持 php、python、java等腳本檔案
1.2 LNMP實作程序
當用戶請求http://www.bertwu.com/index.php時,對于nginx服務器而言,是無法處理.php這樣的腳本,那么nginx如何配置,才支持這樣的動態請求呢?
第一步:當用戶發起 HTTP 請求,請求首先被 Nginx 接收;
第二步:Nginx 通過預先定義好的 location 規則進行匹配;
第三步:Nginx 將匹配到的動態內容,通過 fastcgi 協議傳到給后端的 php 應用服務處理

1.3 LNMP實作細節
1.用戶首先通過 http 協議發起請求,請求會先抵達Nginx;
2.Nginx 根據用戶的請求進行 Location 規則匹配;
3.Location 如果匹配到請求是靜態,則由 Nginx 讀取本地直接回傳;
4.Location如果匹配到請求是動態,則由Nginx將請求轉發給fastcgi協議;
5.fastgi收到后會將請求交給php-fpm管理行程;
6.php-fpm管理行程接收到后會呼叫具體的worker作業行程, worker行程會呼叫php決議器決議代碼,php決議后直接回傳
7.如果有查詢資料庫操作,則由php連接資料庫(用戶 密碼 IP)發起查詢的操作
8.用戶->http->nginx->fastcgi->php-fpm->php->tcp->mysql
9.最終資料由mysql->tcp->php->php-fpm->fastcgi->nginx->http->user

二、LNMP架構環境安裝
2.1 nginx安裝
1.使用官方倉庫安裝Nginx
詳見:nginx安裝
2.配置 Nginx 行程運行用戶
[root@web01 nginx]# groupadd -g 666 www
[root@web01 nginx]# useradd -u 666 -g 666 www
[root@web01 nginx]sed -i '/^user/c user www;' /etc/nginx/nginx.conf
3.啟動nginx,并加入開機自啟
[root@web01 nginx]# systemctl start nginx
[root@web01 nginx]# systemctl enable nginx
2.2 php安裝
方式1. 手動新增 repo 檔案,但是速度很慢,建議本地安裝
# 手動配置yum源
[root@oldxu ~]# cat /etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
2.卸載系統中存在的低版本php
[root@web01 ~]# yum remove php-mysql-5.4 php php-fpm php-common
3.安裝高版本的 php
[root@oldxu ~]# yum -y install 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
方式2. 下載包到本地,上傳服務器解壓到~目錄,執行命令(推薦這種方式)
php下載:
鏈接:https://pan.baidu.com/s/1xFqGMSywuY7Pe4CHVETc_Q
提取碼:nlgp
安裝:
[root@web01 ~]# yum localinstall ~/php/*.rpm
4.配置php-fpm用戶與Nginx的運行用戶保持一致
[root@web01 ~]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
[root@web01 ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
5.啟動php-fpm 并將其加入開機自啟
[root@web01 ~]# systemctl start php-fpm
[root@web01 ~]# systemctl enable php-fpm
2.3 MySQL安裝
1.安裝 Mariadb 資料庫
[root@web01 ~]# yum install mariadb-server mariadb -y
2.啟動 Mariadb 資料庫, 并加入開機自動
[root@web01 ~]# systemctl start mariadb
[root@web01 ~]# systemctl enable mariadb
3.查看是否啟動成功
[root@web01 nginx]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 12022/php-fpm: mast
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 12388/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 538/rpcbind
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1353/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 875/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1018/master
tcp6 0 0 :::111 :::* LISTEN 538/rpcbind
tcp6 0 0 :::22 :::* LISTEN 875/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1018/master
[root@web01 nginx]#
可以看到mysql在3306埠,php監聽在127.0.0.1:9000上是為了減少本機隨機埠的損耗,
三、LNMP架構環境配置
在配置 Nginx 與 PHP 集成之前, 我們需要先了解 Nginx 的 Fastcgi 代理配置語法
3.1 Fastcgi代理語法
1.設定 fastcgi 服務器的地址,該地址可以指定為域名或IP地址,以及埠
Syntax: fastcgi_pass address;
Default: —
Context: location, if in location
#語法示例
fastcgi_pass localhost:9000;
2.設定fastcgi默認的首頁檔案,需要結合fastcgi_param一起設定
Syntax: fastcgi_index name;
Default: —
Context: http, server, location
3.通過fastcgi_param設定變數,并將設定的變數傳遞到后端的fastcgi服務
Syntax: fastcgi_param parameter value [if_not_empty];
Default: —
Context: http, server, location
#語法示例
fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
4.通過圖形方式展示fastcgi_index與fastcgi_param作用,

3.2 Nginx集成PHP
1.創建php.conf檔案
[root@web01 ~]# cat /etc/nginx/conf.d/php.conf
server {
listen 80;
server_name php.bertwu.com;
root /code/php;
location / {
index index.php index.html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
2.創建/code目錄修改屬組屬主為www用戶
[root@web01 ~]# chown -R www.www /code
3.創建/code/php/index.php檔案
[root@web01 php]# cat /code/php/index.php
<?php
phpinfo();
?>
[roo
[root@web01 ~]# systemctl reload nginx
4.修改win hosts檔案,然后瀏覽器訪問 http://php.bertwu.com/

3.3 PHP集成MySQL
1.安裝mysql見上文mariadb
2. 為默認用戶root設定密碼
[root@web01 ~]# mysqladmin password '123456'
3.登錄
[root@web01 ~]# mysql -u root -p 123456
MariaDB [(none)]> show databases; # 查看系統默認的庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> use test; # 選擇庫
Database changed
MariaDB [test]> show tables; # 查看test庫中的表
Empty set (0.00 sec)
MariaDB [test]>
4.撰寫php腳本測驗連接mysql資料庫,如果能成功,說明php與mysql的集成環境搭建成功,
[root@web01 ~]# cat /code/php/mysqli.php
<?php
$servername = 'localhost';
$username = 'root';
$password = '123456';
// 創建連接
$conn = mysqli_connect($servername,$username,$password);
// 檢查連接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php連接MySQL資料庫成功";
?>
5.使用 php 命令直接決議檔案
[root@web01 ~]# php /code/php/mysqli.php
php連接MySQL資料庫成功
6.也可以通過瀏覽器訪問 /mysqli.php 檔案,獲取決議結果

四、LNMP架構在單臺主機上部署開源產品
4.1 部署開源知乎產品Wecenter
1.配置Nginx
配置 Nginx 虛擬主機站點,域名為 zh.bertwu.net
[root@web01 conf.d]# cat zh.conf
server {
listen 80;
server_name zh.bertwu.net;
root /code/zh;
location / {
index index.php index.html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2.檢查語法,重新啟動nginx
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
3.下載Wecenter
4. 解壓到/code/zh目錄,并且修改權限
[root@web01 ~]# chown -R www.www /code/zh
5.創建資料庫
由于wecenter產品需要依賴資料庫, 所以需要手動建立資料庫
[root@oldxu ~]# mysql -uroot -p123456
mysql> create database zh;
mysql> exit
6.配置hosts檔案,瀏覽器訪問zh.bertwu.net

4.2 部署開源博客系統wordpress
1.獲取wordpress產品,解壓并部署 wordress
wordpress官網
或者用wget下載
[root@web01 ~]# wget https://cn.wordpress.org/latest-zh_CN.tar.gz
2.解壓到 /code/目錄下,解壓后本身就帶wordpress檔案夾,所以不需要手動創建
[root@web01 ~]# tar -xf latest-zh_CN.tar.gz -C /code
3.授權目前目錄的權限與行程運行身份保持一致,php,nginx服務都應該用相同的(www用戶)身份運行,避免權限過低
[root@web01 ~]# chown -R www.www /code/wordpress/
4.nginx站點配置
[root@web01 conf.d]# cat wordpress.conf
server {
listen 80;
server_name blog.bertwu.net;
client_max_body_size 100m;
root /code/wordpress;
charset utf-8;
location / {
index index.php index.html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
5.檢測語法,并重啟 nginx 服務
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
6.配置MySQL
由于wordpress產品需要依賴資料庫, 所以需要手動建立資料庫
[root@oldxu ~]# mysql -uroot -p123456
mysql> create database wordpress;
mysql> exit
7.配置hosts檔案,瀏覽器訪問blog.bertwu.net

4.3 部署相親站點OElove
1.下載軟體包OElove官網
也可以命令列下載
[root@web01 ~]# wget http://dl.oephp.com/oelove/source/OElove_Free_v8.1.R210428.zip
2.解壓到/code/love目錄(解壓后自己帶了個目錄upload,建議先解壓到/tmp中,然后再手動移動到/code/love中),并修改權限
[root@web01 tmp]# chown -R www.www /code/love
3.配置nginx站點
[root@web01 conf.d]# cat love.conf
server {
listen 80;
server_name love.bertwu.net;
root /code/love;
charset utf-8;
location / {
index index.php index.html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
4.檢測語法,并重啟 nginx 服務
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
5.配置mysql,創建love資料庫
[root@oldxu ~]# mysql -uroot -p123456
mysql> create database love;
mysql> exit
6.配置hosts檔案,瀏覽器訪問love.bertwu.net
根據安裝向導頁面展示的實驗資料地址下載實驗資料,解壓到/code/love目錄中,以便于顯示網站上的圖片,
[root@web01 tmp]# wget http://dl.oephp.com/data/free_data.zip
[root@web01 tmp]# unzip free_data.zip -d /code/love
8.訪問

4.4 部署商城網站ShopXO
1.下載ShopXO官網
也可以命令下載
[root@web01 202108]# wget https://gitee.com/zongzhige/shopxo/repository/archive/v2.1.0.zip
2.解壓到/code/shop目錄,并修改權限
[root@web01 tmp]# chown -R www.www /code/shop
3.配置nginx站點
[root@web01 conf.d]# cat shop.conf
server {
listen 80;
server_name shop.bertwu.net;
charset utf-8;
root /code/shop;
location / {
index index.php index.html;
}
location ~ .*\.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}
4.檢測語法,并重啟 nginx 服務
[root@web01 conf.d]# nginx -t
[root@web01 conf.d]# systemctl restart nginx
5.配置mysql,創建shop資料庫
[root@oldxu ~]# mysql -uroot -p123456
mysql> create database shop;
mysql> exit
6.修改hosts檔案,訪問站點shop.bertwu.net

7.報錯解決方案
/code/shop/runtime/log/當天日期的 .log 檔案中查看錯誤資訊
[ 2021-08-15T14:38:44+08:00 ] 10.0.0.1 GET shop.bertwu.net/admin.php
[ error ] [2]session_start(): open(/var/lib/php/session/sess_0a394ba31263333b5af7cc3459be7dd9, O_RDWR) failed: Permission denied (13)
發現沒有權限,于是可以修改權限
[root@web01 202108]# pwd
/code/shop/runtime/log/202108
[root@web01 202108]# ll -d /var/lib/php/session/
drwxrwx--- 2 root apache 6 Sep 12 2019 /var/lib/php/session/
[root@web01 202108]# chown -R www.www /var/lib/php/session/
8.再次訪問,成功,

五、LNMP架構多臺主機部署開源專案
5.1 拆分資料庫至獨立服務器
為何要拆分資料庫
由于單臺服務器運行 LNMP 架構會導致網站訪問緩慢,當系統記憶體被吃滿時,很容易導致系統出現oom,從而kill掉MySQL資料庫,所以需要將web和資料庫進行獨立部署,
拆分資料庫能解決什么問題
- 緩解web網站的壓力;
- 增強資料庫讀寫性能;
- 提高用戶訪問的速度;
5.2 資料庫拆分架構演變

5.3 環境準備
| 主機名 | 應用環境 | 外網 | 內網 |
|---|---|---|---|
| web01 | nginx+php | 10.0.0.7 | 172.16.1.7 |
| db01 | mysql(mariadb) | 無 | 172.16.1.51 |
5.4 資料庫實作步驟
5.4.1 web服務操作如下
1.備份 web01 上的資料庫
[root@web01 ~]# mysqldump -uroot -p123456 --all-databases > /tmp/data.sql
2.將 web01 上備份的資料庫拷貝至 db01 服務器上
[root@web01 ~]# rsync -avz /tmp/data.sql root@172.16.1.51:/root
或者
[root@web01 ~]# scp /tmp/data.sql root@172.16.1.51:/root
5.4.2 資料庫服務器db01操作如下
1.安裝mariadb資料庫,并加入開機自啟
[root@db01 ~]## yum install mariadb mariadb-server
[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb
[root@db01 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 995/master
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1542/mysqld
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 567/rpcbind
2.將 web01 服務器上推送的資料庫備份檔案恢復至 db01 服務器新資料庫中
[root@db01 ~]# mysql -uroot < /root/data.sql
3.資料庫匯入完成后,重啟資料庫,使用新密碼進行登錄,并檢查資料庫已被匯入成功
[root@db01 ~]# systemctl restart mariadb
[root@db01 ~]# mysql -uroot -p123456
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| love |
| mysql |
| performance_schema |
| shop |
| test |
| wordpress |
| zh |
+--------------------+
8 rows in set (0.00 sec)
MariaDB [(none)]>
3.在新資料庫上授權,允許172.16.1.%網段,通過 web01 賬戶密碼123456連接并操作該資料庫
因為mysql默認不支持遠程連接,需要創建一個新用戶并開啟遠程連接的權限,
# 默認沒開啟遠程連接權限,所以在web01上是無法連接的
[root@web01 tmp]# mysql -h 172.16.1.51 -uroot -p123456
ERROR 1130 (HY000): Host '172.16.1.7' is not allowed to connect to this MariaDB server
# 在db01上開啟遠程連接權限(當然也可以先創建用戶,后授予權限)
MariaDB [(none)]> grant all privileges on *.* to 'web01'@'172.16.1.%' identified by '123456';
# 開啟后重新連接,發現已經能連接了,
[root@web01 tmp]# mysql -h 172.16.1.51 -uweb01 -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
mysql 配置權限語法解釋:
1.查看權限
語法:show grants for 'username'@'hostname'
例如:查看root用戶的權限
show grants for 'root'@'localhost'
2.授予權限
語法:grant 權限型別1,權限型別1.... on 資料庫名.表
to 'username'@'hostname' [,'username'@'hostname'][with grant option]
所有庫中所有表用 *.* 表示
例如:新創建test04 用戶 密碼test04
create user 'test04'@'localhost' identified by '密碼'
授予所有庫下所有表的查詢 洗掉權限
grant select ,delete on *.* to 'test04'@'localhost' with grant option
授予所有權限
grant all privileges on.........
開啟所有網段
'name'@'%'
查看test04的權限
show grants for 'test04'@'localhost'
3.識訓權限
revoke 權限型別1,權限型別2.... on 庫名.表名
from 'username'@hostname'' [,'username'@hostname'']...
例如:識訓test04的delete權限
revoke delete on *.* from 'test04'@'localhost'
5.6停止web01上的資料庫服務,讓它不在提供資料庫服務,啟用新的資料庫
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb
Removed symlink /etc/systemd/system/multi-user.target.wants/mariadb.service.
5.7 修改web01上部署的專案代碼,讓其指向新資料庫db01
注:由于安裝部署開源軟體時候有安裝向導,它會自動創建腳本檔案連接我們的資料庫,實際生產環境中需要我們自己手動寫或者開發寫腳本,由于我們不知道具體是哪個檔案包含資料庫連接資訊,可以用find命令查找
例如
[root@web01 ~]# find /code/wordpress/ -type f | xargs grep "123456"
這樣就可以列出包含密碼的檔案,但是由于123456很多檔案都有,所以建議事先設計資料庫密碼時候要有標識
1.修改 Wordpress 產品代碼連接資料庫的組態檔
[root@web01 ~]# vim /code/wordpress/wp-config.php
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'web01' );
/** MySQL database password */
define( 'DB_PASSWORD', '123456' );
/** MySQL hostname */
define( 'DB_HOST', '172.16.1.51' );
2.修改 wecenter 產品代碼連接資料庫的組態檔
[root@web01 ~]# vim /code/zh/system/config/database.php
<?php
$config['charset'] = 'utf8';^M
$config['prefix'] = 'aws_';^M
$config['driver'] = 'MySQLi';^M
$config['master'] = array (
'charset' => 'utf8',
'host' => '172.16.1.51',
'username' => 'web01',
'password' => '123456',
'dbname' => 'zh',
);^M
$config['slave'] = false;^M
3.修改 OElove 產品代碼連接資料庫的組態檔
[root@web01 ~]# vim /code/love/source/conf/db.inc.php
define('DB_TYPE', 'mysql');
///資料庫編碼
define('DB_CHARSET', 'utf8');
///資料庫服務器
define('DB_HOST', '172.16.1.51:3306');
///資料庫名
define('DB_DATA', 'love');
///資料庫登錄帳號
define('DB_USER', 'web01');
///資料庫登錄密碼
define('DB_PASS', '123456');
///資料表前綴
define('DB_PREFIX', 'oepre_');
///資料庫持久連接 0=關閉, 1=打開
4.修改OXshop產品配置資訊
[root@web01 ~]# vim /code/shop/config/database.php
return [
// 資料庫型別
'type' => 'mysql',
// 服務器地址
'hostname' => '172.16.1.51',
// 資料庫名
'database' => 'shop',
// 用戶名
'username' => 'web01',
// 密碼
'password' => '123456',
// 埠
'hostport' => '3306',
5.由于停止了web01服務器上的資料庫服務,網站都不能訪問了,但是經過上述配置后,瀏覽器又能訪問了,
六、擴展多臺相同的Web服務器組成web集群
6.1 為何要擴展多臺web節點
單臺web服務器能抗住的訪問量是有限的,而且單一的添加硬體配置并不能解決埠不夠的問題,配置多臺web服務器能提升更高的訪問速度,
擴展多臺節點解決什么問題
1.單臺web節點如果故障,會導致業務down機;
2.多臺web節點能保證業務的持續穩定,擴展性高;
3.多臺web節點能有效的提升用戶訪問網站的速度;
6.2 擴展多web節點架構演變

6.3 擴展多web節點環境準備
| 主機名稱 | 應用環境 | 外網地址 | 內網地址 |
|---|---|---|---|
| web01 | nginx+php | 10.0.0.7 | 172.16.1.7 |
| web02 | nginx+php | 10.0.0.8 | 172.16.1.8 |
| db01 | mysql(mariadb) | 無 | 172.16.1.51 |
6.4 擴展多臺web節點實作步驟
可以根據web01上的配置,快速擴展一臺web02,資料庫統一使用db01,
6.4.1 創建相同用戶身份便于運行行程
[root@web02 ~]# groupadd -g 666 www
[root@web02 ~]# useradd -g 666 -u 666 www
6.4.2 安裝nginx
由于安裝nginx需要手動配置源,可以從web01上拖過來
[root@web02 ~]# rsync -avz root@172.16.1.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
安裝yum優先級插件
yum install yum-priorities
在想優先檢測的repo檔案中加入
priority=1
#數字越小,優先級越高
[root@web01 ~]# vim /etc/yum/pluginconf.d/priorities.conf
確定這個組態檔里的 enabled = 1
yum clean all
yum makecache
就可以優先從我們指定的源里安裝了
[root@web02 ~]# yum install nginx
[root@web02 ~]# systemctl start nginx
[root@web02 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@web02 ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 539/rpcbind
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1847/nginx: master
nginx 依賴安裝
yum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-toolsyum install -y gcc gcc-c++ autoconf pcre pcre-devel make automake httpd-tools
6.4.3 安裝php
安裝見上文
把包下載下來放入~目錄解壓
[root@web02 ~]# unzip php.zip
安裝
[root@web02 ~]# yum localinstall php/*.rpm
6.4.4 nginx與php配置匯入
[root@web02 php-fpm.d]# rsync -avz root@172.16.1.7:/etc/nginx /etc
[root@web02 ~]# rsync -avz root@172.16.1.7:/etc/php-fpm.d /etc
[root@web02 conf.d]# rsync -avz root@172.16.1.7:/etc/php.ini /etc
6.4.5 將web01 上部署的所有代碼打包上傳到web02
1.在web01上打包
[root@web01 /]# cd / && tar czf /tmp/code.tar.gz /code/
2.推送
[root@web01 /]# scp -rp /tmp/code.tar.gz root@172.16.1.8:/tmp
3. 在web02上解壓
[root@web02 ~]# tar -xf code.tar.gz -C /
如果要部署商城專案需要再次修改權限
[root@web02 ~]# chown -R www.www /var/lib/php/session/
6.4.6 在web02上啟動nginx與php并加入開機自啟
[root@web02 ~]# systemctl start nginx
[root@web02 ~]# systemctl enable nginx
[root@web02 ~]# systemctl start php-fpm
[root@web02 ~]# systemctl enable php-fpm
[root@web02 ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 539/rpcbind
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1847/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 861/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1020/master
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2092/php-fpm: maste
6.4.7 修改本地hosts檔案,瀏覽器訪問測驗,
10.0.0.8 zh.bertwu.net
10.0.0.8 blog.bertwu.net
10.0.0.8 love.bertwu.net
10.0.0.8 shop.bertwu.net
七、拆分靜態資源至獨立服務器
7.1 為何要拆分靜態資源
當后端的 web 節點出現多臺時,如果用戶上傳的圖片、視頻附件等內容僅在一臺 web 服務器上,由于負載均衡,下一次訪問會隨機調度到其他節點,那么其他的 web 服務器則無法訪問到該圖片,
如果增加一臺共享存盤能解決什么問題
1.保證了多臺 web 節點靜態資源一致,
2.有效節省多臺 web 節點的存盤空間,
3.統一管理靜態資源,便于后期推送至 CDN 進行靜態資源加速
7.2 拆分靜態資源架構演變

7.3 增加共享存盤nfs環境準備
| 主機名稱 | 應用環境 | 外網地址 | 內網地址 |
|---|---|---|---|
| web01 | nginx+php | 10.0.0.7 | 172.16.1.7 |
| web02 | nginx+php | 10.0.0.8 | 172.16.1.8 |
| db01 | mysql(mariadb) | 無 | 172.16.1.51 |
| nfs | nfs | 無 | 172.16.1.32 |
7.4 共享存盤實作步驟
7.4.1 配置nfs 建議另外配置硬碟
1.創建www用戶
[root@nfs ~]# groupadd -g 666 www
[root@nfs ~]# useradd -g 666 -u 666 www
[root@nfs ~]# yum install nfs-utils -y
2.修改nfs組態檔修改
[root@nfs ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/love 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/shop 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
3.添加一塊新硬碟
[root@nfs ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 500M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.6G 0 part /
sdb 8:16 0 1000G 0 disk
sr0 11:0 1 4.4G 0 rom
4.制作檔案系統
[root@nfs ~]# mkfs.xfs /dev/sdb
[root@nfs data]# mkdir /data
5.掛載
[root@nfs data]# mount -t xfs /dev/sdb /data
[root@nfs data]# echo '/dev/sdb /data xfs defaults 0 0' >>/etc/fstab
[root@nfs data]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 48G 1.8G 46G 4% /
/dev/sda1 497M 125M 373M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdb 1000G 33M 1000G 1% /data
6.創建對應檔案夾并修改權限
[root@nfs data]# mkdir /data/{blog,zh,love,shop}
[root@nfs data]# chown -R www.www /data
[root@nfs data]# ll
total 0
drwxr-xr-x 2 www www 6 Aug 15 22:25 blog
drwxr-xr-x 2 www www 6 Aug 15 22:25 love
drwxr-xr-x 2 www www 6 Aug 15 22:25 shop
drwxr-xr-x 2 www www 6 Aug 15 22:25 zh
7.加入開機自啟
[root@nfs data]# systemctl start nfs-server
[root@nfs data]# systemctl enable nfs-server
7.4.2 匯入靜態資源至共享存盤
1.web01節點安裝nfs,然后使用showmount查看服務端共享的資源;
[root@web01 ~]# yum install nfs-utils -y
[root@web01 ~]# showmount -e 172.16.1.32
Export list for 172.16.1.32:
/data/shop 172.16.1.0/24
/data/love 172.16.1.0/24
/data/zh 172.16.1.0/24
/data/blog 172.16.1.0/24
2.查找Wordpress靜態資源推送過去然后再掛載

可以看到靜態資源存盤目錄為http://blog.bertwu.net/wp-content/uploads/2021/08/16290384211-3.png
1.web02上事先有圖片需要先推送一下
[root@web02 wordpress]# rsync -avz /code/wordpress/wp-content/uploads/ root@172.16.1.32:/data/blog
[root@web02 wordpress]# mount -t nfs 172.16.1.32:/data/blog /code/wordpress/wp-content/uploads/
[root@web02 wordpress]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 48G 2.5G 46G 6% /
/dev/sda1 497M 125M 373M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.32:/data/blog 1000G 40M 1000G 1% /code/wordpress/wp-content/uploads
# 開機自啟掛載
[root@web01 ~]echo '172.16.1.32:/data/blog /code/wordpress/wp-content/uploads nfs defaults 0 0' >> /etc/fstab
2.web01上沒有圖片直接遠程掛載
[root@web01 wp-content]# mount -t nfs 172.16.1.32:/data/blog /code/wordpress/wp-content/uploads/
[root@web01 wp-content]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda3 48G 3.3G 45G 7% /
/dev/sda1 497M 125M 373M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.32:/data/blog 1000G 40M 1000G 1% /code/wordpress/wp-content/uploads
# 開機自啟掛載
[root@web01 ~]echo '172.16.1.32:/data/blog /code/wordpress/wp-content/uploads nfs defaults 0 0' >> /etc/fstab
八、展節點帶來的新問題
如果我們添加了一臺C應用服務器,如何能實作快速擴展?
1.準備LNP環境
2.拷貝任意A或B上的組態檔,代碼
3.掛載NFS存盤
現在有多個WEB服務器,該如何進行訪問?
1.DNS輪詢
(1)需要所有的web節點具備公網IP地址
(2)公網獨立IP需要費用,而且不便宜,
(3)所有的web節點有公網IP,不安全,
(4)DNS只有輪詢機制,沒有健康檢查功能,
2.負載均衡
(1)所有的web節點不需要有公網IP,能節省成本、并保證安全
(2)能夠對后端的web節點進行健康檢查機制;
(3)負載均衡有多種調度演算法來滿足企業不同需求;
rr;wrr;url_hash;ip_hash;一致性hash;

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294168.html
標籤:其他
上一篇:資料增強(噪聲,模糊,縮放,色域變換,均衡化,色彩抖動)
下一篇:Docker-網路配置<三>
