两款方案详解,企业线下数据库迁移至云上ScyllaDB(1)
方案一
通过扩缩容(上线新节点和下线老节点)方式迁移,这个过程数据库通过数据传输到新节点。
整个过程不停机
上下线节点的数据传输时存在压力。
某个节点存在不可控的故障导致节点无法启动时,数据存在丢失的风险。
新节点跨专线的时候,专线延迟速度影响集群的响应延迟。
1. 上线新节点
1.1. 确认集群状态和检查配置
首先确认集群各节点状态是Up Normal (UN),如果存在节点是DN,将无法添加新节点。
[root@172-16-121-153 scylla]# nodetool -h ::FFFF:127.0.0.1 status Datacenter: my_data_center ========================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 172.16.121.151 37.05 MB 256 ? dfb03e20-6c5c-4360-b1d5-0735369b61fb my_rack UN 172.16.121.152 36.98 MB 256 ? ff2beda1-1253-419b-a2e5-415f072ba25c my_rack UN 172.16.121.153 36.56 MB 256 ? 8efc9e61-2316-4a65-9de5-e2edb2af4eca my_rack
登陆到现有集群任一节点收集配置信息。
检查配置脚本: cat /etc/scylla/scylla.yaml | grep cluster_name cat /etc/scylla/scylla.yaml | grep seeds: cat /etc/scylla/scylla.yaml | grep endpoint_snitch cat /etc/scylla/scylla.yaml | grep authenticator cat /etc/scylla/scylla.yaml | grep -E "listen_address|rpc_address" scylla --version 集群名称 [root@172-16-121-152 scylla]# cat /etc/scylla/scylla.yaml | grep cluster_name cluster_name: 'dtstack' 种子节点配置: [root@172-16-121-152 scylla]# cat /etc/scylla/scylla.yaml | grep seeds: - seeds: "172.16.121.151" 告密者策略: [root@172-16-121-152 scylla]# cat /etc/scylla/scylla.yaml | grep endpoint_snitch #endpoint_snitch: SimpleSnitch endpoint_snitch: GossipingPropertyFileSnitch scylla版本: [root@172-16-121-152 scylla]# scylla --version 4.2.4-0.20210302.0ac069fdc 身份验证状态: [root@172-16-121-152 scylla]# cat /etc/scylla/scylla.yaml | grep authenticator # Please increase system_auth keyspace replication factor if you use this authenticator. # authenticator: AllowAllAuthenticator
1.2. 部署Scylladb
参考文档。https://www.Scylladb.com/download/?platform=ubuntu-18.04&version=scylla-4.2#open-source
1.3. 配置参数
配置文件默认位于/etc/scylla。
1.3.1. scylla.yaml
各参数和现有集群一致,seeds节点加入新节点ip,保证后续下线节点时候,集群可用。
vi /etc/scylla/scylla.yaml cluster_name: 'dtstack' --集群名称 listen_address: 172.16.121.154 --本节点ip rpc_address: 172.16.121.154 --本节点ip seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: - seeds: "172.16.121.151,172.16.121.154" endpoint_snitch: GossipingPropertyFileSnitch
1.3.2. cassandra-rackdc.properties
参数和现有集群一致。
vi /etc/scylla/cassandra-rackdc.properties dc=my_data_center --设置数据中心名称 rack=my_rack --设置机架名称 prefer_local=true
1.4. 启动scylla服务
systemctl start scylla-server
1.5. 验证集群状态
节点状态UN,代表数据节点状态正常。
[root@172-16-121-154 lib]# nodetool -h ::FFFF:127.0.0.1 status Datacenter: my_data_center ========================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 172.16.121.151 37.06 MB 256 ? dfb03e20-6c5c-4360-b1d5-0735369b61fb my_rack UN 172.16.121.152 36.99 MB 256 ? ff2beda1-1253-419b-a2e5-415f072ba25c my_rack UN 172.16.121.153 36.57 MB 256 ? 8efc9e61-2316-4a65-9de5-e2edb2af4eca my_rack UN 172.16.121.154 30.65 MB 256 ? 4f8e0b46-3115-4415-a2c1-60a458859f1d my_rack Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless
1.6. 查看网络传输和数据同步进度
iftop nodetool -h ::FFFF:127.0.0.1 netstats
等待数据传输完成,按照上面的1-6步骤依次添加足够所需的新节点。
1.7. 清理数据
等待新节点数据同步完成后,业务低峰期,依次在除新节点外的节点删除不再属于该节点key。
nodetool -h ::FFFF:127.0.0.1 cleanup
1.8. 业务切换连接地址到新节点,安排时间进行下线节点
2. 下线节点
2.1. 状态检查
确保删除节点的状态为节点状态为:UN。
nodetool -h ::FFFF:127.0.0.1 status
2.2. 删除节点
nodetool -h ::FFFF:127.0.0.1 decommission
2.3. 验证集群状态
--观察下线数据传输进度 iftop nodetool -h ::FFFF:127.0.0.1 netstats --传输完成后验证集群状态 nodetool -h ::FFFF:127.0.0.1 status
2.4. 数据删除
从集群中删除节点时,不会自动删除其数据。您需要手动删除数据以确保它不再计入该节点上的负载。
使用以下命令删除数据(此步骤可以不执行):
sudo rm -rf /var/lib/scylla/data sudo find /var/lib/scylla/commitlog -type f -delete sudo find /var/lib/scylla/hints -type f -delete sudo find /var/lib/scylla/view_hints -type f -delete