简介:配备持久内存的实例(例如re7p、r7p、re6p)提供了超大CPU内存配比,Redis应用运行在这类实例上可以大幅度降低单GiB内存的成本。本文以部分操作系统为例,介绍如何在这类实例上快速部署Redis应用。

配备持久内存的实例(例如re7p、r7p、re6p)提供了超大CPU内存配比,Redis应用运行在这类实例上可以大幅度降低单GiB内存的成本。本文以部分操作系统为例,介绍如何在这类实例上快速部署Redis应用。

一、背景信息

本文中快速部署Redis应用的步骤适用于特定的实例规格和镜像版本,要求如下:

  • 实例规格:
  • re7p:ecs.re7p.large、ecs.re7p.xlarge、ecs.re7p.2xlarge、ecs.re7p.16large、ecs.re7p.32xlarge
  • r7p:ecs.r7p.large、ecs.r7p.xlarge、ecs.r7p.2xlarge、ecs.r7p.16large、ecs.r7p.32xlarge
  • re6p:ecs.re6p-redis.large、ecs.re6p-redis.xlarge、ecs.re6p-redis.2xlarge、ecs.re6p-redis.4xlarge、ecs.re6p-redis.13xlarge

    说明 如需使用ecs.re6p-redis.4xlarge,可以点击链接提交工单,获得相关帮助。
  • 镜像:
  • Alibaba Cloud Linux 2
  • CentOS 7.6及更高版本
  • Ubuntu 18.10及更高版本
  • SUSE Linux 12 SP4及更高版本

二、在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源,执行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位。
  1. 登录实例。具体操作,请参见连接方式概述
  2. 根据需要部署Redis 6.0.5或Redis 3.2.12。
  • 部署Redis 6.0.5:
yum install -y alinux-release-experimentals && \
yum install -y redis-6.0.5
  • 部署Redis 3.2.12:
yum install -y alinux-release-experimentals && \
yum install -y redis-3.2.12
  1. 启动Redis应用(配置默认使用的普通内存和持久内存容量)。示例命令如下:
  • 普通内存与持久内存的推荐配比为1:4。
export MEMKIND_DAX_KMEM_NODES=1 && \
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 && \
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

说明 本步骤中涉及从GitHub(https://github.com/)相关地址下载资源时,请确保下载成功后再进行后续操作。如果下载失败,请重复执行相关命令直至下载成功。

  1. 购买持久内存实例。具体操作,请参见使用向导创建实例。请注意以下配置:
  • 实例:单击x86计算架构下的内存型分类,并选中名称为ecs.re6p-redis.2xlarge的实例规格。
  • 镜像:选择CentOS 7.6 64位。
  1. 登录实例。具体操作,请参见连接方式概述
  2. 准备编译环境。
export MEMKIND_DAX_KMEM_NODES=1 && \
yum -y install numactl-devel.x86_64 && \
yum -y groupinstall 'Development Tools'
  1. 准备Redis 4.0.14源码。
wget https://github.com/redis-io/redis/archive/4.0.14.tar.gz && \
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
  1. 说明 patch用于使能持久内存,不同Redis版本使用的patch不同。更多信息,请参见下载使能持久内存的patch
  2. 准备memkind源码。memkind是内存管理工具,用于分配管理持久内存。
  1. 下载memkind源码。
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
  1. 可选:调整makefile。

    说明 您可以先运行ldd --version查看glibc版本。如果glibc版本等于或高于2.17,可以跳过以下操作直接开始编译Redis。
cd ./deps/memkind && \
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 /root/redis-4.0.14
  1. 说明 如果patch下载失败,再执行命令时无需包括cd ./deps/memkind && \
  1. 编译安装Redis。
make clean && \
make distclean && \
make MALLOC=memkind -j 4 && \
make install
  1. 启动Redis应用(配置默认使用的普通内存和持久内存容量)。示例命令如下:
  • 普通内存与持久内存的推荐配比为1:4。
redis-server /root/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 /root/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/)相关地址下载资源时,请确保下载成功后再进行后续操作。如果下载失败,请重复执行相关命令直至下载成功。

  1. 购买持久内存实例。具体操作,请参见使用向导创建实例。请注意以下配置:
  • 实例:单击x86计算架构下的内存型分类,并选中名称为ecs.re6p-redis.2xlarge的实例规格。
  • 镜像:选择Ubuntu 20.04 64位。
  1. 登录实例。具体操作,请参见连接方式概述
  2. 准备编译环境。
