本文介绍日志服务从客户端采集数据的两个高可用方案,包括双写方案和数据加工复制+写入切换方案。
背景
在单集群环境下,日志服务存储采用三副本机制来保证数据的可靠性,即每份数据都有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中。