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

云掣YunChe3个月前技术文章203

方案一

通过扩缩容(上线新节点和下线老节点)方式迁移,这个过程数据库通过数据传输到新节点。

  • 整个过程不停机

  • 上下线节点的数据传输时存在压力。

  • 某个节点存在不可控的故障导致节点无法启动时,数据存在丢失的风险。

  • 新节点跨专线的时候,专线延迟速度影响集群的响应延迟。

WX20241114-114445@2x.png

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


相关文章

mysql双主更改为主从架构分析

mysql双主更改为主从架构分析

客户需求客户业务运行的在mysql双主架构上,因为客户经常误操作触发双写,导致数据不一致,对业务的稳定运行造成加大的影响。客户现有数据库架构图解决方案基于客户业务和底层数据库架构实际情况,云掣科技提供...

greenplum扩容

一、纵向扩展1、执行命令,生成参数文件[gpadmin@gw_mdw1 ~]$ gpexpand -f seg_hosts -D test 20190327:23:18:01:007122 gpex...

mysql表结构对比工具

mysql表结构对比工具

一、AmpNmp.DatabaseCompare工具1、工具特点:优点:比较两个数据库全部表结构的差异,包括表名、存储引擎、字符集、注释的不同,以及每张表中的字段名、数据类型、字符集、默认值、注释的不...

HDP部署Tez UI

HDP部署Tez UI

首先部署tomcat在官网下载apache-tomcat-9.0.22.tar.gz[root@hdp02 opt]# wget https://archive.apache.org/dist/tom...

MySQL性能优化(七)优化or查询的另一个例子

MySQL性能优化(七)优化or查询的另一个例子

优化or查询的另外一个例子。一个例子SELECT msg.msg_id, msg.content , … FROM msg   ...

Redis 命令行 redis-cli 介绍

前言redis-cli 是 Redis 自带的命令行工具,是运维和开发人员常用的工具,本篇文章将介绍它的使用技巧和一些有趣的功能。1. 连接 Redis 服务redis-cli 默认连接的是 127....

发表评论    

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