etcd + confd 動態(tài)生成NGINX配置文件

說明

生產(chǎn)環(huán)境中平時會對NGINX配置文件做修改垄惧,添加或刪除后端主機菜秦。如果只有一兩臺手動修改很輕松挽牢,如果有幾十臺摆舟,一臺臺修改是一個很麻煩的事情。也許有人會說可以用ansible或salt之類的管理噪服,當(dāng)然這樣可以實現(xiàn),而且這類工具也是做這些事情的胜茧。但是如果想集成到運維平臺粘优,只用這些還不足夠。下面就可以通過etcd(單機)和confd來實現(xiàn)nginx的配置管理

安裝

  • etcd
 yum install etcd
  • confd

confd只是一個二進制文件呻顽,下載下來即可

wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
mv confd-0.16.0-linux-amd64 /usr/bin/confd
chmod +x /usr/bin/confd

配置

  • confd配置
  1. 創(chuàng)建confd配置目錄

    mkdir /etc/confd/{conf.d, templates}
    
    • conf.d: 資源模板文件雹顺,必須以toml為后綴
    • templates: 配置文件模板,必須以tmpl為后綴
  2. 創(chuàng)建資源模板文件

    # vi /etc/confd/conf.d/app01.conf.toml
    [template]
    src = "app01.conf.tmpl"
    dest = "/etc/nginx/conf.d/app01.conf"
    keys = [
        "/nginx/app01"
    ]
    check_cmd = "/usr/sbin/nginx -t"
    reload_cmd = "/usr/sbin/nginx -s reload"
    
    • src: nginx配置文件模板
    • dest: 生成的nginx配置文件廊遍,如果在運維平臺在嬉愧,這里可以指定一個臨時路徑,然后通過運維平臺分發(fā)到所有nginx節(jié)點
    • check_cmd: 檢測nginx配置文件命令
    • creload_cmd: 重新加載配置文件命令
  3. 創(chuàng)建nginx配置文件模板

    # vim /etc/confd/templates/app01.conf.tmpl
    upstream www_{{ getv "/nginx/app01/server_name" }} {
     {{ range getvs "/nginx/app01/upstream/*" }}
     server {{.}};
     {{end}}
     }
     
     server {
         server_name  {{getv "/nginx/app01/server_name"}};
         listen 80;
     
         location / {
             proxy_pass http://www_{{ getv "/nginx/app01/server_name" }};
         }
     }
    
    • getv: confd從etcd中獲取key對應(yīng)的value
    • range getvs:從etcd中獲取某個目錄下所有key對應(yīng)的value喉前,然后遍歷
    • {{ . }}: 占位符没酣,range中遍歷的值
  • 配置etcd
  1. 根據(jù)confd中nginx的模板文件在etcd中生成對應(yīng)的key value

    etcdctl set /nginx/app01/server_name www.app01.com
    etcdctl set /nginx/app01/upstream/server1 192.168.100.10
    etcdctl set /nginx/app01/upstream/server2 192.168.100.11
    
  2. 查看etcd中的結(jié)構(gòu)

    # etcdctl ls /nginx/app01
    /nginx/app01/upstream
    /nginx/app01/server_name
    
    # etcdctl get /nginx/app01/server_name
    www.app01.com
    
    # etcdctl ls /nginx/app01/upstream
    /nginx/app01/upstream/server2
    /nginx/app01/upstream/server1
    
  • 啟動etcd和confd
service etcd start
confd -watch -backend etcd -node http://127.0.0.1:2379

服務(wù)啟動后查看生成的配置文件:

upstream www_www.app01.com {

    server 192.168.100.10;

    server 192.168.100.11;

}

server {
    server_name  www.app01.com;
    listen 80;

    location / {
        proxy_pass http://www_www.app01.com;
    }
}

擴展思路(運維平臺結(jié)合)

  1. 如果有多個配置文件管理,可以在web界面編輯卵迂,然后保存文件到confd的模板目錄
  2. 操作etcd鍵值裕便,可以通過etcd api操作,并將值保存到數(shù)據(jù)庫见咒,以供回滾
  3. 生成的配置文件保存到臨時目錄(生產(chǎn)環(huán)境運維平臺肯定和nginx服務(wù)器是分開的)偿衰,然后通過ansible或salt調(diào)用服務(wù)器列表分發(fā)到有nginx標(biāo)簽的服務(wù)器
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市改览,隨后出現(xiàn)的幾起案子下翎,更是在濱河造成了極大的恐慌,老刑警劉巖宝当,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件视事,死亡現(xiàn)場離奇詭異,居然都是意外死亡庆揩,警方通過查閱死者的電腦和手機郑口,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門鸳碧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犬性,你說我怎么就攤上這事瞻离。” “怎么了乒裆?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵套利,是天一觀的道長。 經(jīng)常有香客問我鹤耍,道長肉迫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任稿黄,我火速辦了婚禮喊衫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘杆怕。我一直安慰自己族购,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布陵珍。 她就那樣靜靜地躺著寝杖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪互纯。 梳的紋絲不亂的頭發(fā)上瑟幕,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音留潦,去河邊找鬼只盹。 笑死,一個胖子當(dāng)著我的面吹牛兔院,可吹牛的內(nèi)容都是我干的鹿霸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼秆乳,長吁一口氣:“原來是場噩夢啊……” “哼懦鼠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屹堰,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肛冶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后扯键,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦袖,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年荣刑,在試婚紗的時候發(fā)現(xiàn)自己被綠了馅笙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伦乔。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖董习,靈堂內(nèi)的尸體忽然破棺而出烈和,到底是詐尸還是另有隱情,我是刑警寧澤皿淋,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布招刹,位于F島的核電站,受9級特大地震影響窝趣,放射性物質(zhì)發(fā)生泄漏疯暑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一哑舒、第九天 我趴在偏房一處隱蔽的房頂上張望妇拯。 院中可真熱鬧,春花似錦洗鸵、人聲如沸越锈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至儒将,卻和暖如春吏祸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钩蚊。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工贡翘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人砰逻。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓鸣驱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝠咆。 傳聞我的和親對象是個殘疾皇子踊东,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容