Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验
緣起
最近一直在研究日志收集系統(tǒng)的框架,之前在線游戲的數(shù)據(jù)發(fā)送都是由游戲服務(wù)器發(fā)送的,我來之前一直是rsync傳輸,也還算穩(wěn)定。但現(xiàn)在上了單機(jī)游戲,只能由手機(jī)客戶端直接發(fā)送,dau比較高,最近很火的<<貪吃蛇>>在海外上線,一個(gè)星期dau已經(jīng)達(dá)到千萬級(jí)別。初步方案,lvs做4層負(fù)載均衡,下掛nginx做7層轉(zhuǎn)發(fā),數(shù)據(jù)直接入kafaka。一直不太喜歡通過reload修改nginx upstream,剛好看到微博的upsync覺得很有價(jià)值,于是拿來研究了一下。
感興趣的童鞋可以看下這篇文章http://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075&idx=1&sn=5f3b8c007981a2d048766f808f8c8c98&scene=2&srcid=0223XScbJrOv7noogVX6T60Q&from=timeline&isappinstalled=0#wechat_redirect(Upsync:微博開源基于Nginx容器動(dòng)態(tài)流量管理方案 )
consul
upsync的upstream可以從consul(https://www.consul.io/intro/getting-started/install.html)或etcd中獲取,本文使用的是consul這個(gè)用golang寫的服務(wù)注冊(cè)與發(fā)現(xiàn)框架,據(jù)我所知consul在國內(nèi)也用的非常廣,比如微博,今日頭條等。所以需要先安裝consul,consul的getting-started文檔用vagrant(https://www.vagrantup.com/docs/getting-started/)搭建集群的,vagrant是用ruby開發(fā)的用來構(gòu)建虛擬開發(fā)環(huán)境的工具,有點(diǎn)類似docker,不過vagrant是依賴與虛擬機(jī)的,比如virtualbox
下面是我ubuntu主機(jī)安裝操作:?
1.安裝virtualbox和vagrant
2.下載vagrant鏡像?
由于hashicorp下載太慢,我是在百度云(https://pan.baidu.com/s/1pLzVhnP)上找的一個(gè)ubuntu_trusty_64.box鏡像。
把ubuntu_trusty_64.box加載到vagrant中,并命名為ubuntu
3.創(chuàng)建Vagrantfile?
在當(dāng)前目錄下創(chuàng)建Vagrantfile,類似于dockerfile
4.啟動(dòng)虛擬機(jī)并登陸到n1
vagrent up將會(huì)讀取當(dāng)前目錄的Vagrantfile,創(chuàng)建兩個(gè)虛擬機(jī)n1,n2,并安裝consul到/usr/bin/consul目錄。
5.啟動(dòng)consul
consul agent -server -bootstrap-expect=1 -data-dir=/tmp/consul -node=agent-one -bind=172.20.20.10 -config-dir=/etc/consul.d -client 0.0.0.0 -ui
n1將會(huì)作為leader節(jié)點(diǎn),并開啟ui界面,可通過http://172.20.20.10:8500訪問consul管理界面?
6.把upstream存到consul
將會(huì)把upsteam 172.20.20.11:8080存到consul的kv store中。?
到這里consul就結(jié)束了
nginx-upsync-module+nginx_upstream_check_module
upsync(https://github.com/weibocom/nginx-upsync-module)是微博開源的,以及在微博廣泛使用了,下面將安裝上面這兩個(gè)nginx擴(kuò)展
1.下載對(duì)應(yīng)軟件包?
如果在宿主機(jī),最好在Vagrantfile目錄下載,Vagrant會(huì)共享當(dāng)前目錄到虛擬機(jī)的/vagrant?
目錄,如果在虛擬機(jī)則可以在/vagrant目錄下載。
需要注意版本,具體看upsync Readme,由于我使用時(shí)upsync master支持nginx1.9+,所以我使用了nginx1.9.2
vagrant ssh n2 wget 'http://nginx.org/download/nginx-1.9.2.tar.gz' git clone https://github.com/weibocom/nginx-upsync-module git clone https://github.com/xiaokai-wang/nginx_upstream_check_module
nginx_upstream_check_module需要根據(jù)nginx不同版本給nginx打patch,具體看Readme,upstream_check是tengine(http://tengine.taobao.org/documentation_cn.html)中的模塊,主要作用用于upstream的健康檢查。當(dāng)遇到不可用的upstream時(shí),nginx雖然會(huì)自動(dòng)使用下一個(gè)upstream,但下一次還是會(huì)重試該upstream,導(dǎo)致無效請(qǐng)求增多。upstream_check檢測到不可用會(huì)剔除該upsteam,該特性還是很有用的。
2.編譯安裝nginx
sudo apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make build-essential wget 'http://nginx.org/download/nginx-1.9.2.tar.gz' git clone https://github.com/weibocom/nginx-upsync-module git clone https://github.com/xiaokai-wang/nginx_upstream_check_module patch -p0 < /vagrant/nginx_upstream_check_module/check_1.9.2+.patch./configure --add-module=/vagrant/nginx_upstream_check_module ?--add-module=/vagrant/nginx-upsync-module? make && make install
3.配置nginx?
nginx會(huì)默認(rèn)安裝到/usr/local/nginx目錄下
將之前的nginx.conf備份,用下面內(nèi)容替換?
創(chuàng)建check.conf?
4.啟動(dòng)nginx
我們?cè)谏厦娼榻Bconsul的最好增加一個(gè)172.20.20.11:8080 upstream, 在n2上我們開一個(gè)python的http server
/usr/local/nginx/sbin/nginx python -m SimpleHTTPServer 8080
大功告成,看下成果
請(qǐng)將下面的172.20.20.13地址換成你們的172.20.20.11,我開了很多個(gè)虛擬機(jī)^^^^
首頁就是用python開的simplehttpserver?
upstream列表?
upstream狀態(tài)?
---------------------?
作者:yueguanghaidao?
來源:CSDN?
原文:https://blog.csdn.net/yueguanghaidao/article/details/52801043?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty+consul动态配置
- 下一篇: 自动化运维之 部署Saltstack 并