consul server 的啟動方式

要使用 consul 這個軟體必須要有 server,server 啟動的方式有三種:

  1. 先有 bootstrap server,然後其他 server 再加入,這同時也是 0.4 版以前的作法。所以在啟動 consul 時,必須要指定 -bootstrap 與 -server 參數,或是在設定檔裡指定 {“bootstrap”: true, “server”: true };接著在每個 server 的設定檔裡指定 {“server”: true, “start_join”: [“your_bootstrap_server_ip”] }
  2. 先啟動數個 server,然後手動用 consul join 加入,這是 0.4 版以後提供的方式。官方是建議最好使用 3~5 台的 server,這幾台 server 會在 join 之後,自行投票選出誰當 leader 。啟動 consul 時,要指定 -bootstrap-expect expected_server_number 與 -server,或是在設定檔裡指定 {“bootstrap_expect”: expected_server_number, “server”: true },等到啟動之後,再用 consul join server_1_ip server_2_ip server_3_ip 來加入 cluster。
  3. 用 Hashicorp 提供的 atlas 服務,啟動 server 以後,會透過 atlas 服務,自動做 join 的動作。要使用 atlas,必須先到 atlas 註冊,取得 token。啟動 consul 時,要指定 -server, -atlas, -atlas-token 與 -atlas-join ,或是在設定檔裡指定 {“server”: true, “atlas_infrastructure”: “xxx/yyy”, “atlas_join”: true, “atlas_token”: “your_atlas_token” }

這裏面當然是用 atlas 最方便,除了有提供 Web UI 可以做監控之外,還可以使用 vagrantup 跟 terraform 等來做管理,只是使用這項服務是有代價的,超過 10 個 node 每個月收費 40 美金。

參考資料:

電影流水帳(2015/5/21~2015/8/17)

Bryce Concentrating轉眼差不多三個月過去… (遠目)

Bryce Dallas Howard 是侏儸紀世界的女主角,最讓人津津樂道的,就是她穿著高跟鞋跑完整部電影。

  • Spy (IMDB, Wikipedia),台譯:麻辣賤碟。雖然大致的劇情已經從預告得知了,但這並沒有減損看片的樂趣,故事相當好看。
    Susan 是 CIA 探員,主要負責的是後勤與提供資訊。與 Susan 配合的是 Fine ,Fine 在一次任務中疑似陣亡。Susan 就自告奮勇出任務,局裡另外一個特務 Ford 跟上面鬧翻,自己跑出去跟 Susan 一起調查。調查的過程裡鬧出許多有趣的事情,然後調查的結果也出人意料之外。最後 Susan 還是把這件事情解決了,順利走出她個人生命的新旅程。
  • Jurassic World (IMDB, Wikipedia),台譯:侏儸紀世界。原本以為是重開機的作品,結果故事是延續前三集。遺傳科技公司在事件發生之後,繼續發展,並且把島發展為主題公園,吸引了許多遊客來參觀。但是為了創造話題性,公司持續改造基因,以創造出新品種的恐龍。這次他們用了烏賊、迅猛龍、暴龍等的基因,創造出了帝王暴龍。故事應證了莫非定律,事情永遠發生在你認為不會出事的時間點,突變的帝王暴龍非常聰明,應用自身的特質,突破人類的監控,逃出柵欄。整個島上一片混亂,女主角 Claire ,同時也是島上主題樂園的管理者,她的兩個姪子正好來到島上度假,所以 Claire 很緊張的找了男主角 Owen 來幫忙,一方面想救出姪子,一方面想控制住這個混亂的情況,但事情很難盡如人意,慢慢走向最糟糕的情況,帝王暴龍發現在島上根本可以橫著走,然後朝著人群最多的地方去了。跟 Owen 有關係的軍火販這時候跳出來說可以阻止帝王暴龍,並且想利用這次機會取得 Owen 馴養的迅猛龍,不過,帝王暴龍也有迅猛龍的基金,牠們反而變成同伙,帝王暴龍也殺到人群最多的地方了。至此,事情看起來完全無法控制了啊!!!
    Owen 再次面對迅猛龍,迅猛龍回心轉意,幫忙 Owen;Claire 也放出了島上的暴龍,暴龍與迅猛龍一同對抗帝王暴龍;最終,帝王暴龍被逼到海邊,讓滄龍給吃了。
    這部電影的票房不錯,但我覺得故事普普,而且有蠻多不合理的地方,就當爽片來看就好。侏儸紀系列還是第一集最好看,Tim 爬上高壓電柵欄被電下來那幕永遠讓我膽顫心驚。
  • 道士下山 (IMDB, Wikipedia)。忘了在哪裡看到這部電影的名字,感覺上蠻好看,就看了,看完蠻後悔。
    故事大致分成三個段落,第一個段落是何安下下山遇到崔道寧,並且讓崔道寧收留,在崔道寧這兒,他看到崔道寧的老婆玉珍跟小叔偷情的事情,後來崔道寧被毒死,何安下為崔道寧報仇。這段的問題是玉珍的形象不夠具體,我看不到玉珍偷情的理由,也看不到為什麼她非要聽小叔的話的理由,不過好像也沒有必要一定要一個理由。
    第二段跟第三段是太極門的恩怨,何安下遇上趙心川,趙心川說要打藥酒,隔天在跟師父打鬥後要送給師父。何安下偷偷跟著去看熱鬧,卻發現趙心川師父彭乾吾用了不光明的手段殺了趙心川。之後又遇上彭乾吾兒子彭七子,兩人去某個道觀胡鬧,遇上了師叔周西宇。周西宇是彭乾吾師弟,原本應該繼承太極門的,但為了師門之內的和氣,遠走他鄉,想避開師兄彭乾吾,但不可避免的命運終究無法避免,彭乾吾為了師父秘傳的猿擒術不願意放過周西宇,展開衝突。經過一番決鬥,彭乾吾受了重傷,其子七子拿了槍打了周西宇,周西宇因此受了重傷、傷重不治,臨終前,讓何安下去找他的好友查老闆。跟查老闆見面以後,交代了前事,查老闆決定為周西宇復仇,就婉拒了當地軍閥趙笠人,表明自己不唱戲了。趙笠人是個小氣鬼,因為查老闆不給面子,就跟彭乾吾搭成一伙打周西宇。最後周西宇與查老闆的決鬥,因為父子的親情,查老闆放下了仇恨,收了何安下當弟子,趙笠人被丟到河裡。
    這兩段用了大量的武打特效,看起來是蠻精彩,但其他就….不怎麼樣….

