Seri Redis của chúng ta gồm những phần sau:
1 2 3 4 5 6 7 8 9 10 11 12 | Phần 1: Cài đặt redis cơ bản + Turning redis. Phần 2: Lệnh quản trị redis cơ bản Phần 3: Bảo mật cho redis. (redis security) Phần 4: Access List Redis (tính năng mới từ bản 6) Phần 5: Các mô hình Redis replication, Ưu và nhược điểm Phần 6: Redis Master-Salve sử dụng ACL Phần 7: Redis Sentinel sử dụng ACL Phần 8: Cài đặt Redis Cluster + kiểm tra cluster hoạt động. Phần 9: Thêm và xóa node redis cluster, di chuyển data đơn sang cluster và ngược lại Phần ??: Redis RDB và AOF nên chọn cái nào? Continue... |
Phần 8: Cài đặt Redis Cluster + kiểm tra cluster.
8.1 Question & Answer:
1 2 3 4 | Q1: Redis cluster chia dữ liệu như nào? A1: Toàn bộ KEY của redis sẽ được chia là 16384 slot. VD ta có 3 node master (16384 / 3 =~ 5461 slot). |
8.2. Mô hình cluster hay gặp
6 node cluster – 3 server (production)
1 2 3 4 5 6 | Mô tả - 1 server chết > OK. Vẫn còn (33%_node2) + (33%_node3) + (33% Slave của server_1 đặt trên server 3) = Tổng 100% data - 2 server chết > FAIL . Không thể load đc 100% data mà chỉ có 66% có thể gọi ra đc. - 3 server chết > FAIL - 3 slave ta có thể đặt trên 3 server khác, trường hợp 3 master chết, ta vẫn có đủ 100% data sharding. |
6 node cluster – 1 server (lab/test env)
8.3 Cài đặt
Bài này tôi sẽ cài cả 6 redis trên 1 server. Bao gồm 3 master (33% dữ liệu * 3) và 3 slave dùng để backup cho master.
- 7001(M)-7002(S)
- 7003(M)-7004(S)
- 7005(M)-7006(S)
Bước 1: Cài đặt redis basic
1 2 3 4 5 6 7 8 9 10 11 12 | Truy cập https://redis.io/download/ tải bản mới nhất (2023-01-18) # yum install gcc wget systemd-devel -y # mkdir -p /opt/setup # cd /opt/setup # wget https://github.com/redis/redis/archive/7.0.8.tar.gz # tar -xvzf 7.0.8.tar.gz # cd redis-7.0.8 # make Khi make install, các file chạy bin execute sẽ được copy sang thư mục /usr/local/bin/ # make install |
Bước 2: Chuẩn bị config cho Cluster
2.1 Chuẩn bị 6 file config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # adduser redis # vim /opt/redis_cluster_config.sh CUR_DIR="/opt" cd $CUR_DIR mkdir -p ${CUR_DIR}/redis-cluster cd ${CUR_DIR}/redis-cluster for port in 7001 7002 7003 7004 7005 7006; do mkdir -p ${CUR_DIR}/redis-cluster/${port} cat > ${CUR_DIR}/redis-cluster/${port}/redis_${port}.conf <<EOF port $port appendonly no cluster-enabled yes cluster-node-timeout 5000 dir ${CUR_DIR}/redis-cluster/${port}/ cluster-config-file ${CUR_DIR}/redis-cluster/${port}/nodes_${port}.conf logfile ${CUR_DIR}/redis-cluster/${port}/nodes_${port}.log requirepass "komatkhau" masterauth "komatkhau" EOF chown -R redis.redis /opt/redis-cluster done Thực hiện chạy # bash /opt/redis_cluster_config.sh |
2.2 Chuẩn bị 6 file systemd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | # vim /opt/redis_cluster_systemd.sh CUR_DIR="/opt" cd $CUR_DIR for port in 7001 7002 7003 7004 7005 7006; do cat > /etc/systemd/system/redis_${port}.service <<EOF [Unit] Description=Redis persistent key-value database After=network.target After=network-online.target Wants=network-online.target [Service] ExecStart=$(which redis-server) ${CUR_DIR}/redis-cluster/${port}/redis_${port}.conf --supervised systemd ExecStop=/bin/redis-cli -h 127.0.0.1 -p ${port} -a komatkhau shutdown Type=notify User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 LimitNOFILE=65535 [Install] WantedBy=multi-user.target EOF done Thực hiện chạy # bash /opt/redis_cluster_systemd.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | systemctl daemon-reload systemctl restart redis_7001 systemctl restart redis_7002 systemctl restart redis_7003 systemctl restart redis_7004 systemctl restart redis_7005 systemctl restart redis_7006 [root@localhost redis-7.0.8]# ps aux | grep redis redis 6230 0.0 0.4 199272 9300 ? Ssl 02:31 0:00 /usr/local/bin/redis-server *:7001 [cluster] redis 6241 0.1 0.4 196200 9276 ? Ssl 02:31 0:00 /usr/local/bin/redis-server *:7002 [cluster] redis 6252 0.1 0.4 196200 9276 ? Ssl 02:31 0:00 /usr/local/bin/redis-server *:7003 [cluster] redis 6263 0.5 0.4 196200 9276 ? Ssl 02:31 0:00 /usr/local/bin/redis-server *:7004 [cluster] redis 6274 0.5 0.4 196200 9276 ? Ssl 02:31 0:00 /usr/local/bin/redis-server *:7005 [cluster] redis 6285 0.5 0.4 196200 9272 ? Ssl 02:31 0:00 /usr/local/bin/redis-server *:7006 [cluster] |
Bước 3: Join 6 node vào cluster
1 2 3 4 5 | Lệnh join 6 node vào cluster. 3 node đầu sẽ là Master, 3 node tiếp theo sẽ là slave # redis-cli -a komatkhau --cluster create 127.0.0.1:7001 127.0.0.1:7003 127.0.0.1:7005 127.0.0.1:7002 127.0.0.1:7004 127.0.0.1:7006 --cluster-replicas 1 (Ví dụ ta cài trên 3 server 88.11-22-33, tương ứng với lệnh mới như sau redis-cli --cluster create 192.168.88.11:7001 192.168.88.22:7003 192.168.88.33:7005 192.168.88.11:7002 192.168.88.22:7004 192.168.88.33:7006 --cluster-replicas 1 |
8.4 Các lệnh kiểm tra cluster
Note: Option -c luôn phải có khi chạy trong cluster.
Lệnh 1: Kiểm tra nodes
1 2 | redis-cli -a komatkhau -c -h 127.0.0.1 -p 7001 CLUSTER NODES |
Ta để ý trên ảnh, 1-3-5 là master, 2-4-6 là slave. Ngoài ra đặc biệt quan tâm đến số SLOTS của redis
Tất cả mọi redis cluster sẽ chia làm 16384 slot. Mỗi slot được chia đều cho cả 3 node (chia bánh, xếp bài)
- 0 đến 5460 cho master1
- 5461 đến 10922 cho master2
- 10923 đến 16383 cho master 3
Lệnh 2: Kiểm tra cluster/ số slot /số keys toàn cụm
1 2 | redis-cli -a komatkhau --cluster check 127.0.0.1:7001 |
Lệnh 3: Kiểm tra write/read của cluster
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | redis-cli -a komatkhau -c -h 127.0.0.1 -p 7001 SET TEST_KEY VALUE_123 redis-cli -a komatkhau -c -h 127.0.0.1 -p 7002 GET TEST_KEY redis-cli -a komatkhau -c -h 127.0.0.1 -p 7003 GET TEST_KEY redis-cli -a komatkhau -c -h 127.0.0.1 -p 7004 GET TEST_KEY redis-cli -a komatkhau -c -h 127.0.0.1 -p 7005 GET TEST_KEY redis-cli -a komatkhau -c -h 127.0.0.1 -p 7006 GET TEST_KEY Ta có 1 cách khác để kiểm tra GET key [root@localhost opt]# redis-cli -a komatkhau -c -h 127.0.0.1 -p 7002 127.0.0.1:7002> GET TEST_KEY -> Redirected to slot [14190] located at 127.0.0.1:7005 "VALUE_123" Chú ý đến đoạn redirect, tức là khi SET ở 7001, nhưng thực chất data redirect write ở node 5005. Nên khi đọc, redis hiển thị sang 7005 đọc Redirected to slot [14190] located at 127.0.0.1:7005 |
Lệnh 4: Hoán đổi Slave thành Master trong cluster
Ta vào 1 node slave, sau đó chạy lệnh
1 2 | redis-cli -a komatkhau -c -h 127.0.0.1 -p 7002 > cluster failover |