cassandra数据库迁移与扩容

编程语言及工具

105人已加入

描述

cassandra数据库迁移与扩容

1、先下载cassandra的tgz包,我安装的是3.9版本的cassandra,下载地址http://www.apache.org/dyn/closer.lua/cassandra/3.9/

2、下载之后解压

tar zxvf apache-cassandra-3.9-bin.tar.gz

3、配置

进入解压后的cassandra目录,在conf/cassandra.yaml中设置datafile,commitlog和saved_caches目录,其默认值分别为:$CASSANDRA_HOME/data/data, $CASSANDRA_HOME/data/commitlog, $CASSANDRA_HOME/data/saved_caches,可以根据自己要求设置

本人设置的是/var/lib/cassandra/data, /var/lib/cassandra/commitlog, /var/lib/cassandra/saved_caches。

新建设置的这三个目录,并将其所有者改成普通用户

sudo mkdir /var/lib/cassandra/data

sudo mkdir /var/lib/cassandra/commitlog

sudo mkdir /var/lib/cassandra/saved_caches

sudo chown -R ly:ly /var/lib/cassandra/data

sudo chown -R ly:ly /var/lib/cassandra/commitlog

sudo chown -R ly:ly /var/lib/cassandra/saved_caches

之后如果有需要可以配置cassandra的内存,在conf下的cassandra-env.sh文件中,MAX_HEAP_SIZE表示最大申请内存大小,HEAP_NEW_SIZE表示初始申请内存大小,两者不能单独设置,否则cassandra出错

4、运行

全部完成后可以启动cassandra了,在cassandra目录下运行

bin/cassandra

等待,输入命令

ps -aux | grep cassandra

查看进程,当出现下图中5012类似进程时,则cassandra启动完毕

图999

5、启动cql

bin/cqlsh

启动cassandra的cql编辑器,可以使用cql语句操作数据库(启用cql的条件是系统安装了2.7版本及以上的python,如果没有则不能打开)

6、关闭cassandra,使用简单粗暴的kill命令

kill 5012

7、测试

使用java编写简单的程序插入数据库,参见http://ju.outofmemory.cn/entry/210437(jdbc连接方式),http://blog.csdn.net/maosijunzi/article/details/42268061(Cassandra.Client方式)

在运行时可能会出现错误:

java.lang.ClassNotFoundException:com.google.common.util.concurrent.AsyncFunction

可能是因为依赖包不全的原因,保证以下几种jar包依赖:

cassandra-driver-core-*.jar

guaua-*.jar

metrics-core-*.jar

netty-all-*.Final.jar

slf4j-api-*.jar

cassandra数据库迁移(介绍两种方法)

第一种方式:copy命令

使用方法:适用于数据量小的情况下。

使用方式:copy mykeyspace.mytable to ‘/home/db.csv’

这样就成功的把表mytable以csv的格式导出到了db.csv文件。

然后再另外一个集群中,建一个一模一样的表,然后使用

copy app12345.mytable from ‘/home/db.csv’

就把数据导入到了新的库中。

不过以上方式仅限于小数据量,当数据量一大,这个过程会持续很久,而且文件也会很大。

第二种方式:sstableloader工具。

在cassandra的bin目录下提供了一个sstableloader工具,这个工具专门用于把一个表的sstable文件导入到一个新的集群中。

假设你的表是mykeyspace.mytable。你的数据存一个10个节点组成的集群中,每个几点的数据都存在/disk/data1和/disk/data2目录下。

假设你的新集群的一个访问地址是IP, 先在新集群建离相同名字的keyspace和表结构。

接下来你只要在老集群的每个节点执行下面的命令:

bin/sstableloader -d IP -u cassandra -pw cassandra -t 100 /disk/data1/mykeyspace/mytable

bin/sstableloader -d IP -u cassandra -pw cassandra -t 100 /disk/data2/mykeyspace/mytable

其中-u是 用户名 -pw是密码 -t是限制流量100M/bps

等所有节点执行完毕,你的表数据就成功导入到了新的集群中,当然只要你的机器io和网络条件允许,你可以多个节点并发执行。

#p##e#

cassandra如何扩容和替换一个节点

增加一个节点和替换一个DOWN掉的节点,步骤都是一样的,只是启动参数不一样。

第一:准备一个新机器,cassandra的配置使用和集群中一个普通节点相同的配置。

第二:然后就可以启动了,增加一个节点,只要bin/cassandra 启动就可以了。

如果是替换一个节点(假设DOWN掉的节点ip=192.168.1.101),启动的时候,可以使用bin/cassandra -Dcassandra.replace_address=192.168.1.101来启动(只是第一次这样,以后就直接bin/cassandra启动就可以了)

第三:就是等待数据迁移,当你在其它机器上使用nodetool status看到新节点的状态变成UN状态的时候,就表示迁移完成了。你也可以在新节点上通过nodetool netstats查看数据迁移的进度。

注意:如果你的集群数据量很大,这个数据迁移的过程将会给集群带来很大的负载。你需要在启动新节点之前做两件事情:

1、关闭所有节点的压缩。

nodetool disableautocompaction 关闭自动压缩

nodetool stop COMPACTION 停止正在执行的压缩。

当新节点启动之后,也要执行nodetool disableautocompaction。

在数据迁移完毕之后,再放开即可nodetool enableautocompaction

2、限制所有节点数据迁移流量

./nodetool setstreamthroughput 32

限制为32mbps 假设你的集群有10个机器,那么你的新节点的流量大约是32*10mbps。

你可以根据数据迁移的进度,完成的节点个数,慢慢调大这个值。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分