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"