一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Nginx容器動態(tài)流量管理方案

 waitingnothing 2017-03-15

緣起

最近一直在研究日志收集系統(tǒng)的框架,之前在線游戲的數(shù)據(jù)發(fā)送都是由游戲服務(wù)器發(fā)送的,我來之前一直是rsync傳輸,也還算穩(wěn)定。但現(xiàn)在上了單機(jī)游戲,只能由手機(jī)客戶端直接發(fā)送,dau比較高,最近很火的<<貪吃蛇>>在海外上線,一個星期dau已經(jīng)達(dá)到千萬級別。初步方案,lvs做4層負(fù)載均衡,下掛nginx做7層轉(zhuǎn)發(fā),數(shù)據(jù)直接入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容器動態(tài)流量管理方案 )

consul

upsync的upstream可以從consul(https://www./intro/getting-started/install.html)或etcd中獲取,本文使用的是consul這個用golang寫的服務(wù)注冊與發(fā)現(xiàn)框架,據(jù)我所知consul在國內(nèi)也用的非常廣,比如微博,今日頭條等。所以需要先安裝consul,consul的getting-started文檔用vagrant(https://www./docs/getting-started/)搭建集群的,vagrant是用ruby開發(fā)的用來構(gòu)建虛擬開發(fā)環(huán)境的工具,有點(diǎn)類似docker,不過vagrant是依賴與虛擬機(jī)的,比如virtualbox

下面是我ubuntu主機(jī)安裝操作:
1.安裝virtualbox和vagrant

sudo apt-get install virtualbox wget https://releases./vagrant/1.8.6/vagrant_1.8.6_x86_64.deb sudo dpkg -i vagrant_1.8.6_x86_64.deb
  • 1
  • 2
  • 3

2.下載vagrant鏡像
由于hashicorp下載太慢,我是在百度云(https://pan.baidu.com/s/1pLzVhnP)上找的一個ubuntu_trusty_64.box鏡像。

vagrant box add ubuntu ~/vagrant_start/ubuntu_trusty_64.box
  • 1

把ubuntu_trusty_64.box加載到vagrant中,并命名為ubuntu

3.創(chuàng)建Vagrantfile
在當(dāng)前目錄下創(chuàng)建Vagrantfile,類似于dockerfile

# -*- mode: ruby -*- # vi: set ft=ruby : $script = <<SCRIPT echo Installing dependencies... sudo apt-get update sudo apt-get install -y unzip curl echo Fetching Consul... cd /tmp/ curl https://releases.hashicorp.com/consul/0.6.4/consul_0.6.4_linux_amd64.zip -o consul.zip echo Installing Consul... unzip consul.zip sudo chmod x consul sudo mv consul /usr/bin/consul sudo mkdir /etc/consul.d sudo chmod a w /etc/consul.d SCRIPT # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = '2' Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = 'ubuntu' config.vm.provision 'shell', inline: $script config.vm.define 'n1' do |n1| n1.vm.hostname = 'n1' n1.vm.network 'private_network', ip: '172.20.20.10' end config.vm.define 'n2' do |n2| n2.vm.hostname = 'n2' n2.vm.network 'private_network', ip: '172.20.20.11' end end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

4.啟動虛擬機(jī)并登陸到n1

vagrant up vagrant ssh n1
  • 1
  • 2

vagrent up將會讀取當(dāng)前目錄的Vagrantfile,創(chuàng)建兩個虛擬機(jī)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
  • 1

n1將會作為leader節(jié)點(diǎn),并開啟ui界面,可通過http://172.20.20.10:8500訪問consul管理界面
6.把upstream存到consul

curl -X PUT http://172.20.20.10:8500/v1/kv/upstreams/test/172.20.20.11:8080
  • 1

將會把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)是微博開源的,以及在微博廣泛使用了,下面將安裝上面這兩個nginx擴(kuò)展

1.下載對應(yīng)軟件包
如果在宿主機(jī),最好在Vagrantfile目錄下載,Vagrant會共享當(dāng)前目錄到虛擬機(jī)的/vagrant
目錄,如果在虛擬機(jī)則可以在/vagrant目錄下載。

需要注意版本,具體看upsync Readme,由于我使用時upsync master支持nginx1.9 ,所以我使用了nginx1.9.2

vagrant ssh n2 wget 'http:///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
  • 1
  • 2
  • 3
  • 4

nginx_upstream_check_module需要根據(jù)nginx不同版本給nginx打patch,具體看Readme,upstream_check是tengine(http://tengine./documentation_cn.html)中的模塊,主要作用用于upstream的健康檢查。當(dāng)遇到不可用的upstream時,nginx雖然會自動使用下一個upstream,但下一次還是會重試該upstream,導(dǎo)致無效請求增多。upstream_check檢測到不可用會剔除該upsteam,該特性還是很有用的。

2.編譯安裝nginx

sudo apt-get install libreadline-dev libncurses5-dev libpcre3-dev libssl-dev perl make build-essential wget 'http:///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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3.配置nginx
nginx會默認(rèn)安裝到/usr/local/nginx目錄下

cd /usr/local/nginx mkdir /usr/local/nginx/conf/conf.d mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf_back useradd -M nginx mkdir /var/log/nginx mkdir /usr/local/nginx/conf/servers
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

將之前的nginx.conf備份,用下面內(nèi)容替換
vim /usr/local/nginx/conf/nginx.conf

user nginx; worker_processes 5; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /usr/local/nginx/conf/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 /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /usr/local/nginx/conf/conf.d/*.conf; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

創(chuàng)建check.conf
vim /usr/local/nginx/conf/conf.d/check.conf

upstream test { # fake server otherwise ngx_http_upstream will report error when startup server 127.0.0.1:11111; # all backend server will pull from consul when startup and will delete fake server upsync 172.20.20.10:8500/v1/kv/upstreams/test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off; upsync_dump_path /usr/local/nginx/conf/servers/servers_test.conf; check interval=1000 rise=2 fall=2 timeout=3000 type=http default_down=false; check_http_send 'HEAD / HTTP/1.0\r\n\r\n'; check_http_expect_alive http_2xx http_3xx; } upstream bar { server 172.20.20.11:8080 weight=1 fail_timeout=10 max_fails=3; } server { listen 80; location = / { proxy_pass http://test; } location = /upstream_show { upstream_show; } location = /upstream_status { check_status; access_log off; } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

4.啟動nginx

我們在上面介紹consul的最好增加一個172.20.20.11:8080 upstream, 在n2上我們開一個python的http server

/usr/local/nginx/sbin/nginx python -m SimpleHTTPServer 8080
  • 1
  • 2

大功告成,看下成果

請將下面的172.20.20.13地址換成你們的172.20.20.11,我開了很多個虛擬機(jī)^^^^

首頁就是用python開的simplehttpserver
這里寫圖片描述

upstream列表
這里寫圖片描述

upstream狀態(tài)
這里寫圖片描述

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩免费国产91在线| 亚洲精品成人综合色在线| 深夜福利亚洲高清性感| 欧美成人国产精品高清| 日本加勒比系列在线播放| 极品熟女一区二区三区| 久久99亚洲小姐精品综合| 免费亚洲黄色在线观看| 国产成人精品午夜福利| 国产一区二区三区草莓av| 亚洲一区二区三区国产| 欧美色欧美亚洲日在线| 日韩精品区欧美在线一区| 婷婷开心五月亚洲综合| 美日韩一区二区精品系列| 国内精品美女福利av在线| 中文字幕日韩精品人一妻| 天堂热东京热男人天堂| 亚洲av成人一区二区三区在线| 日韩人妻一区二区欧美| 国产午夜精品在线免费看| 成人精品日韩专区在线观看| 欧美日韩在线视频一区| 亚洲人午夜精品射精日韩| 精品人妻一区二区三区四在线| 九九热在线视频观看最新| 欧美黄色黑人一区二区| 正在播放玩弄漂亮少妇高潮| 欧美日韩亚洲国产精品| 亚洲专区中文字幕视频| 久久精品亚洲欧美日韩| 日本不卡在线视频你懂的| 少妇被粗大进猛进出处故事| 国产盗摄精品一区二区视频| 国产欧美一区二区三区精品视| 国产精品午夜一区二区三区 | 亚洲欧美日韩熟女第一页| 日本久久精品在线观看| 亚洲视频一区自拍偷拍另类| 国产又粗又猛又长又大| 久久99精品日韩人妻|