永続メモリ最適化 Elastic Compute Service (ECS) インスタンス ( re6p-redis インスタンスなど) は、CPU とメモリの比率が高く、メモリ 1 GiB あたりのコストを削減して Redis アプリケーションを実行できます。このトピックでは、永続メモリ最適化インスタンスに 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 ビットを選択します。
インスタンスにログオンします。
詳細については、「ECS インスタンスに接続する方法」をご参照ください。
ビジネス要件に基づいて、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 に設定し、合計 34 GiB のメモリ (標準メモリ 2 GiB と永続メモリ 32 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
イメージ: CentOS 7.6
Redis: Redis 4.0.14
memkind: memkind 1.10.1-rc2
以下の手順を実行する前に、https://github.com/ から必要なリソースをダウンロードしてください。 GitHub からリソースをダウンロードできない場合は、リソースがダウンロードされるまで関連するコマンドを繰り返してください。
永続メモリ最適化インスタンスを購入します。
詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。次の構成に注意してください。
[インスタンス]: [アーキテクチャ] セクションの [x86] ドロップダウンリストから [メモリ最適化] を選択し、ecs.re6p-redis.2xlarge インスタンスタイプを選択します。
[イメージ]: CentOS 7.6 64 ビットを選択します。
インスタンスにログオンします。
詳細については、「ECS インスタンスに接続する方法」をご参照ください。
コンパイル環境を準備します。
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 を調整します。
説明ldd --version
コマンドを実行して、glibc のバージョンを表示できます。 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 に設定し、合計 34 GiB のメモリ (標準メモリ 2 GiB と永続メモリ 32 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
以下の手順を実行する前に、https://github.com/ から必要なリソースをダウンロードしてください。 GitHub からリソースをダウンロードできない場合は、リソースがダウンロードされるまで関連するコマンドを繰り返してください。
永続メモリ最適化インスタンスを購入します。
詳細については、「カスタム起動タブでインスタンスを作成する」をご参照ください。次の構成に注意してください。
[インスタンス]: [アーキテクチャ] セクションの [x86] ドロップダウンリストから [メモリ最適化] を選択し、ecs.re6p-redis.2xlarge インスタンスタイプを選択します。
[イメージ]: Ubuntu 20.04 64 ビットを選択します。
インスタンスにログオンします。
詳細については、「ECS インスタンスに接続する方法」をご参照ください。
コンパイル環境を準備します。
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 を調整します。
説明ldd --version
コマンドを実行して、glibc のバージョンを表示できます。 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 に設定し、合計 34 GiB のメモリ (標準メモリ 2 GiB と永続メモリ 32 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