ElastiCache for Redisのバージョン間のパラメーターグループの差分を調べる

リンクバルのエンジニアの内藤 @akito_naito です。

ElastiCache for Redis 2 End Of Lifeが2023年1月13日に差し迫っています。リンクバルのサービスでも、2系のRedisを使っているサービスがあったので、アップデート作業をしていました。

その過程で、独自に定義されていたパラメータグループ、2系のデフォルトのパラメータグループ、6系のデフォルトのパラメータグループの違いを調べることがあったので、私がやった方法を紹介します。

パラメータグループがなにかについては、以下のようなページをご覧ください。要は、ElastiCache用のRedisのconfigです。
パラメータグループを使用したエンジンパラメータの設定 – Amazon ElastiCache for Redis https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/ParameterGroups.html

目次

AWS CLIでパラメータグループの値を出力

まず、AWS CLIとjqで、CSVに整形した値を取得します。

jqをまだインストールしていない人は、以下の公式ダウンロードページ記載の各OSに沿ったコマンドを実行するか、リンクからバイナリをダウンロードしてください。
Download jq https://stedolan.github.io/jq/download/

取得するコマンドは以下です。xxxの部分は、 ~/.aws/config に記載しているprofileから、適宜差し替えてください。独自のパラメータグループを利用している場合は、default.redis2.8 の部分に、該当のパラメータグループ名を入れてください。

# 2.8x
$ aws --profile xxx elasticache describe-cache-parameters\
    --cache-parameter-group-name default.redis2.8\
    | jq -r '["ParameterName","DataType","ParameterValue","ChangeType","Description"],
     (.Parameters[] | [.ParameterName,.DataType,.ParameterValue,.ChangeType,.Description]) | @csv' >| default.redis2.8.csv

# 6.x
$ aws --profile xxx elasticache describe-cache-parameters\
    --cache-parameter-group-name default.redis6.x\
    | jq -r '["ParameterName","DataType","ParameterValue","ChangeType","Description"],
     (.Parameters[] | [.ParameterName,.DataType,.ParameterValue,.ChangeType,.Description]) | @csv' >| default.redis6.x.csv

上記のコマンドは、こちらの記事を参考にさせていただきました。少しコマンドを変えています。
ElastiCache パラメータグループの設定項目を CSV 形式で一覧出力してみた | DevelopersIO
https://dev.classmethod.jp/articles/elasticache-describe-parametergroup-csv/

diffを確認

diffコマンドでさっと見てみます。

$ diff linkbal-original.csv default.redis2.8.csv
# diffなし

$ diff default.redis2.8.csv default.redis6.x.csv
# 大量のdiff

今回、バージョンアップをするクラスターの独自のパラメータグループとdefaultとの差分はなかったので、2.8系と6系の差分が、サービスに影響がないかを調べていきます。diffコマンドの出力では見づらいので、VSCodeで差分を確認しました。

VSCodeでは、Macの場合、cmd+shift+pで表示されるコマンドパレットで、compare と打つと表示される Compare Active File With… で、さきほど取得した2.8系と6系のパラメータグループの差分を見ます。

差分がある箇所は、以下の公式ドキュメントに詳細が載っているので、一つずつ確認していきます。
Redis 固有のパラメータ – Amazon ElastiCache for Redis https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html

2.8系の差分と6系の差分

以下にまとめます。記載のテキストは、パラメータグループを取得するコマンドで取得した “ParameterName”,”DataType”,”ParameterValue”,”ChangeType”,”Description” をそのまま貼っています。漏れがあったらすみません!

2.8
“close-on-slave-write”,”string”,”yes”,”immediate”,”If enabled, clients who attempt to write to a read-only slave will be disconnected. Applicable to 2.8.23 and higher.”
6.x
“close-on-replica-write”,”string”,”yes”,”immediate”,”If enabled, clients who attempt to write to a read-only replica will be disconnected. Applicable to 2.8.23 and higher.”
ParameterNameの変更

