阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache Cassandra多节点跨数据中心集群配置以及日常操作

246次阅读
没有评论

共计 3384 个字符,预计需要花费 9 分钟才能阅读完成。

Cassandra 是去中心化的集群架构,没有传统集群的中心节点,各个节点地位都是平等的,通过 Gossip 协议维持集群中的节点信息。为了使集群中的各节点在启动时能发现其他节点,需要指定种子节点(seeds),各节点都先和种子节点通信,通过种子节点获取其他节点列表,然后和其他节点通信。种子节点可以指定多个,通过在 conf/ cassandra.yaml 中的 seeds 属性配置。

环境介绍

主机信息如下表所示:
Apache Cassandra 多节点跨数据中心集群配置以及日常操作
所有节点已安装了 jdk 8。如下:

[root@db03 ~]# Java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

安装 cassandra

这里使用的是二进制 rpm 包进行安装。在各个节点创建 yum 仓库,内容如下:

[root@db03 ~]# vi /etc/yum.repos.d/cass.repo
[cassandra]
name=Apache Cassandra
baseurl=https://www.apache.org/dist/cassandra/RedHat/311x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://www.apache.org/dist/cassandra/KEYS

然后通过 yum 命令在各个节点进行安装:

[root@db03 ~]# yum -y install cassandra

编辑 cassandra 配置文件

更改各个节点的配置文件内容如下:

[root@db03 ~]# vi /etc/cassandra/default.conf/cassandra.yaml
cluster_name: 'TCS01'
num_tokens: 256
    seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
    - seeds:  "192.168.120.83,192.168.120.85"
listen_address:192.168.120.83
endpoint_snitch: GossipingPropertyFileSnitch
start_rpc: true
rpc_address: 192.168.120.83
  • 其中,db04、db05 以及 db06 需要更改 listen_address 以及 rpc_address,将其设置为本机的 IP, 其他参数保持和 db03 一致。
  • endpoint_snitch 对于跨数据中心的集群,此参数的值必须为 GossipingPropertyFileSnitch;如果为 SimpleSnitch,所有节点都会加入一个数据中心。

    配置节点的 datacenter 名称

    编辑 cassandra-rackdc.properties 文件,设置 dc 参数,如下:

    [root@db03 ~]# vi /etc/cassandra/default.conf/cassandra-rackdc.properties
    dc=dc1
    rack=rack1

    根据之前的规划,db03 和 db04 属于 dc1;db05 和 db06 属于 dc2。

    启动 cassandra 服务

    先启动种子节点,再启动其他支节点。

  • 启动种子节点
    [root@db03 ~]# systemctl enable cassandra
    [root@db03 ~]# systemctl start cassandra
    [root@db05 ~]# systemctl enable cassandra
    [root@db05 ~]# systemctl start cassandra
  • 启动支节点
    [root@db04 ~]# systemctl enable cassandra
    [root@db04 ~]# systemctl start cassandra
    [root@db06 ~]# systemctl enable cassandra
    [root@db06 ~]# systemctl start cassandra

    验证节点状态信息

    cassandra 提供了 nodetool 命令,可以查看集群节点的状态信息,如下:

    [root@db03 ~]# nodetool status

    Apache Cassandra 多节点跨数据中心集群配置以及日常操作

管理 keyspace

键空间 (Keyspace) 是用于保存列族,用户定义类型的对象。键空间 (Keyspace) 就像 RDBMS 中的数据库,其中包含列族,索引,用户定义类型,数据中心意识,键空间 (Keyspace) 中使用的策略,复制因子等。
查看系统中默认存在的 keyspace:

[root@db03 ~]# cqlsh 192.168.120.83
Connected to TCS01 at 192.168.120.83:9042.
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh> desc keyspaces;

system_traces  system_schema  system_auth  system  system_distributed

创建 keyspace:

cqlsh> CREATE KEYSPACE spacewalk WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 4};
cqlsh> desc keyspaces;

system_schema  system_auth  spacewalk  system  system_distributed  system_traces

cqlsh>

要删除自定义的 keyspace,使用下面的命令:

cqlsh> drop keyspace spacewalk;

管理表

在 spacewalk 键空间上创建表以及导入数据:

  • 创建表
    Apache Cassandra 多节点跨数据中心集群配置以及日常操作
    cqlsh:spacewalk> desc tables;
    rhnpackagecapability
  • 导入数据
cqlsh:spacewalk> copy rhnpackagecapability(id,name,version,created,modified) from '/tmp/d.csv' with delimiter=',' and header=false;

Apache Cassandra 多节点跨数据中心集群配置以及日常操作

  • 删除表
    cqlsh:spacewalk> drop table rhnpackagecapability;

    问题总结

    在导入数据过程中,会遇到各种各样的报错,下面是我遇到的两种问题:

  • 错误处理 1(大于字段限制)
    <stdin>:1:Failed to import 5000 rows: Error - field larger than field limit (131072),  given up after 1 attempts

    创建 cqlshrc 文件:

    [root@db03 ~]# cp /etc/cassandra/default.conf/cqlshrc.example  ~/.cassandra/cqlshrc
    [root@db03 ~]# vi ~/.cassandra/cqlshrc
    [csv]
    -- 加大 filed_size_limit 的值,默认为 131072
    field_size_limit = 13107200000
  • 错误处理 2
Failed to import 20 rows: InvalidRequest - Error from server: code=2200 [Invalid query] message="Batch too large",  will retry later, attempt 1 of 5

编辑 cassandra.yaml 文件, 加大 batch_size_fail_threshold_in_kb 参数值,比如 5120。然后在 copy 后面加 maxbatchsize=1 and minbatchsize=1,如下:

cqlsh> copy mykeysp01.rhnpackagerepodata(id,primary_xml,filelist,other,created,modified) from '/u02/tmp/rhnpackagerepodata.csv' with maxbatchsize=1 and minbatchsize=1;

Apache Cassandra 多节点跨数据中心集群配置以及日常操作

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3384字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中