博客 两款方案详解,企业线下数据库迁移至云上ScyllaDB

两款方案详解,企业线下数据库迁移至云上ScyllaDB

   数栈君   发表于 2024-11-14 15:19  210  0
ScyllaDB是一款开源NOSQL数据库,具备灵活、可扩展且高性能的特点。它的运维手段简单,不仅延迟率低,还可以显著降低存储成本,多用于数据庞大、业务复杂的企业。
在实际业务场景中当企业需要上云时,我们会将线下数据库迁移到ScyllaDB云上数据库。本文通过云掣在实战案例中总结的ScyllaDB迁移经验,与大家分享将数据库迁移至ScyllaDB云上的两种方案(环境:ScyllsDB4.2版本),帮助企业了解云掣进行数据库上云的具体方案,企业也可以将方案应用于自身项目中,实现数据库根据业务需求动态调整。

方案一

通过扩缩容(上线新节点和下线老节点)方式迁移,这个过程数据库通过数据传输到新节点。
  • 整个过程不停机
  • 上下线节点的数据传输时存在压力。
  • 某个节点存在不可控的故障导致节点无法启动时,数据存在丢失的风险。
  • 新节点跨专线的时候,专线延迟速度影响集群的响应延迟。

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/bc933aaf551b0ad9ce675859590b5719..png

一、上线新节点

确认集群状态和检查配置

首先确认集群各节点状态是Up Normal (UN),如果存在节点是DN,将无法添加新节点。
[root@172-16-121-153 scylla]# nodetool -h ::FFFF:127.0.0.1 statusDatacenter: my_data_center==========================Status=Up/Down|/ State=Normal/Leaving/Joining/Moving--  Address         Load       Tokens       Owns    Host ID                               RackUN  172.16.121.151  37.05 MB   256          ?       dfb03e20-6c5c-4360-b1d5-0735369b61fb  my_rackUN  172.16.121.152  36.98 MB   256          ?       ff2beda1-1253-419b-a2e5-415f072ba25c  my_rackUN  172.16.121.153  36.56 MB   256          ?       8efc9e61-2316-4a65-9de5-e2edb2af4eca  my_rack
登陆到现有集群任一节点收集配置信息。
检查配置脚本:cat /etc/scylla/scylla.yaml | grep cluster_namecat /etc/scylla/scylla.yaml | grep seeds:cat /etc/scylla/scylla.yaml | grep endpoint_snitchcat /etc/scylla/scylla.yaml | grep authenticatorcat /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_namecluster_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: SimpleSnitchendpoint_snitch: GossipingPropertyFileSnitch
scylla版本:[root@172-16-121-152 scylla]# scylla --version4.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

部署ScyllaDB

参考文档,https://www.Scylladb.com/download/?platform=ubuntu-18.04&version=scylla-4.2#open-source。

配置参数 

配置文件默认位于/etc/scylla。

scylla.yaml

各参数和现有集群一致,seeds节点加入新节点ip,保证后续下线节点时候,集群可用。

vi  /etc/scylla/scylla.yaml cluster_name: 'dtstack'           --集群名称listen_address: 172.16.121.154    --本节点iprpc_address: 172.16.121.154       --本节点ipseed_provider:    - class_name: org.apache.cassandra.locator.SimpleSeedProvider      parameters:          - seeds: "172.16.121.151,172.16.121.154"endpoint_snitch: GossipingPropertyFileSnitch

cassandra-rackdc.properties

参数和现有集群一致。

vi /etc/scylla/cassandra-rackdc.properties 
dc=my_data_center --设置数据中心名称rack=my_rack --设置机架名称prefer_local=true

启动scylla服务

systemctl start scylla-server

验证集群状态

节点状态UN,代表数据节点状态正常。

[root@172-16-121-154 lib]# nodetool -h ::FFFF:127.0.0.1 statusDatacenter: my_data_center==========================Status=Up/Down|/ State=Normal/Leaving/Joining/Moving--  Address         Load       Tokens       Owns    Host ID                               RackUN  172.16.121.151  37.06 MB   256          ?       dfb03e20-6c5c-4360-b1d5-0735369b61fb  my_rackUN  172.16.121.152  36.99 MB   256          ?       ff2beda1-1253-419b-a2e5-415f072ba25c  my_rackUN  172.16.121.153  36.57 MB   256          ?       8efc9e61-2316-4a65-9de5-e2edb2af4eca  my_rackUN  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

