scylladb集群如何添加新数据中心

广大2年前技术文章914

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等),以防止协调器访问要添加的数据中心。同时应用修改配置不访问集群新的数据中心。


2、现有集群单数据中心配置修改

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

2.2重启服务生效参数

每个节点轮流重启生效

systemctl restart scylla-server

3、集群新数据中心部署

新数据中心每个新节点进行scylladb部署,参考文档 https://yunche.pro/blog/?id=147


4、配置参数

配置文件默认位于/etc/scylla,新数据中心每个节点都要配置

4.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

4.2 cassandra-rackdc.properties

设置集群新数据中心的dc和rack参数

vi /etc/scylla/cassandra-rackdc.properties

dc=my_data_center   --设置数据中心名称
rack=my_rack        --设置机架名称
prefer_local=true

5、启动scylla服务

新数据中心添加所有新节点操作

systemctl start scylla-server

6、验证新数据中心是否加到集群中

nodetool  -h ::FFFF:127.0.0.1 status

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;


8、新数据中心所有节点运行节点重建

在新数据中心的每个节点上运行nodeool rebuild,并在rebuild命令中指定现有的数据中心名称。确保刚刚添加到集群的新节点将识别集群中的现有数据中心。

nodetool -h ::FFFF:127.0.0.1  rebuild --my_data_center

9、运行数据修复

在所有节点运行数据修复

nodetool -h ::FFFF:127.0.0.1 repair -pr


相关文章

使用helm在k8s集群部署rancher

使用helm在k8s集群部署rancher由于我们的k8s版本是1.22,所以我们直接安装latest版本的rancher。不同版本的rancher helm仓库可以看下面链接https://docs...

Nginx-Ingress和traefik区别

Nginx-Ingress和traefik区别

Nginx-Ingress和traefik区别1. Ingress Controllerk8s 是通过一个又一个的 controller 来负责监控、维护集群状态。Ingress Controller...

Linux 文件锁

1、背景Linux 系统定时任务正在执行时,可能会遇到上个周期的任务还没有执行完,这样便会造成相同的任务同一时间有过个任务进程在执行。如果任务有对互斥资源操作时,有可能产生死锁。2、用法参考flock...

数据库连接异常问题排查

数据库连接异常问题排查

问题描述客户反馈应用端连接数据库异常,报错截图如下:“已超过了锁请求超时时段”。问题排查1、测试端口联通性从应用侧服务器上分别测试数据库服务端口联通性,检测服务正常监听2、数据库服务器重启同客户沟通优...

Admission 准入控制器

准入控制器什么是准入控制器?就是 API 请求进来后,准许它进入或者丰富进来的 API 请求的控制器。如图所示,MutatingAdmissionWebhook 和 ValidatingAdmissi...

MySQL运维实战(2.2)忘记密码如何处理

如果忘记了一个普通用户的密码,可以使用管理员账号登录,修改其他用户的密码。但是如果所有管理员账号的密码都忘记了,应该怎么处理呢?如果忘记root密码,可以使用skip-grant-tables参数启动...

发表评论    

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