1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 4757字,需瀏覽 10分鐘

         ·

        2020-08-07 00:18

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

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

        準(zhǔn)備工作

        本次集群準(zhǔn)備三臺(tái)服務(wù)器(虛擬機(jī)也可以),每臺(tái)服務(wù)器上面安裝兩個(gè) Redis 實(shí)例,端口分別是 6379 和 6380,如下:

        IPRedis 實(shí)例
        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

        編譯。在編譯的時(shí)候可能會(huì)遇到如下錯(cuò)誤:

        1. zmalloc.h:50:31: 致命錯(cuò)誤:jemalloc/jemalloc.h:沒有那個(gè)文件或目錄

        解決辦法是:

        1. make MALLOC=libc

        編譯完成后就可以進(jìn)行下面的集群安裝了

        集群安裝

        我們只需要配置好一臺(tái)機(jī)器的配置,其余的配置直接采用 scp 命令進(jìn)行。

        配置

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

        為 6379、6380 兩個(gè) Redis 實(shí)例創(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

        修改配置配置文件,內(nèi)容如下:

        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 目錄,同時(shí)將其內(nèi)容中所有的 6379 修改為 6380

        3、啟動(dòng) Redis

        執(zhí)行如下兩個(gè)命令,啟動(dòng)兩個(gè) Redis 實(shí)例

        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 啟動(dòng)信息:

        同時(shí),節(jié)點(diǎn)啟動(dòng)后會(huì)在相應(yīng)的目錄生成節(jié)點(diǎn)集群配置信息(cluster-config-file),文件內(nèi)容記錄了集群初始狀態(tài),內(nèi)容如下:

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

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

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

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

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

        6 個(gè)節(jié)點(diǎn)相互獨(dú)立,如下:

        節(jié)點(diǎn)握手

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

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

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

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

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

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

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

        1. cluster meet 192.168.2.1706380

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

        繼續(xù)在該節(jié)點(diǎn)執(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é)點(diǎn)上面執(zhí)行,握手狀態(tài)會(huì)通過消息在集群內(nèi)傳播,這樣其他節(jié)點(diǎn)會(huì)自動(dòng)發(fā)現(xiàn)新節(jié)點(diǎn)并發(fā)起握手流程,這樣 6 個(gè)節(jié)點(diǎn)都互相感知了,建立了一個(gè)集群,如下圖:

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

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

        6 個(gè)節(jié)點(diǎn)建立握手后,集群還是不能正常工作,這是因?yàn)檫€有沒有分配。Redis 集群一共 16384 個(gè)槽點(diǎn),只有這些槽點(diǎn)全部分配節(jié)點(diǎn)后,集群才會(huì)進(jìn)入在線狀態(tài)。

        分配槽點(diǎn)

        分配槽點(diǎn)的命令如下:

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

        Redis 集群分為主從,其中首次啟動(dòng)的節(jié)點(diǎn)和被分配槽的節(jié)點(diǎn)都是主節(jié)點(diǎn),從節(jié)點(diǎn)負(fù)責(zé)復(fù)制主節(jié)點(diǎn)槽信息和相關(guān)的數(shù)據(jù)。這里我們配置的三主三從,主節(jié)點(diǎn)為三臺(tái)服務(wù)器的 6379 節(jié)點(diǎn),從節(jié)點(diǎn)為 6380 節(jié)點(diǎn)。所以整個(gè)命令如下:

        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é)點(diǎn)就已經(jīng)配置完成了,下面則是配置從節(jié)點(diǎn)。cluster replicate{nodeId} 可以讓某個(gè)節(jié)點(diǎn)成為從節(jié)點(diǎn),在三臺(tái)服務(wù)器執(zhí)行如下三個(gè)命令,注意 Redis 節(jié)點(diǎn)是 6380,不是 6379。

        1. cluster replicate 4a903627773fe1b4a77d24a5aaa3a1ec0fe238e3


        2. cluster replicate 03d20cfe6e98f4b6f09d5299a465845ce70008c3


        3. cluster replicate 00c46cd6b8875a4c8fafac6f773c5c90a5331c7d

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

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

        我們測(cè)試下:

        驗(yàn)證成功!!

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

        redis-cli 操作集群

        所有配置依然采用上面的 Redis 配置,啟動(dòng)所有 Redis 服務(wù)(如果是復(fù)用上面的配置,需要?jiǎng)h除掉所有的 node-xx.conf)。

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

        搭建集群

        搭建集群的命令如下:

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

        對(duì)于文中集群命令如下:

        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個(gè)節(jié)點(diǎn),即三主三從。運(yùn)行結(jié)果如下:

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

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

        從圖中可以看出,該命令自動(dòng)

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

        更加的詳細(xì)信息如下:

        對(duì)于集群節(jié)點(diǎn)的刪除和添加,這里就不做演示了,兩個(gè)命令分別是 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】----- 事務(wù)

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

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

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

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

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

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

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

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

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

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

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

        【死磕 Redis】------ 理解 Redis 的內(nèi)存

        瀏覽 40
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            老男人玩的我太爽啦 | www..com黄 | 成人做爱黄片 | 91精品综合明星换脸 | 欧美大鸡巴网 | 日本三级免费 | 欧美变态口味重另类hd | 激情五月开心五月 | 免费观看日逼视频 | 9.1成人黄~A片 |