查看网络传输和数据同步进度

iftopnodetool  -h ::FFFF:127.0.0.1 netstats
等待数据传输完成,按照上面的1-6步骤依次添加足够所需的新节点。

清理数据

等待新节点数据同步完成后,业务低峰期,依次在除新节点外的节点删除不再属于该节点key。

nodetool  -h ::FFFF:127.0.0.1 cleanup

安排下线节点 

业务切换连接地址到新节点,安排时间进行下线节点

二、下线节点

状态检查

确保删除节点的状态为节点状态为:UN。

nodetool -h ::FFFF:127.0.0.1 status

删除节点

nodetool -h ::FFFF:127.0.0.1 decommission

验证集群状态

--观察下线数据传输进度iftopnodetool  -h ::FFFF:127.0.0.1 netstats--传输完成后验证集群状态nodetool -h ::FFFF:127.0.0.1 status

数据删除

从集群中删除节点时,不会自动删除其数据。您需要手动删除数据以确保它不再计入该节点上的负载。
使用以下命令删除数据(此步骤可以不执行):
sudo rm -rf /var/lib/scylla/datasudo find /var/lib/scylla/commitlog -type f -deletesudo find /var/lib/scylla/hints -type f -deletesudo find /var/lib/scylla/view_hints -type f -del

方案二

通过在集群中添加新数据中心的方式,进行数据迁移,然后下线集群老的数据中心。

一、集群添加新数据中心

先决条件
收集现有集群信息:
cat /etc/scylla/scylla.yaml | grep cluster_namecat /etc/scylla/scylla.yaml | grep seeds:cat /etc/scylla/scylla.yaml | grep endpoint_snitchcat /etc/scylla/scylla.yaml | grep authenticatorcat /etc/scylla/scylla.yaml | grep -E "listen_address|rpc_address"scylla --version
应用程序配置检查更改:
在所有客户机应用程序上,将一致性级别切换为LOCAL_* (LOCAL_ONE、LOCAL_QUORUM等),以防止协调器访问要添加的数据中心。同时应用修改配置不访问集群新的数据中心。
常用一致性级别解析:
ANY: -写操作必须写到集群中至少一个副本。读操作等待至少一个副本的响应。它以最低的一致性提供了最高的可用性。
QUORUM:当大多数副本响应即可。如果RF=3,则有2个副本响应。QUORUM可以使用公式(n/2 +1)计算,其中n是复制因子。
ONE:如果一个副本响应即刻。
LOCAL_ONE:本地数据中心至少有一个副本响应。
LOCAL_QUORUM:本地数据中心的副本仲裁响应。
ALL:写操作必须写入集群中的所有副本,读操作等待所有副本的响应。提供最低的可用性和最高的一致性。
现有集群单数据中心配置修改
修改参数配置
现有数据中心配置是单数据中心,需要修改参数配置支持多数据中心,每个节点都需要更改。
--endpoint_snitch默认配置为SimpleSnitch,不支持多数据中心,需要修改为GossipingPropertyFileSnitch
vi /etc/scylla/scylla.yamlendpoint_snitch: GossipingPropertyFileSnitch

