精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于 Docker 的高可用 Rails 集群方案探索

云計算
本文是暴走漫畫團隊關于自動化高可用集群方案的探索。主要目的是減少人工接入,實現自動化。主要是用了consul和registrator兩個工具。

0x0 問題

運維從來都是一個“不起眼”的大問題。運維工作還特別瑣碎,一般要花去工程師大量的時間,同時還有突發性,對工程師機動性要求比較高。所以運維自動化一直在困擾暴走漫畫團隊。

雖說大部分運維工作都交給第三方云服務提供商了,但是平時還是有一些機器的維護之類的,繁瑣的事情。

我 做的最多的應該就是加減服務器了。暴漫的流量趨勢非常規律,每年寒暑假是訪問的高峰期,一般會比平時流量高出2倍。所以每年寒暑假之前都要添加足量的服務 器以應對馬上到來的流量高峰,而在寒暑假結束之后,要去掉一部分機器,以節省開支。剛開始完全是人肉運維,我一個人先去開5臺機器,然后一個個上去改配置 文件之類的,感覺好傻。后面就用了ansible作為自動化運維工具,這個要比puppet和chef輕量很多,對付我們這些簡單的運維工作綽綽有余。 于是現在就變成了開完機器,用ansible同步配置,代碼,啟動app server,然后手動更新nginx配置。

使用ansible之后其實已經輕松很多了,但是還不夠,我想象中的自動化集群,應該可以隨意增加刪除node,node不可用的時候自動刪除,當然這些都不能影響服務的訪問。

下面介紹一種自動化的Rails集群方案

