配備持久記憶體的執行個體(例如re6p)提供了超大CPU記憶體配比,Redis應用運行在這類執行個體上可以大幅度降低單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、Ubuntu 20.04
在Alibaba Cloud Linux 2中部署Redis應用
Alibaba Cloud Linux 2針對Redis應用進行了專項調優,相比社區版作業系統,Redis應用整體效能提升20%以上。
Alibaba Cloud Linux 2內建Redis 6.0.5和Redis 3.2.12的yum源,執行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應用(配置預設使用的普通記憶體和持久記憶體容量)。
樣本命令如下:
普通記憶體與持久記憶體的推薦配比為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)。
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/)相關地址下載資源時,請確保下載成功後再進行後續操作。如果下載失敗,請重複執行相關命令直至下載成功。
購買持久記憶體執行個體。
具體操作,請參見自訂購買執行個體。請注意以下配置:
執行個體:單擊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
說明patch用於使能持久記憶體,不同Redis版本使用的patch不同。更多資訊,請參見下載使能持久記憶體的patch。
準備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 ../../
說明如果patch下載失敗,再執行命令時無需包括
cd ./deps/memkind && \
。
編譯安裝Redis。
make clean && \ make distclean && \ make MALLOC=memkind -j 4 && \ sudo make install
啟動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-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/)相關地址下載資源時,請確保下載成功後再進行後續操作。如果下載失敗,請重複執行相關命令直至下載成功。
購買持久記憶體執行個體。
具體操作,請參見自訂購買執行個體。請注意以下配置:
執行個體:單擊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
說明patch用於使能持久記憶體,不同Redis版本使用的patch不同。更多資訊,請參見下載使能持久記憶體的patch。
準備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 ../../
說明如果patch下載失敗,再執行命令時無需包括
cd ./deps/memkind && \
。
編譯安裝Redis。
make clean && \ make distclean && \ make MALLOC=memkind -j 4 && \ sudo make install
啟動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-server /home/user/redis-6.2.5/redis.conf --port 8369 --memory-alloc-policy ratio --dram-pmem-ratio 1 16 --maxmemory 34G
下載使能持久記憶體的patch
替換樣本命令中的下載地址以及檔案名稱中對應的版本號碼即可,例如下載Redis 6.2.5適用的patch的命令如下:
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
目前支援的patch的下載地址如下所示:
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