LNMP架構的演變
LNMP 演變
工作原理
- linux + nginx + mariadb + php
- 工作原理:
首先,瀏覽器傳送http request請求到伺服器(Nginx),伺服器響應並處理web請求, 將一些靜態資源(CSS,圖片,視訊等)儲存伺服器上, 然後將php指令碼通過介面傳輸協議(閘道器協議)PHP-FCGI(fast-cgi)傳輸給PHP-FPM(程序管理程式), PHP-FPM不做處理, 然後PHP-FPM呼叫PHP解析器程序,PHP解析器解析php指令碼資訊。 PHP解析器程序可以啟動多個,進行併發執行。 然後將解析後的指令碼返回到PHP-FPM,PHP-FPM再通過fast-cgi的形式將指令碼資訊傳送給Nginx. 伺服器再通過Http response的形式傳送給瀏覽器。瀏覽器再進行解析與渲染然後進行呈現。
安裝
1.安裝 環境
安裝nginx
[root@web01 ~]# yum install nginx -y
安裝php
[root@web01 ~]# yum install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-mcrypt php71w-pecl-memcached php71w-pecl-mongodb php71w-pecl-redis php71w-pecl-zip php71w-bcmath
安裝mariadb
[root@web01 ~]# yum install mariadb-server mariadb -y
2.Nginx與PHP整合的原理。
[root@web01 ~]# cat /etc/nginx/conf.d/php.oldxu.com.conf server { listen 80; server_name php.oldxu.com; root /code; location / { index index.php info.php; } location ~ \.php$ { #將php請求交給本地9000埠處理,9000是php-fpm的預設埠 fastcgi_pass 127.0.0.1:9000; #告訴php-fpm解析本地的哪個路徑下的哪個檔案 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #包含一些其他的相關資訊的變數 include fastcgi_params; } }
2.重啟服務 nginx php-fpm 臨時的 永久的
3.準備檔案
4.hosts劫持
5.域名訪問
PHP與MySQL整合的原理。
1.啟動mariadb
[root@web01 ~]# systemctl start mariadb
[root@web01 ~]# systemctl enable mariadb
2.配置mariadb密碼
[root@web01 ~]# mysqladmin password 'oldxu.com'
[root@web01 ~]# mysql -uroot -poldxu.com
MariaDB [(none)]> quit
3.準備一個php連線mysql的指令碼檔案
[root@web01 ~]# cat /code/tt.php
<?php
$servername = "localhost";
$username = "root";
$password = "oldxu.com";
// 建立連線
$conn = mysqli_connect($servername, $username, $password);
// 檢測連線
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php連線MySQL資料庫成功";
?>
4.執行php命令測試是否能正常連線mysql
[root@web01 ~]# php /code/tt.php
php連線MySQL資料庫成功
5.通過瀏覽器訪問測試 整個 lnmp
http://php.oldxu.com/tt.php
1. 資料庫的拆分
準備一臺172.16.1.51資料庫, 安裝mariadb-server
[root@db01 ~]# yum install mariadb-server -y
[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb.service
[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 0.0.0.0:3306 0.0.0.0:* LISTEN 8296/mysqld
2.備份172.16.1.7 資料庫 -->推送至 172.16.1.51
[root@web01 ~]# mysqldump -uroot -p'oldxu.com' --all-databases > mysql-all.sql
3.172.16.1.51 恢復資料庫, 建立遠端連線的使用者
1.推送
[root@web01 ~]# scp mysql-all.sql [email protected]:~
2.登入51伺服器恢復資料
[root@db01 ~]# mysql -uroot < mysql-all.sql
[root@db01 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress |
| zh |
+--------------------+
6 rows in set (0.00 sec)
3.重啟一下資料庫
[root@db01 ~]# systemctl restart mariadb
[root@db01 ~]# mysql -uroot -poldxu.com #重啟後密碼會變更
4.建立遠端連線使用者
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'oldxu.com';
5.遠端連線測試 登入172.16.1.7
[root@web01 ~]# mysql -h172.16.1.51 -uall -poldxu.com
Welcome to the MariaDB monitor. Commands end with ; or \g.
MariaDB [(none)]>
4.應用割接 wordpress--->連線本地資料庫 修改為 連線 遠端資料庫
1.停止本地資料庫
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb
2.修改wordpress連線資料庫的資訊
[root@web01 wordpress]# vim /code/wordpress/wp-config.php
/** WordPress資料庫的名稱 */
define( 'DB_NAME', 'wordpress' );
/** MySQL資料庫使用者名稱 */
define( 'DB_USER', 'all' );
/** MySQL資料庫密碼 */
define( 'DB_PASSWORD', 'oldxu.com' );
/** MySQL主機 */
define( 'DB_HOST', '172.16.1.51' );
3.修改wecenter連線資料庫的資訊
[root@web01 ~]# find ./ -type f | xargs grep -Ri "oldxu.com"
[root@web01 ~]# cat /code/zh/system/config/database.php
<?php
$config['charset'] = 'utf8mb4';
$config['prefix'] = 'aws_';
$config['driver'] = 'MySQLi';
$config['master'] = array (
'charset' => 'utf8mb4',
'host' => '172.16.1.51',
'username' => 'all',
'password' => 'oldxu.com',
'dbname' => 'zh',
);
$config['slave'] = false;
2.擴充套件應用節點 ( 多個web組織在一起--->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 172.16.1.51
1.對web02進行初始化操作
[root@web02 ~]# groupadd -g666 www
[root@web02 ~]# useradd -u666 -g666 www
[root@web02 ~]# scp 172.16.1.7:/etc/yum.repos.d/* /etc/yum.repos.d/
2.在要擴充套件的節點上安裝對應的環境: nginx+php
[root@web02 ~]# yum install nginx -y
[root@web02 ~]# rpm -e $(rpm -qa |grep php)
[root@web02 ~]# yum install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-mcrypt php71w-pecl-memcached php71w-pecl-mongodb php71w-pecl-redis php71w-pecl-zip php71w-bcmath -y
3.將web01上的Nginx php-fpm php.ini配置 以及 程式碼 拷貝至web02
1.nginx.conf nginx virtualHost
[root@web02 ~]# rsync -avz --delete 172.16.1.7:/etc/nginx/ /etc/nginx/
2.php-fpm.d/www.conf php.ini
[root@web02 ~]# rsync -avz 172.16.1.7:/etc/php.ini /etc/php.ini
[root@web02 ~]# rsync -avz 172.16.1.7:/etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf
3.程式碼目錄 /code
[root@web02 ~]# rsync -avz --delete 172.16.1.7:/code /
[root@web02 ~]# ll /code/
drwxr-xr-x 5 www www 4096 12月 6 12:41 wordpress
drwxr-xr-x 15 www www 4096 12月 6 11:44 zh
4.重新載入 nginx php-fpm 服務
1.檢查nginx與php的語法是否存在錯誤
[root@web02 ~]# nginx -t
[root@web02 ~]# php-fpm -t
2.重新載入nginx php-fpm程式
[root@web02 ~]# systemctl restart nginx php-fpm
3.將nginx php-fpm 加入開機自啟動
[root@web02 ~]# systemctl enable nginx php-fpm
5.進行測試 tail -f
多個應用節點會帶來新的問題:
1.靜態資源不一致?
2.多個節點無法同時工作?
0.手動DNS切換
1.DNS輪詢 (所有的web節點都需要有公網IP)
不安全
成本高
沒有監控檢查
2.nginx代理->負載均衡
3.準備一個NFS共享目錄?
#初始化環境
[root@nfs01 ~]# groupadd -g666 www
[root@nfs01 ~]# useradd -u666 -g666 www
#安裝-配置-啟動-nfs
[root@nfs01 ~]# yum install nfs-utils -y
[root@nfs01 ~]# 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)
[root@nfs01 ~]# rm -rf /data
[root@nfs01 ~]# mkdir /data/blog /data/zh -p
#重啟nfs服務
[root@nfs01 ~]# systemctl restart nfs
2.找到web儲存靜態資源的位置?
#查詢圖片儲存的路徑-->瀏覽器 -->F12 --> Select -->選擇圖片
http://blog.oldxu.com/wp-content/uploads/2019/12/ks.jpeg
/code/wordpress/wp-content/uploads/2019/12/ks.jpeg
3.將所有節點的圖片,都選拷貝至 nfs儲存中?
#在有圖片的web節點上
[root@web02 ~]# scp -rp /code/wordpress/wp-content/uploads/* 172.16.1.31:/data/blog/
#回到nfs儲存上 重新授權
[root@nfs01 ~]# chown -R www.www /data/blog/
4.所有的web節點執行掛載的操作?
--------------------------------------------------------
# wordpress
[root@web02 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/
#切換到web01 測試後 在進行掛載測試
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content/uploads/