0x1 相關技術

  • docker
  • hashicorp/consul(https://github.com/hashicorp/consul)
  • hashicorp/consul-template(https://github.com/hashicorp/consul-template)
  • hashicorp/registrator(https://github.com/gliderlabs/registrator)

0X2 整體架構

基于 Docker 的高可用 Rails 集群方案探索

0x3 實踐

由于不是科普帖,各種工具的詳細信息就不自己介紹了。

  consul & registrator

這兩個工具是集群中每個節點的基礎服務。我在一臺機器上,所以把consul cluster給省掉了,只用了一個consul節點。下面是docker-compose配置。

consul:

hostname: node1

image: progrium/consul

command: -server -bootstrap -advertise 172.17.42.1

ports:

- "8400:8400"

- "8500:8500"

- "8600:53/udp"

registrator:

image: gliderlabs/registrator

command: consul://consul:8500

hostname: registrator1

volumes:

- /var/run/docker.sock:/tmp/docker.sock

links:

- consul

需要注意的是consul的啟動參數里的advertise。應該聲明為host機器的docker0的ip。如果不聲明的話會默認使用容器ip,這樣registrator注冊的設備ip都是不可訪問的。

以上配置啟動之后一套自動服務器發現功能就算完工了。

#p#

接下來,我們配置一個web應用測試一下。

web:

image: nginx

volumes:

- ./sites-enabled:/etc/nginx/conf.d

ports:

- "80:80"

links:

- rails

rails:

image: tutum/hello-world

ports:

- "80"

這個配置生成了nginx和rails,并且掛載了本地的sites-enabled文件夾作為nginx的配置來源。注意rails的ports是隨機的。

在sites-enabled中配置nginx server已rails作為backend。

  1. upstream backend { 
  2. server { 
  3.     server_name "10.0.2.15"
  4.     location / { 
  5.             proxy_pass http://backend; 
  6.     } 
  7. }  

對你并沒有看錯, upstream并沒有定義可用的backend node。這個配置將會有consul-template根據服務列表自動填充。

讓我們啟動這個web應用,訪問80端口是無法訪問的 應為沒有backend node。

接下來需要安裝consule-template, 在github下載對應的release。

然后創建一個配置文件ct-nginx.conf

  1. consul = "127.0.0.1:8500" 
  2. log_level = "warn" 
  3.  
  4. template { 
  5.     source = "/home/vagrant/nginx.ctmpl" 
  6.     destination = "/home/vagrant/sites-enabled/backend.conf" 
  7.     command = "docker-compose -f /home/vagrant/docker-compose.yml restart web" 
  8. }  

我有映射consul的端口,所以直接使用了127.0.0.1。source就是我們配置文件的模板。如下

  1. upstream backend { 
  2.     {{range service "hello-world"}} 
  3.     server {{.Address}}:{{.Port}};{{end}} 
  4. server { 
  5.     server_name "10.0.2.15"
  6.     location / { 
  7.             proxy_pass http://backend; 
  8.     } 

consul-template提供了方便的模板查詢語句,可以直接從consul中查詢并渲染出配置文件。這個模板中就找出了所有名字為“hello-world”的service,并且循環輸出service對應的Address,也就是服務ip,Port。

接著看ct-nginx.conf,destination代表模板生成完畢之后的位置, 這里直接放在nginx的配置文件夾,***command是生成配置后的動作,可以重啟各種服務。我們這里在更新nginx之后重啟生效。

OK,配置已經妥當,consul和registrator也已經啟動, 讓我們看看當前的服務列表。

  1. $ curl localhost:8500/v1/catalog/service/hello-world?pretty 
  2. $ [] 

當前并沒有注冊名為hello_world的服務。

#p#

稍微提一下registrator注冊服務的命名機制,registaor默認是通過提取容器各種參數來生成的的服務參數

比如

  1. docker run -d --name nginx.0 -p 4443:443 -p 8000:80 progrium/nginx 

生成的服務信息如下

  1.     "ID""hostname:nginx.0:443"
  2.     "Name""nginx-443"
  3.     "Port": 4443, 
  4.     "IP""192.168.1.102"
  5.     "Tags": [], 
  6.     "Attrs": {}, 
  7. }, 
  8.     "ID""hostname:nginx.0:80"
  9.     "Name""nginx-80"
  10.     "Port": 8000, 
  11.     "IP""192.168.1.102"
  12.     "Tags": [], 
  13.     "Attrs": {} 

當然也可以通過環境變量來指定

  1. $ docker run -d --name nginx.0 -p 4443:443 -p 8000:80 \ 
  2.            -e "SERVICE_443_NAME=https" \ 
  3.            -e "SERVICE_443_ID=https.12345" \ 
  4.            -e "SERVICE_443_SNI=enabled" \ 
  5.            -e "SERVICE_80_NAME=http" \ 
  6.            -e "SERVICE_TAGS=www" progrium/nginx 
  1.     "ID""https.12345"
  2.     "Name""https"
  3.     "Port": 4443, 
  4.     "IP""192.168.1.102"
  5.     "Tags": ["www"], 
  6.     "Attrs": {"sni""enabled"}, 
  7. }, 
  8.     "ID""hostname:nginx.0:80"
  9.     "Name""http"
  10.     "Port": 8000, 
  11.     "IP""192.168.1.102"
  12.     "Tags": ["www"], 
  13.     "Attrs": {} 

接下來我們啟動consul-template

  1. $ consul-template -config=./ct-nginx.conf 

會直接根據模板生成一個nginx配置 雖然現在并沒有backend node。

  1. $ cat /home/vagrant/sites-enabled/backend.conf 
  2. upstream backend { 
  3. server { 
  4.     server_name "10.0.2.15"
  5.     location / { 
  6.             proxy_pass http://backend; 
  7.     } 
  8. }  

然后啟動我們的web應用。

啟動之后,請求服務列表就可以看到helle-world服務,說明已經實現自動服務發現。

  1. $ curl localhost:8500/v1/catalog/service/hello-world?pretty 
  2.     "Node""node1"
  3.     "Address""172.17.42.1"
  4.     "ServiceID""registrator1:vagrant_rails_1:80"
  5.     "ServiceName""hello-world"
  6.     "ServiceTags"null
  7.     "ServiceAddress"""
  8.     "ServicePort": 32783 
  9. ]  

瀏覽器中可以正常訪問了,Yeah!

基于 Docker 的高可用 Rails 集群方案探索

#p#

OK, 讓我們更進一步,scale我們的rails node。

  1. $ docker-compose scale rails=4 
  2.  
  3. $ curl localhost:8500/v1/catalog/service/hello-world?pretty 
  4.     "Node""node1"
  5.     "Address""172.17.42.1"
  6.     "ServiceID""registrator1:vagrant_rails_1:80"
  7.     "ServiceName""hello-world"
  8.     "ServiceTags"null
  9.     "ServiceAddress"""
  10.     "ServicePort": 32783 
  11. }, 
  12.     "Node""node1"
  13.     "Address""172.17.42.1"
  14.     "ServiceID""registrator1:vagrant_rails_2:80"
  15.     "ServiceName""hello-world"
  16.     "ServiceTags"null
  17.     "ServiceAddress"""
  18.     "ServicePort": 32784 
  19. }, 
  20.     "Node""node1"
  21.     "Address""172.17.42.1"
  22.     "ServiceID""registrator1:vagrant_rails_3:80"
  23.     "ServiceName""hello-world"
  24.     "ServiceTags"null
  25.     "ServiceAddress"""
  26.     "ServicePort": 32785 
  27. }, 
  28.     "Node""node1"
  29.     "Address""172.17.42.1"
  30.     "ServiceID""registrator1:vagrant_rails_4:80"
  31.     "ServiceName""hello-world"
  32.     "ServiceTags"null
  33.     "ServiceAddress"""
  34.     "ServicePort": 32786 
  35. ]  

