夏も終わったし、Ubuntu20.04にDSE6.8でクラスター組もうか

<h2>注意</h2>
主にApache Cassandraの商用パッケージDatastax Enterpriseという前提で進め、オープンソースのものと異なる場合があります。<br>
当記事のテーマはアーキテクチャーガイドを参考して分散DBであるCassandraではCRUDはどう動くのか解説していきます。<br>
もしよろしければTwitterもフォローしていただけると。。。<br>
<a href="https://twitter.com/youjie1211">My Twitter Account</a>

<h2> 今回のトピック</h2>
今回はDSE6.8(2022年8月30日時点最新ver)のインストールから実際クラスターを構築することまで解説しています。<br>
当記事の進め方は以下の通りです。<br>
<ul>
    <li>DSE6.8のインストール</li>
    <li>Cassandra.yamlファイルの書き方</li>
    <li>クラスターの構築</li>
</ul>

<h2>DSE6.8のインストール</h2>
まず初めにDSE6.8をインストールしていきます。<br>
公式のインストールガイドに沿って進めていくだけっちゃだけですが、１つトラブルになりそうなところがあるので書いてきます。<br>
私の環境ではUbuntu20.04を使用し進めていきます。<br>
OracleやCentOSの方はそれぞれインストールガイドが準備されていますのでそちらに沿ってください。<br>
多くは変わらないと思います。
<a href = "https://docs.datastax.com/en/installing/docs/installDEBdse.html">Debian系列のインストールガイド</a>
まず初めにDSEを入れるためにはJavaを入れる必要があります。<br>


```
Javaが入っていないことを確認
java -version

APTライブラリのインデックス更新
sudo apt-get update<br>

JDKを導入
sudo apt-get install openjdk-8-jdk

Javaが入っていることを確認
java -version<br>
```
では続いて本格的にDSE6.8を入れていきます。

```
ライブラリであるlibaio1を導入。Linux Kernelの非同期I/Oシステムコールを呼び出せる
sudo apt-get install libaio1

DSEのリポジトリファイルを追加する。
echo "deb https://debian.datastax.com/enterprise/ stable main" | sudo tee -a /etc/apt/sources.list.d/datastax.sources.list

リポジトリのキーを追加する
curl -L https://debian.datastax.com/debian/repo_key | sudo apt-key add -

APTライブラリのインデックス更新
sudo apt-get update

DSE6.8インストール
sudo apt-get install dse-full
```
これでインストール完了。<br>一回sudo service dse startしても起動はできる
ここまではコピペしたらOK<br>
<h2>cassandra.yamlを編集してみよう</h2>
この状態でsudo service dse startしても再起動はできる。<br>
できるが、、、そうじゃない。<br>
安定運用するまではまだまだぁ。ということでcassandra.yamlを編集する。<br>
これでDSE Clusterは構成の99%が決まってくる<br>
変える必要がある部分は下記の部分。
<ul>
    <li> Cluster name</li>
    <li>num_token</li>
    <li>initial_token</li>
    <li>listen address</li>
    <li>native transport address</li>
    <li>seeds</li>
    <li>endpoint snitch</li>
</ul>
逆にこの部分さえ変えれば安定運用が可能。<br>
しかもエンタープライズ向けだと選択肢はおのずと限られてくる。
<h4>cluster name</h4>
clusterの名前を決めるところ<br>
自分の会社では(多分どこも？？)１サービス=1クラスターとしている<br>
ここは好きな名前を付けてもらったらOK<br>
<h4>num_token</h4>
ここでVirtual nodeの数を変更することができる。<br>
これで１ノードにVirtual nodeを8つ割り当てパーティションキーを割り振ることができる。
今は128になってると思うけど、これ実は非推奨で8がいいらしい。<br>
中のことまでは分かってないけど、多すぎると効率的な分配が難しいとのこと<br>
<h4>initial_token</h4>
ここはシングルノード構成の時に使う設定<br>
コメントアウトしておきましょう<br>
Good Night<br>
<h4>listen address</h4>
他ノードとつながるときに使用されるノードのことです。<br>
ifconfigで出したプライベートIP v4で大丈夫です。<br>
<h4>native_transport_address</h4>
cqlshとか使う時に接続されるアドレス<br>
listen_addressでOK<br>
<h4>seeds</h4>
最初に接続しに行くノードを指定することができます。<br>
基本複数指定するのですが、すべてのノードを指定することは公式でやめてくれと出ています。<br>
<h4>endpoint snitch</h4>
snitchとは各ノードがどこにあってどのラックにあるか指定する。<br>
これによってCassandraの高可用性を担保することができる<br>
GossipingPropertyFileSnitch 一択<br>
cassandra-rackdc.propertiesファイル内のローカル・ノードのラックとデータ・センターを読み取り、これらの値をゴシップで他のノードに伝搬<br>
<br>
<br>
<h2>Clusterを構成する</h2>
これでcassandra.yamlを適応させるために再起動してみると、、、<br>
よし、、sudo service dse restartするぞ、、、<br>
とすると、できない人がいると思います。自分はできなかった<br>
cassandraのエラーコードはsystem.logに書かれるので見てみると<br>
org.apache.cassandra.exceptions.ConfigurationException: Saved cluster name Test Cluster != configured name XXX Cluster<br>
まぁ用は/var/lib/cassandra/data/systemの中のデータと不整合が起きてるわけです<br>
なのでもう<br>

```
Good Bye
sudo rm -rf /var/lib/cassandra/data/system/*
```

この状態でrestartするとできます。これによって無事cassandra.yamlを適応することができました。<br>
今からノードを追加していきましょう。
ノードの追加と言っても基本上の手順でOK<br>
listen_addressとnative_transport_addressだけ変えてください。
seedsは3代構成なら1つでいいと思うのでnode1のものだけでいいと思う。6台ならseedsが3つでもいいかも
これで完成。また来週。