十、nginx反向代理負載均衡
(一)LNMP架構遷移資料庫說明
遷移資料庫:利用資料庫備份命令(mysql mysqladmin mysqldump)
1) 備份資料庫資料庫資訊
mysqldump -uroot -poldboy123 --all-databases >/tmp/bak.sql
ll /tmp/bak.sql -h
scp /tmp/bak.sql 172.16.1.51:/tmp/
2) 恢復資料庫資料庫信
##db01
mysql -uroot -poldboy123 </tmp/bak.sql
###db01添加新的用戶
grant all on wordpress.* to wordpress@'172.16.1.0/255.255.255.0' identified by 'oldboy123';
flush privileges;
mysql -uwordpress -poldboy123 -h 172.16.1.51
3) 資料庫遷移完畢,修改網站連接資料庫的組態檔
mysql -uwordpress -poldboy123 -h 172.16.1.51 <-- 修改組態檔之前,先測驗網站web服務器與遷移后的資料庫連通性
vim wp-config.php <-- 修改wordpress上的資料庫連接引數資訊
/** MySQL主機 */
define('DB_HOST','172.16.1.51') <-- 修改連接的主機資訊,將localhost修改為172.16.1.51
說明:web服務器資料庫此時可以關閉了
4)停止nginx服務器上MySQL服務
/etc/init.d/mysql stop
(二)LNMP架構資料遷移到NFS存盤說明
01:先將原有目錄中資料移出
cd /application/nginx/html/blog/wp-content/uploads
mkdir /tmp/wordpress_backup -p
mv ./* /tmp/wordpress_backup/
資料存盤到本地什么位置,獲取方法
①. 通過網站頁面右鍵點擊,獲取資源地址資訊
②. find命令利用-mmin 5
③. 利用inotify服務監控目錄資料變化
02:NFS服務器上配置創建共享目錄
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
showmount -e 172.16.1.31
mount -t nfs 172.16.1.31:/data /mnt/
showmount -e 172.16.1.31
mount -t nfs 172.16.1.31:/data/ ./uploads/
mv /tmp/wordpress_backup/* ./
(三)nginx反向代理負載均衡功能
客戶端====代理服務器===web服務器
客戶端看到的服務端==代理服務器
代理服務器====web服務器
反向代理功能架構
3臺web服務器,組建出web服務器集群
web01 10.0.0.7 172.16.1.7
web02 10.0.0.8 172.16.1.8
web03 10.0.0.9 172.16.1.9
1臺負載均衡服務器
lb01 10.0.0.5 172.16.1.5
①. 部署web服務器
第一個里程:安裝部署nginx軟體
mkdir /server/tools -p
cd /server/tools
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz
yum install -y pcre-devel openssl-devel
useradd -M -s /sbin/nologin www
cd nginx-1.12.2
./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /application/nginx-1.12.2 /application/nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
第二個里程:編輯nginx組態檔
server {
listen 80;
server_name www.etiantian.org;
root html/www;
index index.html index.htm;
}
server {
listen 80;
server_name bbs.etiantian.org;
root html/bbs;
index index.html index.htm;
}
scp -rp /application/nginx/conf/nginx.conf 172.16.1.8:/application/nginx/conf/
scp -rp /application/nginx/conf/nginx.conf 172.16.1.9:/application/nginx/conf/
第三里程:創建模擬測驗環境
mkdir /application/nginx/html/{www,bbs} -p
for name in www bbs;do echo "$(hostname) $name.etiantian.org" >/application/nginx/html/$name/oldboy.html;done
for name in www bbs;do cat /application/nginx/html/$name/oldboy.html;done
第四里程:在負載均衡服務器上,進行測驗訪問
curl -H host:www.etiantian.org 10.0.0.7/oldboy.html
web01 www.etiantian.org
curl -H host:bbs.etiantian.org 10.0.0.7/oldboy.html
web01 bbs.etiantian.org
curl -H host:www.etiantian.org 10.0.0.8/oldboy.html
web02 www.etiantian.org
curl -H host:bbs.etiantian.org 10.0.0.8/oldboy.html
web02 bbs.etiantian.org
curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
web03 www.etiantian.org
curl -H host:bbs.etiantian.org 10.0.0.9/oldboy.html
web03 bbs.etiantian.org
②. 部署負載均衡服務器
第一個里程:安裝部署nginx軟體
mkdir /server/tools -p
cd /server/tools
wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar xf nginx-1.12.2.tar.gz
yum install -y pcre-devel openssl-devel
useradd -M -s /sbin/nologin www
cd nginx-1.12.2
./configure --prefix=/application/nginx-1.12.2 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /application/nginx-1.12.2 /application/nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
第二個里程:撰寫nginx反向代理組態檔
grep -Ev "#|^$" nginx.conf.default >nginx.conf
官方鏈接:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
Syntax: upstream name { ... }
Default: —
Context: http
eg:
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
說明:upstream模塊就類似定一個一個地址池或者說定一個web服務器組
官方鏈接:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass
Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
eg:
location / {
proxy_pass http://oldboy;
}
說明:proxy_pass主要用于進行拋送用戶訪問請求給upstream模塊中的相應節點服務器
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
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;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
}
}
}
/application/nginx/sbin/nginx -t
/application/nginx/sbin/nginx -s reload
第三個里程:進行訪問負載均衡服務器測驗
1)利用瀏覽器進行測驗
進行hosts決議
http://www.etiantian.org/oldboy.html <--利用ctrl+F5重繪測驗,檢查是否進行負載調度
2)利用curl命令進行測驗
[root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html
web01 www.etiantian.org
[root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html
web02 www.etiantian.org
[root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.5/oldboy.html
web03 www.etiantian.org
(四)Nginx反向代理負載均衡模塊功能詳述
ngx_http_upstream_module
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream
①模塊常用功能說明:
1)定義后端集群web節點資訊,定義一個地址的池子
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
2)實作權重值負載訪問功能
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=1;
}
3)定義后端訪問的失敗次數-max_fails
upstream oldboy {
server 10.0.0.7:80 weight=3 max_fails=3;
server 10.0.0.8:80 weight=1 max_fails=3;
server 10.0.0.9:80 weight=1 max_fails=3;
}
4)定義后端失敗重試的間隔-fail_timeout
upstream oldboy {
server 10.0.0.7:80 weight=3 max_fails=3 fail_timeout=10s;
server 10.0.0.8:80 weight=1 max_fails=3;
server 10.0.0.9:80 weight=1 max_fails=3;
}
說明:在嘗試多次失敗后,在超時時間過去之后,會再給相應節點一次機會
5)定義后端服務的熱備節點-backup
upstream oldboy {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80 backup;
}
②模塊常用調度演算法:
1)定義輪詢調度演算法-rr-默認調度演算法
采取平均分配
2)定義權重調度演算法-wrr
能者多勞
3)定義靜態調度演算法-ip_hash
upstream oldboy {
ip_hash;
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80 backup;
}
說明:配置ip_hash時,一定不能和backup與weight引數同時出現
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 backup;
}
③模塊常用功能(ngx_http_proxy_module)
proxy_set_header --- 設定反向代理服務器到web服務器的HTTP請求報文中的頭部資訊
server {
listen 80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
proxy_set_header host $host;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
}
}
說明:通過以上配置,可以實作訪問負載均衡看到不同虛擬主機頁面資訊(oldboy,相當于使用ip地址訪問虛擬主機,默認訪問的是第一個server)
server {
listen 80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
說明:實作用戶訪問反向代理服務,讓web服務器日志中記錄真實用戶IP地址資訊
(五)案例:
先進行企業案例需求梳理:
當用戶請求www.etiantian.org/upload/xx 地址時,實作由upload上傳服務器池處理請求,
當用戶請求www.etiantian.org/static/xx 地址時,實作由靜態服務器池處理請求,
除此以外,對于其他訪問請求,全都由默認的動態服務器池處理請求,
用戶請求(URI) 處理請求服務器 站點目錄 功能
/upload 10.0.0.8:80 html/www/upload upload服務器
/static 10.0.0.7:80 html/www/static static靜態服務器
/ 10.0.0.9:80 html/www 默認
解題方法:
1)完成nginx網站服務器配置
第一個里程:創建測驗環境
# 10.0.0.8 主機上創建upload目錄,然后生成網站測驗頁面檔案
cd /application/nginx/html/www/
mkdir upload
cp oldboy.html upload/
# 10.0.0.7 主機上創建static目錄,然后生成網站測驗頁面檔案
cd /application/nginx/html/www/
mkdir static
cp oldboy.html static/
# 10.0.0.9 主機上創建默認測驗頁面檔案即可
第二個里程:利用lb01進行訪問測驗
# 測驗10.0.0.8訪問是否正常
curl -H host:www.etiantian.org 10.0.0.8/upload/oldboy.html
web02 www.etiantian.org
# 測驗10.0.0.7訪問是否正常
curl -H host:www.etiantian.org 10.0.0.7/static/oldboy.html
web01 www.etiantian.org
# 測驗10.0.0.9訪問是否正常
curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
web03 www.etiantian.org
2)完成nginx反向代理服務器配置
第一個里程:配置upstream模塊資訊
upstream upload {
server 10.0.0.8:80;
}
upstream static {
server 10.0.0.7:80;
}
upstream default {
server 10.0.0.9:80;
}
第二個里程:配置proxy_pass模塊資訊
server {
listen 80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://default;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /upload {
proxy_pass http://upload;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location /static {
proxy_pass http://static;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
例題2:
根據用戶請求客戶端軟體,顯示不同頁面資訊
解決方法:
1)nginx網站服務器配置
第一個里程:創建測驗環境
# 10.0.0.8 主機上創建upload目錄,然后生成網站測驗頁面檔案
cd /application/nginx/html/www/
cat oldboy.html
# 10.0.0.7 主機上創建static目錄,然后生成網站測驗頁面檔案
cd /application/nginx/html/www/
cat oldboy.html
# 10.0.0.9 主機上創建默認測驗頁面檔案即可
cd /application/nginx/html/www/
cat oldboy.html
測驗訪問:
[root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.7/oldboy.html
web01 www.etiantian.org
[root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.8/oldboy.html
web02 www.etiantian.org
[root@lb01 conf]# curl -H host:www.etiantian.org 10.0.0.9/oldboy.html
web03 www.etiantian.org
2)nginx反向代理服務器配置
第一個里程:配置upstream模塊資訊
upstream iphone {
server 10.0.0.8:80;
}
upstream android {
server 10.0.0.7:80;
}
upstream pc {
server 10.0.0.9:80;
}
第二個里程:配置proxy_pass模塊資訊
server {
listen 80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
if ($http_user_agent ~* "iphone") {
proxy_pass http://iphone;
}
if ($http_user_agent ~* "android") {
proxy_pass http://android;
}
proxy_pass http://pc;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/87913.html
標籤:Linux
