两款方案详解,企业线下数据库迁移至云上ScyllaDB(2)
方案二
通过在集群中添加新数据中心的方式,进行数据迁移。然后下线集群老的数据中心。
1. 集群添加新数据中心
1.1. 先决条件
收集现有集群信息:
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
应用程序配置检查更改:
在所有客户机应用程序上,将一致性级别切换为LOCAL_* (LOCAL_ONE、LOCAL_QUORUM等),以防止协调器访问要添加的数据中心。同时应用修改配置不访问集群新的数据中心。
常用一致性级别解析:
ANY: -写操作必须写到集群中至少一个副本。读操作等待至少一个副本的响应。它以最低的一致性提供了最高的可用性。
QUORUM:当大多数副本响应即可。如果RF=3,则有2个副本响应。QUORUM可以使用公式(n/2 +1)计算,其中n是复制因子。
ONE:如果一个副本响应即刻。
LOCAL_ONE:本地数据中心至少有一个副本响应。
LOCAL_QUORUM:本地数据中心的副本仲裁响应。
ALL:写操作必须写入集群中的所有副本,读操作等待所有副本的响应。提供最低的可用性和最高的一致性。
1.2. 现有集群单数据中心配置修改
1.2.1. 现有数据中心配置是单数据中心,需要修改参数配置支持多数据中心,每个节点都需要更改
--endpoint_snitch默认配置为SimpleSnitch,不支持多数据中心,需要修改为GossipingPropertyFileSnitch vi /etc/scylla/scylla.yaml endpoint_snitch: GossipingPropertyFileSnitch --根据实际配置数据中心名称和机架名称 vi /etc/scylla/cassandra-rackdc.properties dc=my_data_center rack=my_rack prefer_local=true
1.2.2. 重启服务生效参数
每个节点轮流重启生效。
systemctl restart scylla-server
1.3. 集群新数据中心部署
新数据中心每个新节点进行Scylladb部署,参考文档。
https://www.Scylladb.com/download/?platform=ubuntu-18.04&version=scylla-4.2#open-source
1.4. 配置参数
配置文件默认位于/etc/scylla,新数据中心每个节点都要配置。
1.4.1. scylla.yaml
各参数和现有集群修改后一致。
seeds--该参数加入新数据中心新节点ip作为种子节点,保证后续下线节点时候,集群可用。
auto_bootstrap - 默认情况下,此参数设置为 true,它允许新节点自动将数据迁移到自己。
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.4.2. cassandra-rackdc.properties
设置集群新数据中心的dc和rack参数。
vi /etc/scylla/cassandra-rackdc.properties dc=my_data_center --设置数据中心名称 rack=my_rack --设置机架名称 prefer_local=true
1.5. 启动scylla服务
新数据中心添加所有新节点操作。
systemctl start scylla-server
1.6. 验证新数据中心是否加到集群中
nodetool -h ::FFFF:127.0.0.1 status
1.7. 更改所有业务keyspace的复制策略
--查看所有的keyspaces [root@172-16-121-151 ~]# cqlsh 172.16.121.151 Connected 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;
1.8. 新数据中心所有节点运行节点重建
在新数据中心的每个节点上运行nodeool rebuild,并在rebuild命令中指定现有的数据中心名称。确保刚刚添加到集群的新节点将识别集群中的现有数据中心。
nodetool -h ::FFFF:127.0.0.1 rebuild --my_data_center
1.9. 运行数据修复
在所有节点运行数据修复。
nodetool -h ::FFFF:127.0.0.1 repair -pr
1.10. 等待数据同步完成,业务选择时间切换连接集群新数据中心
2. 下线老数据中心
2.1. 在要下线的老数据中心所有节点运行数据修复
在要下线的老数据中心所有节点运行数据修复。
nodetool -h ::FFFF:127.0.0.1 repair -pr
2.2. 更改所有业务keyspace的复制策略不再写入老的数据中心
--查看所有的keyspaces [root@172-16-121-151 ~]# cqlsh 172.16.121.151 Connected 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;
2.3. 删除节点
此步骤参考方案一的下线节点即可。
主要步骤: nodetool -h ::FFFF:127.0.0.1 decommission
总结
云掣专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。作为企业级云服务提供商,云掣帮助企业更高效、更安全的使用云。全面提升企业的运维效率和稳定性,助力企业完成云时代的数字化转型,满足客户在数据库管理和云迁移方面的多样化需求!
想了解或咨询更多有关云掣产品、服务、客户案例的朋友,戳我进入云掣官网。