export MEMKIND_DAX_KMEM_NODES=1 && \
apt update && \
apt -y install git && \
apt install -y libnuma-dev && \
apt install -y numactl
  1. 准备Redis 6.2.5源码。
wget https://download.redis.io/releases/redis-6.2.5.tar.gz && \
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
  1. 说明 patch用于使能持久内存,不同Redis版本使用的patch不同。更多信息,请参见下载使能持久内存的patch
  2. 准备memkind源码。memkind是内存管理工具,用于分配管理持久内存。
  1. 下载memkind源码。
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/
  1. 调整makefile。

    说明 您可以先运行ldd --version查看glibc版本。如果glibc版本等于或高于2.17,可以跳过以下操作直接开始编译Redis。
cd ./deps/memkind && \
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 /root/redis-6.2.5
  1. 说明 如果patch下载失败,再执行命令时无需包括cd ./deps/memkind && \
  1. 编译安装Redis。
make clean && \
make distclean && \
make MALLOC=memkind -j 4 && \
make install
  1. 启动Redis应用(配置默认使用的普通内存和持久内存容量)。示例命令如下:
  • 普通内存与持久内存的推荐配比为1:4。
redis-server /root/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 /root/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的命令如下:

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.0
  • Redis 5.0
  • Redis 4.0
  • Redis 3.0

原文链接

本文为阿里云原创内容,未经允许不得转载。

