リンクバルのエンジニアの内藤 @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を送ってください!