久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

服務(wù)發(fā)現(xiàn)

其實簡單說,服務(wù)發(fā)現(xiàn)就是解耦服務(wù)與IP地址之間的硬綁定關(guān)系,
以典型的集群為例,對于集群來說,是有多個節(jié)點的,這些節(jié)點對應(yīng)多個IP(或者同一個IP的不同端口號),集群中不同節(jié)點責(zé)任是不一樣的。
比如說一個數(shù)據(jù)集群中,可以分為讀節(jié)點或者寫節(jié)點,寫節(jié)點和讀節(jié)點都是相對的,不是硬綁定的,某一個邏輯節(jié)點,隨著故障轉(zhuǎn)移及恢復(fù),是可以變換身份的(寫變讀,讀變寫;主降從,從升主等等)
集群對外提供服務(wù)的時候,對于外界來說,集群中節(jié)點身份變換的時候需要對外透明,外界無需因為集群節(jié)點的身份變換而更改配置,這就需要一個解耦合的服務(wù)。

Consul,zookeeper等中間件,就是做這個透明轉(zhuǎn)換的,也就是服務(wù)發(fā)現(xiàn)。這里簡單測試consul作為服務(wù)發(fā)現(xiàn)的實現(xiàn)。

Consul是一種服務(wù)解耦解決方案(service mesh solution,糾結(jié)了好久不知道怎么翻譯),提供具有服務(wù)發(fā)現(xiàn),配置和分段功能的全功能控制系統(tǒng)(control plane)。
這些功能中的每一個都可以根據(jù)需要單獨使用,也可以一起使用以構(gòu)建完整的服務(wù)解耦。 即便是用了谷歌翻譯的情況下,這段翻譯糾結(jié)了半天,不知道怎么翻譯合適。

如下是按照自己對consul做服務(wù)發(fā)現(xiàn)的理解,簡單整理的邏輯結(jié)構(gòu)圖,其原理還是比較容易理解的。

Consul is a service mesh solution providing a full featured control plane with service discovery, configuration, and segmentation functionality. Each of these features can be used individually as needed, or they can be used together to build a full service mesh. Consul requires a data plane and supports both a proxy and native integration model. Consul ships with a simple built-in proxy so that everything works out of the box, but also supports 3rd party proxy integrations such as Envoy. https://www.consul.io/intro/index.html

它提供如下幾個關(guān)鍵功能:

服務(wù)發(fā)現(xiàn):

  Consul的某些客戶端可以提供一個服務(wù),例如api或者mysql,其它客戶端可以使用Consul去發(fā)現(xiàn)這個服務(wù)的提供者。

  使用DNS或者HTTP,應(yīng)用可以很容易的找到他們所依賴的服務(wù)。

健康檢查:
  Consul客戶端可以提供一些健康檢查,這些健康檢查可以關(guān)聯(lián)到一個指定的服務(wù)(服務(wù)是否返回200 OK),也可以關(guān)聯(lián)到本地節(jié)點(內(nèi)存使用率是否在90%以下)。

  這些信息可以被一個操作員用來監(jiān)控集群的健康狀態(tài),被服務(wù)發(fā)現(xiàn)組件路由時用來遠(yuǎn)離不健康的主機。

鍵值存儲:
  應(yīng)用可以使用Consul提供的分層鍵值存儲用于一些目的,包括動態(tài)配置、特征標(biāo)記、協(xié)作、leader選舉等等。通過一個簡單的HTTP API可以很容易的使用這個組件。
多數(shù)據(jù)中心:
  Consul對多數(shù)據(jù)中心有非常好的支持,這意味著Consul用戶不必?fù)?dān)心由于創(chuàng)建更多抽象層而產(chǎn)生的多個區(qū)域。

Consul被設(shè)計為對DevOps群體和應(yīng)用開發(fā)者友好,他非常適合現(xiàn)代的、可伸縮的基礎(chǔ)設(shè)施。

本文基于docker來實現(xiàn)consul的服務(wù)發(fā)現(xiàn)配置,方法consul agent是通過json注冊的模式實現(xiàn)服務(wù)注冊,
其中consul的服務(wù)端是3節(jié)點的集群,客戶點是6節(jié)點3主3從的redis服務(wù)器集群,consul實現(xiàn)redis集群中讀寫服務(wù)注冊于發(fā)現(xiàn)。
盡管Redis cluster有多IP方式驅(qū)動連接,這里僅僅為了測試“服務(wù)發(fā)現(xiàn)”的。
其實本來想測試MySQL單主模式的MGR,實現(xiàn)讀寫分離的服務(wù)發(fā)現(xiàn),但是MySQL有點太重了,機器配置不夠,所以做了Redis的集群來測試服務(wù)發(fā)現(xiàn)

