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

云掣YunChe11个月前技术文章1064

方案二

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

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

总结

云掣专注于可观测运维,致力解决企业上云难、用云难、管云难三大问题。作为企业级云服务提供商,云掣帮助企业更高效、更安全的使用云。全面提升企业的运维效率和稳定性,助力企业完成云时代的数字化转型,满足客户在数据库管理和云迁移方面的多样化需求!

想了解或咨询更多有关云掣产品、服务、客户案例的朋友,戳我进入云掣官网


相关文章

ES基础知识介绍

ES 核心概念ES 是使用 Java 编写的一种开源搜索引擎,它在内部使用 Lucene 做索引与搜索,通过对 Lucene 的封装,隐藏了 Lucene 的复杂性,取而代之的提供一套简单一致的 RE...

8.0 新特性-Generated Invisible Primary Key

8.0 新特性-Generated Invisible Primary Key

说明MySQL Innodb 引擎采用的是 IOT(索引组织表)存储方式,主键的重要性就不言而喻。在早期版本用户如果没有显式指定主键,会自动生成隐藏主键 row_id 来组织 B+ 树,隐藏主键 ro...

MySQL运维实战(2.3)MySQL的权限体系和一个例子

mysql权限按授权范围分为3大类全局权限。全局权限是用于管理系统模块的权限。跟具体的数据库或对象无关。授权时需要指定为*.*数据库权限对象权限对于具体的数据库对象的权限,如表、字段级别的权限。MyS...

离线部署Mysql 8.X

离线部署Mysql 8.X

安装包和环境准备将mysql-8.0.23-el7-x86_64.tar.gz安装包上传至服务器wget https://cdn.mysql.com/archives/mysql-8.0/mysql-...

kubernetes job和cronjob

kubernetes job和cronjob

一、JobJob 负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或多个 Pod 成功结束。特殊说明:1、spec.template 格式同 Pod2、RestartPolicy 仅支持 N...

docker网络介绍

docker网络介绍

一、docker网络介绍安装docker时,会自动创建三个网络。可以使用docker network ls命令列出这些网络Docker内置这三个网络,运行容器时,可以使用--network标志来指定容...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。