などの永続的なメモリ最適化Elastic Compute Service (ECS) インスタンス re6pインスタンスは、CPUとメモリの比率が高く、Redisを実行できるため、メモリのGiBあたりのコストを削減できます。 このトピックでは、永続メモリ最適化インスタンスにRedisを迅速にデプロイする方法について説明します。 例では、特定のオペレーティングシステムが使用される。
背景情報
このトピックで説明する手順は、次のインスタンスタイプとイメージバージョンにのみ適用できます。
インスタンスタイプ: ecs.re6p-redis.large、ecs.re6p-redis.xlarge、ecs.re6p-redis.2xlarge、ecs.re6p-redis.4xlarge、およびecs.re6p-redis.13xlarge
画像バージョン
Alibaba Cloud Linux 2
CentOS 7.6以降
Ubuntuの18.04と20.04
Alibaba Cloud Linux 2を実行するインスタンスにRedisをデプロイする
Alibaba Cloud Linux 2は、Redisアプリケーション用に特別に調整されています。 Alibaba Cloud Linux 2にデプロイされたRedisアプリケーションは、コミュニティがサポートするオペレーティングシステムにデプロイされたRedisアプリケーションを20% 以上上回っています。
Redis 6.0.5およびRedis 3.2.12のYUMリポジトリは、Alibaba Cloud Linux 2に組み込まれています。 sudo yum installコマンドを実行して、Redis 6.0.5とRedis 3.2.12をデプロイします。 他のバージョンのRedisアプリケーションをデプロイすることもできます。 詳細については、このトピックの「CentOSを実行するインスタンスへのRedisのデプロイ」および「Ubuntuを実行するインスタンスへのRedisのデプロイ」をご参照ください。
この例では、次の設定が使用されています。
インスタンスタイプ:ecs.re6p-redis.2xlarge
イメージ:Alibaba Cloud Linux 2.1903 LTS 64 ビット
永続メモリ最適化インスタンスを購入します。
詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。 以下の設定に注意してください。
インスタンス: [アーキテクチャ] セクションのx86ドロップダウンリストから [メモリ最適化] を選択し、ecs.re6p-redis.2xlargeインスタンスタイプを選択します。
イメージ:[Alibaba Cloud Linux 2.1903 LTS 64 ビット] を選択します。
インスタンスにログインします。
詳細については、「接続方法の概要」をご参照ください。
ビジネス要件に基づいてRedis 6.0.5またはRedis 3.2.12をデプロイします。
Redis 6.0.5 をデプロイするには、以下のコマンドを実行します。
sudo yum install -y alinux-release-experimentals && \ sudo yum install -y redis-6.0.5
Redis 3.2.12 をデプロイするには、以下のコマンドを実行します。
sudo yum install -y alinux-release-experimentals && \ sudo yum install -y redis-3.2.12
Redisを起動し、Redisに割り当てられる通常メモリと永続メモリのデフォルト量を設定します。
サンプルコマンド:
次のコマンドを実行して、通常のメモリと永続メモリの比率を推奨値1:4に設定します。
export MEMKIND_DAX_KMEM_NODES=1 && \ sudo redis-server /etc/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 4 --hashtable-on-dram yes --daemonize yes --logfile /tmp/redis_8369.log --protected-mode no --bind 0.0.0.0
異なるレギュラーメモリと永続メモリの比率を指定し、特定のレギュラーメモリを他のアプリケーションに割り当てることができます。 たとえば、次のコマンドを実行して、レギュラーメモリと永続メモリの比率を1:16に設定し、2 GiBのレギュラーメモリと32 GiBの永続メモリを含む合計34 GiBのメモリをRedisに割り当てることができます。
export MEMKIND_DAX_KMEM_NODES=1 && \ sudo redis-server /etc/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 16 --maxmemory 34G
CentOSを実行するインスタンスにRedisをデプロイする
この例では、次の設定が使用されています。
インスタンスタイプ:ecs.re6p-redis.2xlarge
イメージ:CentOS7.6
Redis:Redis 4.0.14
memkind: memkind 1.10.1-rc2
次の手順の一部では、GitHubの特定のリソースが必要です。 手順を実行する前に、リソースがhttps://github.comからダウンロードされていることを確認してください。 GitHubからリソースをダウンロードできない場合は、リソースがダウンロードされるまで関連するコマンドを繰り返します。
永続メモリ最適化インスタンスを購入します。
詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。 以下の設定に注意してください。
インスタンス: [アーキテクチャ] セクションのx86ドロップダウンリストから [メモリ最適化] を選択し、ecs.re6p-redis.2xlargeインスタンスタイプを選択します。
:[CentOS 7.6 64 ビット] を選択します。
インスタンスにログインします。
詳細については、「接続方法の概要」をご参照ください。
コンパイル環境を準備します。
export MEMKIND_DAX_KMEM_NODES=1 && \ sudo yum -y install numactl-devel.x86_64 && \ sudo yum -y groupinstall 'Development Tools'
Redis 4.0.14ソースコードを準備します。
sudo wget https://github.com/redis-io/redis/archive/4.0.14.tar.gz && \ sudo wget https://github.com/redis/redis/compare/4.0.14...tieredmemdb:4.0.14-devel.diff -O redis_4.0.14_diff_tieredmemdb.patch && \ tar xzvf 4.0.14.tar.gz && \ cd redis-4.0.14 && \ git apply --ignore-whitespace ../redis_4.0.14_diff_tieredmemdb.patch
説明パッチは永続メモリを有効にするために使用され、Redisのバージョンによって異なります。 詳細については、このトピックの「Redisが永続メモリを使用できるようにするパッチのダウンロード」をご参照ください。
memkindソースコードを準備します。
memkindは、永続メモリの割り当てと管理に使用されるメモリ管理ツールです。
memkindソースコードをダウンロードします。
sudo wget https://github.com/memkind/memkind/archive/v1.10.1-rc2.tar.gz && \ tar xzvf v1.10.1-rc2.tar.gz && \ mv memkind-1.10.1-rc2/* ./deps/memkind
オプション: Makefileを調整します。
説明glibcのバージョンを表示するには、
ldd -- version
コマンドを実行します。 glibcのバージョンが2.17以降の場合は、次の操作をスキップしてRedisをコンパイルします。cd ./deps/memkind && \ sudo wget https://github.com/memKeyDB/memKeyDB/wiki/files/0001-Use-secure_getenv-when-possible.patch && \ git apply --ignore-whitespace 0001-Use-secure_getenv-when-possible.patch && \ cd ../../
説明パッチをダウンロードできない場合は、
cdを除外するコマンドを実行します。/deps/memkind && \
コマンド。
Redisをコンパイルしてインストールします。
make clean && \ make distclean && \ make MALLOC=memkind -j 4 && \ sudo make install
Redisを起動し、Redisに割り当てられる通常メモリと永続メモリのデフォルト量を設定します。
サンプルコマンド:
説明/home/userを実際のユーザーディレクトリに置き換えます。
次のコマンドを実行して、通常のメモリと永続メモリの比率を推奨値1:4に設定します。
redis-server /home/user/redis-4.0.14/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 4 --hashtable-on-dram yes --daemonize yes --logfile /tmp/redis_8369.log --protected-mode no --bind 0.0.0.0
異なるレギュラーメモリと永続メモリの比率を指定し、特定のレギュラーメモリを他のアプリケーションに割り当てることができます。 たとえば、次のコマンドを実行して、レギュラーメモリと永続メモリの比率を1:16に設定し、2 GiBのレギュラーメモリと32 GiBの永続メモリを含む合計34 GiBのメモリをRedisに割り当てることができます。
redis-server /home/user/redis-4.0.14/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 16 --maxmemory 34G
Ubuntuを実行するインスタンスにRedisをデプロイする
この例では、次の設定が使用されています。
インスタンスタイプ:ecs.re6p-redis.2xlarge
画像: Ubuntu 20.04
Redis: Redis 6.2.5
memkind: memkind 1.10.1-rc2
次の手順の一部では、GitHubの特定のリソースが必要です。 手順を実行する前に、リソースがhttps://github.comからダウンロードされていることを確認してください。 GitHubからリソースをダウンロードできない場合は、リソースがダウンロードされるまで関連するコマンドを繰り返します。
永続メモリ最適化インスタンスを購入します。
詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。 以下の設定に注意してください。
インスタンス: [アーキテクチャ] セクションのx86ドロップダウンリストから [メモリ最適化] を選択し、ecs.re6p-redis.2xlargeインスタンスタイプを選択します。
イメージ: Ubuntu 20.04 64ビットを選択します。
インスタンスにログインします。
詳細については、「接続方法の概要」をご参照ください。
コンパイル環境を準備します。
export MEMKIND_DAX_KMEM_NODES=1 && \ sudo apt update && \ sudo apt -y install git && \ sudo apt install -y libnuma-dev && \ sudo apt install -y numactl
Redis 6.2.5ソースコードを準備します。
sudo wget https://download.redis.io/releases/redis-6.2.5.tar.gz && \ sudo wget https://github.com/redis/redis/compare/6.2.5...tieredmemdb:6.2.5-devel.diff -O redis_6.2.5_diff_tieredmemdb.patch && \ tar xzf redis-6.2.5.tar.gz && \ cd redis-6.2.5 && \ git apply --ignore-whitespace ../redis_6.2.5_diff_tieredmemdb.patch
説明パッチは永続メモリを有効にするために使用され、Redisのバージョンによって異なります。 詳細については、このトピックの「Redisが永続メモリを使用できるようにするパッチのダウンロード」をご参照ください。
memkindソースコードを準備します。
memkindは、永続メモリの割り当てと管理に使用されるメモリ管理ツールです。
memkindソースコードをダウンロードします。
sudo wget https://github.com/memkind/memkind/archive/v1.10.1-rc2.tar.gz && \ tar xzvf v1.10.1-rc2.tar.gz && \ mv memkind-1.10.1-rc2/* ./deps/memkind/
Makefileを調整します。
説明glibcのバージョンを表示するには、
ldd -- version
コマンドを実行します。 glibcのバージョンが2.17以降の場合は、次の操作をスキップしてRedisをコンパイルします。cd ./deps/memkind && \ sudo wget --no-check-certificate https://github.com/memKeyDB/memKeyDB/wiki/files/0001-Use-secure_getenv-when-possible.patch && \ git apply --ignore-whitespace 0001-Use-secure_getenv-when-possible.patch && \ cd ../../
説明パッチをダウンロードできない場合は、
cdを除外するコマンドを実行します。/deps/memkind && \
コマンド。
Redisをコンパイルしてインストールします。
make clean && \ make distclean && \ make MALLOC=memkind -j 4 && \ sudo make install
Redisを起動し、Redisに割り当てられる通常メモリと永続メモリのデフォルト量を設定します。
サンプルコマンド:
説明/home/userを実際のユーザーディレクトリに置き換えます。
次のコマンドを実行して、通常のメモリと永続メモリの比率を推奨値1:4に設定します。
redis-server /home/user/redis-6.2.5/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 4 --hashtable-on-dram yes --daemonize yes --logfile /tmp/redis_8369.log --protected-mode no --bind 0.0.0.0
異なるレギュラーメモリと永続メモリの比率を指定し、特定のレギュラーメモリを他のアプリケーションに割り当てることができます。 たとえば、次のコマンドを実行して、レギュラーメモリと永続メモリの比率を1:16に設定し、2 GiBのレギュラーメモリと32 GiBの永続メモリを含む合計34 GiBのメモリをRedisに割り当てることができます。
redis-server /home/user/redis-6.2.5/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 16 --maxmemory 34G
Redisが永続メモリを使用できるようにするパッチをダウンロードする
サンプルコマンドで、ファイル名に対応するダウンロードURLとバージョン番号を置き換えます。 たとえば、次のコマンドを実行して、Redis 6.2.5に適したパッチをダウンロードします。
sudo wget https://github.com/redis/redis/compare/6.2.5...tieredmemdb:6.2.5-devel.diff -O redis_6.2.5_diff_tieredmemdb.patch
次のセクションでは、サポートされているパッチのダウンロードURLを示します。
Redis 6.2
https://github.com/redis/redis/compare/6.2.5...tieredmemdb:6.2.5-devel.diff
Redis 6.0
https://github.com/redis/redis/compare/6.0.9...tieredmemdb:6.0.9-devel.diff
https://github.com/redis/redis/compare/6.0.5...tieredmemdb:6.0.5-devel.diff
https://github.com/redis/redis/compare/6.0.3...tieredmemdb:6.0.3-devel.diff
https://github.com/redis/redis/compare/6.0.0...tieredmemdb:6.0.0-devel.diff
Redis 5.0
Redis 4.0
https://github.com/redis/redis/compare/4.0.14...tieredmemdb:4.0.14-devel.diff
https://github.com/redis/redis/compare/4.0.9...tieredmemdb:4.0.9-devel.diff
https://github.com/redis/redis/compare/4.0.2...tieredmemdb:4.0.2-devel.diff
https://github.com/redis/redis/compare/4.0.0...tieredmemdb:4.0.0-devel.diff
Redis 3.0
https://github.com/redis/redis/compare/3.2.12...tieredmemdb:3.2.diff