Instans ECS yang dioptimalkan untuk memori persisten (tipe instans re6p-redis) memiliki rasio CPU-memori yang tinggi dan dapat menjalankan aplikasi Redis dengan biaya per GiB memori yang lebih rendah. Topik ini menjelaskan cara melakukan deploy Redis pada instans re6p-redis yang menjalankan Alibaba Cloud Linux 2, CentOS, atau Ubuntu.
Cara kerja
Instans re6p-redis mengekspos dua tier memori ke sistem operasi:
| Tier | Karakteristik | Penggunaan Redis |
|---|---|---|
| DRAM | Cepat, kapasitas lebih rendah | Data hot dan tabel hash |
| PMEM | Kapasitas lebih tinggi, biaya per GiB lebih rendah | Cold Data |
Redis mengakses PMEM melalui memkind, sebuah library manajemen memori. Dua flag startup mengontrol perilaku alokasi:
| Flag | Tujuan | Nilai yang direkomendasikan |
|---|---|---|
MEMKIND_DAX_KMEM_NODES=1 | Menetapkan node PMEM | Selalu diatur ke 1 |
--dram-pmem-ratio 1 4 | Mengatur rasio alokasi DRAM terhadap PMEM | 1 4 (1 bagian DRAM : 4 bagian PMEM) |
Flag --hashtable-on-dram yes menyimpan tabel hash Redis di DRAM untuk pencarian yang lebih cepat, terlepas dari pengaturan rasio.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Tipe instans re6p-redis: ecs.re6p-redis.large, ecs.re6p-redis.xlarge, ecs.re6p-redis.2xlarge, ecs.re6p-redis.4xlarge, atau ecs.re6p-redis.13xlarge
Salah satu image berikut: Alibaba Cloud Linux 2, CentOS 7.6 atau versi lebih baru, atau Ubuntu 18.04 atau 20.04
Deploy Redis pada Alibaba Cloud Linux 2 (direkomendasikan)
Alibaba Cloud Linux 2 telah dioptimalkan khusus untuk Redis pada PMEM dan memberikan performa lebih dari 20% lebih baik dibandingkan distribusi Linux komunitas. Image ini menyertakan repositori YUM untuk Redis 6.0.5 dan Redis 3.2.12, sehingga Anda dapat menginstal salah satu versi tersebut hanya dengan satu perintah—tanpa perlu kompilasi.
Konfigurasi contoh:
| Pengaturan | Nilai |
|---|---|
| Tipe instans | ecs.re6p-redis.2xlarge |
| Image | Alibaba Cloud Linux 2.1903 LTS 64-bit |
Buat dan hubungkan ke instans
Buat instance ECS pada tab Custom Launch dengan pengaturan berikut:
Instans: Di bawah menu drop-down arsitektur x86, pilih Memory-optimized, lalu pilih ecs.re6p-redis.2xlarge.
Image: Pilih Alibaba Cloud Linux 2.1903 LTS 64-bit.
Instal Redis
Instal Redis 6.0.5 atau Redis 3.2.12 sesuai kebutuhan Anda.
Redis 6.0.5:
sudo yum install -y alinux-release-experimentals && \ sudo yum install -y redis-6.0.5Redis 3.2.12:
sudo yum install -y alinux-release-experimentals && \ sudo yum install -y redis-3.2.12
Jalankan Redis
Atur MEMKIND_DAX_KMEM_NODES=1 untuk menetapkan node PMEM, lalu jalankan server Redis.
Rasio yang direkomendasikan (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.0Rasio kustom (1:16, total 34 GiB = 2 GiB DRAM + 32 GiB PMEM):
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
Verifikasi Redis sedang berjalan
redis-cli -p 8369 pingOutput yang diharapkan: PONG
Untuk memeriksa versi Redis dan alokasi memori:
redis-cli -p 8369 info server | grep redis_version
redis-cli -p 8369 info memoryDeploy Redis pada CentOS
Untuk CentOS, bangun Redis dari source dan hubungkan dengan memkind untuk mengaktifkan dukungan PMEM.
Konfigurasi contoh:
| Pengaturan | Nilai |
|---|---|
| Tipe instans | ecs.re6p-redis.2xlarge |
| Image | CentOS 7.6 64-bit |
| Versi Redis | Redis 4.0.14 |
| Versi memkind | memkind 1.10.1-rc2 |
Semua paket source dan patch diunduh dari GitHub. Jika pengunduhan gagal, ulangi perintah hingga berhasil.
Buat dan hubungkan ke instans
Buat instance ECS pada tab Custom Launch dengan pengaturan berikut:
Instans: Di bawah menu drop-down arsitektur x86, pilih Memory-optimized, lalu pilih ecs.re6p-redis.2xlarge.
Image: Pilih CentOS 7.6 64-bit.
Siapkan lingkungan build
export MEMKIND_DAX_KMEM_NODES=1 && \
sudo yum -y install numactl-devel.x86_64 && \
sudo yum -y groupinstall 'Development Tools'Unduh dan patch source Redis
Patch tieredmemdb menambahkan dukungan PMEM ke Redis dan spesifik untuk versi tertentu.
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.patchUntuk patch versi Redis lainnya, lihat Patch yang tersedia untuk dukungan PMEM.
Unduh dan konfigurasi memkind
memkind adalah library manajemen memori yang digunakan Redis untuk mengalokasikan PMEM.
Unduh source 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(Opsional) Sesuaikan Makefile untuk versi glibc lama. Jalankan
ldd --versionuntuk memeriksa versi glibc Anda. Jika versinya 2.17 atau lebih baru, lewati langkah ini. Jika glibc lebih lama dari 2.17, terapkan patch berikut:Jika pengunduhan patch gagal, jalankan perintah berikutnya tanpa baris
cd ./deps/memkind && \.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 ../../
Kompilasi dan instal Redis
make clean && \
make distclean && \
make MALLOC=memkind -j 4 && \
sudo make installJalankan Redis
Ganti /home/user dengan path direktori home Anda yang sebenarnya.
Rasio yang direkomendasikan (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.0Rasio kustom (1:16, total 34 GiB = 2 GiB DRAM + 32 GiB PMEM):
redis-server /home/user/redis-4.0.14/redis.conf \ --port 8369 \ --memory-alloc-policy ratio \ --dram-pmem-ratio 1 16 \ --maxmemory 34G
Verifikasi Redis sedang berjalan
redis-cli -p 8369 pingOutput yang diharapkan: PONG
Deploy Redis pada Ubuntu
Untuk Ubuntu, bangun Redis dari source menggunakan proses yang sama seperti pada CentOS, tetapi gunakan apt untuk dependensi.
Konfigurasi contoh:
| Pengaturan | Nilai |
|---|---|
| Tipe instans | ecs.re6p-redis.2xlarge |
| Image | Ubuntu 20.04 64-bit |
| Versi Redis | Redis 6.2.5 |
| Versi memkind | memkind 1.10.1-rc2 |
Semua paket source dan patch diunduh dari GitHub. Jika pengunduhan gagal, ulangi perintah hingga berhasil.
Buat dan hubungkan ke instans
Buat instance ECS pada tab Custom Launch dengan pengaturan berikut:
Instans: Di bawah menu drop-down arsitektur x86, pilih Memory-optimized, lalu pilih ecs.re6p-redis.2xlarge.
Image: Pilih Ubuntu 20.04 64-bit.
Siapkan lingkungan build
export MEMKIND_DAX_KMEM_NODES=1 && \
sudo apt update && \
sudo apt -y install git && \
sudo apt install -y libnuma-dev && \
sudo apt install -y numactlUnduh dan patch source Redis
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.patchUntuk patch versi Redis lainnya, lihat Patch yang tersedia untuk dukungan PMEM.
Unduh dan konfigurasi memkind
Unduh source 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/(Opsional) Sesuaikan Makefile untuk versi glibc lama. Jalankan
ldd --versionuntuk memeriksa versi glibc Anda. Jika versinya 2.17 atau lebih baru, lewati langkah ini. Jika glibc lebih lama dari 2.17, terapkan patch berikut:Jika pengunduhan patch gagal, jalankan perintah berikutnya tanpa baris
cd ./deps/memkind && \.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 ../../
Kompilasi dan instal Redis
make clean && \
make distclean && \
make MALLOC=memkind -j 4 && \
sudo make installJalankan Redis
Ganti /home/user dengan path direktori home Anda yang sebenarnya.
Rasio yang direkomendasikan (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.0Rasio kustom (1:16, total 34 GiB = 2 GiB DRAM + 32 GiB PMEM):
redis-server /home/user/redis-6.2.5/redis.conf \ --port 8369 \ --memory-alloc-policy ratio \ --dram-pmem-ratio 1 16 \ --maxmemory 34G
Verifikasi Redis sedang berjalan
redis-cli -p 8369 pingOutput yang diharapkan: PONG
Patch yang tersedia untuk dukungan PMEM
Semua patch mengikuti pola unduhan yang sama. Ganti nomor versi pada URL dan nama file output:
sudo wget https://github.com/redis/redis/compare/<version>...tieredmemdb:<version>-devel.diff \
-O redis_<version>_diff_tieredmemdb.patchPatch yang tersedia berdasarkan versi Redis:
| Versi Redis | Patch URL |
|---|---|
| 6.2.5 | <https://github.com/redis/redis/compare/6.2.5...tieredmemdb:6.2.5-devel.diff> |
| 6.0.9 | <https://github.com/redis/redis/compare/6.0.9...tieredmemdb:6.0.9-devel.diff> |
| 6.0.5 | <https://github.com/redis/redis/compare/6.0.5...tieredmemdb:6.0.5-devel.diff> |
| 6.0.3 | <https://github.com/redis/redis/compare/6.0.3...tieredmemdb:6.0.3-devel.diff> |
| 6.0.0 | <https://github.com/redis/redis/compare/6.0.0...tieredmemdb:6.0.0-devel.diff> |
| 5.0.9 | <https://github.com/redis/redis/compare/5.0.9...tieredmemdb:5.0.9-devel.diff> |
| 5.0.2 | <https://github.com/redis/redis/compare/5.0.2...tieredmemdb:5.0.2-devel.diff> |
| 5.0.0 | <https://github.com/redis/redis/compare/5.0.0...tieredmemdb:5.0.0-devel.diff> |
| 4.0.14 | <https://github.com/redis/redis/compare/4.0.14...tieredmemdb:4.0.14-devel.diff> |
| 4.0.9 | <https://github.com/redis/redis/compare/4.0.9...tieredmemdb:4.0.9-devel.diff> |
| 4.0.2 | <https://github.com/redis/redis/compare/4.0.2...tieredmemdb:4.0.2-devel.diff> |
| 4.0.0 | <https://github.com/redis/redis/compare/4.0.0...tieredmemdb:4.0.0-devel.diff> |
| 3.2.12 | <https://github.com/redis/redis/compare/3.2.12...tieredmemdb:3.2.diff> |