nginx實現讀寫分離
html
測試環境前端
OS: rhel6nginx
A服務器: 配置nginx實現負載均衡和方向代理功能web
B服務器: 簡單的web服務器,沒作其餘配置,讀服務器apache
C服務器: 簡單的web服務器,沒作其餘配置,寫服務器vim
部署: A服務器實現前端負載均衡和方向代理功能,後端有兩臺web服務器,B服務器只進行讀操做,C服務器只進行寫操做,而B和C服務器之間經過rsync+inotify實現數據的同步這樣就簡單的實現了nginx的讀寫分離功能。後端
配置以前先來了解一下什麼是WebDAV??服務器
WebDAV (Web-based Distributed Authoring and Versioning) 一種基於 HTTP1.1協議的通訊協議。它擴展了HTTP 1.1,在GET、POST、HEAD等幾個HTTP標準方法之外添加了一些新的方法,使應用程序可直接對Web Server直接讀寫,並支持寫文件鎖定(Locking)及解鎖(Unlock),還能夠支持文件的版本控制。負載均衡
Web 分佈式創做和版本管理 (WebDAV) 擴展了 HTTP/1.1 協議,容許客戶端發佈、鎖定和管理 Web 上的資源。curl
1.在A服務器上配置負載均衡和方向代理功能
# vim /etc/nginx/nginx.conf
proxy_cache_path /nginx/cache/first levels=1:2 keys_zone=first:20m max_size=1g;
####讀服務器組 B
upstream read {
#ip_hash;
server 192.168.20.121 weight=2 max_fails=2 fail_timeout=2;
server 192.168.20.123 weight=2 max_fails=2 fail_timeout=2;
}
####寫服務器組 A
upstream write {
#ip_hash;
server 192.168.20.122 weight=2 max_fails=2 fail_timeout=2;
server 192.168.20.124 weight=2 max_fails=2 fail_timeout=2;
server 127.0.0.1:8080 backup;
}
server {
location / {
root html;
index index.html index.htm;
proxy_cache first;
proxy_cache_valid 200 10m;
proxy_pass http://read;
if($request_method = "POST"){ ####在這裏判斷用戶是否執行的是寫操做
proxy_pass http://write;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
2.A服務器上從新啓動服務
# service nginx restart
3.在B,C服務器上開啓httpd的WebDAV功能
# vim /etc/httpd/conf/httpd.conf
Dav on ####在<Directory "/var/www/html/">標籤裏添加
4.在B,C服務器上重啓httpd服務
# service httpd retstart
5.在A服務器上用curl命令測試下是否能正常訪問B,C服務器上的web服務
# curl http://192.168.20.121
6.用curl命令的T參數實現http協議中的put方法上傳文件 (A服務器)
# curl -T /etc/issue http://192.168.20.121 ###往讀服務器上傳文件會報405的錯誤,由於沒開啓WebDAV功能
# curl -T /etc/issue http://192.168.20.122 ###往寫服務器上傳文件會報403的錯誤,禁止訪問權限不夠
7.下面咱們給apache用戶受權
# setfacl -m u:apache:rwx /var/www/html/
8.最後再測試下看是否能夠往寫服務器上傳文件
# curl -T /etc/issue http://192.168.20.122
9.驗證上傳是否成功
# cd /var/www/html