AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ElastiCache ことはじめ以前のななめ読みと、それでも作らないといけないときの覚書

とりあえず作らないといかん! という感じの時にななめ読みで助かったやつとか自分のメモ。

パラメータグループの何を最低限設定しておきましょう、とか記事が本当になくて困る。 (RDS で MySQL 選択した場合に例えると character-set を UTF8MB4 とか、 collation の utf8mb4_ja_0900 系とか timezone のそういうやつ )

ElastiCache インスタンスの動作設定について

とりあえずこれだけ設定すれば、フェイルオーバ起きても (エンドポイント参照先切り替わり時に write ロックかかるけど) 最低限大丈夫そう。

  • クラスター無し
    • シャーディング無し
  • レプリカ 1
  • マルチ AZ

nyamadori.hatenablog.com

だいたいこんな理解になった

  • クラスタ:マンション
  • シャード:部屋
    • シャーディング:二部屋契約してぶち抜き利用
  • ノード:住人
  • レプリカ:愚かなレプリカルークゥゥ!

作っておいたほうがいいもの

  • VPC セキュリティグループ
    • ElastiCache に割り当てる用を作ってデフォルトの 6379 か設定するポート番号をふっとくといい
  • サブネットグループ
    • 所属させる VPC 決めた時点で紐付いてるサブネット情報参照できるから、複数の AZ で用意しといて
  • パラメータグループ
    • とりあえず何もいじらず名前だけつけたの作って割り当てればいい、でないと後にチューニングできないんで (RDS の default と同じ問題)

メンテナンスウィンドウ

正直止めたいけど RDS と違って止められないのでロックされる瞬間があるのは諦めるしかない。 時間はもう適当にアクセスなさそうか、あっても「気の所為でしょ!」ってごまかせるタイミングにするしかない。

メール通知するようにしたけど、 SNS トピックに日本語や記号使えなくてキレそう。

dev.classmethod.jp

手動で置換したほうがいいらしい

プライマリノードで書き込みロックかかるし、通知くるんだからまあサービスのメンテナンス入れて対応したほうが確実やんね。

www.slideshare.net

Aamzonlinux2 に Redis-cli を入れる

作成した ElastiCache クラスターのエンドポイントと接続確認をしたい。

epel とか remi 使えって書いてあって「いや嘘だろ」って顔になった。

20211221 追記

AWS 公式のヘルプに、 redis-cli だけコンパイルする手順の記載が存在した。 当時は急いでいて見つけられなかったので結構つらさある。

こういうときこそ、 amazon-linux-extras にクライアントだけ配置してくんねーか? という気持ちになるなどし。

docs.aws.amazon.com

コンパイル手順

AmazonLinux2 では以下だそうな。

ホームディレクトリ以下で作業しているので、Makefile 消されてしまってメンテナンスできなくなる可能性を考えたら /usr/local/src とかで作業した方がいいかもしれない。

[ec2-user@localhost ~]$ sudo yum -y install openssl-devel gcc
[ec2-user@localhost ~]$ wget http://download.redis.io/redis-stable.tar.gz
[ec2-user@localhost ~]$ tar xvzf redis-stable.tar.gz
[ec2-user@localhost ~]$ cd redis-stable
[ec2-user@localhost redis-stable]$ make distclean
[ec2-user@localhost redis-stable]$ make redis-cli BUILD_TLS=yes
[ec2-user@localhost redis-stable]$ sudo install -m 755 src/redis-cli /usr/local/bin/

インストール

[ec2-user@localhost ~]$ sudo amazon-linux-extras install redis6
Installing redis

#snip#

依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ redis.x86_64 0:6.2.3-1.amzn2 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

==================================================================================================================================================================================
 Package                              アーキテクチャー                      バージョン                                     リポジトリー                                      容量
==================================================================================================================================================================================
インストール中:
 redis                                x86_64                                6.2.3-1.amzn2                                  amzn2extra-redis6                                1.1 M

トランザクションの要約
==================================================================================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 1.1 M
インストール容量: 3.7 M
Is this ok [y/d/N]: y
Downloading packages:
redis-6.2.3-1.amzn2.x86_64.rpm                                                                                                                             | 1.1 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : redis-6.2.3-1.amzn2.x86_64                                                                                                                        1/1
  検証中                  : redis-6.2.3-1.amzn2.x86_64                                                                                                                        1/1

インストール:
  redis.x86_64 0:6.2.3-1.amzn2

完了しました!

動作確認

redis-cli -h ${(プライマリ/リーダー)エンドポイント} -h ${port} ping
PONG

PR_CONNECT_ABORTED_ERROR

Firefox 更新直後なら、一度完全に終了して起動しなおして。

Firefox 89 へ更新

したら表題の PR_CONNECT_ABORTED_ERROR が出るようになってしまった。