Golang and GVM

Ubuntu 14.04 預載了 Golang 1.2 ,如果想要其他版本的呢?到官方網站去找,會發現根本找不到下載連結。用 ppa 去找,是可以找到這個 golang 1.4 : Jay R. Wren

為了安全起見,還是用 Version manager 好了,Golang 的 Version manager 在網路上可以找到兩個:govm 跟 GVM,目前看起來比較常見的是 GVM。GVM 的安裝可以參考這篇:7 Easy Steps to Install Go (Golang) on Ubuntu

摘錄安裝步驟如下:

  1. bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
  2. 在 .bashrc 或 .zshrc 裡加入 [[ -s “$HOME/.gvm/scripts/gvm” ]] && source “$HOME/.gvm/scripts/gvm”
  3. 新開或重開終端機

使用方法:

  • 看能下載的版本:gvm listall
  • 列出目前有的版本:gvm list
  • 安裝指定版本:gvm install desired_version
  • 使用指定版本:gvm use go1.4.2
  • 其他指令說明,執行:gvm

 

OpsWork / Terraform / Vagrant 小感

Vagrant 其實不太能拿來跟 OpsWork 或 Terraform 相比,不過有了 push 之後,算是有個堪用的 deploy 方法…

前一陣子看到 Terraform ,只要寫好腳本(或者該說是計劃),這工具就會自動幫你把環境佈署到雲端,比如說,你有 Web application、Web Server、Database、HAProxy … 等等,在腳本描述好關係之後,Terraform 可以自動幫你佈署到 AWS 、DigitalOcean、CloudStack、Docker、Google cloud 、OpenStack、Heroku … 等地方,非常的方便。但如果要用在內部的環境,可能就沒辦法 (除非內部自架了 CloudStack 或 OpenStack)。

OpsWorks 是在 DevOps gitter 裡看到的,Google 了一下,這是 Amazon 提供的服務,做的事情其實跟 Terraform 蠻相近的,跟 Amazon 的服務整合度更高。我是還沒試用過,不知道好不好用。

Vagrant 本身是操作虛擬機器的好幫手,在 Google Altas 時,看到 Vagrant 有提供 push 這子指令,這可以用來做 deploy 。比如說,你在 Vagrantfile 裡描述了 Web application server、Web Server、Database server … 等等,在本地端可以用 vagrant up  啟動,進行驗證,那要實際佈署到遠端時,就可以用 push 來做。push 的對象(或者該說是方式?)可以是 Altas、FTP/SFTP、Heroku 或執行自訂的腳本,所以看起來或許適合我現在的情境。

順便記一些連結:

golang 起手

環境是 Ubuntu 14.04 trusy,14.04 預載的 go 版本是 1.2.1 。

