<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【死磕 Redis】----- Redis 集群搭建

          共 4757字,需瀏覽 10分鐘

           ·

          2020-08-07 00:18

          Redis 是一個可基于內存亦可持久化的日志型(aof,rdb)、高性能 Key-Value 數(shù)據(jù)庫,并提供多種語言的API ,Redis 支持主從同步。數(shù)據(jù)可以從主服務器向任意數(shù)量的從服務器上同步,從服務器可以是關聯(lián)其他從服務器的主服務器。

          本文將詳細介紹 Redis cluster 搭建過程,集群為三主三從。

          準備工作

          本次集群準備三臺服務器(虛擬機也可以),每臺服務器上面安裝兩個 Redis 實例,端口分別是 6379 和 6380,如下:

          IPRedis 實例
          192.168.2.170Redis1(6379/主)、Redis2(6380/從)
          192.168.2.142Redis1(6379/主)、Redis2(6380/從)
          192.168.2.151Redis1(6379/主)、Redis2(6380/從)

          Redis 安裝

          從 Redis 官網(wǎng)下載安裝包,本文采用的版本是 5.0.3 版本。Redis 的 cluster 集群是從 Redis3.0 開始支持的。

          1. wget http://download.redis.io/releases/redis-5.0.3.tar.gz

          開始解壓

          1. tar -xzvf redis-5.0.3.tar.gz

          2. mv redis-5.0.3 redis

          編譯。在編譯的時候可能會遇到如下錯誤:

          1. zmalloc.h:50:31: 致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄

          解決辦法是:

          1. make MALLOC=libc

          編譯完成后就可以進行下面的集群安裝了

          集群安裝

          我們只需要配置好一臺機器的配置,其余的配置直接采用 scp 命令進行。

          配置

          1、創(chuàng)建 Redis 目錄

          為 6379、6380 兩個 Redis 實例創(chuàng)建數(shù)據(jù)目錄,該目錄用于存放 Redis 配置文件、日志數(shù)據(jù)等等。

          1. mkdir -p /var/redis/{6379,6380}

          2、Redis 配置文件

          將 Redis 目錄下的 redis.conf 配置文件 copy 到 /var/redis/6379,目錄下

          1. cp redis.conf /var/redis/redis6379.conf

          修改配置配置文件,內容如下:

          1. 注釋# bind 127.0.0.1

          2. protected-mode no

          3. port 6379

          4. daemonize yes

          5. cluster-enabled yes

          6. supervised no

          7. pidfile /var/run/redis_6379.pid

          8. logfile "/var/redis/6379/log"

          9. cluster-config-file /var/redis/nodes-6379.conf

          修改完成后,將該文件 copy 到 /var/redis/6380 目錄,同時將其內容中所有的 6379 修改為 6380

          3、啟動 Redis

          執(zhí)行如下兩個命令,啟動兩個 Redis 實例

          1. /usr/local/redis/src/redis-server /var/redis/6379/redis6379.conf

          2. /usr/local/redis/src/redis-server /var/redis/6379/redis6379.conf

          可以看看 Redis 啟動信息:

          同時,節(jié)點啟動后會在相應的目錄生成節(jié)點集群配置信息(cluster-config-file),文件內容記錄了集群初始狀態(tài),內容如下:

          1. [root@localhost 6379]# cat /var/redis/6379/nodes-6379.conf

          2. 4a903627773fe1b4a77d24a5aaa3a1ec0fe238e3:6379@16379 myself,master - 000 connected

          內容中最重要的是節(jié)點 ID(4a903627773fe1b4a77d24a5aaa3a1ec0fe238e3),他是一個 40 位 16 進制的字符串,用來唯一標識集群內的一個節(jié)點。節(jié)點 ID 在集群初始化時只創(chuàng)建一次,節(jié)點重啟時會加載集群配置文件進行重用。

          6 個 Redis 實例都已經(jīng)啟動成功了,但是 Redis 集群并沒有搭建完成,這些實例都不知道其他實例的存在,都是孤立的并沒有形成一個集群。查看集群節(jié)點新如下:

          1. 4a903627773fe1b4a77d24a5aaa3a1ec0fe238e3192.168.2.170:6379@16379 myself,master - 015552326790000 connected

          6 個節(jié)點相互獨立,如下:

          節(jié)點握手

          可以通過節(jié)點握手讓 6 個 Redis 節(jié)點建立聯(lián)系,從而形成一個集群。

          節(jié)點握手是指一批運行在集群模式下的節(jié)點通過 Gossip 協(xié)議彼此通信,達到感知對方的過程。

          通過在客戶端執(zhí)行命令 cluster meet{ip}{port} 就可以建立兩個節(jié)點之間的握手,該命令是一個異步命令,執(zhí)行后立刻返回,內部執(zhí)行握手的過程。過程如下:

          1. 節(jié)點 6379 本地創(chuàng)建 6380 節(jié)點信息對象,并發(fā)送 meet 消息。

          2. 節(jié)點 6380 接受到 meet 消息后,保存 6379 節(jié)點信息并回復 pong 消息。

          3. 之后節(jié)點 6379 和 6380 彼此定期通過 ping/pong 消息進行正常的節(jié)點通信。

          在節(jié)點 192.168.2.170:6379 節(jié)點執(zhí)行如下命令:

          1. cluster meet 192.168.2.1706380

          這樣 6379 節(jié)點就與 6380 之間建立了聯(lián)系,如下:

          繼續(xù)在該節(jié)點執(zhí)行如下命令:

          1. cluster meet 192.168.2.1516379

          2. cluster meet 192.168.2.1516380

          3. cluster meet 192.168.2.1426379

          4. cluster meet 192.168.2.1426380

          上面命令是可以在任意節(jié)點上面執(zhí)行,握手狀態(tài)會通過消息在集群內傳播,這樣其他節(jié)點會自動發(fā)現(xiàn)新節(jié)點并發(fā)起握手流程,這樣 6 個節(jié)點都互相感知了,建立了一個集群,如下圖:

          查看集群節(jié)點信息。

          在其余 5 個節(jié)點查看都可以得到相同的信息。

          6 個節(jié)點建立握手后,集群還是不能正常工作,這是因為還有沒有分配。Redis 集群一共 16384 個槽點,只有這些槽點全部分配節(jié)點后,集群才會進入在線狀態(tài)。

          分配槽點

          分配槽點的命令如下:

          1. redis-cli -h IP -p 端口 cluster addslots {begin.. end}

          Redis 集群分為主從,其中首次啟動的節(jié)點和被分配槽的節(jié)點都是主節(jié)點,從節(jié)點負責復制主節(jié)點槽信息和相關的數(shù)據(jù)。這里我們配置的三主三從,主節(jié)點為三臺服務器的 6379 節(jié)點,從節(jié)點為 6380 節(jié)點。所以整個命令如下:

          1. redis-cli -h 192.168.2.170-p 6379 cluster addslots {0..5460}


          2. redis-cli -h 192.168.2.151-p 6379 cluster addslots {5461..10922}


          3. redis-cli -h 192.168.2.142-p 6379 cluster addslots {10923..16383}

          這樣主節(jié)點就已經(jīng)配置完成了,下面則是配置從節(jié)點。cluster replicate{nodeId} 可以讓某個節(jié)點成為從節(jié)點,在三臺服務器執(zhí)行如下三個命令,注意 Redis 節(jié)點是 6380,不是 6379。

          1. cluster replicate 4a903627773fe1b4a77d24a5aaa3a1ec0fe238e3


          2. cluster replicate 03d20cfe6e98f4b6f09d5299a465845ce70008c3


          3. cluster replicate 00c46cd6b8875a4c8fafac6f773c5c90a5331c7d

          再次查看集群節(jié)點信息:

          到這里我們就已經(jīng)完成了 Redis 集群的搭建,整個集群圖例如下:

          我們測試下:

          驗證成功!!

          小編使用的是 Redis 5 ,而 Redis 5 不支持 redis-trib.rb 來搭建集群了,推薦使用 redis-cli 來操作,所以關于 redis-trib.rb 搭建集群的方式,小編就不介紹了,各位可以自行 Google。下面演示利用 redis-cli 來操作集群

          redis-cli 操作集群

          所有配置依然采用上面的 Redis 配置,啟動所有 Redis 服務(如果是復用上面的配置,需要刪除掉所有的 node-xx.conf)。

          我們可以利用 redis-cli--cluster help 查看利用 redis-cli 操作集群的命令幫助文檔,如下:

          搭建集群

          搭建集群的命令如下:

          1. create host1:port1 ... hostN:portN --cluster-replicas

          對于文中集群命令如下:

          1. redis-cli --cluster create 192.168.2.170:6379192.168.2.170:6380192.168.2.151:6379192.168.2.151:6380192.168.2.142:6379192.168.2.142:6380--cluster-replicas 1

          --cluster-replicas 1 表示一主一從,我們有 6個節(jié)點,即三主三從。運行結果如下:

          使用命令 redis-cli--cluster check 檢查創(chuàng)建集群的狀態(tài)

          1. redis-cli --cluster check 192.168.2.170:6379## 可以填寫任意節(jié)點,會帶出所有的

          從圖中可以看出,該命令自動

          使用命令 redis-cli--cluster info 查看集群信息,如下:

          更加的詳細信息如下:

          對于集群節(jié)點的刪除和添加,這里就不做演示了,兩個命令分別是 redis-cli--clusterdel-node host:port node_idredis-cli--cluster add-node new_host:new_port existing_host:existing_port--cluster-slave--cluster-master-id











          【死磕 Redis】----- 開篇

          【死磕 Redis】----- Redis 通信協(xié)議 RESP

          【死磕 Redis】----- Redis 的線程模型

          【死磕 Redis】----- 事務

          【死磕 Redis】----- 理解 pipeline 管道

          【死磕 Redis】----- 布隆過濾器

          【死磕 Redis】----- 發(fā)布與訂閱

          【死磕 Redis】-----如何排查 Redis 中的慢查詢

          【死磕 Redis】-----持久化

          【死磕 Redis】----- 主從復制(一):概述

          【死磕 Redis】----- 主從復制(二):全量復制和部分復制

          【死磕 Redis】----- 主從復制(三):注意的問題

          【死磕 Redis】----- 哨兵(一):部署哨兵架構

          【死磕 Redis】----- 哨兵(二):基本原理

          【死磕 Redis】----- info 命令詳解

          【死磕 Redis】------ 理解 Redis 的內存

          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷国产AV | 中文字幕在线观看第二页 | 天天看天天日 | 大香蕉伊人免费网站 | 亚洲一级性爱 |