{"id":89773,"date":"2025-07-31T22:40:06","date_gmt":"2025-07-31T15:40:06","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=89773"},"modified":"2025-07-31T22:40:09","modified_gmt":"2025-07-31T15:40:09","slug":"redis-sentinel-la-gi","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/","title":{"rendered":"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Redis_Sentinel_la_gi\" >Redis Sentinel l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Cac_thanh_phan_trong_Redis_Sentinel\" >C\u00e1c th\u00e0nh ph\u1ea7n trong Redis Sentinel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Co_che_hoat_dong_cua_Redis_Sentinel\" >C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Redis Sentinel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Cac_tinh_nang_chinh_cua_Redis_Sentinel\" >C\u00e1c t\u00ednh n\u0103ng ch\u00ednh c\u1ee7a Redis Sentinel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Cach_trien_khai_Redis_Sentinel\" >C\u00e1ch tri\u1ec3n khai Redis Sentinel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Uu_diem_va_han_che_cua_Redis_Sentinel\" >\u01afu \u0111i\u1ec3m v\u00e0 h\u1ea1n ch\u1ebf c\u1ee7a Redis Sentinel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Redis_Sentinel_vs_Redis_Cluster\" >Redis Sentinel vs Redis Cluster<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Cac_cau_hoi_pho_bien_ve_Redis_Sentinel\" >C\u00e1c c\u00e2u h\u1ecfi ph\u1ed5 bi\u1ebfn v\u1ec1 Redis Sentinel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#Tong_ket\" >T\u1ed5ng k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n\n<p><strong><em>Trong c\u00e1c h\u1ec7 th\u1ed1ng hi\u1ec7n \u0111\u1ea1i, Redis th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ed1t l\u00f5i \u0111\u1ec3 cache, qu\u1ea3n l\u00fd session, ho\u1eb7c x\u1eed l\u00fd h\u00e0ng \u0111\u1ee3i. Tuy nhi\u00ean, n\u1ebfu ch\u1ec9 tri\u1ec3n khai Redis \u0111\u01a1n l\u1ebb, h\u1ec7 th\u1ed1ng s\u1ebd d\u1ec5 r\u01a1i v\u00e0o t\u00ecnh tr\u1ea1ng \u201csingle point of failure\u201d, ngh\u0129a l\u00e0 ch\u1ec9 c\u1ea7n Redis master g\u1eb7p s\u1ef1 c\u1ed1, to\u00e0n b\u1ed9 \u1ee9ng d\u1ee5ng c\u00f3 th\u1ec3 b\u1ecb gi\u00e1n \u0111o\u1ea1n. \u0110\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 \u0111\u00f3, Redis Sentinel ra \u0111\u1eddi nh\u01b0 m\u1ed9t gi\u1ea3i ph\u00e1p nh\u1eb9, hi\u1ec7u qu\u1ea3 v\u00e0 d\u1ec5 tri\u1ec3n khai gi\u00fap Redis lu\u00f4n duy tr\u00ec t\u00ednh s\u1eb5n s\u00e0ng (high availability).\u00a0<\/em><\/strong><\/p>\n\n\n\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft n\u00e0y \u0111\u1ec3 hi\u1ec3u r\u00f5 h\u01a1n v\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>T\u1ed5ng quan v\u1ec1 Redis Sentinel<\/li>\n\n\n\n<li>C\u00e1ch tri\u1ec3n khai Redis Sentinel<\/li>\n\n\n\n<li>\u01afu \u0111i\u1ec3m v\u00e0 nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a Redis Sentinel<\/li>\n\n\n\n<li>So s\u00e1nh Redis Sentinel v\u1edbi Redis Cluster<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-redis-sentinel-la-gi\"><span class=\"ez-toc-section\" id=\"Redis_Sentinel_la_gi\"><\/span><strong>Redis Sentinel l\u00e0 g\u00ec?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Redis<\/strong> l\u00e0 m\u1ed9t h\u1ec7 th\u1ed1ng c\u01a1 s\u1edf d\u1eef li\u1ec7u in-memory m\u00e3 ngu\u1ed3n m\u1edf, n\u1ed5i ti\u1ebfng v\u1edbi t\u1ed1c \u0111\u1ed9 truy xu\u1ea5t si\u00eau nhanh v\u00e0 kh\u1ea3 n\u0103ng x\u1eed l\u00fd d\u1eef li\u1ec7u theo th\u1eddi gian th\u1ef1c. Nh\u1edd h\u1ed7 tr\u1ee3 \u0111a d\u1ea1ng ki\u1ec3u d\u1eef li\u1ec7u v\u00e0 d\u1ec5 t\u00edch h\u1ee3p, Redis th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong c\u00e1c \u1ee9ng d\u1ee5ng web hi\u1ec7n \u0111\u1ea1i \u0111\u1ec3 cache d\u1eef li\u1ec7u, qu\u1ea3n l\u00fd session, x\u1eed l\u00fd h\u00e0ng \u0111\u1ee3i v\u00e0 nhi\u1ec1u tr\u01b0\u1eddng h\u1ee3p kh\u00e1c.<\/p>\n\n\n\n<p>Tuy nhi\u00ean, khi tri\u1ec3n khai Redis \u1edf m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf, \u0111\u1eb7c bi\u1ec7t l\u00e0 production th\u00ec c\u00f3 m\u1ed9t v\u1ea5n \u0111\u1ec1 l\u1edbn c\u1ea7n quan t\u00e2m l\u00e0 \u0111\u1ed9 s\u1eb5n s\u00e0ng c\u1ee7a h\u1ec7 th\u1ed1ng. N\u1ebfu Redis ch\u1ec9 ch\u1ea1y d\u01b0\u1edbi d\u1ea1ng \u0111\u01a1n l\u1ebb (standalone), khi server \u0111\u00f3 g\u1eb7p s\u1ef1 c\u1ed1, to\u00e0n b\u1ed9 \u1ee9ng d\u1ee5ng ph\u1ee5 thu\u1ed9c v\u00e0o n\u00f3 s\u1ebd ng\u1eebng ho\u1ea1t \u0111\u1ed9ng. \u0110\u1ec3 gi\u1ea3i quy\u1ebft v\u1ea5n \u0111\u1ec1 n\u00e0y, Redis h\u1ed7 tr\u1ee3 c\u01a1 ch\u1ebf replication cho ph\u00e9p t\u1ea1o ra c\u00e1c b\u1ea3n sao (replica) c\u1ee7a d\u1eef li\u1ec7u t\u1eeb node master \u0111\u1ebfn c\u00e1c node slave. V\u00e0 \u0111\u00e2y ch\u00ednh l\u00e0 l\u00fac Redis Sentinel ph\u00e1t huy vai tr\u00f2 c\u1ee7a m\u00ecnh.<\/p>\n\n\n\n<p><strong>Redis Sentinel<\/strong> l\u00e0 m\u1ed9t th\u00e0nh ph\u1ea7n trong h\u1ec7 sinh th\u00e1i Redis, \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 gi\u00e1m s\u00e1t c\u00e1c Redis instance, ph\u00e1t hi\u1ec7n l\u1ed7i v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng (failover) khi node master b\u1ecb s\u1ef1 c\u1ed1. Ngo\u00e0i ra, Sentinel c\u00f2n cung c\u1ea5p th\u00f4ng tin \u0111\u1ecbnh tuy\u1ebfn cho client, gi\u00fap \u1ee9ng d\u1ee5ng lu\u00f4n k\u1ebft n\u1ed1i \u0111\u01b0\u1ee3c v\u1edbi Redis master hi\u1ec7n t\u1ea1i m\u00e0 kh\u00f4ng c\u1ea7n can thi\u1ec7p th\u1ee7 c\u00f4ng.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/redis-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redis l\u00e0 g\u00ec: T\u1ed5ng h\u1ee3p t\u00ednh n\u0103ng h\u1eefu \u00edch nh\u1ea5t c\u1ee7a Redis<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-thanh-ph\u1ea7n-trong-redis-sentinel\"><span class=\"ez-toc-section\" id=\"Cac_thanh_phan_trong_Redis_Sentinel\"><\/span><strong>C\u00e1c th\u00e0nh ph\u1ea7n trong Redis Sentinel<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Redis Sentinel ho\u1ea1t \u0111\u1ed9ng tr\u00ean m\u00f4 h\u00ecnh master-replica (tr\u01b0\u1edbc \u0111\u00e2y g\u1ecdi l\u00e0 master\u2013slave), v\u1edbi m\u1ee5c ti\u00eau ch\u00ednh l\u00e0 \u0111\u1ea3m b\u1ea3o h\u1ec7 th\u1ed1ng Redis lu\u00f4n s\u1eb5n s\u00e0ng ho\u1ea1t \u0111\u1ed9ng k\u1ec3 c\u1ea3 khi x\u1ea3y ra s\u1ef1 c\u1ed1. C\u00e1c th\u00e0nh ph\u1ea7n c\u1ee7a Redis sentinel g\u1ed3m:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Master<\/strong>: l\u00e0 node ch\u00ednh v\u00e0 l\u00e0 n\u01a1i th\u1ef1c hi\u1ec7n c\u00e1c thao t\u00e1c \u0111\u1ecdc v\u00e0 ghi d\u1eef li\u1ec7u. Trong m\u1ed9t h\u1ec7 th\u1ed1ng Redis s\u1eed d\u1ee5ng Sentinel, t\u1ea1i m\u1ed7i th\u1eddi \u0111i\u1ec3m ch\u1ec9 c\u00f3 m\u1ed9t node \u0111\u01b0\u1ee3c \u0111\u00f3ng vai tr\u00f2 master. Sentinel lu\u00f4n theo d\u00f5i tr\u1ea1ng th\u00e1i c\u1ee7a master n\u00e0y. N\u1ebfu master g\u1eb7p s\u1ef1 c\u1ed1 (m\u1ea5t k\u1ebft n\u1ed1i, d\u1eebng ho\u1ea1t \u0111\u1ed9ng&#8230;), Sentinel s\u1ebd t\u1ef1 \u0111\u1ed9ng ch\u1ecdn m\u1ed9t replica \u0111\u1ec3 thay th\u1ebf l\u00e0m master m\u1edbi.<\/li>\n\n\n\n<li><strong>Replica<\/strong>: l\u00e0 c\u00e1c b\u1ea3n sao (slave) c\u1ee7a master, ch\u1ee9a d\u1eef li\u1ec7u \u0111\u01b0\u1ee3c \u0111\u1ed3ng b\u1ed9 t\u1eeb master th\u00f4ng qua c\u01a1 ch\u1ebf replication. Replica c\u00f3 th\u1ec3 ph\u1ee5c v\u1ee5 c\u00e1c thao t\u00e1c \u0111\u1ecdc (read) nh\u1eb1m gi\u1ea3m t\u1ea3i cho master. Khi master g\u1eb7p s\u1ef1 c\u1ed1, m\u1ed9t trong c\u00e1c replica s\u1ebd \u0111\u01b0\u1ee3c Sentinel ch\u1ecdn \u0111\u1ec3 th\u0103ng c\u1ea5p th\u00e0nh master m\u1edbi. S\u1ed1 l\u01b0\u1ee3ng replica c\u00f3 th\u1ec3 t\u1eeb 1 tr\u1edf l\u00ean t\u00f9y theo y\u00eau c\u1ea7u v\u1ec1 \u0111\u1ed9 tin c\u1eady v\u00e0 hi\u1ec7u n\u0103ng c\u1ee7a h\u1ec7 th\u1ed1ng.<\/li>\n\n\n\n<li><strong>Sentinel nodes:<\/strong> l\u00e0 c\u00e1c ti\u1ebfn tr\u00ecnh gi\u00e1m s\u00e1t \u0111\u1ed9c l\u1eadp, c\u00f3 nhi\u1ec7m v\u1ee5 theo d\u00f5i tr\u1ea1ng th\u00e1i c\u1ee7a master v\u00e0 replica. Sentinel kh\u00f4ng l\u01b0u tr\u1eef d\u1eef li\u1ec7u Redis m\u00e0 ch\u1ec9 th\u1ef1c hi\u1ec7n c\u00e1c ch\u1ee9c n\u0103ng gi\u00e1m s\u00e1t, ph\u00e1t hi\u1ec7n l\u1ed7i v\u00e0 \u0111i\u1ec1u ph\u1ed1i qu\u00e1 tr\u00ecnh failover. Ngo\u00e0i ch\u1ee9c n\u0103ng gi\u00e1m s\u00e1t, Sentinel c\u00f2n \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t c\u01a1 ch\u1ebf \u0111\u1ecbnh tuy\u1ebfn \u0111\u1ed9ng (service discovery), ngh\u0129a l\u00e0 c\u00e1c client c\u00f3 th\u1ec3 h\u1ecfi Sentinel \u0111\u1ec3 bi\u1ebft hi\u1ec7n t\u1ea1i Redis master l\u00e0 node n\u00e0o, t\u1eeb \u0111\u00f3 k\u1ebft n\u1ed1i \u0111\u00fang \u0111\u1ecba ch\u1ec9 m\u00e0 kh\u00f4ng c\u1ea7n c\u1ea5u h\u00ecnh l\u1ea1i th\u1ee7 c\u00f4ng m\u1ed7i khi c\u00f3 thay \u0111\u1ed5i.&nbsp;<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"640\" src=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-79-576x640.png\" alt=\"\" class=\"wp-image-89774\" srcset=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-79-576x640.png 576w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-79-270x300.png 270w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-79-180x200.png 180w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-79-768x853.png 768w, https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/image-79.png 720w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center\"><em>M\u1ed1i quan h\u1ec7 gi\u1eefa c\u00e1c th\u00e0nh ph\u1ea7n trong Redis Sentinel. Ngu\u1ed3n: dev.to<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-c\u01a1-ch\u1ebf-ho\u1ea1t-d\u1ed9ng-c\u1ee7a-redis-sentinel\"><span class=\"ez-toc-section\" id=\"Co_che_hoat_dong_cua_Redis_Sentinel\"><\/span><strong>C\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Redis Sentinel<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Sentinel ho\u1ea1t \u0111\u1ed9ng d\u1ef1a tr\u00ean c\u01a1 ch\u1ebf &#8220;\u0111\u1ed3ng thu\u1eadn theo s\u1ed1 \u0111\u00f4ng&#8221; (quorum consensus), ngh\u0129a l\u00e0 ch\u1ec9 khi \u0111a s\u1ed1 Sentinel \u0111\u1ed3ng \u00fd r\u1eb1ng master th\u1ef1c s\u1ef1 \u0111\u00e3 g\u1eb7p s\u1ef1 c\u1ed1 th\u00ec qu\u00e1 tr\u00ecnh failover m\u1edbi \u0111\u01b0\u1ee3c ti\u1ebfn h\u00e0nh. Qua \u0111\u00f3 gi\u00fap ng\u0103n ch\u1eb7n t\u00ecnh hu\u1ed1ng &#8220;split-brain&#8221;, t\u1ee9c l\u00e0 khi hai node c\u00f9ng t\u1ef1 nh\u1eadn m\u00ecnh l\u00e0 master do kh\u00f4ng \u0111\u01b0\u1ee3c ki\u1ec3m so\u00e1t ch\u1eb7t ch\u1ebd. N\u00f3i c\u00e1ch kh\u00e1c, Redis Sentinel \u0111\u00f3ng vai tr\u00f2 nh\u01b0 m\u1ed9t \u201cng\u01b0\u1eddi gi\u00e1m s\u00e1t th\u00f4ng minh\u201d \u0111\u1ea3m b\u1ea3o h\u1ec7 th\u1ed1ng Redis lu\u00f4n duy tr\u00ec \u0111\u01b0\u1ee3c t\u00ednh \u1ed5n \u0111\u1ecbnh v\u00e0 s\u1eb5n s\u00e0ng, k\u1ec3 c\u1ea3 khi c\u00f3 s\u1ef1 c\u1ed1 x\u1ea3y ra.<\/p>\n\n\n\n<p>Qu\u00e1 tr\u00ecnh ho\u1ea1t \u0111\u1ed9ng g\u1ed3m c\u00e1c b\u01b0\u1edbc sau:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Gi\u00e1m s\u00e1t li\u00ean t\u1ee5c:<\/strong> M\u1ed7i Sentinel s\u1ebd g\u1eedi t\u00edn hi\u1ec7u \u201cping\u201d \u0111\u1ecbnh k\u1ef3 \u0111\u1ebfn c\u00e1c Redis node (master v\u00e0 replica) \u0111\u1ec3 ki\u1ec3m tra xem ch\u00fang c\u00f2n s\u1ed1ng kh\u00f4ng. M\u1eb7c \u0111\u1ecbnh, ping \u0111\u01b0\u1ee3c g\u1eedi m\u1ed7i gi\u00e2y v\u00e0 n\u1ebfu node kh\u00f4ng ph\u1ea3n h\u1ed3i sau 30 gi\u00e2y, n\u00f3 s\u1ebd b\u1ecb nghi l\u00e0 l\u1ed7i.<\/li>\n\n\n\n<li><strong>Ph\u00e1t hi\u1ec7n l\u1ed7i:<\/strong> N\u1ebfu m\u1ed9t Sentinel th\u1ea5y master kh\u00f4ng ph\u1ea3n h\u1ed3i trong m\u1ed9t kho\u1ea3ng th\u1eddi gian nh\u1ea5t \u0111\u1ecbnh, n\u00f3 s\u1ebd t\u1ea1m th\u1eddi \u0111\u00e1nh d\u1ea5u node \u0111\u00f3 l\u00e0 &#8220;c\u00f3 v\u1ea5n \u0111\u1ec1&#8221; (<em>subjectively down<\/em>). Tuy nhi\u00ean, \u0111\u1ec3 ch\u1eafc ch\u1eafn, Sentinel s\u1ebd \u201ch\u1ecfi \u00fd ki\u1ebfn\u201d c\u00e1c Sentinel kh\u00e1c.<\/li>\n\n\n\n<li><strong>\u0110\u1ed3ng thu\u1eadn &amp; x\u00e1c nh\u1eadn l\u1ed7i:<\/strong> N\u1ebfu \u0111\u1ee7 s\u1ed1 l\u01b0\u1ee3ng Sentinel \u0111\u1ed3ng \u00fd r\u1eb1ng master \u0111\u00e3 ch\u1ebft (\u0111\u1ea1t <em>quorum<\/em>), h\u1ec7 th\u1ed1ng s\u1ebd x\u00e1c \u0111\u1ecbnh master th\u1eadt s\u1ef1 l\u1ed7i (<em>objectively down<\/em>).<\/li>\n\n\n\n<li><strong>Th\u1ef1c hi\u1ec7n failover:<\/strong> M\u1ed9t Sentinel \u0111\u01b0\u1ee3c ch\u1ecdn l\u00e0m \u201cleader\u201d th\u00f4ng qua thu\u1eadt to\u00e1n \u0111\u1ed3ng thu\u1eadn (d\u1ef1a tr\u00ean Raft) v\u00e0 b\u1eaft \u0111\u1ea7u qu\u00e1 tr\u00ecnh failover: ch\u1ecdn m\u1ed9t replica c\u00f3 \u01b0u ti\u00ean cao nh\u1ea5t v\u00e0 d\u1eef li\u1ec7u m\u1edbi nh\u1ea5t l\u00e0m master m\u1edbi, sau \u0111\u00f3 c\u1eadp nh\u1eadt l\u1ea1i c\u1ea5u h\u00ecnh cho c\u00e1c replica c\u00f2n l\u1ea1i tr\u1ecf v\u1ec1 master m\u1edbi.<\/li>\n\n\n\n<li><strong>C\u1eadp nh\u1eadt cho client:<\/strong> Sau khi chuy\u1ec3n \u0111\u1ed5i xong, Sentinel s\u1ebd th\u00f4ng b\u00e1o \u0111\u1ec3 client bi\u1ebft \u0111\u1ecba ch\u1ec9 Redis master m\u1edbi, gi\u00fap \u1ee9ng d\u1ee5ng ti\u1ebfp t\u1ee5c ho\u1ea1t \u0111\u1ed9ng m\u00e0 kh\u00f4ng b\u1ecb gi\u00e1n \u0111o\u1ea1n.<\/li>\n<\/ol>\n\n\n\n<p>\u0110\u1ec3 d\u1ec5 h\u00ecnh dung h\u01a1n, h\u00e3y t\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n c\u00f3 m\u1ed9t Redis master v\u00e0 hai b\u1ea3n sao (replica). Ba \u201cng\u01b0\u1eddi g\u00e1c c\u1ed5ng\u201d l\u00e0 c\u00e1c Redis Sentinel s\u1ebd li\u00ean t\u1ee5c theo d\u00f5i t\u00ecnh tr\u1ea1ng Redis. N\u1ebfu Redis master ng\u1eebng ho\u1ea1t \u0111\u1ed9ng v\u00e0 Sentinel nh\u1eadn th\u1ea5y \u0111i\u1ec1u \u0111\u00f3, ch\u00fang nhanh ch\u00f3ng h\u1ed9i \u00fd v\u1edbi nhau (d\u1ef1a tr\u00ean s\u1ed1 l\u01b0\u1ee3ng \u0111\u1ee7 g\u1ecdi l\u00e0 <strong>quorum<\/strong>) v\u00e0 b\u1ea7u ch\u1ecdn m\u1ed9t replica m\u1edbi l\u00ean l\u00e0m master. To\u00e0n b\u1ed9 vi\u1ec7c n\u00e0y x\u1ea3y ra l\u00e0 t\u1ef1 \u0111\u1ed9ng v\u00e0 kh\u00f4ng c\u1ea7n con ng\u01b0\u1eddi can thi\u1ec7p.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-tinh-nang-chinh-c\u1ee7a-redis-sentinel\"><span class=\"ez-toc-section\" id=\"Cac_tinh_nang_chinh_cua_Redis_Sentinel\"><\/span><strong>C\u00e1c t\u00ednh n\u0103ng ch\u00ednh c\u1ee7a Redis Sentinel<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gi\u00e1m s\u00e1t (Monitoring):<\/strong> Sentinel li\u00ean t\u1ee5c theo d\u00f5i v\u00e0 ki\u1ec3m tra xem Redis master v\u00e0 replica c\u00f3 \u0111ang ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng hay kh\u00f4ng b\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng c\u00e1c t\u00edn hi\u1ec7u ping \u0111\u1ecbnh k\u1ef3 \u0111\u1ec3 ph\u00e1t hi\u1ec7n s\u1ef1 c\u1ed1 k\u1ecbp th\u1eddi.<\/li>\n\n\n\n<li><strong>Th\u00f4ng b\u00e1o (Notification): <\/strong>Khi ph\u00e1t hi\u1ec7n c\u00f3 v\u1ea5n \u0111\u1ec1 (v\u00ed d\u1ee5 nh\u01b0 Redis master kh\u00f4ng ph\u1ea3n h\u1ed3i), Sentinel c\u00f3 th\u1ec3 g\u1eedi th\u00f4ng b\u00e1o t\u1edbi qu\u1ea3n tr\u1ecb vi\u00ean h\u1ec7 th\u1ed1ng ho\u1eb7c c\u00e1c ch\u01b0\u01a1ng tr\u00ecnh b\u00ean ngo\u00e0i th\u00f4ng qua API. Nh\u1edd \u0111\u00f3, ta lu\u00f4n bi\u1ebft khi n\u00e0o Redis g\u1eb7p s\u1ef1 c\u1ed1 \u0111\u1ec3 k\u1ecbp th\u1eddi x\u1eed l\u00fd.<\/li>\n\n\n\n<li><strong>T\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng (Automatic Failover):<\/strong> N\u1ebfu master b\u1ecb l\u1ed7i, Sentinel s\u1ebd k\u00edch ho\u1ea1t qu\u00e1 tr\u00ecnh \u201cfailover\u201d, ngh\u0129a l\u00e0 ch\u1ecdn m\u1ed9t Redis replica c\u00f2n s\u1ed1ng \u0111\u1ec3 thay th\u1ebf l\u00e0m master m\u1edbi. C\u00e1c replica c\u00f2n l\u1ea1i s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh l\u1ea1i \u0111\u1ec3 k\u1ebft n\u1ed1i v\u1edbi master m\u1edbi v\u00e0 c\u00e1c \u1ee9ng d\u1ee5ng s\u1eed d\u1ee5ng Redis c\u0169ng s\u1ebd \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt \u0111\u1ecba ch\u1ec9 m\u1edbi \u0111\u1ec3 k\u1ebft n\u1ed1i l\u1ea1i \u0111\u00fang n\u01a1i. Qu\u00e1 tr\u00ecnh n\u00e0y ch\u1ec9 di\u1ec5n ra khi c\u00f3 s\u1ef1 \u0111\u1ed3ng thu\u1eadn t\u1eeb \u0111a s\u1ed1 c\u00e1c Sentinel instance (g\u1ecdi l\u00e0 quorum) v\u00e0 th\u01b0\u1eddng y\u00eau c\u1ea7u \u00edt nh\u1ea5t 3 Sentinel \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh tin c\u1eady. Vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i n\u00e0y gi\u00fap h\u1ec7 th\u1ed1ng ti\u1ebfp t\u1ee5c ho\u1ea1t \u0111\u1ed9ng m\u00e0 kh\u00f4ng c\u1ea7n s\u1ef1 can thi\u1ec7p c\u1ee7a con ng\u01b0\u1eddi.<\/li>\n\n\n\n<li><strong>Cung c\u1ea5p th\u00f4ng tin c\u1ea5u h\u00ecnh:<\/strong> Sentinel gi\u00fap c\u00e1c client bi\u1ebft \u0111\u01b0\u1ee3c Redis master hi\u1ec7n t\u1ea1i l\u00e0 ai, \u0111\u1ec3 ch\u00fang lu\u00f4n k\u1ebft n\u1ed1i \u0111\u00fang node. Thay v\u00ec k\u1ebft n\u1ed1i c\u1ee9ng v\u00e0o m\u1ed9t \u0111\u1ecba ch\u1ec9 Redis c\u1ee5 th\u1ec3, client c\u00f3 th\u1ec3 h\u1ecfi Sentinel \u0111\u1ec3 lu\u00f4n k\u1ebft n\u1ed1i \u0111\u00fang node master ngay c\u1ea3 khi failover v\u1eeba x\u1ea3y ra.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cach-tri\u1ec3n-khai-redis-sentinel\"><span class=\"ez-toc-section\" id=\"Cach_trien_khai_Redis_Sentinel\"><\/span><strong>C\u00e1ch tri\u1ec3n khai Redis Sentinel<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-chu\u1ea9n-b\u1ecb-tr\u01b0\u1edbc-khi-tri\u1ec3n-khai\"><strong>Chu\u1ea9n b\u1ecb tr\u01b0\u1edbc khi tri\u1ec3n khai<\/strong><\/h3>\n\n\n\n<p>V\u1ec1 c\u01a1 b\u1ea3n, m\u1ed9t h\u1ec7 th\u1ed1ng Sentinel c\u1ea7n c\u00f3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>M\u1ed9t Redis master<\/strong>: node ch\u00ednh \u0111\u1ec3 ghi v\u00e0 \u0111\u1ecdc d\u1eef li\u1ec7u.<\/li>\n\n\n\n<li><strong>\u00cdt nh\u1ea5t m\u1ed9t Redis replica<\/strong>: \u0111\u1ec3 sao l\u01b0u d\u1eef li\u1ec7u v\u00e0 s\u1eb5n s\u00e0ng thay th\u1ebf n\u1ebfu master g\u1eb7p s\u1ef1 c\u1ed1<\/li>\n\n\n\n<li><strong>T\u1ed1i thi\u1ec3u ba ti\u1ebfn tr\u00ecnh Sentinel:<\/strong> \u0110\u1ec3 \u0111\u1ea3m b\u1ea3o kh\u1ea3 n\u0103ng gi\u00e1m s\u00e1t, b\u1ea7u ch\u1ecdn leader v\u00e0 th\u1ef1c hi\u1ec7n failover m\u1ed9t c\u00e1ch ch\u00ednh x\u00e1c, Redis Sentinel c\u1ea7n \u00edt nh\u1ea5t ba ti\u1ebfn tr\u00ecnh \u0111\u1ed9c l\u1eadp. Vi\u1ec7c n\u00e0y gi\u00fap \u0111\u1ea1t \u0111\u01b0\u1ee3c \u0111\u1ed3ng thu\u1eadn s\u1ed1 \u0111\u00f4ng (quorum) khi quy\u1ebft \u0111\u1ecbnh chuy\u1ec3n \u0111\u1ed5i master. \u0110\u1ec3 tr\u00e1nh \u0111i\u1ec3m l\u1ed7i \u0111\u01a1n (single point of failure), c\u00e1c Sentinel n\u00ean \u0111\u01b0\u1ee3c tri\u1ec3n khai tr\u00ean nh\u1eefng server kh\u00e1c nhau \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh s\u1eb5n s\u00e0ng cao (high availability).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-t\u1ea1o-file-c\u1ea5u-hinh-m\u1eabu-cho-sentinel\"><strong>T\u1ea1o file c\u1ea5u h\u00ecnh m\u1eabu cho Sentinel<\/strong><\/h3>\n\n\n\n<p>V\u00ed d\u1ee5 nh\u01b0 \u0111\u1ec3 kh\u1edfi ch\u1ea1y m\u1ed9t Redis master ch\u1ea1y \u1edf c\u1ed5ng m\u1eb7c \u0111\u1ecbnh 6379, ta d\u00f9ng file c\u1ea5u h\u00ecnh redis-master.conf nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bind 127.0.0.1protected-mode yes<br>port 6379dir .\/dbfilename dump.rdb<br>save 900 1save 300 10save 60 10000<\/code><\/pre>\n\n\n\n<p>Trong \u0111\u00f3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bind 127.0.0.1: ch\u1ec9 \u0111\u1ecbnh Redis ch\u1ec9 l\u1eafng nghe k\u1ebft n\u1ed1i t\u1eeb localhost (t\u0103ng b\u1ea3o m\u1eadt)<\/li>\n\n\n\n<li>protected-mode yes: b\u1eadt ch\u1ebf \u0111\u1ed9 b\u1ea3o v\u1ec7, y\u00eau c\u1ea7u authentication ho\u1eb7c bind c\u1ee5 th\u1ec3<\/li>\n\n\n\n<li>port 6379: ch\u1ec9 \u0111\u1ecbnh Redis s\u1ebd ch\u1ea1y tr\u00ean c\u1ed5ng 6379 l\u00e0 c\u1ed5ng m\u1eb7c \u0111\u1ecbnh n\u00ean c\u00f3 th\u1ec3 b\u1ecf qua, nh\u01b0ng khai b\u00e1o r\u00f5 v\u1eabn t\u1ed1t \u0111\u1ec3 d\u1ec5 qu\u1ea3n l\u00fd.<\/li>\n\n\n\n<li>dir .\/: ch\u1ec9 \u0111\u1ecbnh th\u01b0 m\u1ee5c hi\u1ec7n t\u1ea1i (.\/) l\u00e0m n\u01a1i l\u01b0u c\u00e1c file d\u1eef li\u1ec7u nh\u01b0 snapshot (dump.rdb) ho\u1eb7c log n\u1ebfu b\u1ea1n b\u1eadt t\u00ednh n\u0103ng l\u01b0u tr\u1eef.<\/li>\n\n\n\n<li>save: c\u1ea5u h\u00ecnh t\u1ef1 \u0111\u1ed9ng l\u01b0u snapshot theo \u0111i\u1ec1u ki\u1ec7n (th\u1eddi gian v\u00e0 s\u1ed1 l\u01b0\u1ee3ng thay \u0111\u1ed5i)<\/li>\n<\/ul>\n\n\n\n<p>V\u00ed d\u1ee5 \u0111\u1ec3 thi\u1ebft l\u1eadp m\u1ed9t Redis replica k\u1ebft n\u1ed1i \u0111\u1ebfn master, ta c\u1ea5u h\u00ecnh trong file redis-replica.conf nh\u01b0 sau:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bind 127.0.0.1protected-mode yes<br>port 6380replicaof 127.0.0.1 6379<br>replica-read-only yes<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>bind 127.0.0.1protected-mode yes<br>port 6380replicaof 127.0.0.1 6379<br>replica-read-only yes<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Trong \u0111\u00f3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bind 127.0.0.1: t\u01b0\u01a1ng t\u1ef1 nh\u01b0 master, ch\u1ec9 l\u1eafng nghe localhost.<\/li>\n\n\n\n<li>6380: l\u00e0 c\u1ed5ng m\u00e0 replica s\u1ebd ch\u1ea1y.<\/li>\n\n\n\n<li>replicaof 127.0.0.1 6379: replica s\u1ebd sao ch\u00e9p d\u1eef li\u1ec7u t\u1eeb master t\u1ea1i \u0111\u1ecba ch\u1ec9 127.0.0.1 v\u00e0 c\u1ed5ng 6379.<\/li>\n\n\n\n<li>replica-read-only yes: \u0111\u1ea3m b\u1ea3o replica ch\u1ec9 ph\u1ee5c v\u1ee5 read operations.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-c\u1ea5u-hinh-sentinel\"><strong>C\u1ea5u h\u00ecnh Sentinel<\/strong><\/h3>\n\n\n\n<p>Ti\u1ebfp theo, ta c\u1ea7n c\u1ea5u h\u00ecnh m\u1ed9t file sentinel.conf \u0111\u1ec3 Sentinel gi\u00e1m s\u00e1t master. V\u00ed d\u1ee5 \u0111\u1ec3 Sentinel theo d\u00f5i m\u1ed9t Redis master t\u1ea1i 127.0.0.1:6379, ta d\u00f9ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>port 26379bind 127.0.0.1<br>sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 10000sentinel parallel-syncs mymaster 1<\/code><\/pre>\n\n\n\n<p>Trong \u0111\u00f3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>port 26379: c\u1ed5ng m\u1eb7c \u0111\u1ecbnh c\u1ee7a Sentinel<\/li>\n\n\n\n<li>bind 127.0.0.1: \u0111\u1ecba ch\u1ec9 Sentinel l\u1eafng nghe<\/li>\n\n\n\n<li>sentinel monitor mymaster 127.0.0.1 6379 2: theo d\u00f5i master t\u00ean l\u00e0 mymaster t\u1ea1i \u0111\u1ecba ch\u1ec9 127.0.0.1:6379, c\u1ea7n 2 Sentinel \u0111\u1ed3ng thu\u1eadn \u0111\u1ec3 failover.<\/li>\n\n\n\n<li>down-after-milliseconds mymaster 5000: n\u1ebfu master kh\u00f4ng ph\u1ea3n h\u1ed3i trong 5 gi\u00e2y, Sentinel s\u1ebd \u0111\u00e1nh d\u1ea5u l\u00e0 l\u1ed7i t\u1ea1m th\u1eddi.<\/li>\n\n\n\n<li>failover-timeout: th\u1eddi gian t\u1ed1i \u0111a \u0111\u1ec3 ho\u00e0n t\u1ea5t qu\u00e1 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i master (10 gi\u00e2y).<\/li>\n\n\n\n<li>parallel-syncs: s\u1ed1 replica \u0111\u01b0\u1ee3c ph\u00e9p \u0111\u1ed3ng b\u1ed9 song song v\u1edbi master m\u1edbi (\u1edf \u0111\u00e2y l\u00e0 1).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-kh\u1edfi-ch\u1ea1y-redis-va-sentinel\"><strong>Kh\u1edfi ch\u1ea1y Redis v\u00e0 Sentinel<\/strong><\/h3>\n\n\n\n<p>Sau khi c\u1ea5u h\u00ecnh xong, ta ch\u1ea1y c\u00e1c ti\u1ebfn tr\u00ecnh b\u1eb1ng l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>redis-server redis-master.confredis-server redis-replica.confredis-sentinel sentinel.conf<\/code><\/pre>\n\n\n\n<p>N\u1ebfu c\u00f3 nhi\u1ec1u Sentinel, b\u1ea1n n\u00ean t\u1ea1o c\u00e1c b\u1ea3n sao c\u1ea5u h\u00ecnh sentinel-2.conf, sentinel-3.conf (ch\u1ec9 thay port) v\u00e0 kh\u1edfi ch\u1ea1y t\u01b0\u01a1ng t\u1ef1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ki\u1ec3m-tra-tr\u1ea1ng-thai-ho\u1eb7c-mo-ph\u1ecfng-failover\"><strong>Ki\u1ec3m tra tr\u1ea1ng th\u00e1i ho\u1eb7c m\u00f4 ph\u1ecfng failover<\/strong><\/h3>\n\n\n\n<p>V\u00ed d\u1ee5 nh\u01b0 \u0111\u1ec3 ki\u1ec3m tra Redis master hi\u1ec7n t\u1ea1i t\u1eeb Sentinel, ta d\u00f9ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster<\/code><\/pre>\n\n\n\n<p>Trong \u0111\u00f3:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>-p 26379: l\u00e0 c\u1ed5ng Sentinel \u0111ang ch\u1ea1y.<\/li>\n\n\n\n<li>get-master-addr-by-name: l\u00e0 l\u1ec7nh y\u00eau c\u1ea7u Sentinel tr\u1ea3 v\u1ec1 \u0111\u1ecba ch\u1ec9 IP v\u00e0 c\u1ed5ng c\u1ee7a master hi\u1ec7n t\u1ea1i.<\/li>\n<\/ul>\n\n\n\n<p>Khi ta t\u1eaft Redis master (b\u1eb1ng <em>pkill<\/em>, <em>Ctrl+C<\/em> ho\u1eb7c <em>docker stop<\/em>), Sentinel s\u1ebd t\u1ef1 \u0111\u1ed9ng ph\u00e1t hi\u1ec7n s\u1ef1 c\u1ed1 v\u00e0 ti\u1ebfn h\u00e0nh failover.<\/p>\n\n\n\n<p><strong>C\u00e1c l\u1ec7nh ki\u1ec3m tra kh\u00e1c:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ki\u1ec3m tra t\u1ea5t c\u1ea3 masters \u0111\u01b0\u1ee3c gi\u00e1m s\u00e1tredis-cli -p 26379 SENTINEL masters\n# Ki\u1ec3m tra c\u00e1c replica c\u1ee7a masterredis-cli -p 26379 SENTINEL replicas mymaster\n# Ki\u1ec3m tra tr\u1ea1ng th\u00e1i c\u1ee7a c\u00e1c Sentinel kh\u00e1c&nbsp;&nbsp;redis-cli -p 26379 SENTINEL sentinels mymaster\n# Trigger failover th\u1ee7 c\u00f4ng (\u0111\u1ec3 test)redis-cli -p 26379 SENTINEL failover mymaster<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/redis-cli-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redis CLI l\u00e0 g\u00ec: Th\u1ef1c h\u00e0nh d\u00f9ng d\u00f2ng l\u1ec7nh \u0111\u1ec3 t\u01b0\u01a1ng t\u00e1c v\u1edbi Redis<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-\u01b0u-di\u1ec3m-va-h\u1ea1n-ch\u1ebf-c\u1ee7a-redis-sentinel\"><span class=\"ez-toc-section\" id=\"Uu_diem_va_han_che_cua_Redis_Sentinel\"><\/span><strong>\u01afu \u0111i\u1ec3m v\u00e0 h\u1ea1n ch\u1ebf c\u1ee7a Redis Sentinel<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\u01afu \u0111i\u1ec3m<\/strong><\/td><td><strong>H\u1ea1n ch\u1ebf<\/strong><\/td><\/tr><tr><td>T\u1ef1 \u0111\u1ed9ng gi\u00e1m s\u00e1t v\u00e0 chuy\u1ec3n \u0111\u1ed5i master khi g\u1eb7p s\u1ef1 c\u1ed1, gi\u00fap \u0111\u1ea3m b\u1ea3o h\u1ec7 th\u1ed1ng Redis lu\u00f4n s\u1eb5n s\u00e0ng ho\u1ea1t \u0111\u1ed9ng.<\/td><td>Kh\u00f4ng h\u1ed7 tr\u1ee3 ph\u00e2n m\u1ea3nh d\u1eef li\u1ec7u (sharding),&nbsp; kh\u00f4ng ph\u00f9 h\u1ee3p v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng c\u1ea7n m\u1edf r\u1ed9ng quy m\u00f4 d\u1eef li\u1ec7u theo chi\u1ec1u ngang nh\u01b0 Redis Cluster.<\/td><\/tr><tr><td>D\u1ec5 tri\u1ec3n khai v\u00e0 kh\u00f4ng y\u00eau c\u1ea7u ph\u1ea7n m\u1ec1m trung gian hay proxy \u0111i k\u00e8m.<\/td><td>Ch\u1ec9 gi\u00e1m s\u00e1t v\u00e0 th\u1ef1c hi\u1ec7n failover \u1edf m\u1ee9c node, kh\u00f4ng \u0111\u1ea3m b\u1ea3o to\u00e0n v\u1eb9n d\u1eef li\u1ec7u. N\u1ebfu qu\u00e1 tr\u00ecnh replication gi\u1eefa master v\u00e0 replica ch\u01b0a k\u1ecbp \u0111\u1ed3ng b\u1ed9 (do b\u1ea3n ch\u1ea5t b\u1ea5t \u0111\u1ed3ng b\u1ed9), c\u00f3 th\u1ec3 x\u1ea3y ra m\u1ea5t d\u1eef li\u1ec7u t\u1ea1m th\u1eddi khi master g\u1eb7p s\u1ef1 c\u1ed1.<\/td><\/tr><tr><td>C\u1ea5u h\u00ecnh \u0111\u01a1n gi\u1ea3n, d\u1ec5 hi\u1ec3u, c\u00f3 th\u1ec3 \u00e1p d\u1ee5ng ngay c\u1ea3 trong m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n ho\u1eb7c s\u1ea3n ph\u1ea9m nh\u1ecf \u0111\u1ebfn trung b\u00ecnh.<\/td><td>Client c\u1ea7n h\u1ed7 tr\u1ee3 c\u01a1 ch\u1ebf k\u1ebft n\u1ed1i th\u00f4ng qua Sentinel, n\u1ebfu kh\u00f4ng s\u1ebd ph\u1ea3i x\u1eed l\u00fd th\u1ee7 c\u00f4ng m\u1ed7i khi master thay \u0111\u1ed5i.<\/td><\/tr><tr><td>Ho\u1ea1t \u0111\u1ed9ng \u0111\u1ed9c l\u1eadp v\u1edbi Redis, n\u00ean d\u1ec5 d\u00e0ng m\u1edf r\u1ed9ng v\u00e0 tri\u1ec3n khai tr\u00ean nhi\u1ec1u m\u00f4i tr\u01b0\u1eddng kh\u00e1c nhau.<\/td><td>Kh\u00f4ng ph\u00f9 h\u1ee3p khi ch\u1ea1y tr\u00ean c\u00f9ng m\u00e1y v\u1edbi Redis. N\u1ebfu m\u00e1y ch\u1ee7 ch\u1ebft th\u00ec c\u1ea3 Redis v\u00e0 Sentinel \u0111\u1ec1u \u201cbi\u1ebfn m\u1ea5t\u201d, m\u1ea5t t\u00e1c d\u1ee5ng failover.<\/td><\/tr><tr><td>Ph\u00f9 h\u1ee3p v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng real-time, c\u00f3 y\u00eau c\u1ea7u uptime cao nh\u01b0ng ch\u01b0a \u0111\u1ebfn m\u1ee9c c\u1ea7n chia nh\u1ecf d\u1eef li\u1ec7u theo cluster.<\/td><td>Vi\u1ec7c thi\u1ebft l\u1eadp quorum c\u1ea7n t\u1ed1i thi\u1ec3u 3 Sentinel, n\u1ebfu kh\u00f4ng d\u1ec5 x\u1ea3y ra t\u00ecnh tr\u1ea1ng kh\u00f4ng b\u1ea7u \u0111\u01b0\u1ee3c master m\u1edbi ho\u1eb7c s\u1ef1 c\u1ed1 split-brain (khi nhi\u1ec1u node c\u00f9ng nh\u1eadn l\u00e0m master do thi\u1ebfu \u0111\u1ed3ng thu\u1eadn).<\/td><\/tr><tr><td>H\u1ed7 tr\u1ee3 g\u1eedi c\u1ea3nh b\u00e1o (notification) khi Redis g\u1eb7p s\u1ef1 c\u1ed1, gi\u00fap b\u1ea1n ph\u1ea3n \u1ee9ng k\u1ecbp th\u1eddi trong m\u00f4i tr\u01b0\u1eddng production.<\/td><td>Kh\u00f4ng cung c\u1ea5p c\u01a1 ch\u1ebf b\u1ea3o m\u1eadt n\u00e2ng cao ho\u1eb7c x\u00e1c th\u1ef1c gi\u1eefa Sentinel v\u00e0 Redis, c\u1ea7n b\u1ed5 sung n\u1ebfu tri\u1ec3n khai trong m\u00f4i tr\u01b0\u1eddng nh\u1ea1y c\u1ea3m.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-redis-sentinel-vs-redis-cluster\"><span class=\"ez-toc-section\" id=\"Redis_Sentinel_vs_Redis_Cluster\"><\/span><strong>Redis Sentinel vs Redis Cluster<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Ti\u00eau ch\u00ed<\/strong><\/td><td><strong>Redis Sentinel<\/strong><\/td><td><strong>Redis Cluster<\/strong><\/td><\/tr><tr><td>M\u1ee5c ti\u00eau ch\u00ednh<\/td><td>\u0110\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh s\u1eb5n s\u00e0ng cao cho Redis. Khi Redis master g\u1eb7p s\u1ef1 c\u1ed1, Sentinel s\u1ebd t\u1ef1 \u0111\u1ed9ng ph\u00e1t hi\u1ec7n v\u00e0 ch\u1ec9 \u0111\u1ecbnh m\u1ed9t replica l\u00ean thay th\u1ebf. T\u1eadp trung v\u00e0o t\u00ednh \u1ed5n \u0111\u1ecbnh, kh\u00f4ng m\u1edf r\u1ed9ng d\u1eef li\u1ec7u.<\/td><td>H\u01b0\u1edbng \u0111\u1ebfn kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng quy m\u00f4 d\u1eef li\u1ec7u (scalability) v\u00e0 \u0111\u1ed9 s\u1eb5n s\u00e0ng. Cluster chia d\u1eef li\u1ec7u th\u00e0nh c\u00e1c ph\u1ea7n nh\u1ecf (shard) v\u00e0 ph\u00e2n ph\u1ed1i ch\u00fang qua nhi\u1ec1u master. M\u1ed7i master c\u00f3 replica \u0111\u1ec3 d\u1ef1 ph\u00f2ng.<\/td><\/tr><tr><td>Ki\u1ebfn tr\u00fac h\u1ec7 th\u1ed1ng<\/td><td>Bao g\u1ed3m 1 Redis master, 1 ho\u1eb7c nhi\u1ec1u replica v\u00e0 t\u1ed1i thi\u1ec3u 3 ti\u1ebfn tr\u00ecnh Sentinel ch\u1ea1y \u0111\u1ed9c l\u1eadp \u0111\u1ec3 gi\u00e1m s\u00e1t h\u1ec7 th\u1ed1ng v\u00e0 th\u1ef1c hi\u1ec7n failover khi c\u1ea7n thi\u1ebft.<\/td><td>Bao g\u1ed3m nhi\u1ec1u master, m\u1ed7i master qu\u1ea3n l\u00fd m\u1ed9t ph\u1ea7n d\u1eef li\u1ec7u ri\u00eang. M\u1ed7i master c\u00f3 \u00edt nh\u1ea5t 1 replica \u0111i k\u00e8m. \u0110\u1ec3 Redis Cluster ho\u1ea1t \u0111\u1ed9ng c\u1ea7n c\u00f3 t\u1ed1i thi\u1ec3u 3 master node. Tuy nhi\u00ean, \u0111\u1ec3 h\u1ec7 th\u1ed1ng c\u00f3 th\u1ec3 t\u1ef1 \u0111\u1ed9ng failover khi m\u1ed9t master b\u1ecb l\u1ed7i, Redis khuy\u1ebfn ngh\u1ecb tri\u1ec3n khai \u00edt nh\u1ea5t 6 node (3 master + 3 replica).<\/td><\/tr><tr><td>Kh\u1ea3 n\u0103ng t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i (failover)<\/td><td>C\u00f3 &#8211; Khi master kh\u00f4ng ph\u1ea3n h\u1ed3i, Sentinel t\u1ef1 \u0111\u1ed9ng b\u1ea7u ch\u1ecdn m\u1ed9t replica \u0111\u1ec3 tr\u1edf th\u00e0nh master m\u1edbi, c\u1eadp nh\u1eadt c\u1ea5u h\u00ecnh cho c\u00e1c Sentinel v\u00e0 client kh\u00e1c. To\u00e0n b\u1ed9 qu\u00e1 tr\u00ecnh di\u1ec5n ra t\u1ef1 \u0111\u1ed9ng m\u00e0 kh\u00f4ng c\u1ea7n thao t\u00e1c th\u1ee7 c\u00f4ng.<\/td><td>C\u00f3 &#8211; N\u1ebfu m\u1ed9t master trong cluster b\u1ecb l\u1ed7i, m\u1ed9t replica c\u1ee7a n\u00f3 s\u1ebd t\u1ef1 \u0111\u1ed9ng l\u00ean thay. Cluster c\u0169ng t\u1ef1 c\u1eadp nh\u1eadt routing n\u1ed9i b\u1ed9 \u0111\u1ec3 client k\u1ebft n\u1ed1i l\u1ea1i \u0111\u00fang node m\u1edbi.<\/td><\/tr><tr><td>Kh\u1ea3 n\u0103ng ph\u00e2n m\u1ea3nh d\u1eef li\u1ec7u (sharding)<\/td><td>Kh\u00f4ng h\u1ed7 tr\u1ee3 &#8211; To\u00e0n b\u1ed9 d\u1eef li\u1ec7u n\u1eb1m tr\u00ean m\u1ed9t Redis master. Replica ch\u1ec9 l\u00e0 b\u1ea3n sao ph\u1ee5c v\u1ee5 cho vi\u1ec7c d\u1ef1 ph\u00f2ng, kh\u00f4ng t\u0103ng kh\u1ea3 n\u0103ng l\u01b0u tr\u1eef.<\/td><td>C\u00f3 &#8211; Redis Cluster ph\u00e2n chia d\u1eef li\u1ec7u th\u00e0nh 16,384 hash slots, ph\u00e2n ph\u1ed1i \u0111\u1ec1u gi\u1eefa c\u00e1c master. \u0110i\u1ec1u n\u00e0y gi\u00fap d\u1eef li\u1ec7u c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c chia v\u00e0 l\u01b0u tr\u1eef hi\u1ec7u qu\u1ea3 \u1edf nhi\u1ec1u m\u00e1y.<\/td><\/tr><tr><td>C\u00e1ch client k\u1ebft n\u1ed1i<\/td><td>Client kh\u00f4ng k\u1ebft n\u1ed1i tr\u1ef1c ti\u1ebfp v\u00e0o Redis, m\u00e0 s\u1ebd h\u1ecfi Sentinel \u0111\u1ecba ch\u1ec9 master hi\u1ec7n t\u1ea1i. Khi failover x\u1ea3y ra, Sentinel tr\u1ea3 v\u1ec1 \u0111\u1ecba ch\u1ec9 m\u1edbi, gi\u00fap \u1ee9ng d\u1ee5ng kh\u00f4ng b\u1ecb gi\u00e1n \u0111o\u1ea1n.<\/td><td>Client ph\u1ea3i h\u1ed7 tr\u1ee3 Redis Cluster protocol, \u0111\u1ec3 bi\u1ebft c\u00e1ch \u0111\u1ecbnh tuy\u1ebfn t\u1eebng key \u0111\u1ebfn \u0111\u00fang node theo hash slot. Khi truy v\u1ea5n nh\u1ea7m node, Redis s\u1ebd tr\u1ea3 v\u1ec1 ph\u1ea3n h\u1ed3i MOVED ho\u1eb7c ASK, h\u01b0\u1edbng d\u1eabn client chuy\u1ec3n sang node ph\u00f9 h\u1ee3p. Do \u0111\u00f3, client c\u1ea7n h\u1ed7 tr\u1ee3 giao th\u1ee9c Cluster \u0111\u1ec3 x\u1eed l\u00fd c\u00e1c redirect n\u00e0y t\u1ef1 \u0111\u1ed9ng. M\u1ed9t s\u1ed1 th\u01b0 vi\u1ec7n client c\u1ea7n c\u1ea5u h\u00ecnh th\u00eam \u0111\u1ec3 ho\u1ea1t \u0111\u1ed9ng tr\u01a1n tru.<\/td><\/tr><tr><td>\u0110\u1ed9 ph\u1ee9c t\u1ea1p tri\u1ec3n khai v\u00e0 v\u1eadn h\u00e0nh<\/td><td>D\u1ec5 tri\u1ec3n khai h\u01a1n, c\u1ea5u h\u00ecnh \u0111\u01a1n gi\u1ea3n, d\u1ec5 debug. Ph\u00f9 h\u1ee3p v\u1edbi c\u00e1c \u0111\u1ed9i k\u1ef9 thu\u1eadt nh\u1ecf ho\u1eb7c \u1ee9ng d\u1ee5ng kh\u00f4ng y\u00eau c\u1ea7u m\u1edf r\u1ed9ng d\u1eef li\u1ec7u.<\/td><td>Ph\u1ee9c t\u1ea1p h\u01a1n do c\u1ea7n thi\u1ebft l\u1eadp nhi\u1ec1u node, \u0111\u1ed3ng b\u1ed9 slot, gi\u00e1m s\u00e1t t\u00ecnh tr\u1ea1ng ph\u00e2n m\u1ea3nh v\u00e0 x\u1eed l\u00fd t\u00ecnh hu\u1ed1ng m\u1ea5t node ph\u1ee9c t\u1ea1p h\u01a1n.<\/td><\/tr><tr><td>Kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng h\u1ec7 th\u1ed1ng<\/td><td>Kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng h\u1ea1n ch\u1ebf, ch\u1ec9 m\u1edf r\u1ed9ng theo chi\u1ec1u d\u1ecdc (n\u00e2ng c\u1ea5p RAM, CPU cho Redis master). Kh\u00f4ng th\u1ec3 chia nh\u1ecf d\u1eef li\u1ec7u \u0111\u1ec3 ch\u1ea1y tr\u00ean nhi\u1ec1u m\u00e1y.<\/td><td>C\u00f3 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng theo chi\u1ec1u ngang. Ch\u1ec9 c\u1ea7n th\u00eam master v\u00e0o cluster v\u00e0 redis s\u1ebd t\u1ef1 \u0111\u1ed9ng ph\u00e2n ph\u1ed1i d\u1eef li\u1ec7u. R\u1ea5t ph\u00f9 h\u1ee3p v\u1edbi \u1ee9ng d\u1ee5ng l\u1edbn ho\u1eb7c \u0111ang t\u0103ng tr\u01b0\u1edfng nhanh.<\/td><\/tr><tr><td>Tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng<\/td><td>Khi c\u1ea7n t\u00ednh s\u1eb5n s\u00e0ng cao cho Redis nh\u01b0ng kh\u00f4ng c\u1ea7n chia nh\u1ecf d\u1eef li\u1ec7u. Th\u00edch h\u1ee3p cho c\u00e1c \u1ee9ng d\u1ee5ng v\u1eeba v\u00e0 nh\u1ecf, nh\u01b0 cache, session store, queue ho\u1eb7c c\u00e1c h\u1ec7 th\u1ed1ng \u0111\u01a1n gi\u1ea3n.<\/td><td>Khi c\u1ea7n x\u1eed l\u00fd kh\u1ed1i l\u01b0\u1ee3ng d\u1eef li\u1ec7u l\u1edbn, nhi\u1ec1u request \u0111\u1ed3ng th\u1eddi, ho\u1eb7c c\u1ea7n h\u1ec7 th\u1ed1ng c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng d\u1ec5 d\u00e0ng m\u00e0 kh\u00f4ng lo qu\u00e1 t\u1ea3i Redis \u0111\u01a1n. Ph\u00f9 h\u1ee3p cho h\u1ec7 th\u1ed1ng ph\u00e2n t\u00e1n, x\u1eed l\u00fd real-time quy m\u00f4 l\u1edbn.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/redis-cluster-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Redis Cluster l\u00e0 g\u00ec: H\u01b0\u1edbng d\u1eabn s\u1eed d\u1ee5ng c\u01a1 b\u1ea3n cho ng\u01b0\u1eddi m\u1edbi<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-cau-h\u1ecfi-ph\u1ed5-bi\u1ebfn-v\u1ec1-redis-sentinel\"><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_pho_bien_ve_Redis_Sentinel\"><\/span><strong>C\u00e1c c\u00e2u h\u1ecfi ph\u1ed5 bi\u1ebfn v\u1ec1 Redis Sentinel<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-redis-sentinel-co-ph\u1ea3i-la-gi\u1ea3i-phap-high-availability-ha-hoan-ch\u1ec9nh-khong\"><strong>Redis Sentinel c\u00f3 ph\u1ea3i l\u00e0 gi\u1ea3i ph\u00e1p high availability (HA) ho\u00e0n ch\u1ec9nh kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Kh\u00f4ng ho\u00e0n to\u00e0n. Redis Sentinel cung c\u1ea5p t\u00ednh s\u1eb5n s\u00e0ng cao (HA) \u1edf m\u1ee9c c\u01a1 b\u1ea3n: gi\u00e1m s\u00e1t Redis master, t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i sang replica khi ph\u00e1t hi\u1ec7n l\u1ed7i, v\u00e0 c\u1eadp nh\u1eadt l\u1ea1i th\u00f4ng tin cho c\u00e1c client. Tuy nhi\u00ean, n\u00f3 kh\u00f4ng b\u1ea3o v\u1ec7 d\u1eef li\u1ec7u kh\u1ecfi m\u1ea5t m\u00e1t n\u1ebfu master ch\u1ebft tr\u01b0\u1edbc khi ghi xong d\u1eef li\u1ec7u v\u00e0o disk, v\u00e0 kh\u00f4ng h\u1ed7 tr\u1ee3 ph\u00e2n m\u1ea3nh d\u1eef li\u1ec7u. V\u00ec v\u1eady, v\u1edbi c\u00e1c h\u1ec7 th\u1ed1ng l\u1edbn ho\u1eb7c y\u00eau c\u1ea7u to\u00e0n v\u1eb9n d\u1eef li\u1ec7u cao, Sentinel n\u00ean k\u1ebft h\u1ee3p v\u1edbi c\u00e1c c\u01a1 ch\u1ebf backup, persistence ho\u1eb7c c\u00e2n nh\u1eafc d\u00f9ng Redis Cluster.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-co-th\u1ec3-tri\u1ec3n-khai-redis-sentinel-trong-moi-tr\u01b0\u1eddng-docker-khong\"><strong>C\u00f3 th\u1ec3 tri\u1ec3n khai Redis Sentinel trong m\u00f4i tr\u01b0\u1eddng Docker kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>C\u00f3 th\u1ec3, nh\u01b0ng c\u1ea7n <strong>thi\u1ebft k\u1ebf c\u1ea9n th\u1eadn<\/strong>. Redis Sentinel s\u1eed d\u1ee5ng t\u00ean host v\u00e0 \u0111\u1ecba ch\u1ec9 IP th\u1ef1c \u0111\u1ec3 giao ti\u1ebfp v\u1edbi Redis v\u00e0 c\u00e1c Sentinel kh\u00e1c, n\u00ean khi ch\u1ea1y trong Docker ta c\u1ea7n \u0111\u1ea3m b\u1ea3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u1ed7i container Redis\/Sentinel c\u00f3 IP ho\u1eb7c hostname t\u0129nh (s\u1eed d\u1ee5ng Docker Compose v\u1edbi m\u1ea1ng bridge \u0111\u1eb7t t\u00ean r\u00f5 r\u00e0ng).<\/li>\n\n\n\n<li>Tr\u00e1nh s\u1eed d\u1ee5ng localhost v\u00ec m\u1ed7i container c\u00f3 localhost ri\u00eang.<\/li>\n\n\n\n<li>D\u00f9ng <code>--sentinel announce-ip<\/code> v\u00e0 <code>announce-port<\/code> n\u1ebfu ch\u1ea1y trong m\u00f4i tr\u01b0\u1eddng NAT ho\u1eb7c load balancer \u0111\u1ec3 c\u00e1c Sentinel\/Redis bi\u1ebft \u0111\u1ecba ch\u1ec9 th\u1ef1c c\u1ee7a nhau.<\/li>\n<\/ul>\n\n\n\n<p>Ngo\u00e0i ra, ta n\u00ean t\u00e1ch ri\u00eang Redis v\u00e0 Sentinel tr\u00ean c\u00e1c container \u0111\u1ed9c l\u1eadp v\u00e0 l\u00fd t\u01b0\u1edfng nh\u1ea5t l\u00e0 tr\u00ean c\u00e1c node kh\u00e1c nhau (n\u1ebfu ch\u1ea1y tr\u00ean Kubernetes ho\u1eb7c cluster).<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/cach-toi-uu-redis-docker\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u1ed1i \u01b0u h\u00f3a Redis v\u1edbi Docker: H\u01b0\u1edbng d\u1eabn c\u01a1 b\u1ea3n cho ng\u01b0\u1eddi m\u1edbi<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-co-th\u1ec3-k\u1ebft-h\u1ee3p-redis-sentinel-v\u1edbi-redis-cluster-khong\"><strong>C\u00f3 th\u1ec3 k\u1ebft h\u1ee3p Redis Sentinel v\u1edbi Redis Cluster kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Kh\u00f4ng n\u00ean. Redis Sentinel v\u00e0 Redis Cluster l\u00e0 hai ki\u1ebfn tr\u00fac ho\u1ea1t \u0111\u1ed9ng kh\u00e1c nhau, ph\u1ee5c v\u1ee5 m\u1ee5c ti\u00eau kh\u00e1c nhau: Sentinel qu\u1ea3n l\u00fd failover cho m\u1ed9t Redis master duy nh\u1ea5t (HA), c\u00f2n cluster d\u00f9ng nhi\u1ec1u Redis master \u0111\u1ec3 chia nh\u1ecf d\u1eef li\u1ec7u (scalability). Ch\u00fang kh\u00f4ng t\u01b0\u01a1ng th\u00edch v\u1edbi nhau v\u00e0 kh\u00f4ng n\u00ean k\u1ebft h\u1ee3p. N\u1ebfu b\u1ea1n \u0111\u00e3 s\u1eed d\u1ee5ng Redis Cluster, h\u1ec7 th\u1ed1ng \u0111\u00e3 c\u00f3 c\u01a1 ch\u1ebf t\u1ef1 failover t\u00edch h\u1ee3p. Tr\u01b0\u1eddng h\u1ee3p b\u1ea1n c\u1ea7n c\u1ea3 failover l\u1eabn sharding, h\u00e3y d\u00f9ng Redis Cluster \u0111\u00fang c\u00e1ch thay v\u00ec k\u1ebft h\u1ee3p th\u00eam Sentinel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-k\u1ebft\"><span class=\"ez-toc-section\" id=\"Tong_ket\"><\/span><strong>T\u1ed5ng k\u1ebft<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Redis Sentinel l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 m\u1ea1nh m\u1ebd nh\u01b0ng kh\u00f4ng ph\u1ee9c t\u1ea1p, gi\u00fap gi\u00e1m s\u00e1t Redis, t\u1ef1 \u0111\u1ed9ng ph\u00e1t hi\u1ec7n l\u1ed7i v\u00e0 chuy\u1ec3n \u0111\u1ed5i master m\u1ed9t c\u00e1ch an to\u00e0n, m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i can thi\u1ec7p th\u1ee7 c\u00f4ng. V\u1edbi nh\u1eefng h\u1ec7 th\u1ed1ng v\u1eeba v\u00e0 nh\u1ecf, ho\u1eb7c c\u00e1c \u1ee9ng d\u1ee5ng kh\u00f4ng y\u00eau c\u1ea7u ph\u00e2n m\u1ea3nh d\u1eef li\u1ec7u, Sentinel l\u00e0 gi\u1ea3i ph\u00e1p l\u00fd t\u01b0\u1edfng \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o Redis lu\u00f4n s\u1eb5n s\u00e0ng ph\u1ee5c v\u1ee5. Tuy v\u1eady, h\u00e3y hi\u1ec3u r\u00f5 \u0111i\u1ec3m m\u1ea1nh v\u00e0 gi\u1edbi h\u1ea1n c\u1ee7a Sentinel \u0111\u1ec3 tri\u1ec3n khai \u0111\u00fang n\u01a1i, \u0111\u00fang th\u1eddi \u0111i\u1ec3m. N\u1ebfu b\u1ea1n c\u1ea7n c\u1ea3 t\u00ednh s\u1eb5n s\u00e0ng v\u00e0 kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng, h\u00e3y c\u00e2n nh\u1eafc Redis Cluster ho\u1eb7c gi\u1ea3i ph\u00e1p k\u1ebft h\u1ee3p ph\u00f9 h\u1ee3p h\u01a1n.&nbsp;<\/p>\n\n\n\n<p>ITviec hy v\u1ecdng b\u00e0i vi\u1ebft \u0111\u00e3 gi\u00fap b\u1ea1n n\u1eafm v\u1eefng ki\u1ebfn th\u1ee9c n\u1ec1n t\u1ea3ng v\u1ec1 Redis Sentinel v\u00e0 t\u1ef1 tin tri\u1ec3n khai n\u00f3 trong h\u1ec7 th\u1ed1ng c\u1ee7a m\u00ecnh.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trong c\u00e1c h\u1ec7 th\u1ed1ng hi\u1ec7n \u0111\u1ea1i, Redis th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ed1t l\u00f5i \u0111\u1ec3 cache, qu\u1ea3n l\u00fd session, ho\u1eb7c x\u1eed l\u00fd h\u00e0ng \u0111\u1ee3i. Tuy nhi\u00ean, n\u1ebfu ch\u1ec9 tri\u1ec3n khai Redis \u0111\u01a1n l\u1ebb, h\u1ec7 th\u1ed1ng s\u1ebd d\u1ec5 r\u01a1i v\u00e0o t\u00ecnh tr\u1ea1ng \u201csingle point of failure\u201d, ngh\u0129a l\u00e0 ch\u1ec9 c\u1ea7n Redis master g\u1eb7p s\u1ef1 [&hellip;]<\/p>\n","protected":false},"author":209,"featured_media":90281,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109],"tags":[10347],"class_list":["post-89773","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it","tag-redis"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis - ITviec Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis\" \/>\n<meta property=\"og:description\" content=\"Trong c\u00e1c h\u1ec7 th\u1ed1ng hi\u1ec7n \u0111\u1ea1i, Redis th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ed1t l\u00f5i \u0111\u1ec3 cache, qu\u1ea3n l\u00fd session, ho\u1eb7c x\u1eed l\u00fd h\u00e0ng \u0111\u1ee3i. Tuy nhi\u00ean, n\u1ebfu ch\u1ec9 tri\u1ec3n khai\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2025-07-31T15:40:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-31T15:40:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/redis-sentinel-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1347\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"M\u1ef9 Duy\u00ean\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"M\u1ef9 Duy\u00ean\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis - ITviec Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/","og_locale":"vi_VN","og_type":"article","og_title":"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis","og_description":"Trong c\u00e1c h\u1ec7 th\u1ed1ng hi\u1ec7n \u0111\u1ea1i, Redis th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nh\u01b0 m\u1ed9t ph\u1ea7n c\u1ed1t l\u00f5i \u0111\u1ec3 cache, qu\u1ea3n l\u00fd session, ho\u1eb7c x\u1eed l\u00fd h\u00e0ng \u0111\u1ee3i. Tuy nhi\u00ean, n\u1ebfu ch\u1ec9 tri\u1ec3n khai","og_url":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2025-07-31T15:40:06+00:00","article_modified_time":"2025-07-31T15:40:09+00:00","og_image":[{"width":2560,"height":1347,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/redis-sentinel-scaled.png","type":"image\/png"}],"author":"M\u1ef9 Duy\u00ean","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"M\u1ef9 Duy\u00ean","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"20 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/"},"author":{"name":"M\u1ef9 Duy\u00ean","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/73733c0725c7e39e696a896bd1abe2d7"},"headline":"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis","datePublished":"2025-07-31T15:40:06+00:00","dateModified":"2025-07-31T15:40:09+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/"},"wordCount":5058,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/redis-sentinel-scaled.png","keywords":["redis"],"articleSection":["Chuy\u00ean m\u00f4n IT"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/","url":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/","name":"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/redis-sentinel-scaled.png","datePublished":"2025-07-31T15:40:06+00:00","dateModified":"2025-07-31T15:40:09+00:00","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/redis-sentinel-scaled.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/07\/redis-sentinel-scaled.png","width":800,"height":421,"caption":"redis sentinel - itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/redis-sentinel-la-gi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Redis Sentinel: H\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t v\u00e0 t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i d\u1ef1 ph\u00f2ng cho Redis"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/73733c0725c7e39e696a896bd1abe2d7","name":"M\u1ef9 Duy\u00ean","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/Author_Duyen-Tran-120x120.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/Author_Duyen-Tran-120x120.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/Author_Duyen-Tran-120x120.jpg","caption":"M\u1ef9 Duy\u00ean"},"url":"https:\/\/itviec.com\/blog\/author\/my-duyen\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/89773","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/209"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=89773"}],"version-history":[{"count":2,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/89773\/revisions"}],"predecessor-version":[{"id":90282,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/89773\/revisions\/90282"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/90281"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=89773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=89773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=89773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}