<sup id="u4we4"></sup>
  • 每日觀點:Shell腳本實戰(zhàn):Consul 服務注冊和注銷的最佳實踐

    來源:嗶哩嗶哩

    業(yè)務爸爸需求: 寫一個腳本用于向 Consul 注冊或注銷服務。


    (資料圖片)

    Consul API 實現(xiàn)服務的注冊和注銷功能

    拿到這個需求,我第一時間想到是用 curl 調(diào)用 Consul API 實現(xiàn)服務的注冊和注銷功能。 如下:

    #!/bin/bashCONSUL_TOKEN="<your_token_here>"CONSUL_URL="http://localhost:8500"function?register_service?{??curl?\????--request?PUT?\????--header?"Content-Type:?application/json"?\????--header?"X-Consul-Token:?${CONSUL_TOKEN}"?\????--data?"@-?${CONSUL_URL}/v1/agent/service/register"?<<EOF{??"ID":?"${1}",??"Name":?"${2}",??"Address":?"${3}",??"Port":?${4}}EOF}function?deregister_service?{??curl?\????--request?PUT?\????--header?"X-Consul-Token:?${CONSUL_TOKEN}"?\????"${CONSUL_URL}/v1/agent/service/deregister/${1}"}#?example?usageregister_service?"my-service"?"My?Service"?"localhost"?8080deregister_service?"my-service"

    在這個實現(xiàn)中,我們將認證token存儲在CONSUL_TOKEN變量中,并在curl請求中使用--header "X-Consul-Token: ${CONSUL_TOKEN}"來添加它。

    這個是可以實現(xiàn)業(yè)務爸爸的需求, 但是,這種實現(xiàn)有以下幾個問題:

    1.?不能批量添加相同的類型的指標。

    2.?唯一ID需要手動維護。

    3.?沒有配置文件留底,雖然三節(jié)點的consul集群很小概率同時出問題, 但是有留底還是一個很好習慣。

    基于這個幾個點, 寫入下面實現(xiàn)腳本。

    register 和 deregister實現(xiàn)

    #!/bin/bash#?author?小毛驢#?SHELL_DIR=$(cd?$(dirname?$0);pwd)BACKUP_DIR=${SHELL_DIR}"/consulbackup"SOURCEFILE=${SHELL_DIR}"/origin.json"LOGFILE=${SHELL_DIR}"/add.log"BASESVCRIR=/data/consul/config/TOKENFILE=/data/consul/consul_token.yaml?OPTION=${OPTION:="1"}ENV=${ENV:="prod"}PROJECT=${PROJECT:="fb"}MODULE=${MODULE:="api"}SERVICENAME=${SERVICENAME:="node-exporter"}NAME=${NAME:="core"}TAG=${TAG:="node-exporter"}IPADDRS=""IPADDR=""PORT=${PORT:="9520"}LEGAL_IP="^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"if?[?!?-e?"${BACKUP_DIR}"?];then????mkdir?-p?${BACKUP_DIR}fifunction?usage(){????????echo?-e?"\nUsage:?$0?<option>?<value>"????????echo?-e?"\n?option:"????????echo?-e?"\n?-o,--option????option?name,?default?1:add?,?2:delete"????????echo?-e?"\n?-e,--env???????env?name,?default?prod"????????echo?-e?"\n?-p,--project???project?name,?default?fb"????????echo?-e?"\n?-m,--module????module?name,?default?api"????????echo?-e?"\n?-n,--name??????api?name,?default?core"????????echo?-e?"\n?-s,--svcname???serviceName?name,?default?node-exporter"????????echo?-e?"\n?-t,--tag???????tag?name,?default?node-exporter"????????echo?-e?"\n?-a,--address???ip?address,?eg?1.1.1.1|2.2.2.2?default?''?[Require]"????????echo?-e?"\n?-i,--interface?interface?num?default?9520"????????echo?-e?"\n?-h,--help??????help"}function?checkIp(){????#正則表達式檢驗?ip?地址????[[??$1?=~?$LEGAL_IP?]]????if?[?$??-gt?0?];?then????????echo?"$1?is?an?error?ip?fromat"????????exit?10????fi}function?svcDeregister()?{????if?[?!?-e?"$1"?];then????????echo?"$1?not?exit,?please?check!"????else????????/bin/consul?services?deregister??-token-file=${TOKENFILE}??$1????fi}function?svcRegister()?{????if?[?!?-e?"$1"?];then????????echo?"$1?not?exit,?please?check!"????else????????/bin/consul?services?register??-token-file=${TOKENFILE}?$1????fi}function?genJson()?{cat?>?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"?<<EOF{??"service":?{????"id":?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}",????"name":?"${SERVICENAME}",????"tags":?[???????"${TAG}"????],????"address":?"${IPADDR}",????"port":?${PORT},????"meta":?{??????"name":?"${NAME}-${IPADDR}",??????"module":?"${MODULE}",??????"project":?"${PROJECT}",??????"env":?"${ENV}"????},????"check":?{??????"http":?"http://${IPADDR}:${PORT}/metrics",??????"interval":?"10s"????},????"weights":?{??????"passing":?10,??????"warning":?1????}??}}EOF}function?removeJson()?{????mv?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"??${BACKUP_DIR}}function?main()?{????if?(($#?==?0));then????????usage????????exit????fi????cd?${SHELL_DIR}????while?[?-n?"$1"?];do????????case?$1?in?????????-o|--option?)????????????OPTION=$2????????????shift????????????;;????????-e|--env?)????????????ENV=$2????????????shift????????????;;????????-p|--project?)????????????PROJECT=$2????????????shift????????????;;????????-m|--module??)????????????MODULE=$2????????????shift????????????;;????????-n|--name?)????????????NAME=$2????????????shift????????????;;????????-s|--svcname?)????????????SERVICENAME=$2????????????shift????????????;;????????-t|--tag?)????????????TAG=$2????????????shift????????????;;????????-a|--address?)????????????IPADDRS=$2????????????shift????????????;;????????-i|--interface?)????????????PORT=$2????????????shift????????????;;????????-h|--help?)????????????usage????????????exit????????????;;????????*)????????????echo?-e?"\n$1?unknow?an?option"????????????usage????????????exit????????esac????????shift?????done????if?[?"${IPADDRS}"x?==?""x?];then????????echo?-e?"\n-a|--address?option?is?Require"????????usage????????exit????fi????SVCRIR="${BASESVCRIR}/${SERVICENAME}"????if?[?!?-e?"${SVCRIR}"?];then????????mkdir?-p?${SVCRIR}????fi????cd?${SVCRIR}????hosts=($(echo?${IPADDRS}?|?sed?'s/|/?/g'))????for((?i=0;i<${#hosts[@]};i++))?????do????????echo?${hosts[$i]}????????checkIp?${hosts[$i]}????????IPADDR="${hosts[$i]}"????????if?[[?"${OPTION}"x?==?"1"x??]];?then????????????genJson????????????#statements????????????svcRegister?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"?????????fi????????if?[[?"${OPTION}"x?==?"2"x??]];?then????????????#statements????????????svcDeregister?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"?????????????removeJson????????fi????done?}main?$@

    這個腳本首先定義了BACKUP_DIR,BASESVCRIR 和TOKENFILE 等路徑。

    用法

    ./register-service.sh?[OPTIONS]參數(shù)-h,?--help:?顯示幫助信息并退出。-o,?-option:?1?register?;?2?deregister-e,--env???????環(huán)境標識,?default?prod-p,--project??項目名字,?default?fb-m,--module???業(yè)務模塊名,?default?api-n,--name??????模塊下面的應用名,?default?core-s,--svcname???service?名字,?default?node-exporter-t,--tag???????tag?名字,?default?node-exporter-a,--address???需要注冊到該服務的地址,多個以“|”分開,,?eg?1.1.1.1|2.2.2.2?default?''?[Require],必須提供-i,--interface??需要注冊的端口?9520

    ./register-service.sh -o 1 -e prod -p fb -m ops -n consul-ops -s consul_exporter-t consul_exporter -a "10.2.0.6|10.2.0.10|10.2.0.41" -i 9107

    標簽:

    推薦

    財富更多》

    動態(tài)更多》

    熱點

    欧美xxxxxxxxxx,91热久久免费频精品动漫99,午夜拍拍福利视频蜜桃视频,91aaa免费观看在线观看资源
    <sup id="u4we4"></sup>
  • 主站蜘蛛池模板: 国产V亚洲V天堂A无码| 国产无遮挡色视频免费视频| 亚洲成aⅴ人在线观看| va天堂va亚洲va影视中文字幕| 曰批视频免费40分钟试看天天| 国产乱理伦片在线观看| 一本大道香蕉大vr在线吗视频| 波多野结衣女同| 国产欧美一区二区三区免费| 久久久久亚洲AV无码专区体验 | 欧美肥妇毛多水多bbxx水蜜桃 | 国产1区2区在线观看| …久久精品99久久香蕉国产| 欧美色欧美亚洲高清在线观看| 国产猛男猛女超爽免费视频| 久久久久国产精品免费免费搜索| 粗大的内捧猛烈进出视频| 欧美亚洲一区二区三区四| 国产孕妇孕交一级毛片| 一色屋精品视频任你曰| 毛片基地免费视频a| 国产女同无遮挡互慰高潮视频| 中文在线天堂网www| 欧美特黄三级在线观看| 国产剧情在线播放| groupsex娇小紧的5一8| 有没有毛片网站| 加勒比一本大道香蕉在线视频| 7777精品久久久大香线蕉| 日本中文字幕在线电影| 亚洲自偷自拍另类图片二区| 国产主播在线看| 婷婷丁香五月中文字幕| 亚洲中文精品久久久久久不卡| 脱了美女内裤猛烈进入gif| 国语自产精品视频在线区| 久久婷婷成人综合色| 特级片在线观看| 国产免费av片在线播放| 99在线精品免费视频| 日本视频一区在线观看免费|