consul服務(wù)端集群安裝配置
作為服務(wù)發(fā)現(xiàn)的載體,consul是可以使用單節(jié)點運行的,作為解析服務(wù)的載體,是一個非常重要的角色,集群化具有更強的抗災(zāi)性,因此更多的時候是以多節(jié)點集群的方式運行解析服務(wù)的這個載體。
這里使用三個節(jié)點作為consul的集群服務(wù)端來運行,三個consul的服務(wù)節(jié)點IP分別是:172.18.0.11 ,172.18.0.12,172.18.0.13,需要固定IP

docker network create –subnet=172.18.0.11/16 mynetwork

docker run -itd –name consul01 –net mynetwork –ip 172.18.0.11 -v /usr/local/docker_file/consul01/:/usr/local/ CentOS 

docker run -itd –name consul02 –net mynetwork –ip 172.18.0.12 -v /usr/local/docker_file/consul02/:/usr/local/ centos 

docker run -itd –name consul03 –net mynetwork –ip 172.18.0.13 -v /usr/local/docker_file/consul03/:/usr/local/ centos 

分別在每個容器中創(chuàng)建consul服務(wù)(unzip consul_1.6.2_linux_amd64.zip解壓縮即可,非常簡單)

三個容器節(jié)點的server.json節(jié)點配置文件如下,唯一的區(qū)別就是bind_addr指定為當(dāng)前節(jié)點的IP
如下是172.18.0.11節(jié)點的配置,不同節(jié)點僅需修改bind_addr為對應(yīng)機器(容器)的IP

/usr/local/server.json
{
    “datacenter”: “dc1”,
    “data_dir”: “/usr/local/”,
    “log_level”: “INFO”,
    “server”: true,
    “bootstrap_expect”: 3,
    “bind_addr”: “172.18.0.11”,
    “client_addr”: “0.0.0.0”,
    “start_join”: [“172.18.0.11″,”172.18.0.12″,”172.18.0.13”],
    “ui”:true
}

依次登錄三個容器中,以server模式啟動consul服務(wù)
./consul agent -server -config-dir=/usr/local > /usr/local/consul.log &
由于配置文件中制定了集群的IP列表,因此無需顯式加入集群(cluster join),正常情況下,啟動三個節(jié)點后,會自動組成一個集群,并且自動選舉出來一個leader。
consul 集群服務(wù)的狀態(tài)
./consul members –http-addr 172.18.0.11:8500
./consul operator raft list-peers -http-addr=172.18.0.12:8500
基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

consul客戶端安裝配置

容器客戶端節(jié)點安裝,6個節(jié)點IP分別是:172.18.0.21,172.18.0.22,172.18.0.23,172.18.0.24,172.18.0.25,172.18.0.26
docker run -itd –name redis01 –net mynetwork –ip 172.18.0.21 -v /usr/local/docker_file/redis01/:/usr/local/ centos 
docker run -itd –name redis02 –net mynetwork –ip 172.18.0.22 -v /usr/local/docker_file/redis02/:/usr/local/ centos 
docker run -itd –name redis03 –net mynetwork –ip 172.18.0.23 -v /usr/local/docker_file/redis03/:/usr/local/ centos 
docker run -itd –name redis04 –net mynetwork –ip 172.18.0.24 -v /usr/local/docker_file/redis04/:/usr/local/ centos 
docker run -itd –name redis05 –net mynetwork –ip 172.18.0.25 -v /usr/local/docker_file/redis05/:/usr/local/ centos 
docker run -itd –name redis06 –net mynetwork –ip 172.18.0.26 -v /usr/local/docker_file/redis06/:/usr/local/ centos

 
6個client節(jié)點的配置以及服務(wù)定義,服務(wù)探測腳本如下
如下是172.18.0.21節(jié)點的配置,不同節(jié)點僅需修改bind_addr為對應(yīng)機器(容器)的IP

client.json  {    "data_dir": "usr/local/consuldata",    "enable_script_checks": true,    "bind_addr": "172.18.0.21",    "retry_join": ["172.18.0.11","172.18.0.12","172.18.0.13"],    "retry_interval": "30s",    "rejoin_after_leave": true,    "start_join": ["172.18.0.11","172.18.0.12","172.18.0.13"]  }

