溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)

發(fā)布時間:2020-07-31 09:40:26 來源:網(wǎng)絡(luò) 閱讀:463 作者:明天_意外 欄目:系統(tǒng)運維

使用Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
大致架構(gòu)如上圖所示
1、設(shè)置Windows服務(wù)端
公司使用好多IIS作為web服務(wù),其中在session共享哪里浪費了好長時間。
剛開始打算使用Sqlserver數(shù)據(jù)庫共享,后來發(fā)現(xiàn)IIS自帶session共享。
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
如上圖所示 在會話狀態(tài)中 連接字符串使用另外一臺服務(wù)器IIS服務(wù)的session即可,當然3臺4臺服務(wù)器也照樣可以設(shè)置,個人理解為只要能圍成一個圓它們就會互相共享,互相匯聚。設(shè)置方法,運行regedit → 打開注冊表 → 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters節(jié)點 → 將 AllowRemoteConnection 的鍵值設(shè)置成“1”(1 為允許遠程電腦的連接,0 代表禁止)
親測有效
還有一個就是設(shè)置站點的時候,因為我們是一個iis上面有多個站點,平時使用就是下圖這樣的
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)

新建一個站點,使用的是80端口,然后站點下面有好多的虛擬目錄或者是應用程序(在此必須設(shè)置為應用程序),因為我們是在磁盤中新建一個目錄然后在目錄下面放了好多的站點,因為程序?qū)懙臅r候必須要在一級目錄,所以只能轉(zhuǎn)化為程序才能正常訪問。
回到正題題,因為現(xiàn)在用nginx做負載均衡,所以就涉及到Nginx的后端檢測模塊,在此建議一個站點就是一個網(wǎng)站,站點多了可以使用不同的端口,且不可像以上那樣,具體原因后面有詳細介紹。
以上就是windows系統(tǒng)設(shè)置的過程。
2、開始搭建Linux服務(wù)
首先是設(shè)置Nginx 這里用到了Nginx的反向代理模塊和后端server的健康狀態(tài)檢查模塊
1)、搭建nginx,關(guān)閉防火墻,關(guān)閉selinux重啟服務(wù)器
2)、因為需要用到后端檢測模塊是第三方模塊,所以需要編譯安裝Nginx
使用的Nginx版本為nginx-1.14.0.tar.gz,第三方模塊為nginx_upstream_check_module-master.zip
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
為什么使用nginx-1.14.0.tar.gz,因為第三方模塊里面check_1.14.0+.patch只看到了1.14的(最高的),如果使用新版本的話 怕是不支持
3)、先給Nginx打補丁
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
因為我的已經(jīng)打過了。所有會這樣提示,而正常的提示是下圖:
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
出現(xiàn)如圖所示則表示打補丁成功
4)、編譯Nginx
首先直接安裝開發(fā)工具包組,后期編譯的時候出錯少
yum groupinstall Development-tools -y 這個等待時間較長
另外安裝:yum -y install perl-devel perl-ExtUtils-Embed 這個包平時沒用過,但是如果不安裝的話 編譯第三方模塊的時候會報錯,直接安裝了吧
Nginx編譯參數(shù):
./configure --prefix=/usr/local/nginx1.14 --conf-path=/usr/local/nginx1.14/nginx.conf --error-log-path=/usr/local/nginx1.14/logs/error.log --http-log-path=/usr/local/nginx1.14/logs/access.log --with-http_stub_status_module --add-module=/home/nginx_upstream_check_module-master --with-http_gunzip_module --with-http_gzip_static_module --with-http_ssl_module --with-http_v2_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_auth_request_module --with-http_sub_module --with-http_perl_module --with-perl_modules_path=/usr/local/nginx1.14/modules/
以上是nginx編譯參數(shù),按照上面編譯夠了,具體不知道編譯安裝流程的可以百度或google下這里不再贅述
如果順利通過的話 則會在/usr/local/下面看到ngnx1.14的文件夾了
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
如圖所示
下面開始配置nginx,配置文件nginx.conf 建議先行備份nginx.conf.back
5)、配置nginx.conf
user www; 啟動nginx的時候用的用戶
worker_processes auto; 限制可支持auto,不用再寫cpu個數(shù)了

#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

#access_log  logs/access.log  main;
sendfile        on;
#tcp_nopush     on;
keepalive_timeout  65; 設(shè)置超時時間

