YugabyteDBをAlma Linux 8にインストールする

# What's？

PostgreSQL互換の分散データベースである、YugabyteDBを少し試してみたいなということで。

# YugabyteDB

YugabyteDBのサイトはこちら。

https://www.yugabyte.com/yugabytedb/

YugabyteDBはPostgreSQLおよびApache Cassandraとの互換性がある分散データベースです。  
主な特徴は以下のようです。

- ACIDトランザクションのサポート
- リレーショナルモデルのサポート
- 水平方向に拡張可能
- 障害回復力
- 地理的な分散をサポート
- レプリケーションのサポート
- オープンソース

デプロイ方法は以下にまとまっており、クラウドにデプロイしてマネージドサービスとして使う方法から、自前で管理する方法まであります。

https://www.yugabyte.com/compare-products/

ドキュメントはこちら。

https://docs.yugabyte.com/

見ていると、previewとパスが入るもの多くてちょっと気になりますが…。

YugabyteDBのリリースは、サポート期間の長いLTSと通常のサポート期間のSTSがあるようです。

https://docs.yugabyte.com/preview/releases/versioning/

また、サポートのないプレビューもあります。

LTSは2.5年、STSは1.5年が更新の提供期間のようですね。

> LTS release series receive maintenance updates for at least 2 years (730 days) from the first release date of the minor release. Extended support (defined below) is provided for an additional 180 days. As a result, 2.5 years of support is provided in total.
>
> STS release series receive maintenance updates for at least 1 year (365 days) from the first release date of the minor release. Extended support (defined below) is provided for an additional 180 days. As a result, 1.5 years of support is provided in total.

https://docs.yugabyte.com/preview/releases/

現時点のLTSはv2.20系列です。

https://docs.yugabyte.com/preview/releases/ybdb-releases/v2.20/

アーキテクチャーなどもドキュメントとしてまとまっているのですが、こちらはまた別途見ていこうと思います。

https://docs.yugabyte.com/v2.20/architecture/

# YugabyteDBのQuick Startページを見る

YugabyteDBのQuick Startページは常にプレビューリリースのものを見ているようです。

https://docs.yugabyte.com/preview/quick-start/

あとでこちらに沿ってインストールしてみたいと思います。

Linux向けページ。

https://docs.yugabyte.com/preview/quick-start/linux/

他にはmacOS、Docker、Kubernetesがあります。

サポートしているOSはこちら。

https://docs.yugabyte.com/v2.20/reference/configuration/operating-systems/

この中だとAlmaLinux 8を推奨しているようなので、今回はこちらを使うことにします。

なお、本格的に運用する場合のチェックリストなどはこちらにあるようです。

- https://docs.yugabyte.com/v2.20/deploy/checklist/
- https://docs.yugabyte.com/v2.20/deploy/manual-deployment/

# 環境

今回の環境はこちら。AlmaLinux 8です。

```shell
$ cat /etc/redhat-release
AlmaLinux release 8.10 (Cerulean Leopard)


$ uname -srvmpio
Linux 4.18.0-553.5.1.el8_10.x86_64 #1 SMP Wed Jun 5 09:12:13 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux
```

# YugabyteDBをAlmaLinux 8にインストールする

Quick Startに沿って、AlmaLinux 8にYugabyteDBをインストールしてみます。

https://docs.yugabyte.com/preview/quick-start/linux/

最初に、`python`コマンドを使える必要があるそうです。なお、`python3`コマンドは使えますが`python`コマンドはデフォルトでは使えません。

```shell
$ python --version
-bash: python: コマンドが見つかりません


$ python3 --version
Python 3.6.8
```

RHEL系のOSの場合は、`alternatives`で設定します。

```shell
$ sudo alternatives --set python /usr/bin/python3
```

次にYugabyteDBをダウンロードするのですが、ドキュメントに記載されているコマンドではプレビュー版をダウンロードしてしまいます。

ここは、リリースページを見てv2.20をダウンロードしたいと思います。

https://docs.yugabyte.com/preview/releases/ybdb-releases/

https://docs.yugabyte.com/preview/releases/ybdb-releases/v2.20/

ダウンロードして展開。

```shell
$ curl -O https://downloads.yugabyte.com/releases/2.20.4.0/yugabyte-2.20.4.0-b50-linux-x86_64.tar.gz
$ tar xf yugabyte-2.20.4.0-b50-linux-x86_64.tar.gz
$ cd yugabyte-2.20.4.0
```

設定用スクリプトの実行。

```shell
$ ./bin/post_install.sh
```

`yugabyted`のバージョン確認。

```shell
$ ./bin/yugabyted version
/home/charon/yugabyte-2.20.4.0/version_metadata.json

----------------------------------------------------------------------
|                              Version                               |
----------------------------------------------------------------------
| Version        : 2.20.4.0-b50                                      |
| Build Time     : 20 May 2024 18:42:14 UTC                          |
| Build Hash     : bf5b144a7fb13f40bd4b7a022934a3af14894379          |
----------------------------------------------------------------------

```

