全部產品
Search
文件中心

Elastic Compute Service:在配備持久記憶體的執行個體上安裝Redis應用

更新時間:Jun 19, 2024

配備持久記憶體的執行個體(例如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位

  1. 購買持久記憶體執行個體。

    具體操作,請參見自訂購買執行個體。請注意以下配置:

    • 執行個體:單擊x86計算架構下的記憶體型分類,並選中名稱為ecs.re6p-redis.2xlarge的執行個體規格。

    • 鏡像:選擇Alibaba Cloud Linux 2.1903 LTS 64位。

  2. 登入執行個體。

    具體操作,請參見串連方式概述

  3. 根據需要部署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
  4. 啟動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/)相關地址下載資源時,請確保下載成功後再進行後續操作。如果下載失敗,請重複執行相關命令直至下載成功。

  1. 購買持久記憶體執行個體。

    具體操作,請參見自訂購買執行個體。請注意以下配置:

    • 執行個體:單擊x86計算架構下的記憶體型分類,並選中名稱為ecs.re6p-redis.2xlarge的執行個體規格。

    • 鏡像:選擇CentOS 7.6 64位。

  2. 登入執行個體。

    具體操作,請參見串連方式概述

  3. 準備編譯環境。

    export MEMKIND_DAX_KMEM_NODES=1 && \
    sudo yum -y install numactl-devel.x86_64 && \
    sudo yum -y groupinstall 'Development Tools'
  4. 準備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

  5. 準備memkind源碼。

    memkind是記憶體管理工具,用於分配管理持久記憶體。

    1. 下載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
    2. 可選:調整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 && \

  6. 編譯安裝Redis。

    make clean && \
    make distclean && \
    make MALLOC=memkind -j 4 && \
    sudo make install
  7. 啟動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/)相關地址下載資源時,請確保下載成功後再進行後續操作。如果下載失敗,請重複執行相關命令直至下載成功。

  1. 購買持久記憶體執行個體。

    具體操作,請參見自訂購買執行個體。請注意以下配置:

    • 執行個體:單擊x86計算架構下的記憶體型分類,並選中名稱為ecs.re6p-redis.2xlarge的執行個體規格。

    • 鏡像:選擇Ubuntu 20.04 64位。

  2. 登入執行個體。

    具體操作,請參見串連方式概述

  3. 準備編譯環境。

    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
  4. 準備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

  5. 準備memkind源碼。

    memkind是記憶體管理工具,用於分配管理持久記憶體。

    1. 下載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/
    2. 調整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 && \

  6. 編譯安裝Redis。

    make clean && \
    make distclean && \
    make MALLOC=memkind -j 4 && \
    sudo make install
  7. 啟動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的下載地址如下所示: