一、灰度發(fā)布原理說明
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供利川網(wǎng)站建設(shè)、利川做網(wǎng)站、利川網(wǎng)站設(shè)計(jì)、利川網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、利川企業(yè)網(wǎng)站模板建站服務(wù),10余年利川做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。灰度發(fā)布在百度百科中解釋:
灰度發(fā)布是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。AB test就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用A,一部分用戶開始用B,如果用戶對B沒有什么反對意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到B上面 來。灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度。
這里的用于WEB系統(tǒng)新代碼的測試發(fā)布,讓一部分(IP)用戶訪問新版本,一部分用戶仍然訪問正常版本,其原理如圖:
執(zhí)行過程:
1、 當(dāng)用戶請求到達(dá)前端代理服務(wù)Nginx,內(nèi)嵌的lua模塊解析Nginx配置文件中的lua腳本代碼;
2、 Lua變量獲得客戶端IP地址,去查詢memcached緩存內(nèi)是否有該鍵值,如果有返回值執(zhí)行@client_test,否則執(zhí)行@client。
3、 Location @client_test把請求轉(zhuǎn)發(fā)給部署了new版代碼的服務(wù)器,location @client把請求轉(zhuǎn)發(fā)給部署了normal版代碼的服務(wù)器,服務(wù)器返回結(jié)果。整個(gè)過程完成。
下面把安裝配置過程詳細(xì)說明。
二、安裝配置過程詳解
1、安裝nginx
安裝依賴包
yum-yinstallgccgcc-c++autoconflibjpeglibjpeg-devellibpnglibpng-develfreetypefreetype-devellibxml2libxml2-develzlibzlib-develglibcglibc-develglib2glib2-develbzip2bzip2-develncursesncurses-develcurlcurl-devele2fsprogse2fsprogs-develkrb5krb5-devellibidnlibidn-developensslopenssl-developenldapopenldap-develnss_ldapopenldap-clientsopenldap-serversmakepcre-develyum-yinstallgdgd2gd-develgd2-devellualua-develyum–yinstallmemcached
下載lua模塊、lua-memcache操作庫文件和nginx包
wgethttps://github.com/simpl/ngx_devel_kit/archive/v0.2.18.tar.gzwgethttps://github.com/chaoslawful/lua-nginx-module/archive/v0.8.5.tar.gzwgethttps://github.com/agentzh/lua-resty-memcached/archive/v0.11.tar.gzwgethttp://nginx.org/download/nginx-1.4.2.tar.gztarxvfnginx-1.4.2.tar.gz cdnginx-1.4.2/./configure--prefix=/soft/nginx/--with-http_gzip_static_module--add-module=/root/ngx_devel_kit-0.2.18/--add-module=/root/lua-nginx-module-0.8.5/makemakeinstall
拷貝lua的memcached操作庫文件
tarxvfv0.11.tar.gzcp-rlua-resty-memcached-0.11/lib/resty//usr/lib64/lua/5.1/
配置nginx
#vim/soft/nginx/conf/nginx.conf worker_processes1; events{ worker_connections1024; } http{ includemime.types; default_typeapplication/octet-stream; sendfileon; keepalive_timeout65; proxy_next_upstreamerrortimeout; proxy_redirectoff; proxy_set_headerHost$host; proxy_set_headerX-Real-IP$http_x_forwarded_for; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; client_max_body_size100m; client_body_buffer_size256k; proxy_connect_timeout180; proxy_send_timeout180; proxy_read_timeout180; proxy_buffer_size8k; proxy_buffers864k; proxy_busy_buffers_size128k; proxy_temp_file_write_size128k; upstreamclient{ server192.168.200.29:80; } upstreamclient_test{ server192.168.200.29:81; } server{ listen80; server_namelocalhost; location/{ content_by_lua\' clientIP=ngx.req.get_headers()["X-Real-IP"]ifclientIP==nilthen clientIP=ngx.req.get_headers()["x_forwarded_for"] endifclientIP==nilthen clientIP=ngx.var.remote_addr end localmemcached=require"resty.memcached" localmemc,err=memcached:new()ifnotmemcthen ngx.say("failedtoinstantiatememc:",err) return end localok,err=memc:connect("127.0.0.1",11211)ifnotokthen ngx.say("failedtoconnect:",err) return end localres,flags,err=memc:get(clientIP)iferrthen ngx.say("failedtogetclientIP",err) return endifres=="1"then ngx.exec("@client_test") return end ngx.exec("@client") \'; } location@client{ proxy_passhttp://client; } location@client_test{ proxy_passhttp://client_test; } location/hello{ default_type\'text/plain\'; content_by_lua\'ngx.say("hello,lua")\'; } location=/50x.html{ roothtml; } } }
檢測配置文件。
#/soft/nginx/sbin/nginx-t nginx:theconfigurationfile/soft/nginx/conf/nginx.confsyntaxisok nginx:configurationfile/soft/nginx/conf/nginx.conftestissuccessful
啟動nginx
/soft/nginx/sbin/nginx
啟動memcached服務(wù)
memcached-unobody-m1024-c2048-p11211–d
三、測試驗(yàn)證
測試lua模塊是否運(yùn)行正常
訪問http://測試服務(wù)器ip地址/hello。如果顯示:hello,lua 表示安裝成功。
在另一臺測試機(jī)(這里是192.168.200.29)設(shè)置兩個(gè)虛擬主機(jī),一個(gè)用80端口是執(zhí)行正常代碼,一個(gè)是81端口執(zhí)行灰度測試代碼。
在memcached中以你的客戶機(jī)IP地址為key,value值為1。這里我的IP是192.168.68.211.
telnetlocalhost11211Trying::1... Connectedtolocalhost. Escapecharacteris\'^]\'. set192.168.68.2110011STORED get192.168.68.211VALUE192.168.68.211911END quit
注意:
set后第一個(gè)值為key值。
192.168.68.211這是key值是需要灰度測試的IP地址;
0 表示一個(gè)跟該key有關(guān)的自定義數(shù)據(jù);
3600 表示該key值的有效時(shí)間;
1 表示key所對應(yīng)的value值的字節(jié)數(shù)。
下面訪問Nginx,效果符合預(yù)期,我的IP已經(jīng)在memcached中存儲值,所以請求轉(zhuǎn)發(fā)給執(zhí)行灰度測試代碼的主機(jī)。
從memcached刪除我的主機(jī)IP值。
再次請求Nginx,請求轉(zhuǎn)發(fā)給執(zhí)行正常代碼內(nèi)容的主機(jī)。
整個(gè)配置并不復(fù)雜,整個(gè)判斷過程對服務(wù)的影響非常小。如果需要使用這個(gè)系統(tǒng)最好自己看看lua腳本。
分享標(biāo)題:利用nginx+lua+memcache實(shí)現(xiàn)灰度發(fā)布
分享URL:http://m.newbst.com/article0/cppsio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、用戶體驗(yàn)、商城網(wǎng)站、網(wǎng)站維護(hù)、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)