此時nginx已經重啟,我們可以看到4個backend都開始處理請求。

你可以看到,rails服務器只要啟動之后就自動加入集群,如果一臺節點掛掉之后,會自動從集群里去掉,基本上沒有任何影響。

肯定有不足的地方,歡迎討論, 發出來就是為了學習。

博文出處:http://dev.baozou.com/ye-tan-ji-yu-dockerde-railsji-qun/
 

責任編輯:Ophira 來源: 個人博客
相關推薦

2023-11-01 07:55:44

K8sKubernetes

2014-11-11 15:30:46

DockerRails集群Ruby

2023-12-18 09:37:37

2023-11-13 09:03:10

2018-07-10 08:42:45

Oracle高可用集群

2019-12-24 14:28:00

KeepalivedNginxTomcat

2012-02-15 22:40:23

heartbeat高可用

2023-11-07 07:30:18

Hadoop高可用

2024-02-27 09:48:25

Redis集群數據庫

2022-09-29 15:24:15

MySQL數據庫高可用

2013-06-07 11:30:32

2017-11-13 11:07:32

Nginx搭建高可用

2018-01-12 14:20:37

數據庫MySQL高可用架構

2020-10-28 07:10:07

Nginx高可用高并發

2017-02-19 19:57:05

ZooKeeper集群

2017-02-06 11:43:57

ZooKeeper集群

2019-08-27 15:56:44

MySQL 互聯網數據庫

2025-03-31 10:40:52

2015-10-22 10:28:45

MySQL高可用方案

2022-05-31 08:04:03

Redis高可用集群
點贊
收藏

51CTO技術棧公眾號

