デプロイや構成管理を容易にするため、Cassandraに必要なモジュール群、設定をRPMパッケージ化します。
環境整備
cassandra開発環境
まず、Apache Cassandraの開発環境を構築するを実施してください。
今回の作業は、上のページでセットアップされたCentOS7上で実施されるのを想定しています。
ant-junit
rpmbuild
時に必要になるため、ant-junit
をインストールします。
まずはダウンロード
$ curl -O http://mirror.centos.org/centos/7/os/x86_64/Packages/ant-junit-1.9.4-2.el7.noarch.rpm
インストール
$ rpm -ivh ant-junit-1.9.4-2.el7.noarch.rpm
rpmbuild
RPMパッケージ作成に必要なrpmbuild
をインストールします。
sudo yum install rpm-build
sudo yum groupinstall 'Development tools'
パッケージ作成
git cloneした cassandraのディレクトリに移動します。
[shoshii@cassandra-1 cassandra]$ ls
CASSANDRA-14092.txt NOTICE.txt build-shaded-dtest-jar.sh data ide relocate-dependencies.pom
CHANGES.txt README.asc build.properties.default debian lib src
CONTRIBUTING.md TESTING.md build.xml doc logs test
LICENSE.txt bin cassandra.iml eclipse_compiler.properties pylib tools
NEWS.txt build conf examples redhat
[shoshii@cassandra-1 cassandra]$
redhat/README.md
を参考に、パッケージを作成します。
$ ant artifacts -Drelease=true
$ mkdir -p build/rpmbuild/{BUILD,RPMS,SPECS,SRPMS}
$ rpmbuild --define="version 4.0.1" \
--define="revision $(date +"%Y%m%d")git$(git rev-parse --short HEAD)%{?dist}" \
--define "_topdir $(pwd)/build/rpmbuild" \
--define "_sourcedir $(pwd)/build" \
-ba redhat/cassandra.spec
注:version 4.0.1
の箇所は、チェックアウトしたブランチにより変えてください
[shoshii@cassandra-1 cassandra]$ ls -l build/rpmbuild/RPMS/noarch/
合計 43896
-rw-rw-r-- 1 shoshii shoshii 44940000 7月 15 07:12 cassandra-4.0.1-20210715git51f16a3.el7.noarch.rpm
-rw-rw-r-- 1 shoshii shoshii 6444 7月 15 07:12 cassandra-tools-4.0.1-20210715git51f16a3.el7.noarch.rpm
cassandra
とcassandra-tools
の2つのRPMパッケージが生成されたのがわかります。
rat-check
のエラーが出る場合
rpmbuild
時、以下のような rat-check
エラーが出ることがあります。Cassandraが利用しているソフトウェアのライセンスチェックの際、本来チェックすべきでないファイルをチェックしてしまっているようです。
関連JIRA
rat-check:
BUILD FAILED
/home/shoshii/qiita/cassandra-docker/cassandra/build/rpmbuild/BUILD/apache-cassandra-4.0.1-src/.build/build-rat.xml:79: Some files have missing or incorrect license information. Check RAT report in /home/shoshii/qiita/cassandra-docker/cassandra/build/rpmbuild/BUILD/apache-cassandra-4.0.1-src/build/rat.txt for more details! \n Unapproved licenses:
/home/shoshii/qiita/cassandra-docker/cassandra/build/rpmbuild/BUILD/apache-cassandra-4.0.1-src/.circleci/config-2_1.yml.high_res.patch
/home/shoshii/qiita/cassandra-docker/cassandra/build/rpmbuild/BUILD/apache-cassandra-4.0.1-src/.circleci/config-2_1.yml.mid_res.patch
/home/shoshii/qiita/cassandra-docker/cassandra/build/rpmbuild/BUILD/apache-cassandra-4.0.1-src/.jenkins/Jenkinsfile
/home/shoshii/qiita/cassandra-docker/cassandra/build/rpmbuild/BUILD/apache-cassandra-4.0.1-src/CASSANDRA-14092.txt
Total time: 7 seconds
暫定対処として、以下のように .build/build-rat.xml
にエラー元となるファイル群を除外する設定を入れました。
ご自身の環境でも同様のエラーが出た場合、このような対処で凌ぐことはできます。
diff --git a/.build/build-rat.xml b/.build/build-rat.xml
index ce4e6f4..4c50c90 100644
--- a/.build/build-rat.xml
+++ b/.build/build-rat.xml
@@ -67,7 +67,14 @@
<exclude name="**/tools/cqlstress-example.yaml"/>
<exclude name="**/tools/cqlstress-insanity-example.yaml"/>
<exclude name="**/tools/cqlstress-lwt-example.yaml"/>
- <!-- NOTICE files -->
+ <exclude name="**/.idea/**/*"/>
+ <exclude name="**/.circleci/**/*"/>
+ <exclude name="**/.jenkins/**/*"/>
+ <exclude name="CASSANDRA-14092.txt"/>
+ <exclude name="CHANGES.txt"/>
+ <exclude name="README.asc"/>
+ <exclude name="build.properties.default"/>
+ <!-- NOTICE files -->
<exclude NAME="**/NOTICE.md"/>
<!-- LICENSE files -->
<exclude NAME="**/LICENSE.md"/>
インストールと実行
rpm -ivh
でインストールします。
[shoshii@cassandra-1 cassandra]$ sudo rpm -ivh build/rpmbuild/RPMS/noarch/cassandra-4.0.1-20210715git51f16a3.el7.noarch.rpm
準備しています... ################################# [100%]
更新中 / インストール中...
1:cassandra-4.0.1-20210715git51f16a################################# [100%]
[shoshii@cassandra-1 cassandra]$
sudo -u cassandra cassandra
で実行します。
[shoshii@cassandra-1 cassandra]$ sudo -u cassandra cassandra
[shoshii@cassandra-1 cassandra]$ CompilerOracle: dontinline org/apache/cassandra/db/Columns$Serializer.deserializeLargeSubset (Lorg/apache/cassandra/io/util/DataInputPlus;Lorg/apache/cassandra/db/Columns;I)Lorg/apache/cassandra/db/Columns;
...略
INFO [main] 2021-07-15 09:16:24,045 StorageService.java:2737 - Node localhost/127.0.0.1:7000 state jump to NORMAL
起動ログの最後に、state jump to NORMAL
と出ているので、起動には成功しているようです。
cqlsh
で起動したCassandraに接続してみます。
[shoshii@cassandra-1 cassandra]$ bin/cqlsh
Connected to Test Cluster at 127.0.0.1:9042
[cqlsh 6.0.0 | Cassandra 4.0.1 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
cqlsh>
接続できました。
cassandra-toolsのインストールと実行
Cassandraクラスタの稼働には直接必要ではありませんが、運用上便利なツールが利用できるようになるため、cassandra-tools
をインストールします。
[shoshii@cassandra-1 cassandra]$ sudo rpm -ivh build/rpmbuild/RPMS/noarch/cassandra-tools-4.0.1-20210715git51f16a3.el7.noarch.rpm
準備しています... ################################# [100%]
更新中 / インストール中...
1:cassandra-tools-4.0.1-20210715git################################# [100%]
[shoshii@cassandra-1 cassandra]$
nodetool status
という、クラスタ状態を確認するコマンドを使ってみます。
[shoshii@cassandra-1 cassandra]$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 127.0.0.1 69.05 KiB 16 100.0% b2334131-34e5-45a4-bd89-35efcc73b2ed rack1
[shoshii@cassandra-1 cassandra]$
CassandraノードのステータスやAddress、担当しているデータ量などが表示されています。
上の表示ではステータス(一番左の列)が UN
となっています。これは、Up Normal の略であり、Cassandraが正常に起動し処理を受け付けることが可能な状態であることを意味します。
参考
参考にさせていただいたページです。
以上です。