硬件配置:使用虛擬機裝ubuntu13.10系統。開啓三臺。nginx
環境配置:u001(192.168.58.130)和u002(192.168.58.129)裝有keepalived+lnmp(集成環境)web
u003(192.168.58.128)裝有lnmp(集成環境)ubuntu
---------------------------------------------
安全
配置信息:u001和u002使用keepalived創建主備系統。u001爲主;同時虛擬IP(192.168.58.131)服務器
經過IP訪問能夠訪問ip:131;oop
關閉u001;再次訪問131.依然沒有問題,且本地能夠ping通。此時不可使用的是130訪問,可使用的訪問ip爲131和129同時來自u002;
server
此時本機的host添加記錄192.168.58.131 xx.com; 能夠正常訪問到主機u002,可是此時使用的是虛擬ip:131。既使用ping xx.com 顯示的ip地址仍是131;
ip
----------------------------------------------------------------------------
資源
配置信息:u001的nginx配置中使用模塊upstream。配置服務的ip爲三臺虛擬機的地址同時加入了IP(192.168.58.131)。及配置了有四個IP。設置虛擬的服務域名爲xx.com;lnmp
此時訪問xx.com ; 原本是應該是實際上有三臺服務器在提供服務,其實只有兩臺提供web應用。既咱們不可能訪問到u001上的資源。緣由分析:每次請求先到ip131;這時做爲主服務器的u001就接受到信息。
ngingx調用upstream模塊;隨機拿到ip地址:假如拿到的是129和128,將分別訪問到u002和u003;重點是:假如咱們拿到了131和130;就意味着造成一個loop;再次訪問了本地,再次發起請求直到拿到的ip爲129和128;才能正常的返回數據。既訪問不到u001,他只能做爲請求的分發工做了;問題又來了,咱們採用直接ip的訪問方式就沒有問題了,也就是說咱們使用192.168.58.130或者192.168.58.131,就沒有問題了,就從新訪問到u001的web資源,仍是經過nginx的解析,可是對應配置的模塊中的信息就不會執行了。
問題分析:nginx的功能解析先是正則匹配,符合設定的域名就會調用指定的模塊,本身就會把本身圈進去。
------------------------------------------------------------------------------
解決loop方案:u001監聽兩個端口,配置使用upstream的地方就監聽80端口,在upstream的server的列表中訪問當前機器的端口爲非80,這樣就不會掉進loop中。假如u001關機了,切換到u002這時就不能再次訪問到u003;因此u002開啓upstream,配置相似u001,也同時監聽兩個端口。全部來自80的請求都須要走upstream模塊,從新分配請求的目的地。
-----------------------------------------------------------------------------------
最終方案整理:一、u001和u002在keepalived中,創建主備關係,u001爲主;
二、u001的nginx的upstream模塊監聽80端口的請求。分發地址爲:u001和u002的非80端口,同時nginx也要同時監聽設定的端口。其餘服務器的80端口。
三、u002的nginx的upstream模塊監聽80端口的請求。分發地址爲:u002的非80端口,同時nginx也要同時監聽設定的端口。其餘服務器的80端口。
四、擴展時主要就是其餘的服務器的配置只需簡單的監聽80便可,同時在u001和u002中的upstream模塊加入這個服務器的地址就可配置。
-------------------------------------------------------------------------------
對外僅僅須要提供那個虛擬ip就能達到多臺服務器的安全提供服務,只要不是兩臺主服務器都停機,仍是蠻安全的。
其餘狀況:在u001中 不給u002一點權重很難被訪問到,僅僅給u002權重致使其餘又不能訪問到,只能都加上權重。不知道是否是bug;
提問:這是否是讓這三臺發揮最大的效果呢?同時保障更安全的工做。