【Cassandra】运维记录

在之前公司有幸用到了cassandra并且具有一定程度的数据量,所有不免出现许多问题,从而进行解决,在此统一归纳,以便自己回顾,也供大家一起研究学习,实际ip或一些敏感信息已手动脱敏。


目录

1.平台日常检查、监控内容

2.权限管理

3.备份还原

4.集群迁移(全量)

4.1 方案1:使用sstableloader来做集群间数据迁移

4.2 方案2:利用集群节点的增加和移除来平滑切换集群数据

4.3 方案3:全量数据的导入导出

5.遇到的问题

5.1 problem:超大组导致数据热点问题

5.2 problem:Cassandra数据不一致

5.3 problem:Cassandra需要定期和手动执行repair等运维操作,否则可能出现脏数据

5.4 problem:Cassandra无法获取一张表的总记录数

5.5 problem: cassandra集群产生长时间的GC


1.平台日常检查、监控内容

[root@cache01 ~]#nodetool -h 192.168.0.10 status

Datacenter: datacenter1

=======================

Status=Up/Down

|/ State=Normal/Leaving/Joining/Moving

--  Address         Load       Tokens  Owns    Host ID                               Rack

UN  192.168.0.10  18.28 GB   256     ?       e33aedac-4385-499c-8c64-37ac3c7c9796  rack1

UN  192.168.0.11  13.16 GB   256     ?       460b90fb-148a-4a00-8e66-06d079f0a2b1  rack1

UN  192.168.0.12  19.13 GB   256     ?       bf5611c7-34b4-4f32-a0ad-21878cda13b2  rack1

UN  192.168.0.13  15.19 GB   256     ?       9a507206-82a1-426e-8f99-32b5d40c00d9  rack1

Note: Non-system keyspaces don't have the same replication settings, effective ownership information is meaningless

通过cql进行一些测试命令

[root@cache01 ~]# cqlsh 192.168.0.10  9042  -u ecache -p ecache

Connected to ecache at 192.168.0.10:9042.

[cqlsh 5.0.1 | Cassandra 2.1.1 | CQL spec 3.2.0 | Native protocol v3]

Use HELP for help.

ecache@cqlsh> DESC KEYSPACES ;

ecache@cqlsh> USE ecache ;

ecache@cqlsh:ecache> SELECT * FROM
             
ecache@cqlsh:ecache> SELECT * FROM account LIMIT 1;

2.权限管理

cassandra的权限都可以通过查自带system_auth.users和permission(要开启权限管理)查出相应用户对于键空间或者表的权限

权限管理设置:(该设置可以针对当台节点)

authenticator: PasswordAuthenticator(需要用户密码)
authorizer: CassandraAuthorizer(AllowAllAuthorizer 是允许用户进行任何操作)
创建用户的时候可自带超级管理员

CREATE USER fk WITH PASSWORD 'fk' SUPERUSER;
ALTER USER fk WITH PASSWORD 'fk' NOSUPERUSER;

让某个用户对某张表有某些权限(当然需要超级用户来操作)

GRANT ALL(权限可选 ) PERMISSIONS ON KEYSPACE fky(可选表空间 可选表 )TO fk(用户名) ;

设置完后就可以查找系统表 看看权限是否生效


3.备份还原

不介绍主动nodetool创建snapshot,就说自动备份
cassandra有个参数 :auto_snapshot: true
它能够在我们truncate table /drop colunm family/drop keyspace  执行这些对数据有毁坏性操作的时候,自动生成snapshot快照
这些快照存放在datafile设置目录下的table-uuid 文件夹下的snapshot里
若要还原数据只需
删除commitlog->拷贝snapshot下的数据文佳到table-uuid文件夹下->重启节点


4.集群迁移(全量)

介绍3种方案,方案各有优缺点,耗时或者是对应用的影响,根据自己的业务进行选择)​​​​​​

4.1 方案1:使用sstableloader来做集群间数据迁移

步骤描述:

1. 目标集群创建相同的keyspace和table

2. 停止源集群的客户端写入

3. 源集群各个节点执行nodetool flush,把所有数据写入sstable中

4. 源集群各个节点执行sstableloader,把数据迁移到目标集群中

5. 各节点逐一执行nodetool compact操作

优点:

1. 数据迁移速度快

缺点:

1. 全程需要停止集群服务,对应用的影响较大

2. 缺少新旧集群数据校验过程

4.2 方案2:利用集群节点的增加和移除来平滑切换集群数据

步骤描述:

1. 把新节点逐一加入旧集群,组成一个大集群,完全加入后,需要短暂重启客户端的读写服务,把客户端的配置信息指向新加入的8个节点

2. 从大集群中删除逐旧节点

3. 新节点逐一执行nodetool repair

优点:

1. 只需短暂重启客户端的读写服务程序即可,对应用的影响较小

缺点:

1. 耗时较长

2. 缺少新旧集群数据校验过程

4.3 方案3:全量数据的导入导出

步骤描述:

1. 旧集群全量导出数据到文件

2. 新集群全量导入数据

3. 新集群全量导出数据到文件,然后进行文件比对,即可确定两个集群的数据一致性问题

优点:

1. 包含了新旧集群的数据校验过程

缺点:

1. 耗时较长


5.遇到的问题

5.1 problem:超大组导致数据热点问题

现象描述:静态分组算法有点问题,导致每张表的某个partition的数据量占了总数据量的50%以上的数据。Cassandra在创建表的时候,是以 partition_id 作为 partition_key,这样同一个 partition_id 的数据,在入库时计算出来的 hash 值是一样的,所以也是写入Cassandra的同一个node中,这样就会导致严重的数据热点。

解决:创建表的时候,以 partition_id 和 bucket_id 组合作为 partition_key,其中,bucket_id是由表中某个字段根据一定算法生成的伪随机数。

5.2 problem:Cassandra数据不一致

现象描述:先前研发中心是采用MapReduce接口往Cassandra集群写入档案数据,而MapReduce接口默认的Cassandra写入一致性是ONE,所以当Cassandra所有14张表同时录入数据时,会出现Cassandra集群过载情况,而MapReduce又没有失败后休眠重试的机制,所以整个录入过程当Cassandra过载时会出现脏数据,客户端从Cassandra多次全量导出数据就会出现不一致,出现严重的数据不一致问题。

解决:修改MapReduce接口的写入一致性为QUORUM或者ALL,并且在失败后捕获异常并休眠重试,其中休眠的目的是变相的降低负载,避免脏数据的出现,从而解决数据不一致的问题。

5.3 problem:Cassandra需要定期和手动执行repair等运维操作,否则可能出现脏数据

现象描述:当用户删除数据时,碰巧保存该数据的副本的那个节点down掉,并且一直到gc_grace_seconds(默认是10天,可以配置)这个时间过后才修复并再次加入集群中,如果没有执行 repair 操作,就可能出现脏数据。

解决:需要定期和手动执行 repair 等运维操作。

5.4 problem:Cassandra无法获取一张表的总记录数

现象描述:

解决:这个是Cassandra的一个特点,Cassandra开发者不认为是一个问题,故无法解决

5.5 problem: cassandra集群产生长时间的GC

现象描述:Cassandra进行大量导出操作,由于没有用flash卡,并且只有一块磁盘 性能会比预计有较大的偏差,也造成了较大的GC 情况,导致了Cassandra的异常。

解决: 设备添加flash卡 && 修改配置,file_cache_size_in_mb从512M增加到2048M,增大读取sstable的缓存,提供查询性能

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的浪漫与极端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值