摘要

本文主要介绍在部署cassandra集群以及使用cassandra过程中遇到的一些问题。

文章只发布在CSDN 和个人站点

更多nosql文章可以访问stone fang 个人主页

正文

Q1:cassandra 如何将一个节点设置为seed node,seed node与其他node有什么区别

A1:设置seed node很简单,在cassandra.yaml 中 -seeds 选项中设置。可以设置多个node.

seed node 是用于新节点加入到集群中,新节点需要通过seed node去发现集群加载的data信息。一旦新节点bootstrap后

seed node 就没有作用了。

seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
  parameters:
      - seeds: "127.0.0.1"

Q2:cassandra node 新加入到集群中,autobootstrap默认为true,所以可以进行bootstrap,但是加入到集群后,然后重启node,并没有设置

autobootstrap为false,为什么这时候cassandra不再做bootstrap呢。

A2:bootstrap意思是一个新节点加入到集群中,这个新节点加入到集群的partition ring中。负责一部分partition key。其他节点也会更新

保存的partition 环信息。而当我们重启节点时,节点会首先自动缓存Gossip状态信息,在重新启动时会自动加载。所以在cassandra部署过程中,你会发现

有时候你新启动一个节点,并没有指定seed node,这个node也莫名其妙的加入到了cluster。这是gossip状态没有清除,保存了以前的信息。

可以在启动时添加-Dcassandra.load_ring_state=false

Q3:unable to gossip with seeds.seed 设置有效,也没有防火墙屏蔽。为什么无法gossip,启动失败

A3:这个可能性很多,首先检查下cassandra.yaml 配置文件的listen_address和broadcast_address.在seed node上

面ping下broadcast_address。是否能够ping通。通常在云主机平台上,主机有public ip和private ip.broad_address 需要配置为public ip,listen_address

可以配置private ip。

作者还碰到过一个情况:cassandra 运行在docker中,listen_address是docker分配的私有地址172.17.0.2.

但是不知道什么时候配置了route表。将172.17.0.0配置到节点的public ip。导致cassandra无法启动。gossip 不到seeds node.

172.17.0.0 应该是路由到docker 的网桥,默认是docker0.将配置错的路由删除掉。就可以了。

Q4:JMX 访问,设置了remote 方式,7199 端口也打开了,但是仍然访问不了。

A4:cassandra-env.sh 中配置了JMX访问方式,可以传参。

if [ "x$LOCAL_JMX" = "x" ]; then
LOCAL_JMX=yes
fi
JMX_PORT="7199"

if [ "$LOCAL_JMX" = "yes" ]; then
  JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.local.port=$JMX_PORT -XX:+DisableExplicitGC"
else
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"

实验环境中可以自行设定了外部访问方式,

将jmxremote.authenticate值设为false.就不需要登录名和密码了。通常是使用jconsle 来测试JMX是否可以

通过remote连接。在docker环境下7199已经映射了,但是仍然访问不了。cassandra的listen_address是docker分配的

private ip.broadcast_address是public ip.jconsole连接的public ip.这时候无法访问,解决办法是在

cassandra-env.sh中设置jmx暴露出的ip,像JMX_PORT=”7199”一样

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public ip>"

Q5:新节点加入时状态一直都是UJ,而不是UN

A5:UJ J表示在加入。已经存在的cluster数据很多,将数据从其他节点中移过来需要时间。可以通过nodetool netstats查看下

其他节点传输数据到新节点的情况。如果已经没有stream data了,但是状态还是J。可能是sstable在做compaction工作。

Q6:如何理解在关系型数据库中是首先设计DB Schema,然后考虑查询。但是在cassandra中,需要首先考虑查询场景,然后再去设计DB Schema

A6:关系型数据库数据是行列式存储,一系列的行和列组成了表,一张表的每一行的列数是固定的。可以根据任意一列来去查询数据。

所以查询场景不需要优先考虑。而在cassandra则不是,首先cassandra是根据partition key分布在各个节点上的。节点上的数据又是根据cluster key来分布的。

一种查询模式对应的一张表。

eg

create table test (
name text,
age int,
address text,
PRIMARY KEY(name,address,age)
);

这里name是partition key,address,age是cluster key.数据在节点上的存储方式是/address/age 这种分层结构。所以查询的时候只能根据address来查

select *from test where address='xx'

而不能根据age,因为age在address的下一层结构中,无法索引到。如果想根据age,必须重新创建一张表。或者使用materialized view.

综上所述,所以说在cassandra中需要先考虑查询场景,然后再去设计DB Schema.