分別啟動三個client節(jié)點的consul服務(wù),以client的模式運行,啟動后,正常情況下會自動加入到consul的服務(wù)端集群中。
./consul agent -config-dir=/usr/local/consuldata > /usr/local/consuldata/consul.log &
./consul members –http-addr 172.18.0.11:8500
基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)
 
 

consul客戶端代理服務(wù)注冊

6個容器節(jié)點依次安裝redis,做成一個集群(步驟略),這里的consul客戶端代理的是一個3中3從的Redis集群,這里不列出來Redis集群的安裝。
Redis集群安裝參考https://www.cnblogs.com/wy123/p/12012848.html,還是非常方便的,在本地(容器節(jié)點)一鍵創(chuàng)建6個節(jié)點3主3從的集群。
其中主節(jié)點是172.18.0.21,172.18.0.22,172.18.0.23,從節(jié)點是172.18.0.24,172.18.0.25,172.18.0.26

基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

這里是使用 w-master-redis-8888.service.consul名字作為三個redis集群節(jié)點的服務(wù)代理。
172.18.0.21節(jié)點上的redis-master-8888.json(172.18.0.22,172.18.0.23,172.18.0.24,172.18.0.25,172.18.0.26 類同,僅需修改address)

{    "services":     [      {        "name": "w-master-redis-8888",        "tags": [          "master"        ],        "address": "172.18.0.21",        "port": 8888,        "checks": [          {           "args":["sh","-c","/usr/local/consuldata/check_redis_master.sh 172.18.0.21 8888 ******"],           "Shell":"/bin/bash",           "interval": "15s"          }        ]      }    ]  }

redis-slave-8888.json 

{    "services":     [      {        "name": "r-slave-redis-8888",        "tags": [          "master"        ],        "address": "172.18.0.21",        "port": 8888,        "checks": [          {           "args":["sh","-c","/usr/local/consuldata/check_redis_slave.sh 172.18.0.21 8888 ******"],           "Shell":"/bin/bash",           "interval": "15s"          }        ]      }    ]  }

Consul client節(jié)點的Redis主節(jié)點(寫節(jié)點)服務(wù)檢查腳本check_redis_master.sh
以下腳本來源于https://www.cnblogs.com/gomysql/p/8010552.html,做了簡單的修改,在節(jié)點的身份判斷邏輯上需要加強。

#!/bin/bash  host=$1  myport=$2  auth=$3 if [ ! -n "$auth" ]  then  auth='""' fi  comm="/usr/local/redis_instance/redis8888/bin/redis-cli -h $host -p $myport -a $auth "   role=`echo 'INFO Replication'|$comm |grep -Ec 'role:master'`  echo 'INFO Replication'|$comm  if [ $role -ne 1 ]  then      exit 2 fi

Consul client節(jié)點的Redis從節(jié)點服務(wù)檢查腳本check_redis_slave.sh

#!/bin/bash  host=$1  myport=$2  auth=$3 if [ ! -n "$auth" ]  then  auth='""' fi  comm="/usr/local/redis_instance/redis8888/bin/redis-cli -h $host -p $myport -a $auth "  role=`echo 'INFO Replication'|$comm |grep -Ec 'role:slave'`  echo $role  echo 'INFO Replication'|$comm      if [ $role -ne 1 ]  then      exit 2 fi

 

Consul服務(wù)發(fā)現(xiàn)

redis集群配置成功后,重新加載代理服務(wù),consul reload,一切正常的話,consul服務(wù)端就可以解析配置的服務(wù)了。
如下注冊了兩個服務(wù),分別是r-slave-redis-8888,w-master-redis-8888,分別代表Redis集群的讀寫節(jié)點。

基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

可以看到,成功地解析了 w-master-redis-8888.service.consul這個服務(wù),映射到172.18.0.21,172.18.0.22,172.18.0.23三個節(jié)點。
需要注意的是,這三個節(jié)點都是寫節(jié)點,這里僅僅是為了實現(xiàn)服務(wù)發(fā)現(xiàn)(盡管redis 有多IP的驅(qū)動支持)
基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

r-slave-redis-8888.service.consul服務(wù)的解析,指向了三個從節(jié)點,172.18.0.24,172.18.0.25,172.18.0.26

基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

