AWS CLIを使ってElasciCache Redisのパラメーターを変更する

aws_logo
redis

通常の Redis では、パラメーターは CONFIG コマンド経由で変更する。

http://redis.io/topics/config

一方で、マネージド・サービスである AWS ElasciCache Redis では、運用にインパクトを与える CONFIG のようなコマンドは利用できないようになっている。(redis.confrename-command CONFIG ""のように設定すれば良い)

Restricted Commands

In order to deliver a managed service experience, ElastiCache restricts access to certain cache engine-specific commands that require advanced privileges.

For cache clusters running Redis, the following commands are unavailable:

  • bgrewriteaof
  • bgsave
  • config
  • debug
  • migrate
  • save
  • slaveof
  • shutdown

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/ClientConfig.html#ClientConfig.RestrictedCommands

Redis のパラメーターを変更したければ、RDS と同じくパラメーターグループを定義し、Redis インスタンスにアサインしなければならない。

このパラメーター変更をコマンドラインツールの AWS CLI から操作する方法をメモ
前提として Redis は 2.8 系とする。

ElastiCache Redis のパラメーターについて

ElastiCache Redisのパラメーター一覧は次のページにまとまっている。

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/CacheParameterGroups.Redis.html

上記URL の表 では、一部のパラメーターのみ変更可能で(Modifiable = Yes)、ElastiCache Redis 固有なパラメーター(ex. reserved-memory)も存在するので注意が必要。

パラメーターグループについて

パラメーターグループの確認

ElastiCache Redis のパラメーターグループを確認。
--cache-cluster-id でクラスターIDを指定する。

$ aws elasticache describe-cache-clusters --cache-cluster-id aaaa  --query 'CacheClusters[*].[CacheParameterGroup]'
[
    [
        {
            "CacheNodeIdsToReboot": [],
            "CacheParameterGroupName": "default.redis2.8",
            "ParameterApplyStatus": "in-sync"
        }
    ]
]

また、既存のパラメーターグループ一覧は describe-cache-parameter-groups コマンドで確認する。

$ aws elasticache describe-cache-parameter-groups
{
    "CacheParameterGroups": [
        {
            "CacheParameterGroupName": "default.memcached1.4",
            "CacheParameterGroupFamily": "memcached1.4",
            "Description": "Default parameter group for memcached1.4"
        },
        {
            "CacheParameterGroupName": "default.redis2.6",
            "CacheParameterGroupFamily": "redis2.6",
            "Description": "Default parameter group for redis2.6"
        },
        {
            "CacheParameterGroupName": "default.redis2.8",
            "CacheParameterGroupFamily": "redis2.8",
            "Description": "Default parameter group for redis2.8"
        }
    ]
}

パラメーターグループの新規作成

次に elasticache create-cache-parameter-group コマンドでパラメーターグループを新規作成する。
ベースとなるパラメーターグループは --cache-parameter-group-family で指定する。
デフォルトのパラメーターグループ名はドット(“.”) が含まれているけれども、ユーザー作成のグループ名にはドットを使えないので注意すること。

$ aws elasticache create-cache-parameter-group --cache-parameter-group-name my-param-redis28 --cache-parameter-group-family redis2.8 --description "My parameter group for redis2.8"
{
    "CacheParameterGroup": {
        "CacheParameterGroupName": "my-param-redis28",
        "CacheParameterGroupFamily": "redis2.8",
        "Description": "My parameter group for redis2.8"
    }
}
$ aws elasticache describe-cache-parameter-groups
{
    "CacheParameterGroups": [
        {
            "CacheParameterGroupName": "default.memcached1.4",
            "CacheParameterGroupFamily": "memcached1.4",
            "Description": "Default parameter group for memcached1.4"
        },
        {
            "CacheParameterGroupName": "default.redis2.6",
            "CacheParameterGroupFamily": "redis2.6",
            "Description": "Default parameter group for redis2.6"
        },
        {
            "CacheParameterGroupName": "default.redis2.8",
            "CacheParameterGroupFamily": "redis2.8",
            "Description": "Default parameter group for redis2.8"
        },
        {
            "CacheParameterGroupName": "my-param-redis28",
            "CacheParameterGroupFamily": "redis2.8",
            "Description": "My parameter group for redis2.8"
        }
    ]
}

