星期五, 9月 25, 2015

認識 Docker + HAProxy (Software Load Balancing)

首先當然要裝好 Docker,再來是準備一台以上的 WebServer,以 Nginx 為例:
  • docker run --name nginx1 -d -p 8081:80 nginx
  • docker run --name nginx2 -d -p 8082:80 nginx
其中 -p 是表示將 Docker Host 的埠對應到 container 裏,所以在 Docker Host 上的 http://localhost:8081、http://localhost:8082 就會分別導到 nginx1、nginx2 的 80 埠,可以檢查一下是否能看到 Nginx 預設的首頁。

為了要知道這些 WebServer 的位址,可以下指令:
  • docker inspect nginx1 | grep IPAddress
  • docker inspect nginx2 | grep IPAddress
假設得到的結果是 nginx1: 172.17.0.1;nginx2: 172.17.0.2。接下來準備 HAProxy,因為官網說「沒有兩個人的設定一樣」,所以他們索性就不放一個入門級的設定範例了。沒關係,自己寫一個:
  • listen balanceGroup1 :80
    • server nginx1 172.17.0.1:80
    • server nginx2 172.17.0.2:80
  • listen stats :1936
    • mode http
    • stats enable
    • stats uri /
以上內容存檔在 /var/docker/haproxy.cfg,接著是重點:
  • docker run --name haproxy1 -d -p 80:80 -p 1936:1936 -v /var/docker:/usr/local/etc/haproxy:Z haproxy
如此就可以在 Docker Host 上訪問 localhost(會輪流導向 nginx1、nginx2),也可以在 localhost:1936 監控。因為瀏覽器的快取做得好,有時候反而不利於觀察 HAProxy 的行為,可以改用 curl 命令列工具。

[2018/05/12]
事隔多年,設定檔必須小改以符合新版的規定,如原先:
  • listen balanceGroup1 :80
要拆成兩行
  • listen balanceGroup1
    • bind :80
[2018/08/31]
服務與監控使用同一個埠似乎比較簡潔,就是整併上述 listen stats 段落,改為:
  • listen balanceGroup1
    • mode http
    • bind :80
    • stats enable
    • stats uri /admin?stats
    • server nginx1 172.17.0.1:80
    • server nginx2 172.17.0.2:80

星期一, 9月 21, 2015

修正 CentOS 7 所在時區(以台北為例)

  • sudo ln -fs /usr/share/zoneinfo/Asia/Taipei /etc/localtime
[2016/04/07] 遇到一部主機怎麼設時間都不對?原來是 CentOS7 Minimal Distribution 的問題,這篇有些指令可以參考,解決之道是安裝設定 nptd,大部份參考這篇

[2016/11/16] Ubuntu 的互動式指令:
  • dpkg-reconfigure tzdata

星期一, 9月 14, 2015

IntroduceInstabilityByIgnoringProtectedModeSettings

過去在 Selenium RC + IE 的測試時,發現如果 IE 各個安全區域沒有一致的「受保護模式」設定,瀏覽器都會開不起來,必須設定標題屬性的值為真才行。最近搬上 Selenium Grid,發現這招不行了?深究之下,才知以前的那招實在是不太好,還是乖乖地將每個安全區域的「受保護模式」設成一樣,都同時是「啟用」似乎比較好。詳情可參考這篇

Selenium Grid on Jenkins

  • Selenium Grid Hub (Jenkins)
    • 安裝 Plugin
    • 設定埠(含防火牆)
  • Selenium Node (Linux or Windows or ...)
    • 安裝瀏覽器
    • 安裝 WebDriver(在執行路徑)
    • 安裝 Java + Selenium Server JAR、啟動
    • 設定埠(含防火牆)
    • 設定 json 格式的組態
    • 如果是 IE,可能還需要參考這篇這篇

星期四, 9月 10, 2015

SELinux 讓 CentOS 7 上的 Docker 跟別人不一樣?

很多介紹 Docker 的文章都是說 sudo service docker start 即可啟動服務,但在 CentOS 7 上卻必須用 su - 加上留一個 Terminal 給 docker -d,否則後續每個 docker run 的結果都是 Exited?理由就在 CentOS 7 預設的 SELinux,看來關掉比較方便(但又不太安全?),組態管理在 /etc/sysconfig/selinux 這個檔案設定,或可用 getenforce / setenforce 命令短期控制。

[2015/09/18]
有問題的不見得是 docker 或 SELinux,別人提供的 image 也可能是原因。像我原本搭配一個 sameersbn/redis 測試,必須關閉 SELinux 或用 su - / docker -d 這招,但後來測試官方的 redis image 卻沒有這個問題,看來以後還得好好地研究 dockerfile 才行。
[2016/03/19]
在試 HAProxy 的過程中,排除了 SELinux 還是不行?從這篇回答學到,還可以在最後加上「 tail -f /dev/null」。
參考來源:How can I use docker without sudo? C6.5 與 C7 的一些差異與 systemctl 的介紹

星期二, 9月 08, 2015

解決 Mac Terminal SSH 到 Linux 時的第一個錯誤訊息

錯誤訊息:-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): 沒有此一檔案或目錄

解決之道:參考這篇文章

拖了幾個月的挑戰

Linux 硬碟空間加大,參考這篇,總算成功。
後記:第二次本以為是駕輕就熟,沒想到竟然踢到鐵板。先是空間已完全用盡,有些指令是無法執行的;再來掛在 resize2fs,得到 Bad magic number in super-block while trying to open...,還好又找到這篇救了我。