Q7:Cassandra 3.0 and later require Java 8u40 or later.

java -version 查看已经是JDK8。

A7.echo JAVA_HOME 发现指向了JDK7,cassandra去检查了JAVA_HOME 环境变量,所以出现错误。

移除JAVA_HOME或者指向JDK8,就可以解决问题

Q8:java driver cannot connect to ip:9042

A8:检查9042端口是否暴露

然后检查cassandra.yaml 文件的rpc_address 是否设置为公共ip

cassandra 常见问题的更多相关文章

  1. Cassandra spring data 试用

    1. maven  依赖 <dependency> <groupId>org.springframework.data</groupId> <artifact ...

  2. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  3. C++常见笔试面试要点以及常见问题

    1. C++常见笔试面试要点: C++语言相关: (1) 虚函数(多态)的内部实现 (2) 智能指针用过哪些?shared_ptr和unique_ptr用的时候需要注意什么?shared_ptr的实现 ...

  4. SQL Server常见问题介绍及快速解决建议

    前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...

  5. 【腾讯优测干货分享】如何降低App的待机内存(二)——规范测试流程及常见问题

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/806TiugiSJvFI7fH6eVA5w 作者:腾讯TMQ专项测 ...

  6. mysql数据库开发常见问题及优化

    mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...

  7. 《PDF.NE数据框架常见问题及解决方案-初》

    <PDF.NE数据框架常见问题及解决方案-初> 1.新增数据库后,获取标识列的值: 解决方案:    PDF.NET数据框架,已经为我们考略了很多,因为用PDF.NET进行数据的添加操作时 ...

  8. MIS性能优化常见问题与方案(辅助项目组性能优化的总结贴)

    最近帮忙公司的几个项目组进行了不同方面的性能优化,发现几个项目都出现了一些共性的问题.这里写一篇文章,总结一下这几类问题,以及其对应的解决方案.方便其它项目组参考.   常见问题一:打开页面非常慢,有 ...

  9. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

随机推荐

  1. 实验吧_登陆一下好吗(骚注入)&你真的会PHP吗?(代码审计)

    登陆一下好吗 首先看到两个输入框,分别对应账号密码,随手输个admin,admin进去,提交后发现有回显,既然题目说了过滤了一切,那就先看看过滤了些啥 经过一波测试,发现服务器过滤了union,sel ...

  2. Java IO(一)

    在Java中,所有的io类都放在java.io包中. 在IO操作中,我们总是会从一个源数据读取到一个目标数据.那么这个源数据和目标数据可以是文件,流等等.那最常见的就是文件,就像我们在本地电脑上写入东 ...

  3. [NOI2016]循环之美

    Description 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k  进制下,一个数的小数部分是纯循环的,那么它就是美的.现在,牛牛想知道:对 ...

  4. [HNOI2008]遥远的行星

    题目描述 直线上N颗行星,X=i处有行星i,行星J受到行星I的作用力,当且仅当i<=AJ.此时J受到作用力的大小为 Fi->j=Mi*Mj/(j-i) 其中A为很小的常量,故直观上说每颗行 ...

  5. Hello,World!!----来自半个新OIer的问候

    为了记录OI生涯的点点滴滴故申请此博客,说是半个新OIer,其实我的OI生涯并不算很短了吧...现在也算是初三下学期了...也算是混迹NOIP第5个年头了.文化课上也没什么临考压力,那就好好准备第5场 ...

  6. SPOJ PHRASES 每个字符串至少出现两次且不重叠的最长子串

    Description You are the King of Byteland. Your agents have just intercepted a batch of encrypted ene ...

  7. Postgres中postmaster代码解析(中)

    今天我们对postmaster的以下细节进行讨论: backend的启动和client的连接请求的认证 客户端取消查询时的处理 接受pg_ctl的shutdown请求进行shutdown处理 2.与前 ...

  8. Windows、Unix、Linux是什么类型的操作系统?

    Windows:具有图形用户界面的视窗操作系统. Unix:多用户分时操作系统. Linux:类似Unix操作系统,用于个人计算机.

  9. 遗传算法:N皇后

    N皇后问题描述 N皇后问题是一个经典的问题,在一个N*N的棋盘上放置N个皇后,每行一个并使其不能互相攻击(同一行.同一列.同一斜线上的皇后都会自动攻击). 遗传算法 遗传算法是局部束搜索的变形: 与自 ...

  10. Python中模块之xml的讲解

    xml模块的功能介绍 这里主要讲解xml模块下的etree.ElementTree类. 1. 创建 具体代码如下 import xml.etree.ElementTree as XM namelist ...