google-code-prettify

2019年11月25日 星期一

編譯 HAProxy for Windows

HAProxy 官網並沒有提供編譯好的 Windows 軟體,
使用者必須在官網下載 Source Code 後,自行編譯。

我使用 Cygwin 進行編譯,
下載 Cygwin 安裝檔安裝,
安裝過程中,會讓使用者選擇要安裝的額外編譯環境套件,
例如: cmake、gcc-core、cygwin32-gcc-core 等

安裝好之後,Cygwin 安裝檔先不要刪除,
因為後續編譯過程如有缺少編譯環境需要的工具套件,
還是會需要用到它把工具套件安裝進來。

我使用的是 HAProxy 2.0.8 版,
若要使用其他版本可至官網下載。
將下載來的 source code tar 解壓縮並放置在  Cygwin 安裝目錄下的 home 目錄內。
路徑如:
C:\cygwin64\home\haproxy-2.0.8
開啟 Cygwin64 Terminal,這是一個類 Linux 的環境,
可以使用一些 Linux 的指令,如: ls 。
切換目錄到 /home/haproxy-2.0.8
RYAN.CHEN@TWTY3NB ~
$ pwd
/home/RYAN.CHEN
RYAN.CHEN@TWTY3NB ~
$ cd ..
RYAN.CHEN@TWTY3NB /home
$ ls
haproxy-2.0.8  haproxy-2.0.8.tar.gz  RYAN.CHEN
RYAN.CHEN@TWTY3NB /home
$ cd haproxy-2.0.8

使用 make 指令開始編譯 HAProxy,我的電腦大概花了 十幾、二十分鐘才編譯好。

$ make TARGET=cygwin
$ make install

編譯完成後,到 haproxy-2.0.8 目錄將 產生出來的 haproxy.exe 及 在 C:\cygwin64\bin\cygwin1.dll  複製出來,
新開一個目錄置放這兩個檔案。
在執行 haproxy 時,需要先建立一個 haproxy.cfg 配置 haproxy 運行的設定。
以下是一個簡單範例:

global
 
defaults
    timeout connect 90s
    timeout client 90s
    timeout server 90s

frontend dashboard
    bind *:80 
    mode http
    default_backend dashboard_back
    
backend dashboard_back
    mode http
    server dashboard_node_1 10.13.15.10:18083 
    server dashboard_node_2 10.13.15.11:18083 

但是使用這樣的預設值編譯出來的結果,
在配置 SSL 時,
啟動 HAProxy 會發生問題,
才知道沒有含 SSL 的模組被編譯進去。

使用指令查看 HAProxy 在編譯時,有什麼選項可以使用將選擇的套件編譯進去

$ make help

從顯示的說明,有四個套件是建議啟用:
  USE_PCRE             : enable use of libpcre for regex. Recommended.
  USE_REGPARM          : enable regparm optimization. Recommended on x86.
  USE_STATIC_PCRE      : enable static libpcre. Recommended.
  USE_OPENSSL          : enable use of OpenSSL. Recommended, but see below.


所以在使用 make 指令時,需要給它啟用這四個模組的參數:
$ make TARGET=cygwin USE_PCRE=1 USE_REGPARM=1 USE_STATIC_PCRE=1 USE_OPENSSL=1
$ make install
然後,你會發現可能發生錯誤,大致是編譯環境缺少需要的工具套件,



所以這時候需要在使用 Cygwin 安裝軟體,將缺少的套件安裝進來。
我因為先前已經單獨安裝 Git 工具,而它內含了 openssl 工具,
所以我不需要在 Cygwin 在安裝 openssl,
過程中,一邊 try make 一邊補缺少的套件,
最後我安裝了如下的套件:



但仍無法安裝 USE_STATIC_PCRE ,
最後將其剔除,

$ make TARGET=cygwin USE_PCRE=1 USE_REGPARM=1 USE_OPENSSL=1
$ make install

另外,需要從 Cygwin 目錄中,增加複製 dll 供 HAProxy 執行檔使用:
cygcrypto-1.1.dll
cygpcre-1.dll
cygssl-1.1.dll
cygwin1.dll
cygz.dll


2019年11月12日 星期二

MQTT Broker HA Cluster 使用 Proxy 做 Load Balancing 與 SSL

MQTT Broker : EMQX
Proxy: HAProxy
OS: Windows Server 2016



MQTT Broker 選擇


目前有幾款免費的 MQTT Broker,
但是免費且支援 Cluster 架構的很少。

最知名的 Broker - Mosquitto,
我個人沒有找到官方文件指出可以架設 Cluster HA 的機制,
之前聽也 Survey 過 MQTT Broker 的同事說過它不支援。

最後挑了三套作評估:VerneMQ、EMQX、HiveMQ。
這三套都支援 Cluster 架構。
HiveMQ 本來是個付費軟體,但在今年大約四五月的時候,推出了免費的 Community 版。
在細看 Community 版和付費版的差異後
發現 Community 版不支援 Cluster,
所以也就淘汰它了,
不然他是個純 Java 開發的軟體,這點倒對我個人有吸引力。


MQTT Broker 最後我選用了 EMQX 有幾個考量評估的點:

  1. 知名度和討論度:
    • Wiki 上的一篇文章 Comparison of MQTT implementations 所列的產品,它在表中呈現出來功能較為豐富。
    • 在 Google Trend 的比較中,它都算是比較高談論度。在中國最高,因為這套主要是中國人開發維護的。
    • 在GitHub 上(2019/10) Watch:321、Star:5078、Fork:964、Contributors:43,在競爭對手中,都是最高的
  2. 免費: Apache License 2.0
  3. 提供 Cluster HA架構: 它是極少數免費 Broker 有提供 Cluster
  4. 持續維護的狀況:Contributors:43,近一年主要有維護的人員數,也是比競爭對手高。GitHub上的 Issue,也持續有回覆和討論。
  5. 功能性:除了 MQTT 規格特性以外,也提供 Dashboard 可以觀看連線狀況,並提供 REST API 可以即時設定和取得連線狀態和Client 資訊,例如:使用者帳號
  6. 支援多種作業平台,包含   Windows ,這點剛好是對我們單位的加分條件


MQTT Client  Library 選擇 Eclipse Paho 有幾個考量點:
1.       在我們 Survey Broker 的過程,不同的 Broker 都提到測試、驗證、支援這一套
2.       他是很老牌的 Client Library
3.       多種程式語言版本: Java CC#JavaScript等等,這樣可以依照不同的情境需要選用對應的程式語言。
4.       Java等部份版本支援斷線自動重連
5.       大多數語言支援HA,除了C#PythonEmbedded C/C++