Firefox について、のウィンドウ内から更新ボタンを押したので、まさか問題が起きようとは思っていなかった。

Google は見えるが検索結果の各サイトが見えない状態なので、 IPv6 かつ https 化コンテンツは大丈夫とかいうことだったのだろうか、という気持ちがあるが解決したのでヨシ。 しかしなんでこんなんなるんだ。

master からブランチを生やす前にコミットしてしまった

あびゃびゃびゃ、半年に一回くらいやるやつ。

qiita.com

master にコミット (remote に push してない) 段階で以下のコマンドを叩いて移動させる。

[user@localhost ~]$ git checkout -b ${BRUNCH}
[user@localhost ~]$ git branch -f master origin/master

1コマンドで終わらせるやつについては、一時的に master が消えるので良くないかな……? と思う次第。

CentOS8 から RockyLinux に移行する RC 版

公式のダウンロードページに記載されている通り「RC だから本番 (≒商用) 環境の利用に持ち込むなよ!」という状態なので、手元の開発環境とかで動作するか確認してもろて、という状態ですね。

RockyLinux の RC が出た

出てました。

rockylinux.org

いまんとこ CentOS 8.3 のみサポートしとるらしいです。

CentOS からの移行

この centos2rocky.sh を使えばよさそうです。 という訳で使ってみたのですが、今の所アナウンスされてない存在かつ、実装されているオプションが説明通りの動作じゃないっぽいので以下に記載します。

github.com

ちなみに Issue かどこかで見たのですが、「今は CentOS にしか対応してないけど、今後その他のディストリにも対応範囲を広げたい」と言っているので RHEL 派生の他ディストリはワンチャンあるかも? (Alma -> Rocky みたいなの想定してるのかな)

CentOS2Rocky

Usage にも書かれている通り、現在実装されている動作オプションは以下。

github.com

オプション名 内容
-h ヘルプを表示します、表示内容は README の Usage とほぼ同じ模様
-r スクリプトを実行した CentOS 環境を RockyLinux 環境に変換します
-V 切替確認
-R すべてのパッケージの再インストール

現状、変換を実行すると (Base に含まれる) すべてのパッケージが dnf reinstall されるので、作業完了したら reboot を投げて新しいカーネルを読み込ませる必要があります。

needs-restarting でめっちゃ警告でると思われるのでね、やっといてね。

-h

[vagrant@localhost ~]$ sudo ./centos2rocky.sh -h

README の Usage とほぼ同じなので見どころは特には。

-r

[vagrant@localhost ~]$ sudo ./centos2rocky.sh -r

通常、環境を変換する場合はこのコマンドと思われます。

AlmaLinux の変換はリポジトリを切り替えるだけだったのですが、 RockyLinux はリポジトリを切り替えた上で、標準リポジトリに含まれる (と思われる) パッケージをすべて再インストールする ( -R オプションに期待する動作) ようです。

-V

これが問題で、個人的には「スクリプトを実行している CentOS 環境と、移行先になる RockyLinux の間で RPM パッケージの確認を行う」だけで、実際に変換はされないと思ってたんですね。

まぁ思ってただけで試してよかったね、という感じで本日現在だと確認もなんも特になく、普通に処理が始まって変換されてしまいます。

[vagrant@localhost ~]$ sudo ./centos2rocky.sh -V

#snip#

Complete!
Last metadata expiration check: 0:03:51 ago on Fri 07 May 2021 07:23:21 PM JST.
Dependencies resolved.
Nothing to do.
Complete!
mkdir: cannot create directory ‘/root/convert’: File exists
[vagrant@localhost ~]$ sudo ls -lha /root/convert
合計 100K
drwxr-xr-x  2 root root 111  57 19:22 .
dr-xr-x---. 4 root root 201  315 04:28 ..
-rw-r--r--  1 root root 96K  57 19:22 localhost.localdomain-rpm-list-begin.log
-rw-r--r--  1 root root 470  57 19:22 localhost.localdomain-rpm-list-verified-begin.log
[vagrant@localhost ~]$ cat /etc/system-release
Rocky Linux release 8.3

Complete! じゃないんじゃ。

github.com

ここで false がセットされてるので大丈夫かと思ったんですがまあ全部実行されましたね……。

-R

[vagrant@localhost ~]$ sudo ./centos2rocky.sh -R

全てのパッケージをインストールし直すとのことなのですが、現在の実装では -r -R ともに reinstall_all_rpms=true をセットしている同じ動作なので、どっちを選んでも変わりなさそうです。

github.com

正式リリース前

なので、マー多少のことには目をつぶってもろて、という感じになりそうです。

-V の動作だけどういう想定なのか聞こうと思ったけど github のアカウント情報忘れてしまったね、どうすっかな。