故障轉(zhuǎn)移之后的服務(wù)發(fā)現(xiàn):模擬主節(jié)點故障,對172.18.0.21節(jié)點手動故障轉(zhuǎn)移,現(xiàn)在172.18.0.21與172.18.0.24角色交換

基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

Redis集群故障轉(zhuǎn)以后的服務(wù)發(fā)現(xiàn)解析結(jié)果 對于w-master-redis-8888.service.consul這個服務(wù),成功解析到172.18.0.24,172.18.0.22,172.18.0.23三個主節(jié)點
基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

Redis集群故障轉(zhuǎn)以后的服務(wù)發(fā)現(xiàn)解析結(jié)果 對于w-master-redis-8888.service.consul這個服務(wù),成功解析到172.18.0.24,172.18.0.22,172.18.0.23三個主節(jié)點
基于Docker的Consul集群實現(xiàn)服務(wù)發(fā)現(xiàn)

遇到的問題:
1,cosnul服務(wù)端集群的時候,clustercenter一開始自定義了一個名稱myconsule_datacenter,導(dǎo)致client節(jié)點死活加不進來,按照默認(rèn)的dc1就沒有問題
目前還不理解這個datacenter的命名規(guī)則是什么?
2,容器節(jié)點中的shell腳本要授予可執(zhí)行權(quán)限chmod +x check_XXX.sh
3,其他異常問題,一定要看日志,搜索一下基本上都有結(jié)果。
以下純粹是Redis集群的問題,與Consul沒有直接關(guān)系,僅作為本測試中遇到的問題。
4,容器節(jié)點的Redis集群時,需要移除bind_ip的127.0.0.1節(jié)點,直接配置docker創(chuàng)建容器時候的IP,創(chuàng)建集群的時候會一致等待,waiting for the cluster to join
這一點redis-cli –cluster做的很扯淡,明明找不到節(jié)點,還要死等,不人為終止的話,他會一直waiting
5,Redis集群時候,因為主從都是相對的,需要相互識別對方,主從節(jié)點都要指定“masterauth”和“requirepass”,且密碼一致,否則執(zhí)行cluster  failover提示成功,但故障轉(zhuǎn)移不成功
6,遇到一個靈異的問題(之前單機多實例的時候也遇到過),在啟動容器上的Redis服務(wù)的時候,如果使用絕對路徑啟動,在創(chuàng)建集群的時候會出現(xiàn)從節(jié)點無法添加到集群中去的情況,停止服務(wù),以相對路徑方式重啟之后就沒有這個問題

