Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验
緣起
最近一直在研究日志收集系統的框架,之前在線游戲的數據發送都是由游戲服務器發送的,我來之前一直是rsync傳輸,也還算穩定。但現在上了單機游戲,只能由手機客戶端直接發送,dau比較高,最近很火的<<貪吃蛇>>在海外上線,一個星期dau已經達到千萬級別。初步方案,lvs做4層負載均衡,下掛nginx做7層轉發,數據直接入kafaka。一直不太喜歡通過reload修改nginx upstream,剛好看到微博的upsync覺得很有價值,于是拿來研究了一下。
感興趣的童鞋可以看下這篇文章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容器動態流量管理方案 )
consul
upsync的upstream可以從consul(https://www.consul.io/intro/getting-started/install.html)或etcd中獲取,本文使用的是consul這個用golang寫的服務注冊與發現框架,據我所知consul在國內也用的非常廣,比如微博,今日頭條等。所以需要先安裝consul,consul的getting-started文檔用vagrant(https://www.vagrantup.com/docs/getting-started/)搭建集群的,vagrant是用ruby開發的用來構建虛擬開發環境的工具,有點類似docker,不過vagrant是依賴與虛擬機的,比如virtualbox
下面是我ubuntu主機安裝操作:?
1.安裝virtualbox和vagrant
2.下載vagrant鏡像?
由于hashicorp下載太慢,我是在百度云(https://pan.baidu.com/s/1pLzVhnP)上找的一個ubuntu_trusty_64.box鏡像。
把ubuntu_trusty_64.box加載到vagrant中,并命名為ubuntu
3.創建Vagrantfile?
在當前目錄下創建Vagrantfile,類似于dockerfile
4.啟動虛擬機并登陸到n1
vagrent up將會讀取當前目錄的Vagrantfile,創建兩個虛擬機n1,n2,并安裝consul到/usr/bin/consul目錄。
5.啟動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將會作為leader節點,并開啟ui界面,可通過http://172.20.20.10:8500訪問consul管理界面?
6.把upstream存到consul
將會把upsteam 172.20.20.11:8080存到consul的kv store中。?
到這里consul就結束了
nginx-upsync-module+nginx_upstream_check_module
upsync(https://github.com/weibocom/nginx-upsync-module)是微博開源的,以及在微博廣泛使用了,下面將安裝上面這兩個nginx擴展
1.下載對應軟件包?
如果在宿主機,最好在Vagrantfile目錄下載,Vagrant會共享當前目錄到虛擬機的/vagrant?
目錄,如果在虛擬機則可以在/vagrant目錄下載。
需要注意版本,具體看upsync Readme,由于我使用時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需要根據nginx不同版本給nginx打patch,具體看Readme,upstream_check是tengine(http://tengine.taobao.org/documentation_cn.html)中的模塊,主要作用用于upstream的健康檢查。當遇到不可用的upstream時,nginx雖然會自動使用下一個upstream,但下一次還是會重試該upstream,導致無效請求增多。upstream_check檢測到不可用會剔除該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會默認安裝到/usr/local/nginx目錄下
將之前的nginx.conf備份,用下面內容替換?
創建check.conf?
4.啟動nginx
我們在上面介紹consul的最好增加一個172.20.20.11:8080 upstream, 在n2上我們開一個python的http server
/usr/local/nginx/sbin/nginx python -m SimpleHTTPServer 8080
大功告成,看下成果
請將下面的172.20.20.13地址換成你們的172.20.20.11,我開了很多個虛擬機^^^^
首頁就是用python開的simplehttpserver?
upstream列表?
upstream狀態?
---------------------?
作者:yueguanghaidao?
來源:CSDN?
原文:https://blog.csdn.net/yueguanghaidao/article/details/52801043?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的Nginx容器动态流量管理方案-nginx-upsync-module+nginx_upstream_check_module初体验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty+consul动态配置
- 下一篇: nginx+upsync+consul