Cassandra cluster rolling update.

最初部署 cassandra 时,采用 cassandra 的 2.2.1 版本,但是在实际使用中遇到了,如下 BUG:

对线上有很严重的影响,特别是最后一个,直接导致每次新加节点到已有的集群时,都会出现加入不了的情况,基本上就不能横向扩展,T T。

既然那就升级吧,分布式数据有个好处就是,做 rolling update 特别的容易,如果不升级主版本,那就更容易了。

插曲

虽然 apache cassandra 2.2.x 系列的支持是到今年 11 月就截止的,但是不想一次升级太大,就选择了 2.2.x 最新的一个版本 2.2.7 不过一升级就出问题,最后不得不只升级到 2.2.5。

升级步骤

  • A. 升级某个节点的 cassandra 版本时,需要先执行

nodetool drain

该命令表示该节点不再接受写的请求,并将 memtable 进行 flush 到磁盘;

  • B. 进行数据的备份,可以使用

nodetool snapshot

进行 keyspace 的快照。由于目前所在的公司使用的是 AWS,这里没有使用 cassandra 自己提供的工具进行快照,而是使用的 AWS 提供的工具,对整块 EBS 进行的快照。

  • C. 数据备份完之后,stop cassandra 进程,可以用

cassandra_install_location/bin/stop-server

停止掉服务

  • D. 将老版本的中必要的配置,拷贝到新版本的目录中,比如:cassandra.yml

  • E. 以上完成之后,便可以直接启动新版本的 cassandra 啦,然后观察一下 cassandra 服务日志,如果没有问题,那就大功告成啦。注意,如果你升级的是主版本(1.x - 2.x)或者主版本下的一个大版本(2.1 - 2.2),在启动 cassandra 之后,还需要执行

`nodetool upgradesstables

  • F. 然后再各个节点重复 A - E 的步骤。

  • G. 升级完之后,需要重启你的应用。

是不是很简单呢……

参考资料