十、nginx反向代理負載均衡 (一)LNMP架構遷移資料庫說明 遷移資料庫:利用資料庫備份命令(mysql mysqladmin mysqldump) 1) 備份資料庫資料庫信息 2) 恢複數據庫資料庫信 第四里程:在負載均衡伺服器上,進行測試訪問 ②. 部署負載均衡伺服器 第一個裡程:安裝部署n ...
十、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;
}
}