--根据实际配置数据中心名称和机架名称
vi /etc/scylla/cassandra-rackdc.propertiesdc=my_data_centerrack=my_rackprefer_local=true
重启服务生效参数
每个节点轮流重启生效。
systemctl restart scylla-server
集群新数据中心部署
新数据中心每个新节点进行ScyllaDB部署,参考文档,https://www.Scylladb.com/download/?platform=ubuntu-18.04&version=scylla-4.2#open-source
配置参数 
配置文件默认位于/etc/scylla,新数据中心每个节点都要配置。
scylla.yaml
各参数和现有集群修改后一致。
seeds--该参数加入新数据中心新节点ip作为种子节点,保证后续下线节点时候,集群可用。
auto_bootstrap - 默认情况下,此参数设置为 true,它允许新节点自动将数据迁移到自己。
vi  /etc/scylla/scylla.yaml cluster_name: 'dtstack'           --集群名称listen_address: 172.16.121.154    --本节点iprpc_address: 172.16.121.154       --本节点ipseed_provider:    - class_name: org.apache.cassandra.locator.SimpleSeedProvider      parameters:          - seeds: "172.16.121.151,172.16.121.154"endpoint_snitch: GossipingPropertyFileSnitch
cassandra-rackdc.propertie
设置集群新数据中心的dc和rack参数。
vi /etc/scylla/cassandra-rackdc.properties 
dc=my_data_center --设置数据中心名称rack=my_rack --设置机架名称prefer_local=true
启动scylla服务
新数据中心添加所有新节点操作。
systemctl start scylla-server
验证 
验证新数据中心是否加到集群中。
nodetool  -h ::FFFF:127.0.0.1 status
更改复制策略 
更改所有业务keyspace的复制策略。
--查看所有的keyspaces[root@172-16-121-151 ~]#  cqlsh 172.16.121.151Connected to dtstack at 172.16.121.151:9042.[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]Use HELP for help.cqlsh> describe keyspaces;
案例:更改前:cqlsh> desc test;CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;

更改为多中心多副本:ALTER KEYSPACE test WITH replication = {'class':'NetworkTopologyStrategy', 'my_data_center' : '3', 'my_data_center1' : '3'};
更改后:cqlsh> desc test;CREATE KEYSPACE test WITH replication = {'class': 'NetworkTopologyStrategy', 'my_data_center': '3', 'my_data_center1': '3'} AND durable_writes = true;
新数据中心所有节点运行节点重建 
在新数据中心的每个节点上运行nodeool rebuild,并在rebuild命令中指定现有的数据中心名称。确保刚刚添加到集群的新节点将识别集群中的现有数据中心。
nodetool -h ::FFFF:127.0.0.1  rebuild --my_data_center
运行数据修复
在所有节点运行数据修复。
nodetool -h ::FFFF:127.0.0.1 repair -pr
等待数据同步完成,业务选择时间切换连接集群新数据中心。
二、下线老数据中心
数据修复
在要下线的老数据中心所有节点运行数据修复。
nodetool -h ::FFFF:127.0.0.1 repair -pr
更改复制策略
更改所有业务keyspace的复制策略不再写入老的数据中心。
--查看所有的keyspaces[root@172-16-121-151 ~]#  cqlsh 172.16.121.151Connected to dtstack at 172.16.121.151:9042.[cqlsh 5.0.1 | Cassandra 3.0.8 | CQL spec 3.3.1 | Native protocol v4]Use HELP for help.cqlsh> describe keyspaces;
案例:更改前:cqlsh> desc test;CREATE KEYSPACE test WITH replication = {'class': 'NetworkTopologyStrategy', 'my_data_center': '3', 'my_data_center1': '3'} AND durable_writes = true;

更改为新中心多副本:ALTER KEYSPACE test WITH replication = {'class':'NetworkTopologyStrategy', 'my_data_center1' : '3'};
更改后:cqlsh> desc test;CREATE KEYSPACE test WITH replication = {'class': 'NetworkTopologyStrategy', 'my_data_center1': '3'} AND durable_writes = true;
删除节点
此步骤参考方案一的下线节点即可。
主要步骤:nodetool -h ::FFFF:127.0.0.1 decommission
云掣专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。作为企业级云服务提供商,云掣帮助企业更高效、更安全的使用云,全面提升企业的运维效率和稳定性,助力企业完成云时代的数字化转型,满足客户在数据库管理和云迁移方面的多样化需求!
想了解或咨询更多有关云掣产品、服务、客户案例的朋友,点击阅读原文进入云掣官网。
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/4971352b11dc912e4a24b993e6bfb6ae..jpg

《数据资产管理白皮书》下载地址:https://www.dtstack.com/resources/1073/?src=bbs

《行业指标体系白皮书》下载地址:https://www.dtstack.com/resources/1057/?src=bbs

《数据治理行业实践白皮书》下载地址:https://www.dtstack.com/resources/1001/?src=bbs

《数栈V6.0产品白皮书》下载地址:https://www.dtstack.com/resources/1004/?src=bbs

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack




0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群