Cassandra構築

#構築環境
Cassandra:Apache Cassandra 3.11.6
OS：Amazon Linux 2
java:Amazon Corretto 8

#Cassandraを管理するユーザーを作成
##1.ユーザーを作成
cassandra管理用のユーザーを作成するため、ユーザーをrootに切り替えます。
useraddコマンドでユーザーを追加し、passwdコマンドでユーザーのパスワードを指定します。

```
$ sudo su -
# useradd cassandra
# passwd cassandra
Changing password for user postgres.
New password: 
BAD PASSWORD: The password contains the user name in some form
Retype new password: 
passwd: all authentication tokens updated successfully.
```

##2.root権限実行(sudo)を付与
作成したcassandraユーザーでroot権限実行(sudo)が出来るように設定します。

```
# visudo
以下を追記する
cassandra ALL=(ALL)      NOPASSWD: ALL
```

#Javaをインストール
##1.javaのtarファイルをダウンロード
Amazonからjavaのtarファイルをダウンロードします。
JavaはCassandraを動かすためだけなので、厳密に言えばJREのみでもOKです。

```
$ wget https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.tar.gz -O ~/jdk.tar.gz
```

##2.tarファイルを展開・配置
ダウンロードしたtarファイルを展開し、「/usr/local/java」に配置します。

```
$ mkdir ~/java && tar -xzvf ~/jdk.tar.gz -C ~/java --strip-components 1
$ sudo mv ~/java /usr/local/java
```

##3.PATHを通す
javaコマンドを使用出来るように環境変数を設定します。

```
$ sudo vi /etc/profile

#以下を追記
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
```

環境変数を設定したらsourceコマンドで設定を再読込みします。

```
$ source /etc/profile
```

#Cassandraをインストール

##1.Cassandraのtarファイルをダウンロードする
apacheのアーカイブからCassandraのtarファイルをダウンロードする

```
$ wget http://archive.apache.org/dist/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz -O ~/cassandra.tar.gz
```

##2.tarファイルを配置・展開
ダウンロードしたtarファイルを展開し、「/usr/sbin/cassandra」に配置します。

```
$ mkdir ~/cassandra && tar -xzvf ~/cassandra.tar.gz -C ~/cassandra --strip-components 1
$ sudo mv ~/cassandra /usr/sbin/cassandra
```

##3.cassandraディレクトリの所有者を設定
cassandraユーザーを配置したcassandraディレクトリの所有者にする

```
sudo chown -R cassandra:cassandra /usr/sbin/cassandra
```

##4.CassandraのPATHを通す
「.bashrc」を修正し、CassandraのPATHを通す

```
$ sudo vi /etc/profile

#以下を追記
export CASSANDRA_HOME=/usr/sbin/cassandra
export PATH=$PATH:$CASSANDRA_HOME/bin
```

##5.PATHの設定変更を再度読み込む

sourceコマンドでPATHの設定変更を再度読み込む

```
$ source /etc/profile
```

##6.バージョンを確認
バージョンが確認できればPATHの設定成功です。

```
$ cassandra -v
3.11.6
```

#cassandra.yamlを修正
##1.外部接続を許可する
```
$ vim /usr/sbin/cassandra/conf/cassandra.yaml 

rpc_address: サーバのプライベートIPアドレス
```

#Systemdの設定
サーバ起動と同時に自動起動するようにSystemdで管理するように設定します。

##1.ユニット定義ファイルを作成
Tomcat管理用にユニットファイルを作成します。
CATALINA_HOMEなど、環境変数の設定が必要な場合、Environmentを使用して設定します。

```
$ sudo vim /etc/systemd/system/cassandra.service

[Unit]
Description=Cassandra
After=network.target

[Service]
RuntimeDirectory=cassandra
PIDFile=/var/run/cassandra/cassandra.pid
Type=forking

User=cassandra
Group=cassandra
Environment=JAVA_HOME=/usr/local/java
Environment=JRE_HOME=/usr/local/java/jre

ExecStart=/usr/sbin/cassandra/bin/cassandra -p /var/run/cassandra/cassandra.pid
Restart=always

[Install]
WantedBy=multi-user.target
```

##2.自動起動するように設定
サーバを起動時にcassandraが自動起動されるように設定する

```
$ sudo systemctl enable cassandra
```

##3.Systemdで起動・停止
systemctlコマンドで起動します。

```
$ sudo systemctl start cassandra
```

ステータスを確認し、active (running)となっていればOKです。

```
$ sudo systemctl status cassandra 
● cassandra.service - Cassandra
   Loaded: loaded (/etc/systemd/system/cassandra.service; enabled; vendor preset: disabled)
   Active: active (running) since 月 2021-03-29 13:29:55 UTC; 12s ago
  Process: 7027 ExecStart=/usr/sbin/cassandra/bin/cassandra -p /var/run/cassandra/cassandra.pid (code=exited, status=0/SUCCESS)
 Main PID: 7101 (java)
   CGroup: /system.slice/cassandra.service
           └─7101 /usr/local/java/bin/java -Xloggc:/usr/sbin/cassandra/bin/../logs/gc.log -ea -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -XX:+HeapDumpOnOutOfMemoryError -Xss256k -XX:StringTableSize=1000003 -XX:+AlwaysPreTouch -XX:-UseBiasedLocking ...

 3月 29 13:29:55 ip-172-31-47-93.ap-northeast-1.compute.internal systemd[1]: Starting Cassandra...
 3月 29 13:29:55 ip-172-31-47-93.ap-northeast-1.compute.internal systemd[1]: Started Cassandra.
```

停止したいときはstopで停止します。

```
$ sudo systemctl stop cassandra
```

もし、ユニットファイルの内容を変更した場合、設定ファイルの再読込を実施してから操作します。

```
$ sudo systemctl daemon-reload
```

#参考文献

https://gist.github.com/s0undt3ch/969b744d3d7b88c29cba

https://qiita.com/ch7821/items/369090459769c603bb6b

https://issues.apache.org/jira/browse/CASSANDRA-13436