gzip  on;
upstream ERP {  這里定義了后端服務(wù)器 一共兩臺,但是這都是使用的80端口(默認),后面需要修改
    ip_hash;
    server 192.168.3.100;
    server 192.168.0.229;
    check interval=3000 rise=2 fall=5 timeout=1000 type=http;  這里就使用到了剛打的補丁了,后端健康狀態(tài)檢查,在此建議設(shè)置為

Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
一秒一次成功一次則成功,失敗一次則失敗,對于要求比較高的,建議可以再縮小都行,這里是可一個坑,如果設(shè)置的時間過長的話,刷新的時候會刷出錯誤頁面出來。因為本來已經(jīng)停止的IIS在Nginx中還沒有給剔除掉,所以Nginx還會在這個時間段內(nèi),把請求調(diào)度給后端已經(jīng)停止的Server
”簡單介紹下后端健康檢查這個模塊。這個模塊nginx_upstream_check_module-master.zip應該是淘寶做的,淘寶的tengine默認就支持此模塊,在其官網(wǎng)中有說明
Tengine是由淘寶網(wǎng)發(fā)起的Web服務(wù)器項目。它在Nginx的基礎(chǔ)上,針對大訪問量網(wǎng)站的需求,添加了很多高級功能和特性。Tengine的性能和穩(wěn)定性已經(jīng)在大型的網(wǎng)站如淘寶網(wǎng),天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩(wěn)定、安全、易用的Web平臺。
從2011年12月開始,Tengine成為一個開源項目,Tengine團隊在積極地開發(fā)和維護著它。Tengine團隊的核心成員來自于淘寶、搜狗等互聯(lián)網(wǎng)企業(yè)。Tengine是社區(qū)合作的成果,我們歡迎大家參與其中,貢獻自己的力量?!?br/>參數(shù)的含義是:
interval:檢查請求的間隔時間。
fall(fall_count):在fall_count失敗檢查后,服務(wù)器被標記為關(guān)閉。
rise(rise_count):在rise_count成功檢查后,服務(wù)器被標記。
timeout:檢查請求的超時。
default_down:指定后端服務(wù)器的初始狀態(tài),默認為關(guān)閉。
type:檢查協(xié)議類型:
tcp:一個簡單的TCP套接字連接并查看一個字節(jié)。
ssl_hello:發(fā)送客戶端SSL hello數(shù)據(jù)包并接收服務(wù)器SSL hello數(shù)據(jù)包。
http:發(fā)送http請求數(shù)據(jù)包,接收并解析http響應,以診斷上游服務(wù)器是否處于活動狀態(tài)。
mysql:連接到mysql服務(wù)器,接收問候響應以診斷上游服務(wù)器是否處于活動狀態(tài)。
ajp:發(fā)送AJP Cping數(shù)據(jù)包,接收并解析AJP Cpong響應,以診斷上游服務(wù)器是否處于活動狀態(tài)。
port:在后端服務(wù)器中指定檢查端口。它可以與原始服務(wù)器端口不同。默認端口為0,表示與原始后端服務(wù)器相同。在tengine-1.4.0之后添加此選項。

check_http_send "GET / HTTP/1.0\r\n\r\n";
而我沒有使用tengine,因為我弄了半個多小時就配置一個模塊命令,總是報錯,所以不得已只有開頭那里給nginx打補丁了....
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
location /nginxcon {
stub_status;
}
#access_log logs/host.access.log main;
location ^~ /XQZC {
proxy_pass http://ERP/XQZC;
}
location ^~ /BJ_CS {
proxy_pass http://ERP/BJ_CS;
}
location /status {
check_status;
access_log off;

allow SOME.IP.ADD.RESS;

       # deny all;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

還有兩項值得說明的
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
如下圖所示:
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
當然它會一直在檢查的
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
所以上面設(shè)置的 check interval=1000 rise=1 fall=1 timeout=1000 type=http; 時間間隔完全沒有問題呢
在此以上就是Nginx的完整配置,但是其中有一個非常大的問題,就是在檢查后端服務(wù)器的時候,因為這里只設(shè)置了80端口的http的健康檢查,而我們在一個網(wǎng)站里面又添加了好多的應用程序
那么問題來了:如果我們修改其中一個應用程序的時候(一下簡稱小網(wǎng)站),例如更新,勢必要停止此iis才能替換其中的一個小網(wǎng)站,如果停止了IIS則所有的session都會轉(zhuǎn)發(fā)到另外一臺服務(wù)器,而我們只是維護其中的一個小網(wǎng)站,加入說有10個小網(wǎng)站,那么剩下的9個是完全沒有問題的
這樣就造成了資源浪費
所有要修改為,一個小網(wǎng)站建立一個站點,使用不同的款口號
那么這樣的話 在維護一個小網(wǎng)站的時候只需要停止其中一個而不影響其他的,在定義Upstream的時候必須要按照端口號分開定義即可,那就變成下面這個樣子的
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)

如圖所示,這樣就好多了,它也只檢測一個就好,這樣就成了下圖所示的
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
那個不能用 咱就停止那個................... 如此最好啊 呵呵...............
最后配置keepalived
這個就比較簡單了,直接yum安裝keepalived
layer 3層檢測:進行ICMP ping包檢測,確認主機是否存活,如果異常,則會該主機從服務(wù)器集群中剔除;
layer 4層檢測:進行端口檢測,例如80、3306等,端口不通時,將服務(wù)器從集群中剔除;
layer 7層檢測:這個就是基于應用的了,如http返回碼是否為200,確認主機是否正常。
在此我們使用第三個..
先說一下遇到的坑吧
1)、Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)

此處剛開始一直直接使用的命令,網(wǎng)上所有的教程都讓直接使用命令,
但是新版本的在此配置段好像不支持直接使用命令檢查了,也不知道是我設(shè)置的不對 還是真的不能了,所以在此使用腳本檢查,腳本內(nèi)容還待優(yōu)化,暫且內(nèi)容如下:
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
keepalived健康檢查降權(quán)規(guī)則,默認檢查結(jié)果失敗,失敗就會降權(quán),當然我們也可以修改配置文件為成功則降權(quán)的,暫且使用默認。如下圖:
Nginx+Keepalived+iis+Memcached搭建高可用的集群服務(wù)
如果兩個服務(wù)器都有vip的話 請繼續(xù)清空防火墻關(guān)閉selinux 就是他們引起的
備用keepalived直接復制過去主配置文件,修改 state和prioriy兩項即可

寫的有點著急了,不好的地方歡迎大家留言指正,謝謝!!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI