卡桑德拉升级方法(v2→v3)

这是我们公司进行Cassandra升级的记录。
大致步骤如下:
1. 关闭节点。
2. 更新到新版本的配置文件。
3. 进行升级。
4. 启动。
5. 升级SSTable。

请参考下面的文章。

    • https://myopsblog.wordpress.com/2017/12/04/upgrade-cassandra-cluster-from-2-x-to-3-x/

 

    http://cassandra.apache.org/doc/latest/

最新的官方文档还有很多待办事项,并且并不是很有用。

环境

在进行升级之前

    • Oracle JDK8(1.8.0_141)

 

    Cassandra 2.1.11

升级后 jí

    • openJDK8

 

    Cassandra 3.11.4

(1)预先准备

准备新版本的配置文件

获取新版本Cassandra的配置文件,并进行diff,以确认更新内容。

因为附加的内容大部分都是默认的,所以不详细说明。

将配置文件放置到节点上

将新版本的配置文件放置在每个节点上。
在这个过程中,需要编辑每个节点的配置文件。
具体来说,需要根据节点来修改cassandra.yaml中的以下信息。

    • initial_token

 

    • listen_address

 

    • broadcast_rpc_address

 

    seeds

准备目录

请添加从版本3中添加的必要目录。
仅在更改了默认目录设置的情况下才需要。

    • cdc_raw

 

    hints
$ sudo mkdir /path/to/cdc_raw /path/to/hints # ディレクトリの場所は設定ファイルの内容に合わせる。

Cassandra获取源的新版本设置

请按照上述内容在每个节点上设置存储库。

在/etc/yum.repos.d/cassandra.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

(2)开始升级工作之前的准备工作

获取快照

为了防止突发情况,在每个节点上都要进行快照备份。

$ nodetool snapshot -t 2.1

定期工作的停止

如果你正在运行修复或备份的作业,请先停止它们。

执行监视

$ watch -n 5 nodetool ring

在等待时确保没有异常。

(3)升级

对于所有节点执行以下操作。

停止节点

确认所有节点均处于“UP”状态。

$ nodetool status

停止节点。

$ nodetool drain
# 他ノードからDownになっているか確認
$ sudo service cassandra stop

如果在节点上执行了ring等操作,即使进行了drain操作,节点也不会关闭,所以要小心。

更换Java

将OpenJDK进行替换。

$ sudo yum install -y java-1.8.0-openjdk
$ sudo alternatives --config java
# 1.8.0-openjdkを選択
$ java -version

只要换成OpenJDK就可以。

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

卡桑德拉升级更新

$ sudo yum remove -y cassandra21
$ sudo yum install -y cassandra cassandra-tools

设置文件的更新

# 既存の設定ファイルの移動
$ sudo mv /etc/cassandra/conf /etc/cassandra/conf-2.1
# 新しい設定ファイルの配置
$ sudo mv conf-3.11 /etc/cassandra/conf
$ sudo chown -R root:root /etc/cassandra/conf

打开

$ sudo service cassandra start

在启动时,监视日志文件(/var/log/cassandra/system.log)。

确认所有节点的状态为UP,并且状态为正常。

$ nodetool status

确认已经进行了升级的节点能够正常处理流量。(确认Completed的值)

$ watch -d nodetool tpstats

特别是需要确认以下内容

    • ReadStage

 

    • MutationStage

 

    RequestResponseStage

回滚(紧急情况应对)

如果在途中突然发生错误导致更新中止,按照以下步骤处理。

停止Cassandra进程

$ sudo service cassandra stop

在还原SSTable备份之前,备份新版本的SSTable。

$ mkdir -p /cassandra_data/3.11-files/$KEYSPACE/$TABLE
$ cp /cassandra_data/data/$KEYSPACE/$TABLE/*-jb-* /cassandra_data/3.11-files/$KEYSPACE/$TABLE

删除新版本的SSTables

$ rm /cassandra_data/data/$KEYSPACE/$TABLE/*

恢复快照文件

$ cp /cassandra_data/data/$KEYSPACE/$TABLE/snapshots/2.1/* /cassandra_data/data/$KEYSPACE/$TABLE/

对”repair”进行修复操作

$ nodetool repair

(4)升级后的后续处理

升级SSTable。

升级每个节点的SSTable。
※这将需要一些时间。

$ nodetool upgradesstables

请确认进展情况

$ nodetool compactionstats

确认结果

$ find /path/to/data/ -type f | grep -v md- | grep -v "/snapshots" # dataディレクトリは設定に合わせる
# なにも結果がでなければOK

删除快照

$ nodetool clearsnapshot -t 2.1

(5)重新开始定期执行的作业

重新开始已停止的定期任务。

底下的秘密说话

由于一个应用程序的cassandra相关库是旧版本,导致发生了故障并对心脏造成了伤害。
让我们进行仔细的验证。

广告
将在 10 秒后关闭
bannerAds