先安裝 golang :sudo apt-get install golang golang-go golang-go.tools ,然後設定環境變數,看是用 bash 或 zsh,bash 就是改 $HOME/.bashrc,zsh 就是改 $HOME/.zshrc,加入:

export GOROOT=$(go env GOROOT)
export GOPATH=$HOME/.go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

然後 mkdir -p $HOME/.go ,$GOPATH 這路徑裡,放的是 go get 所取得的原始碼。

接著就可以照 golang 环境配置建议 裏面的建議來安裝工具,裏面的 oracle 可以跳過,這已經包在 golang-go.tools 裡。另外這篇裡的編輯器是介紹用 Github 的 ATOM,所以該找時間來找一下 vim 的好用 plugin 來用。

要安裝比較新版本的 golang ,除了可以找 ppa 之外,也可以用 govm 或 gvm 來安裝:

govm 看起來顯然是小很多,gvm 在網路上的介紹文比較多,自己目前是還沒試過。

Packer

是 HashiCorp 釋出的一個工具,它可以依照寫好的設定檔,打包各種格式的 image,像 Amazon Machine Image (給 EC2 用)、Virtualbox iso/ovf、digital ocean、docker、openstack、vmware iso/vmx、Vagrant box …. 等等。安裝很簡單,就下載 zip ,解壓縮 (Linux 下要改權限) 放到路徑裡就可以使用了。

第一次撰寫可以參考 https://github.com/shiguredo/packer-templates 這裡的設定檔範例。指令的使用也蠻簡單,例如:只要做 virtualbox 用的 ovf ,packer build -only=virtualbox-iso template.json

一口氣 build 不同格式的 image:packer build -parallel=true template.json

在 provision 的部份,可以用 shell、chef、puppet… 等,也可以用 ansible https://www.packer.io/docs/provisioners/ansible-local.html

打包好的 image ,會自動放在或推到對應的地方,例如 AMI 就會放到 Amazon 那邊,docker image 可以推送到 docker registry,digital ocean 就是 droplet 或者是推送到 vagrant 等等。

Terminal 下的複製與貼上

複製與貼上是透過 xsel 指令,例如:

    • 複製到剪貼簿:xsel –clipboard < your_file
    • 將內容輸出到指定檔案: xsel –clipboard > your_new_file
    • 將指定字串放到剪貼簿裡:echo “your_text” | xsel –clipboard

如果連線到遠端,也可以使用,但是 ssh 連線時,必須加上 -Y 參數,或是在設定檔裡加上 ForwardX11 yes 跟 ForwardX11Trusted yes 。

另外再介紹 parcellite,這是一個剪貼簿的管理程式,類似 Windows 的 ditto。在啟動以後,按下 ctrl+alt+h 就可以叫出來,這時可以看到剪貼簿的過往紀錄。

參考資料:

Python InsecurePlatformWarning

碰到這個歡樂的錯誤,其實已經碰過兩三次了,前面幾次都不了了之。

InsecurePlatformWarning: A true SSLContext object is not available.

這次是確實的找到方法可以不用改程式避掉的方法,方法很簡單,就是安裝 pyopenssl ndg-httpsclient pyasn1 這幾個模組,這幾個模組會自動將 SSL 相關的憑證注射到 urllib3 模組裡,下載時就不會有 InsecurePlatformWarning 的警告。

這方法是在 StackOverflow 的 python – InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately 看到解法的,感謝。

git clone fail

遇到下面這錯誤~

$ git clone http://your_host/your_group/your_project.git
Cloning into 'your_project'...
remote: Counting objects: 426, done.
remote: Compressing objects: 100% (375/375), done.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

過程大致就如 gitlab – error: git-upload-pack died of signal 13 – Stack Overflow

所以我試過 git config –global http.postBuffer 524288000 ,也試著加過 GIT_CURL_VERBOSE ,但都看不出什麼端倪,伺服器上的 log 也沒看到,最後就如 gitlab – error: git-upload-pack died of signal 13 – Stack Overflow 的解答所說,是 permission 問題。我猜可能是我有調整 nginx user 的關係,導致錯誤。後來就是依據 log 裡的提示,調整 /var/run/nginx/proxy 下資料夾的 owner 就解決問題了。

Ansible mysql 相關模組所需的套件

使用 mysql_usermysql_db 這兩個模組時,Target 方必須要安裝幾個套件才能運作,否則會有錯誤

msg: the python mysqldb module is required

在 Ubuntu 裡要裝的是 python-mysqldb 、mysql-server  。python-mysqldb 是必要的,因為 python 的程式會需要用到這個模組;而 mysql-server 則要視你的 mysql server 所在機器而定,如果是在其他機器上,就可以不需要安裝。