本文介紹日志服務從客戶端采集數據的兩個高可用方案,包括雙寫方案和數據加工復制+寫入切換方案。
背景
在單集群環境下,日志服務存儲采用三副本機制來保證數據的可靠性,即每份數據都有3個副本,副本按照一定的分布式存儲算法保存在集群的不同機器中。通過該機制,存儲系統確保3個數據副本分布在不同服務器的不同物理磁盤上,單個硬件設備的故障不會造成數據丟失,同時確保3個數據副本之間的數據強一致性。因此對于單硬件設備故障風險,日志服務天然具備了高可用性特征。
但是在一些相對極端的場景下,單集群可能由于一些預期外原因存在故障停服風險。針對該單集群故障風險,日志服務提供兩種異地多活的客戶端數據采集方案。
方案比較
對比項 | 方案1:雙寫 | 方案2:數據加工復制+寫入切換 |
部署復雜度 | 低 | 需要額外部署數據加工、切換寫入。 |
客戶端資源占用 | 方案1是方案2的2倍 | 低 |
數據一致性 | 較強 | 切換時可能出現一定比例的數據重復或丟失。 |
網絡建議
由于Logtail從客戶端上采集數據對網絡要求較高,針對跨地域傳輸場景,推薦通過專線進行傳輸。
方案1:雙寫
雙寫是指將客戶端上的數據同時實時寫入2個不同地域的日志服務Logstore中。
由于數據實時寫入2個不同地域的Logstore A和Logstore B,正常情況下Logstore A和LogstoreB的數據均實時可用。當Logstore A發生故障時,Logstore B的數據仍然實時可用。當Logstore B發生故障時,Logstore A的數據仍然實時可用。
操作步驟:
在日志服務控制臺上,創建Project和Logstore。
創建A地域的Project A和Logstore A。
創建B地域的Project B和Logstore B。
在客戶端所在的服務器上,設置Logtail的logtail_config.json文件,支持雙地域寫入。
例如A地域為華東2(上海),B地域為華北2(北京),則新增
config_server_address_list
配置項,將華北2(北京)的域名作為第二個地址,其他保持不變。{ ... "config_server_address":"logtail.cn-shanghai-intranet.log.aliyuncs.com", "config_server_address_list": [ "cn-shanghai-intranet.log.aliyuncs.com", "cn-beijing-intranet.log.aliyuncs.com" ], "data_server_list": [ { "cluster": "cn-shanghai", "endpoint":"cn-shanghai-intranet.log.aliyuncs.com" }, { "cluster": "cn-beijing", "endpoint":"cn-beijing-intranet.log.aliyuncs.com" } ], "cpu_usage_limit": 2.0, ... }
在日志服務控制臺上,創建Logtail配置。
重要您需要在Logtail啟動參數中設置
"accept_multi_config": true
或在創建Logtail配置時,在擴展配置中添加{"force_multiconfig": true}
,使得文件中的日志可被采集多份。具體操作,請參見如何實現文件中的日志被采集多份。后續進行修改Logtail配置時,需同時操作2個Project,保持配置一致。
在Project A的Logstore A中,創建Logtail配置。
在Project B的Logstore B中,創建Logtail配置。
方案2:數據加工復制+寫入切換
數據加工復制+寫入切換是指將客戶端上的數據采集到一個地域的Logstore A中,同時使用數據加工功能將數據實時復制到另一個地域的Logstore B中。當Logstore A出現異常時,您需要切換寫入,將客戶端上數據實時采集到Logstore B。
由于Logstore A的數據通過數據加工實時寫入Logstore B,正常情況下Logstore A和B的數據均實時可用。當Logstore A出現故障時,您需要將數據采集及時切換到Logstore B上,使Logstore B的數據實時可用。當Logstore B故障時,Logstore A的數據仍然實時可用。
操作步驟:
在日志服務控制臺上,創建Project和Logstore。
創建A地域的Project A和Logstore A。
創建B地域的Project B和Logstore B。
在客戶端所在的服務器上,設置Logtail的logtail_config.json文件,支持雙地域寫入。
例如A地域為華東2(上海),B地域為華北2(北京),則新增
config_server_address_list
配置項,將華北2(北京)的域名作為第二個地址,其他保持不變。{ ... "config_server_address":"logtail.cn-shanghai-intranet.log.aliyuncs.com", "config_server_address_list": [ "cn-shanghai-intranet.log.aliyuncs.com", "cn-beijing-intranet.log.aliyuncs.com" ], "data_server_list": [ { "cluster": "cn-shanghai", "endpoint":"cn-shanghai-intranet.log.aliyuncs.com" }, { "cluster": "cn-beijing", "endpoint":"cn-beijing-intranet.log.aliyuncs.com" } ], "cpu_usage_limit": 2.0, ... }
在日志服務控制臺上,在Project A的Logstore A中,創建Logtail配置。
重要您需要在Logtail啟動參數中設置
"accept_multi_config": true
或在創建Logtail配置時,在擴展配置中添加{"force_multiconfig": true}
,使得文件中的日志可被采集多份。具體操作,請參見如何實現文件中的日志被采集多份。通過Terraform或者API備份Project A中的Logtail配置,并改寫為Project B的Logtail配置,以便異常時應用。
創建數據加工任務實時同步Logstore數據。具體操作,請參見復制Logstore數據、跨地域傳輸數據。
當Logstore A發生異常時,將步驟4中備份的Logtail配置導入到Logstore B中。