Redis adalah toko nilai kunci yang sangat terkenal, sangat cepat dan stabil. Namun, ada beberapa situasi di mana kami membutuhkan aplikasi waktu nyata dan meningkatkan aplikasi kami di beberapa momen lalu lintas tinggi.
Di bawah ini saya menempelkan file docker-compose terakhir saya dan menjelaskan beberapa bagian penting. Dalam hal ini, aplikasi saya dibangun di atas NodeJS dengan MariaDb.
version: '3.5'
services:
app:
build:
context: ./
dockerfile: Dockerfile
ports:
- 3000:3000
environment:
REDIS_NODE_1: redis-node-1:6373
REDIS_NODE_2: redis-node-2:6374
REDIS_NODE_3: redis-node-3:6375
REDIS_NODE_4: redis-node-4:6376
REDIS_NODE_5: redis-node-5:6377
REDIS_NODE_6: redis-node-6:6378
volumes:
- '.:/usr/src/app'
- nodemodules:/usr/local/app/node_modules
networks:
app_subnet:
ipv4_address: 172.20.0.10
depends_on:
- db
- redis-cluster
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: feedback
MYSQL_DATABASE: feedback
MYSQL_USER: feedback
MYSQL_PASSWORD: feedback
volumes:
- db-data:/var/lib/mysql
ports:
- 3306:3306
networks:
app_subnet:
ipv4_address: 172.20.0.20
redis-cluster:
image: 'redis:6.0-alpine'
command: redis-cli --cluster create 172.20.0.31:6373 172.20.0.32:6374 172.20.0.33:6375 172.20.0.34:6376 172.20.0.35:6377 172.20.0.36:6378 --cluster-replicas 1 --cluster-yes
networks:
app_subnet:
ipv4_address: 172.20.0.30
depends_on:
- redis-node-1
- redis-node-2
- redis-node-3
- redis-node-4
- redis-node-5
- redis-node-6
redis-node-1:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6373:6373'
volumes:
- redis-node-1-data:/var/lib/redis
- ./docker/redis-node-1.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.31
redis-node-2:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6374:6374'
volumes:
- redis-node-2-data:/var/lib/redis
- ./docker/redis-node-2.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.32
redis-node-3:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6375:6375'
volumes:
- redis-node-3-data:/var/lib/redis
- ./docker/redis-node-3.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.33
redis-node-4:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6376:6376'
volumes:
- redis-node-4-data:/var/lib/redis
- ./docker/redis-node-4.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.34
redis-node-5:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6377:6377'
volumes:
- redis-node-5-data:/var/lib/redis
- ./docker/redis-node-5.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.35
redis-node-6:
image: 'redis:6.0-alpine'
command: redis-server /usr/local/etc/redis/redis.conf
ports:
- '6378:6378'
volumes:
- redis-node-6-data:/var/lib/redis
- ./docker/redis-node-6.conf:/usr/local/etc/redis/redis.conf
networks:
app_subnet:
ipv4_address: 172.20.0.36
volumes:
db-data:
redis-node-1-data:
redis-node-2-data:
redis-node-3-data:
redis-node-4-data:
redis-node-5-data:
redis-node-6-data:
nodemodules:
networks:
app_subnet:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
IP statis diperlukan karena redis-cluster tidak berfungsi dengan domain. Dalam hal ini, saya harus membuat jaringan subnet buruh pelabuhan untuk membuat semua redis node bersama-sama dalam jaringan yang sama
Selain itu, saya harus mengatur port untuk setiap node redis untuk menghindari tabrakan port di dalam jaringan buruh pelabuhan.
Selain itu, port yang sama yang ditentukan pada portsargumen docker-compose harus sama dengan port yang ditentukan pada redis.conffile
Mari kita lihat redis.conffilenya
port 6373
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
Satu-satunya perbedaan di antara semua redis.conffile adalah nomor port. Perhatikan untuk memastikan nomor port sama di dalam redis.conffile dan portsargumen didocker-compose.yml
Itu membuat data tersedia untuk seluruh cluster dan aplikasi saat kontainer memulai dari awal lagi
Ketika semua redis node sudah habis, saya harus menggabungkan semuanya dalam sebuah cluster. Untuk mencapainya, saya membuat redis-clusterlayanan untuk menjalankan redis-cli clusterperintah.
Ingat, seperti yang saya katakan sebelumnya, redis-cli clusterhanya bekerja dengan IP statis, jadi ketika saya harus memperhatikan nilai IP dan port.
Tujuan dari layanan ini hanya untuk menjalankan redis-cli cluster. Tidak ada masalah service mati saat perintah sudah selesai
Artikel saya fokus pada cluster Redis, jadi saya tidak menjelaskan apa pun tentang layanan NodeJs dan Mariadb.
Namun, jangan ragu untuk meminta saya untuk informasi tentang hal itu. Dengan senang hati akan membantu Anda :)
Referensi:
Hari ini saya melanjutkan Seri Pertanyaan Wawancara Node JS. Seri ini akan didasarkan pada 5 bagian yang mencakup pertanyaan-pertanyaan penting yang diajukan dalam wawancara dari Dasar hingga Mahir Sebelum memulai.
Pada artikel kali ini kita akan mencoba melakukan dockerize aplikasi golang CRUD sederhana dengan database postgreSQL. Mari kita buat aplikasi kita terlebih dahulu.
(Peringatan- Ini Satire, dimaksudkan untuk Menjadi Gleefully Subversive- Jelas bukan untuk anak-anak) Anda pernah melihat ibu dan ayah Anda bersembunyi di dapur dan merokok rokok yang bau itu. Mereka memberi tahu Anda.
Apa yang lama sekarang menjadi baru lagi dan apa yang dulu berkilau berkilau sekarang terasa kusam. Saya tidak berbicara tentang jeans JNCO yang kembali populer di antara anak-anak keren di pusat kota bersama dengan mode akhir 1990-an lainnya.
Dalam lanskap bisnis yang berkembang pesat saat ini, konsep kerja hibrid dan jarak jauh telah mendapatkan momentum yang belum pernah terjadi sebelumnya. Saat perusahaan terus beradaptasi dengan perubahan kebutuhan dan harapan karyawan mereka, para ahli dari berbagai bidang berkumpul untuk membahas manfaat, tantangan, dan masa depan cara kerja transformatif ini.
Saya baru-baru ini berada di Linkedin, jejaring sosial profesional terbesar di dunia, dan menemukan postingan dari desainer lepas yang saya ikuti yang menarik perhatian saya. Mereka semua memposting foto dari pesawat terbang, di pantai dengan laptop mereka, dari kolam renang, dan kantor dengan pemandangan menakjubkan.