卡桑德拉升级方法(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相关库是旧版本,导致发生了故障并对心脏造成了伤害。
让我们进行仔细的验证。