2.8
“client-output-buffer-limit-slave-soft-seconds”,”integer”,”60″,”immediate”,”Slave client output buffer soft limit in seconds.”
6.x
“client-output-buffer-limit-replica-soft-seconds”,”integer”,”60″,”immediate”,”Replica client output buffer soft limit in seconds.”
ParameterNameの変更

2.8
“list-max-ziplist-entries”,”integer”,”512″,”immediate”,”The maximum number of list entries in order for the dataset to be compressed.”
6.x
消滅

2.8
“list-max-ziplist-value”,”integer”,”64″,”immediate”,”The threshold of biggest list entries in order for the dataset to be compressed.”
6.x
消滅

2.8
“min-slaves-max-lag”,”integer”,”10″,”immediate”,”Maximum number of seconds within which the master must receive a ping from a slave to take writes. Use this parameter together with min-slaves-to-write to regulate when the master stops accepting writes. Setting this value to 0 means the master always takes writes.”
6.x
“min-replicas-max-lag”,”integer”,”10″,”immediate”,”The maximum amount of replica lag in seconds beyond which the master would stop taking writes. A value of 0 means the master always takes writes.”
ParameterNameの変更

2.8
“min-slaves-to-write”,”integer”,”0″,”immediate”,”Number of slaves that must be connected in order for master to take writes. Use this parameter together with min-slaves-max-lag to regulate when the master stops accepting writes. Setting this to 0 means the master always takes writes.”
6.x
“min-replicas-to-write”,”integer”,”0″,”immediate”,”The minimum number of replicas that must be present with lag no greater than min-replicas-max-lag for master to take writes. Setting this to 0 means the master always takes writes.”
ParameterNameの変更

2.8
“repl-timeout”,”integer”,”60″,”immediate”,”The timeout in seconds for bulk transfer I/O during sync and master timeout from the perspective of the slave, and slave timeout from the perspective of the master.”
6.x
消滅

2.8
“reserved-memory”,”integer”,”0″,”immediate”,”The amount of memory reserved for non-cache memory usage, in bytes. You may want to increase this parameter for nodes with read replicas, AOF enabled, etc, to reduce swap usage.”
6.x
“reserved-memory-percent”,”integer”,”25″,”immediate”,”The percent of memory reserved for non-cache memory usage. You may want to increase this parameter for nodes with read replicas, AOF enabled, etc, to reduce swap usage.”
予約枠のメモリの割合です。0から25%になりました。推奨が25%の模様です。
予約メモリの管理 – Amazon ElastiCache for Redis https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/red-ug/redis-memory-management.html

2.8
“slave-allow-chaining”,”string”,”no”,”immediate”,”Configures if chaining of slaves is allowed”
6.x
“replica-allow-chaining”,”string”,”no”,”immediate”,”Configures if chaining of replicas is allowed”
ParameterNameの変更

2.8
“tcp-keepalive”,”integer”,”0″,”immediate”,”If non-zero, send ACKs every given number of seconds.”
6.x
“tcp-keepalive”,”integer”,”300″,”immediate”,”If non-zero, send ACKs every given number of seconds.”
0 以外の値 (N) に設定した場合、接続が維持されていることを確認するためにノードクライアントが N 秒ごとにポーリングされます。
デフォルト値が0から300に変更されました。

おわりに

プログラミング言語にせよフレームワークにせよミドルウェアにせよ、アップデートをおろそかにすると、こういったときに確認事項が多くて大変ですね。。。頻繁にアップデートしないといけないなと思いました。

リンクバルでは、エンジニア含めて絶賛採用中なので、気になる方は、私とカジュアル面談ぜひしませんか? 「いきなりカジュアル面談はやりづらい」という方は、TwitterでリプライやDMを送ってください!

内藤とのカジュアル面談はこちら

内藤陽斗のTwitter

リンクバルの採用情報