一、介绍

IoTDB 数据库同步是指将一个节点的数据复制到其他节点,以确保数据的冗余和可用性。在分布式环境中,数据同步是保证系统高可用性的重要组成部分。以下是 IoTDB 数据库同步的一般介绍:

数据同步类型:

主从复制(Master-Slave Replication):在主从复制中,一个节点被指定为主节点,负责接收和处理所有的写操作。其他节点被指定为从节点,复制主节点的数据并提供读取服务。主从复制适用于读多写少的场景。
多主复制(Multi-Master Replication):在多主复制中,所有节点都是主节点,并且都负责接收和处理写操作。每个节点都将自己的数据复制到其他节点,以确保数据的冗余和可用性。多主复制适用于读写均衡的场景。
数据同步策略:

同步复制(Synchronous Replication):在同步复制中,写操作必须等到所有节点都接收到并确认写操作后才能完成。这种方式确保了数据的一致性,但会增加写操作的延迟。
异步复制(Asynchronous Replication):在异步复制中,写操作不需要等待所有节点的确认,可以立即完成。这种方式可以降低写操作的延迟,但可能会导致数据不一致的问题。
数据同步机制:

基于日志的复制(Log-based Replication):在基于日志的复制中,写操作被记录到一个日志文件中,并定期复制到其他节点。这种方式可以确保数据的一致性和可靠性。
基于消息的复制(Message-based Replication):在基于消息的复制中,写操作被转换为消息并传输到其他节点。这种方式通常使用消息队列或者流处理引擎来实现数据的传输和复制。
监控和管理:

在部署和配置数据同步机制后,需要设置监控系统来监视数据同步的状态,包括复制延迟、数据完整性等指标。
同时,需要设置自动化脚本来处理可能出现的故障或延迟,如自动恢复数据同步管道、自动切换到备用节点等。

二、应用场景

以一个工厂应用为例,通常有多个分厂和多个总厂,每个分厂中使用一个 IoTDB 实例收集数据,然后将数据定时汇总到总厂中进行备份或者分析等,一个总厂可以接收来自多个分厂的数据,在这种场景下每个 IoTDB 实例所管理的设备各不相同。

在 sync 模块中,每个分厂是发送端,总厂是接收端,发送端定时将数据同步给接收端,在上述应用场景下一个设备的数据只能由一个发送端来收集,因此多个发送端同步的数据之间必须是没有设备重叠的,否则不符合 sync 功能的应用场景。

当出现异常场景时,即两个或两个以上的发送端向同一个接收端同步相同设备(其存储组设为 root.sg) 的数据时,后被接收端收到的含有该设备数据的发送端的 root.sg 数据将会被拒绝接收。示例:发送端 1 向接收端同步存储组 root.sg1 和 root.sg2, 发送端 2 向接收端同步存储组 root.sg2 和 root.sg3,
均包括时间序列 root.sg2.d0.s0, 若接收端先接收到发送端 1 的 root.sg2.d0.s0 的数据,那么接收端将拒绝发送端 2 的 root.sg2 同步的数据
注意事项
sync功能开启之后,发送端的 alter timeseries add tag 语句将不会被同步到接收端

三、IoTDB 数据库搭建

搭建直通车

四、修改同步配置文件

重要配置参数说明:
is_sync_enable 同步功能开关,配置为 true 表示接收端允许接收同步的数据并加载,设置为 false 的时候表示接收端不允许接收同步的数据
sync_server_port 同步接收端服务器监听接口,请确认该端口不是系统保留端口并且未被占用。参数 is_sync_enable 设置为 true 时有效,参数 is_sync_enable 设置为 false 时无效
server_ip 同步接收端的 IP 地址
sync_period_in_second 同步周期,两次同步任务开始时间的间隔,单位为秒 (s)
sync_storage_groups 进行同步的存储组列表,存储组间用逗号分隔;若列表设置为空表示同步所有存储组,默认为空

1、配置接收端的参数

conf/iotdb-engine.properties

	####################
	### Sync Server Configuration
	####################

	# Whether to open the sync_server_port for receiving data from sync client, the default is closed
	is_sync_enable=true

	# Sync server port to listen
	sync_server_port=5555

	# White IP list of Sync client.
	# Please use the form of network segment to present the range of IP, for example: 192.168.0.0/16
	# If there are more than one IP segment, please separate them by commas
	# The default is to allow all IP to sync
	ip_white_list=0.0.0.0/0

2、配置发送端的参数

conf/iotdb-sync-client.properties

	# Sync receiver server address
	server_ip=127.0.0.1

	# Sync receiver server port
	server_port=5555

	# The period time of sync process, the time unit is second.
	sync_period_in_second=600

	# This parameter represents storage groups that participate in the synchronization task, which distinguishes each storage group by comma.
	# If the list is empty, it means that all storage groups participate in synchronization.
	# By default, it is empty list.
	# sync_storage_groups = root.sg1, root.sg2

	# The maximum number of retry when syncing a file to receiver fails.
	max_number_of_sync_file_retry=5

注意:如果IoTDB是容器部署,server_ip 是pod ip地址
以上参数配置需要重启生效,注意接收端 pod ip地址变化

五、启动同步功能发送端

用户可以使用$IOTDB_HOME/tools文件夹下的脚本启动同步功能的发送端
Linux 系统与 MacOS 系统启动命令如下:

  Shell >$IOTDB_HOME/tools/start-sync-client.sh

Windows 系统启动命令如下:

  Shell >$IOTDB_HOME\tools\start-sync-client.bat

关闭同步功能发送端
用户可以使用$IOTDB_HOME/tools文件夹下的脚本关闭同步功能的发送端。
Linux 系统与 MacOS 系统停止命令如下:

 Shell >$IOTDB_HOME/tools/stop-sync-client.sh

Windows 系统停止命令如下:

Shell >$IOTDB_HOME\tools\stop-sync-client.bat

六、测试

进入容器
$IOTDB_HOME/sbin/start-cli.sh

start-cli.sh -h localhost -p 6667 -u root -pw root

SHOW STORAGE GROUP 查看存储组列表。
在发送端写入数据

insert into root.ln.wf02.wt02(timestamp,test) values(1, '测试')

然后在接受端查看

show timeseries

可以看到相同的数据则数据库同步成功

持续更新中,关注不迷糊

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