總的來說consul這個中間件使用起來還算是比較簡單,配置也很清爽,不像某些中間件令人作嘔的配置結(jié)構(gòu)(mycat???)
這里沒有配置多數(shù)據(jù)中心模式,僅配置了單數(shù)據(jù)中心模式,作為一款服務(wù)發(fā)現(xiàn)的中間件,是完全沒有問題的,尤其是作為MySQL集群不支持多IP連接驅(qū)動的數(shù)據(jù)庫連接。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
中文视频一区| 韩国三级一区| 成人一区而且| av成人国产| 国产色综合网| 欧美日韩黄网站| 日韩国产一二三区| 国产日产精品_国产精品毛片 | 欧美日韩精品一区二区三区视频 | 男女男精品视频网| 清纯唯美亚洲综合一区| 日韩精品第一| 电影91久久久| 亚洲国产影院| 日韩av网站在线观看| 精品99在线| 亚洲精品欧美| 精品一区二区三区免费看| 桃色一区二区| xxxxx性欧美特大| 蜜臀91精品一区二区三区| 国产日产精品_国产精品毛片 | 日本h片久久| 精品三级国产| 欧美特黄一区| 日韩av一区二| 欧美日韩国产一区精品一区| 久久免费视频66| 亚洲精品动态| 丝袜亚洲精品中文字幕一区| 国产精品久久久久久久久久久久久久久| 精品一区二区三区四区五区| 在线精品观看| 精品一区在线| 国产一区不卡| 日韩av不卡一区二区| 樱桃成人精品视频在线播放| 美女视频黄 久久| 日韩综合在线| 老色鬼精品视频在线观看播放| 国产色综合网| 涩涩av在线| 国产精品va| 日韩一区网站| 日韩欧美2区| 午夜在线播放视频欧美| 久久久久久网| 精品一区二区三区中文字幕在线| 亚洲91在线| 亚洲毛片在线| 日韩一区二区三免费高清在线观看| 精品1区2区3区4区| 国产成人黄色| 在线亚洲免费| 久久天堂av| 亚洲综合电影| 伊人久久在线| 高清av一区| 国产美女高潮在线观看| 国产精品日本一区二区不卡视频| 欧美日韩在线精品一区二区三区激情综合| 99精品一区| 国产亚洲一区在线| 美女尤物国产一区| 国产在线观看www| 午夜久久免费观看| 一区二区国产在线观看| 日本aⅴ亚洲精品中文乱码| 欧美日韩在线精品一区二区三区激情综合 | 久久xxxx精品视频| 亚洲深爱激情| 日韩av中文在线观看| 欧美91在线|欧美| 久久一区二区三区喷水| 91精品啪在线观看国产18| 亚洲一区国产| 久久亚洲精精品中文字幕| 蜜臀久久99精品久久久久宅男| 国产精品色网| 国产精品流白浆在线观看| 日韩在线观看中文字幕| 成人国产精品一区二区免费麻豆| 伊人久久视频| 日韩在线卡一卡二| 欧美激情日韩| 久久久水蜜桃av免费网站| 欧美日韩国产综合网| 丝袜美腿亚洲一区| 日韩中文字幕无砖| 国产精品国产三级国产在线观看| 欧美亚洲国产一区| 国产精品地址| 水蜜桃久久夜色精品一区的特点| 精品视频一区二区三区在线观看| 在线日韩av| 国产中文字幕一区二区三区| 99热精品在线| 婷婷激情一区| 美女国产精品久久久| 在线观看亚洲精品福利片| 久久精品成人| 国产精品久久久久久久久妇女| 亚洲国产不卡| 四虎国产精品免费观看| 日韩二区三区四区| 国产农村妇女精品一区二区| 色一区二区三区四区| 国产精品大片| 日韩1区2区日韩1区2区| 热久久免费视频| 99视频在线精品国自产拍免费观看| 中文字幕在线官网| 国产在线日韩精品| 韩国女主播一区二区三区| 91精品国产自产观看在线 | 国产精品网站在线看| 在线精品国产亚洲| 一区二区三区午夜视频| 婷婷综合网站| 性欧美长视频| 亚洲制服一区| 蜜桃久久精品一区二区| 亚洲一区欧美二区| 丝瓜av网站精品一区二区 | 欧美日韩国产一区二区三区不卡| 成人国产精品久久| 国产日产一区| 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩国产激情| 日韩欧美午夜| 欧美日韩黑人| 亚洲精品精选| 国产精品22p| 91看片一区| 亚洲精品一级二级三级| 国产欧美自拍| 精品亚洲成人| 91麻豆国产自产在线观看亚洲| 久久中文字幕一区二区| 精品久久免费| 国产精品三p一区二区| 鲁鲁在线中文| 亚洲精品2区| 日韩av黄色在线| 亚洲天堂av影院| 日韩欧美中文字幕电影 | 日韩欧美看国产| 最新日韩av| 国产精品s色| 不卡av一区二区| 国产精品片aa在线观看 | 久久久久伊人| 欧美日韩精品免费观看视频完整| 日韩精品社区| 亚洲午夜av| 乱一区二区av| 欧美中文日韩| 日韩中文在线电影| 奇米狠狠一区二区三区| 日韩大片在线播放| 久久久免费人体| 国产亚洲高清视频| 精品视频在线一区二区在线| 蜜臀av一区二区三区| 亚洲成人一区在线观看| 亚州精品视频| 狠狠干成人综合网| 欧美成a人免费观看久久| 青草久久视频| 男女性色大片免费观看一区二区| 黄在线观看免费网站ktv| 777久久精品| 欧美中文日韩| 欧美成人精品三级网站| 国产精品社区| 免费人成精品欧美精品| 成人日韩在线| 成人在线观看免费视频| 国产探花在线精品| 亚洲专区一区| 欧美日韩一区二区综合| 国产一卡不卡| 久久高清国产| 热久久国产精品| 波多视频一区| 亚洲免费资源| sm捆绑调教国产免费网站在线观看| 国产日韩一区| 免费亚洲婷婷| 国产一区二区三区不卡av| 精品91福利视频| 欧美www视频在线观看| 午夜久久中文| 欧美女激情福利| 久久亚洲一区| 一区二区视频欧美| 在线一区视频| 日韩精品乱码av一区二区| 欧美日韩国产高清电影| 国产在线|日韩|