起動。

```shell
$ ./bin/yugabyted start
```

こんな表示が出ました。

```shell
+----------------------------------------------------------------------------------------------------------+
|                                                yugabyted                                                 |
+----------------------------------------------------------------------------------------------------------+
| Status              : Running.                                                                           |
| Replication Factor  : 1                                                                                  |
| YugabyteDB UI       : http://127.0.0.1:15433                                                             |
| JDBC                : jdbc:postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte                   |
| YSQL                : bin/ysqlsh   -U yugabyte -d yugabyte                                               |
| YCQL                : bin/ycqlsh   -u cassandra                                                          |
| Data Dir            : /home/charon/var/data                                                             |
| Log Dir             : /home/charon/var/logs                                                             |
| Universe UUID       : 78c4931a-2118-46b5-a6fd-19f04a2ac15b                                               |
+----------------------------------------------------------------------------------------------------------+
🚀 YugabyteDB started successfully! To load a sample dataset, try 'yugabyted demo'.
🎉 Join us on Slack at https://www.yugabyte.com/slack
👕 Claim your free t-shirt at https://www.yugabyte.com/community-rewards/

```

すごいところにデータやログが置かれることになりました…これはホームディレクトリで展開したからでしょうか…。

```shell
| Data Dir            : /home/charon/var/data                                                             |
| Log Dir             : /home/charon/var/logs                                                             |
```

ステータス確認。

```shell
$ ./bin/yugabyted status

+----------------------------------------------------------------------------------------------------------+
|                                                yugabyted                                                 |
+----------------------------------------------------------------------------------------------------------+
| Status              : Running.                                                                           |
| Replication Factor  : 1                                                                                  |
| YugabyteDB UI       : http://127.0.0.1:15433                                                             |
| JDBC                : jdbc:postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte                   |
| YSQL                : bin/ysqlsh   -U yugabyte -d yugabyte                                               |
| YCQL                : bin/ycqlsh   -u cassandra                                                          |
| Data Dir            : /home/charon/var/data                                                             |
| Log Dir             : /home/charon/var/logs                                                             |
| Universe UUID       : 78c4931a-2118-46b5-a6fd-19f04a2ac15b                                               |
+----------------------------------------------------------------------------------------------------------+
```

クライアントツールで接続。

```shell
$ ./bin/ysqlsh
ysqlsh (11.2-YB-2.20.4.0-b0)
Type "help" for help.

yugabyte=#
```

バージョンがちょっと気になりますね。

```shell
yugabyte=# show server_version;
   server_version
---------------------
 11.2-YB-2.20.4.0-b0
(1 row)

```

このブログ記事を見ると、最初の数字（11.2）が互換性のあるPostgreSQLのバージョンのようです。

https://www.yugabyte.com/blog/check-postgresql-version/

つまり、PostgreSQL 11.2がベースになっていそうですね。

このあたりを見ると、そのようです。

https://github.com/yugabyte/yugabyte-db/blob/v2.20.4.0/src/postgres/src/interfaces/libpq/libpq.rc.in

`select version()`だとこんな結果になります。

```sql
yugabyte=# select version();
                                                                                         version
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 PostgreSQL 11.2-YB-2.20.4.0-b0 on x86_64-pc-linux-gnu, compiled by clang version 16.0.6 (https://github.com/yugabyte/llvm-project.git 1e6329f40e5c531c09ade7015278078682293ebd), 64-bit
(1 row)

```

テーブル作成、データの登録および参照。

```sql
yugabyte=# create table t1(name varchar(20), primary key(name));
CREATE TABLE


yugabyte=# insert into t1(name) values('YugabyteDB');
INSERT 0 1
yugabyte=# insert into t1(name) values('PostgreSQL');
INSERT 0 1
yugabyte=# insert into t1(name) values('MySQL');
INSERT 0 1
yugabyte=# insert into t1(name) values('CockroachDB');
INSERT 0 1
yugabyte=# insert into t1(name) values('TiDB');
INSERT 0 1


yugabyte=# select * from t1 order by name;
    name
-------------
 CockroachDB
 MySQL
 PostgreSQL
 TiDB
 YugabyteDB
(5 rows)

```

クライアントツールを終了。

```shell
yugabyte=# \q
```

最後にWeb UIを見てみます。`http://localhost:15433`にアクセスするとこんなUIが見れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309669/1e3b3983-a1b5-6a34-c76d-f8f77f6b97a9.png)

クラスターの構成ノードや

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309669/2af1c4a5-279e-33b1-1cc3-4206a394f8d8.png)

データベースなど。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309669/7bc629e5-8532-9814-a92b-d64dff8675e8.png)

ひとまずこんなところでしょうか。