【实用教程】在配备持久内存的实例上部署Redis应用的更多相关文章

  1. 英特尔内存革新助平安云 Redis 云服务降本增效

    英特尔内存革新助平安云 Redis 云服务降本增效 英特尔 傲腾 数据中心级持久内存的引入,为平安云的降本增效开启了一条新的道路.通过对平安云 Redis 数据库产品的支持,用户能享受到性能优异且价格 ...

  2. 学习笔记之Java程序设计实用教程

    Java程序设计实用教程 by 朱战立 & 沈伟 学习笔记之JAVA多线程(http://www.cnblogs.com/pegasus923/p/3995855.html) 国庆休假前学习了 ...

  3. 蓝牙BLE实用教程

    蓝牙BLE实用教程 Bluetooth BLE 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过 设置 里的修改模板来改变新建文章的内容. 1.蓝牙BLE常见问答 Q: Smart Re ...

  4. js模版引擎handlebars.js实用教程

    js模版引擎handlebars.js实用教程 阅读本文需要了解基本的Handlebars.js概念,本文并不是Handlebars.js基础教程,而是注重于实际应用,为读者阐述使用过程中可能会遇到的 ...

  5. 《Java2 实用教程(第五版)》学习指导

    <Java2 实用教程(第五版)> 第1章Java入门 主要内容:P1 1.1Java的地位:P1 1.2Java的特点:P2 1.3安装JDK:P5 1.4Java程序的开发步骤:P8 ...

  6. freeRTOS中文实用教程6--错误排查

    1.前言 本章主要是为刚接触FreeRTOS 的用户指出那些新手通常容易遇到的问题.这里把最主要的篇幅放在栈溢出以及栈溢出侦测上 2.printf-stdarg.c 当调用标准C 库函数时,栈空间使用 ...

  7. freeRTOS中文实用教程5--内存管理

    1.前言 不同的嵌入式系统具有不同的内存配置和时间要求.所以单一的内存分配算法只可能适合部分应用程序. FreeRTOS 将内存分配作为可移植层面(相对于基本的内核代码部分而言).这使得不同的应用程序 ...

  8. freeRTOS中文实用教程4--资源管理互斥

    1.前言 访问一个被多任务共享,或是被任务与中断共享的资源时,需要采用”互斥”技术以保证数据在任何时候都保持一致性.这样做的目的是要确保任务从开始访问资源就具有排它性,直至这个资源又恢复到完整状态 F ...

  9. freeRTOS中文实用教程4--资源管理概述

    1.前言 多任务系统中存在一种潜在的风险.当一个任务在使用某个资源的过程中,即还没有完全结束对资源的访问时,便被切出运行态,使得资源处于非一致,不完整的状态 2.并发抢占导致错误的场景 (1)访问外设 ...

  10. freeRTOS中文实用教程1--任务

    1.前言 FreeRTOS是小型多任务嵌入式操作系统,硬实时性.本章主要讲述任务相关特性及调度相关的知识. 2. 任务的总体特点 任务的状态 (1)任务有两个状态,运行态和非运行态 (2)任务由非运行 ...

随机推荐

  1. CSS(精灵图、字体图标、三角、用户界面样式、vertical-align、溢出省略号、常用布局技巧、初始化 )

    一. 精灵图(重点) 1.1 为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速 ...

  2. TP6框架--EasyAdmin学习笔记:excel的数据,图片处理

    这是我写的学习EasyAdmin的第七章,这一章我给大家分享下如何处理excel中的数据,图片 原理就是使用easyadmin中封装好的phpexcel,来进行数据的导入,view层我们需要一个用了导 ...

  3. 【VMware ESXi】HP Z4G4 Workstation安装ESXi停留在Shutting down firmware services...的解决办法。

    家里有台HP Z4G4 Workstation工作站,底层安装运行了VMware的ESXi Hypervisor,作为Homelab的All in one环境. 之前安装ESXi 8的时候有个问题,在 ...

  4. ATSS : 目标检测的自适应正负anchor选择,很扎实的trick | CVPR 2020

    论文指出one-stage anchor-based和center-based anchor-free检测算法间的差异主要来自于正负样本的选择,基于此提出ATSS(Adaptive Training ...

  5. KingabseES 表空间限额子句(QUOTA Clause)

    概述 在Oracle数据库中,DBA权限用户,可以为其他用户,创建对象,即使该用户没有任何权限.当DBA用户在该用户的表,插入数据时,提示 超出表空间的空间限额 .这就需要设置该用户的表空间的空间限额 ...

  6. KingbaseES V8R6运维案例之---普通表toast表故障修复

    案例说明: 数据库在日常的维护过程中,在执行表查询(select),如下图所示,出现"could not read block 0 in file "base/16385/1640 ...

  7. 电影数据集【可供机器学习附爬虫源码】(豆瓣、爱奇艺、IMDB、腾讯视频等)

    电影数据集(豆瓣.爱奇艺.IMDB.腾讯视频.搜狐.1905) 爬虫爬取豆瓣.爱奇艺.IMDB.腾讯视频.搜狐.1905网,电影数据. 获取方式:微信搜索关注[靠谱杨阅读人生]回复[电影]. 整理不易 ...

  8. 下载标准国民经济行业分类与代码GB/T 4754-2011,存入mysql数据库

    戳链接下载:https://download.csdn.net/download/weixin_45556024/34913490 或关注公众号[靠谱杨阅读人生]回复[行业]获取. 整理不易,资源fu ...

  9. [Android开发学iOS系列] 删除storyboard需要几步

    删除iOS项目中的storyboard 删除项目中的storyboard, (变成一个纯代码的iOS UIKit项目), 需要几步? 找到storyboard, 删掉它. 直接用ViewControl ...

  10. #结论#洛谷 3199 [HNOI2009]最小圈

    题目 求有向图最小平均权值回路. \(n\leq 3*10^3,m\leq 10^4\) 分析 设 \(f_k(x)\) 表示从点 \(x\) 出发恰好走 \(k\) 条边的最短路, 那么答案就是 \ ...