一本色道久久88亚洲综合88| 樱花草国产18久久久久| 国产mv免费观看入口亚洲| 一区二区三区四区免费| 韩国成人在线| 亚洲欧美日韩国产手机在线| 国产精品一区二区欧美黑人喷潮水 | 国产视频不卡在线| 日韩精品一级| 色偷偷久久一区二区三区| 中文字幕99| 四虎成人免费在线| 美国十次了思思久久精品导航| 九九精品在线播放| 国精产品一区二区三区| 亚洲精品观看| 欧美亚州韩日在线看免费版国语版| 日韩精品福利片午夜免费观看| 午夜视频免费在线| 精品一区二区三区香蕉蜜桃| 91精品国产免费久久久久久| 欧美性生交大片| 日韩黄色网络| 日韩一卡二卡三卡四卡| 免费黄色特级片| 日韩免费影院| 国产精品日产欧美久久久久| 国语精品中文字幕| 99国产成人精品| 日韩福利电影在线观看| 欧美精品激情视频| 九九精品视频免费| 不卡中文字幕| 先锋a资源在线看亚洲| 亚洲欧洲日产国产综合网| 久久本道综合色狠狠五月| av免费观看在线| 免播放器亚洲一区| 欧洲s码亚洲m码精品一区| 麻豆成人在线视频| 欧美电影《睫毛膏》| 亚洲一二三在线| jizz欧美性20| 久草精品视频| 欧美精品一区在线观看| 国产黑丝在线视频| 成人污版视频| 欧美日韩在线精品一区二区三区激情| 哪个网站能看毛片| 国模精品视频| 亚洲尤物视频在线| 蜜臀av性久久久久蜜臀av| 日韩毛片久久久| 国产日韩v精品一区二区| 久久99精品久久久久久水蜜桃| 亚洲狼人综合网| 国产激情偷乱视频一区二区三区| 91精品国产综合久久男男| 欧美特级黄色片| 天堂蜜桃一区二区三区| 热久久99这里有精品| 黑人一级大毛片| 国产日韩亚洲欧美精品| 97成人精品区在线播放| 91av在线免费视频| 国产亚洲毛片| 日韩69视频在线观看| 国产一区免费看| 久久尤物视频| 国产精品男人爽免费视频1| 国产在线观看第一页| 日本sm残虐另类| 日韩精品成人一区二区在线| 美女扒开尿口让男人操亚洲视频网站| 国产精品夜夜夜爽阿娇| 亚洲综合小说| 欧美激情视频一区二区| 国产午夜福利片| 亚洲综合精品四区| 国产极品精品在线观看| 亚洲一区二区天堂| 国产麻豆91精品| 成人在线免费观看一区| 天天干天天操av| 国产欧美一区二区三区鸳鸯浴 | www.久久久久久久久久| 成人短视频下载| 蜜桃成人免费视频| 日韩毛片久久久| 亚洲自拍偷拍麻豆| 无码精品a∨在线观看中文| 少妇一区视频| 91精品一区二区三区在线观看| 日本少妇一区二区三区| 欧美偷窥清纯综合图区| 中文字幕一精品亚洲无线一区 | 亚洲影视在线观看| 国产男女在线观看| 色8久久久久| 亚洲成成品网站| 国产探花视频在线播放| 欧美日韩国产精品一区二区亚洲| 2019精品视频| 91国内精品视频| 91玉足脚交白嫩脚丫在线播放| 婷婷久久青草热一区二区| 欧美xxxbbb| 91福利视频在线| 亚洲少妇一区二区三区| 精品日韩毛片| 久久露脸国产精品| 中文字幕777| 成人精品一区二区三区四区| 天天人人精品| 麻豆mv在线看| 国产成人亚洲综合色影视| 亚洲精品大尺度| 亚洲精品国产精品国自| 亚洲黑丝一区二区| 成人国产在线激情| 激情小视频在线| 亚洲一线二线三线久久久| 成人免费在线观看视频网站| 精品国内亚洲2022精品成人| 日韩在线视频中文字幕| 亚洲天堂av片| 成人一级视频在线观看| 日本黄色a视频| 欧美色网一区| 亚洲加勒比久久88色综合| 欧美在线视频第一页| 日韩av不卡一区二区| 激情小说网站亚洲综合网| 18加网站在线| 欧美疯狂做受xxxx富婆| 谁有免费的黄色网址| 中文日韩在线| 国产66精品久久久久999小说| 日本美女高清在线观看免费| 图片区日韩欧美亚洲| 又色又爽又黄18网站| 天天精品视频| 国产一区私人高清影院| 触手亚洲一区二区三区| 色婷婷综合久久久| 一级国产黄色片| 亚洲伦理精品| 国产一区二区免费电影| 免费污视频在线观看| 欧美一区二区三区公司| 亚洲区一区二区三| 激情深爱一区二区| 伊人精品久久久久7777| 日韩综合av| 久久久国产影院| 国产精品无码专区av免费播放| 中文一区二区在线观看| 国产三级国产精品国产专区50| 红桃成人av在线播放| 亚洲一区二区三区四区五区午夜| 国产精品第一第二| 成年人在线观看| 欧美性极品少妇| 欧美日韩生活片| 久久99精品久久久久久| 综合网五月天| 日韩高清二区| 羞羞色国产精品| 色视频在线观看免费| 欧美天堂在线观看| 一级黄色片网址| 久久91精品久久久久久秒播| 免费观看中文字幕| 天堂va欧美ⅴa亚洲va一国产| 欧美夫妻性生活xx| 亚洲欧美色视频| 在线观看亚洲一区| 日本黄色录像视频| 成人免费观看av| 少妇高潮喷水久久久久久久久久| 欧美日韩国产传媒| 91色精品视频在线| 国产在线精彩视频| 一区二区三区美女xx视频| 91精品国自产| 亚洲一区二区三区精品在线| 成人片黄网站色大片免费毛片| 日本视频免费一区| 日韩国产成人无码av毛片| 日本一区福利在线| 成人淫片在线看| 国产在线天堂www网在线观看| 在线播放精品一区二区三区| av在线资源观看| 欧美性猛交xxxx免费看| 一级免费黄色录像| 99国产欧美另类久久久精品| 男操女免费网站| 亚洲一级网站| 亚洲丰满在线| 国产成人澳门| 国产欧美日韩精品专区| heyzo在线| www.日韩不卡电影av| 天天干视频在线| 欧美一三区三区四区免费在线看| 国产原创视频在线| 亚洲欧美日韩久久| 成人无码av片在线观看| 国产激情一区二区三区| 97视频在线观看播放| 99久久99久久精品国产| av成人动漫在线观看| 五月天激情播播| 亚洲在线电影| 17c丨国产丨精品视频| 精品美女久久| 久久久影院一区二区三区| av在线精品| 国产成人在线播放| 国产高清视频色在线www| 久久亚洲成人精品| 青青操在线视频| 亚洲国产成人久久| 国产男女无套免费网站| 欧美色图片你懂的| 黄色片网站在线免费观看| 一区二区三区在线免费播放| 黄色av片三级三级三级免费看| 久久亚区不卡日本| 日本性生活一级片| 国产福利精品一区二区| 亚洲精品20p| 日韩电影在线观看一区| 久久久免费视频网站| 国产精品va| 黄色特一级视频| 亚洲成人99| 亚洲三区视频| 欧美r级电影| 亚洲开发第一视频在线播放| 精品国产91久久久久久浪潮蜜月| 久久爱av电影| 亚洲综合小说图片| 女女同性女同一区二区三区91| 国产乱论精品| 国产综合动作在线观看| jizz国产精品| 国产乱码一区| 清纯唯美亚洲经典中文字幕| 国产一区在线免费| 女人抽搐喷水高潮国产精品| 久久精品国产第一区二区三区最新章节 | 天天做天天干天天操| 麻豆91在线播放| 色一情一区二区| 久久aⅴ国产欧美74aaa| 午夜激情影院在线观看| 国产综合久久久久久久久久久久| 中文国产在线观看| 日本在线观看www| 精品第一国产综合精品aⅴ| 亚洲a视频在线观看| 精品国内片67194| 男人天堂网在线视频| 亚洲国产另类 国产精品国产免费| 蜜桃av噜噜一区二区三区麻豆| 亚洲精品一区二区三区99| 五月天激情开心网| 亚洲视频在线观看视频| av中文在线| 久久精品久久久久久国产 免费| a视频在线免费看| 久久久久久亚洲精品中文字幕| 欧美日韩国产观看视频| 国产999精品久久久| 日韩久久一区| 国产日韩欧美一区二区三区四区 | 麻豆精品蜜桃视频网站| 激情成人在线观看| 波多野结衣视频一区| 亚洲黄色小说视频| 亚洲人亚洲人成电影网站色| 国产精品第九页| 日本精品一区二区三区四区的功能| 在线观看国产精品入口男同| 日韩欧美一二三| 日本一区二区三区在线观看视频| 中文字幕亚洲欧美在线| 天天色天天射天天综合网| 日本精品免费观看| 国产剧情一区二区在线观看| 黄色国产精品一区二区三区| 日本电影一区二区| 日韩精品一区二区三区四| 日日嗨av一区二区三区四区| 手机在线免费毛片| 久久久亚洲综合| 中文字幕另类日韩欧美亚洲嫩草| 欧美日韩国产综合新一区| 136福利视频导航| 日韩激情在线视频| 超碰人人在线| 日韩av手机在线| 日韩在线亚洲| 亚洲人成网站在线观看播放| 亚洲免费激情| 日韩精品aaa| 国产午夜精品久久| 日韩精品一区二区在线播放| 欧美绝品在线观看成人午夜影视| 亚洲色图另类小说| 伦理中文字幕亚洲| 97精品国产99久久久久久免费| 国产精品日韩一区二区三区| 97精品国产一区二区三区 | 青青草国产精品亚洲专区无| av av在线| 亚洲嫩草精品久久| 久久精品久久久久久久| 亚洲成人网在线观看| 国产免费无码一区二区视频| 99riav国产精品| 日韩欧美亚洲天堂| 国产成人精品免费一区二区| 四虎影视1304t| 一本大道久久精品懂色aⅴ| 午夜久久久久久噜噜噜噜| xxxx欧美18另类的高清| 精品国产欧美日韩一区二区三区| 久久青青草综合| 一本久道久久久| 娇妻高潮浓精白浆xxⅹ| 亚洲精品欧美激情| 亚洲一区精品在线观看| 亚洲色图激情小说| 人狥杂交一区欧美二区| 国产偷久久久精品专区| 国产精品99免费看| 日批视频在线看| 亚洲女爱视频在线| 国产熟女一区二区丰满| 深夜精品寂寞黄网站在线观看| 日韩国产网站| 色综合视频二区偷拍在线| 天堂精品中文字幕在线| 久久久久久久久久久久| 色哟哟国产精品免费观看| 青青草av免费在线观看| 奇米4444一区二区三区| 欧美激情影院| 中国丰满人妻videoshd| 久久综合九色综合97婷婷女人 | 国产精品红桃| 色诱av手机版| 亚洲国产欧美日韩另类综合 | 亚洲欧美精品一区二区| 伊人久久国产| 欧美在线播放一区| 奇米精品一区二区三区四区| 国产伦精品一区二区三区视频女| 在线视频一区二区三| 国产福利电影在线| 国产精品久久网| 我不卡影院28| 911亚洲精选| 色综合久久九月婷婷色综合| 爱久久·www| 91久久精品国产91久久性色| 欧美永久精品| 黄色性生活一级片| 色999日韩国产欧美一区二区| 成人免费一区二区三区视频网站| 国产女精品视频网站免费| 香港欧美日韩三级黄色一级电影网站| 激情久久综合网| 午夜视频久久久久久| 九色在线观看视频| 成人黄色av网站| 国产精品www994| 国产特黄级aaaaa片免| 欧美日韩精品一区二区| 欧美6一10sex性hd| 久久涩涩网站| 久久国产精品色| 一本久久a久久精品vr综合| 九九九九九九精品任你躁| 激情五月六月婷婷| 91看片淫黄大片一级| 中文字幕日本人妻久久久免费 | 欧美高清一区二区| 久久精品国产在热久久| 日本特黄特色aaa大片免费| 亚洲天堂第二页| 中文字幕区一区二区三| 久久久久免费精品| 亚洲精品乱码久久久久久黑人| 色视频在线观看免费| 92看片淫黄大片欧美看国产片| 日韩午夜高潮|