実際の値を確認する。

$ aws elasticache describe-cache-parameters --cache-parameter-group-name my-param-redis28 --query 'Parameters[*]'
[
    {
        "Description": "Apply rehashing or not.",
        "DataType": "string",
        "IsModifiable": true,
        "AllowedValues": "yes,no",
        "Source": "system",
        "ParameterValue": "yes",
        "ParameterName": "activerehashing",
        "MinimumEngineVersion": "2.8.6"
    },
...
    {
        "Description": "Enable Redis persistence.",
        "DataType": "string",
        "IsModifiable": true,
        "AllowedValues": "yes,no",
        "Source": "system",
        "ParameterValue": "no",
        "ParameterName": "appendonly",
        "MinimumEngineVersion": "2.8.6"
    },
...
]
$ aws elasticache describe-cache-parameters --cache-parameter-group-name "my-param-redis28" --source user
{
    "CacheNodeTypeSpecificParameters": [],
    "Parameters": []
}

初期状態では、システム値を引き継いでいる。

パラメーターグループの変更

appendonly=no となっていると、AOF ファイル(Redis の write-ahead logging ファイル)データが永続化されず、ノードのリスタートとともに、データロストしてしまう。

By default, the data in a Redis cache node on ElastiCache resides only in memory, and is not persistent. If a cache node is rebooted, or if the underlying physical server experiences a hardware failure, the data in the cache is lost.

If you require data durability, you can enable the Redis append-only file feature (AOF). When this feature is enabled, the cache node writes all of the commands that change cache data to an append-only file. When a cache node is rebooted, the AOF is “replayed” when the Redis cache engine starts; the result is a warm Redis cache with all of the data intact.

http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/CacheParameterGroups.Redis.html#CacheParameterGroups.Redis.AOF

データが永続化されるように、appendonly=yes のパラメーターグループを作り、Redis クラスタのパラメーターグループにアサインする。

$ aws elasticache modify-cache-parameter-group --cache-parameter-group-name "my-param-redis28" --parameter-name-values ParameterName=appendonly,ParameterValue=yes
{
    "CacheParameterGroupName": "my-param-redis28"
}

$ aws elasticache describe-cache-parameters --cache-parameter-group-name my-param-redis28 --query 'Parameters[*]'
[
...
    {
        "Description": "Enable Redis persistence.",
        "DataType": "string",
        "IsModifiable": true,
        "AllowedValues": "yes,no",
        "Source": "user",
        "ParameterValue": "yes",
        "ParameterName": "appendonly",
        "MinimumEngineVersion": "2.8.6"
    },
...
]
$ aws elasticache describe-cache-parameters --cache-parameter-group-name "my-param-redis28" --source user
{
    "CacheNodeTypeSpecificParameters": [],
    "Parameters": [
        {
            "Description": "Enable Redis persistence.",
            "DataType": "string",
            "IsModifiable": true,
            "AllowedValues": "yes,no",
            "Source": "user",
            "ParameterValue": "yes",
            "ParameterName": "appendonly",
            "MinimumEngineVersion": "2.8.6"
        }
    ]
}

パラメーター appendonly だけが変わっている。

Redis クラスターにこの新しいパラメーターグループをアサインする

$ aws elasticache modify-cache-cluster --cache-cluster-id aaaa --cache-parameter-group-name "my-param-redis28"
{
    "CacheCluster": {
        "Engine": "redis",
        "CacheParameterGroup": {
            "CacheNodeIdsToReboot": [],
            "CacheParameterGroupName": "my-param-redis28",
            "ParameterApplyStatus": "applying"
        },
        ...
    }
}

数分すれば、 "ParameterApplyStatus": "applying""ParameterApplyStatus": "in-sync" になる。

雑多メモ

複数のパラメーターを同時に変更させる

複数のパラメーターを同時に変更したいときは、次のように、スペース区切りで --parameter-name-values に複数の値を渡す。

$ aws elasticache modify-cache-parameter-group --cache-parameter-group-name "my-param-redis28" \
  --parameter-name-values \
  ParameterName=slowlog-log-slower-than,ParameterValue=5000 \
  ParameterName=slowlog-max-len,ParameterValue=256
Tagged with: , , , ,
Posted in aws, database

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 6 days ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: