redis集群搭建

就寫給自己以后忘記的時(shí)候看看,不一定正確

安裝redis

wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar xzf redis-5.0.3.tar.gz
cd redis-5.0.3
make
cd src
cp redis-cli redis-sentinel redis-server /usr/sbin
#配置文件模板在redis-5.0.3目錄里面
cd ../
cp redis.conf sentinel.conf /etc/   #方便等下運(yùn)行的時(shí)候,指定配置文件

一、搭建master-slave模式 (主備模式)

192.168.3.27 (master)
192.168.3.26 (slave)

修改master上的配置文件
vim /etc/redis.conf

然后在文件里面修改一下配置

bind 127.0.0.1====>bind 0.0.0.0  #方便其他機(jī)器訪問
daemonize no====>daemonize yes  #以后臺(tái)方式運(yùn)行
logfile ""====>logfile "/var/log/redis.conf"  #指定日志文件,方便追蹤排查

然后運(yùn)行

redis-server /etc/redis.conf
修改slave主機(jī)上的配置文件

修改和master一樣的設(shè)置后,在redis.conf里面增加

replicaof 192.168.3.27 6379   #指定本機(jī)的master為192.168.3.27

然后運(yùn)行

redis-server /etc/redis.conf
查看運(yùn)行結(jié)果
slave運(yùn)行信息
master運(yùn)行信息
驗(yàn)證

image.png

在master上設(shè)置一個(gè)key后,在slave上也有相應(yīng)的key,默認(rèn)情況該模式下,主服務(wù)器上可以進(jìn)行讀寫,從服務(wù)器只能讀,如:
image.png

但是如果在從服務(wù)器的配置文件修改配置
image.png

將replica-read-only的值yes改成no,重啟后,就可以讀寫
ps:從服務(wù)器配置成可以寫入,但是寫入的值并不會(huì)同步到主服務(wù)器上

同步機(jī)制
image.png
  • 當(dāng)slave第一次連上master時(shí),會(huì)進(jìn)行一次完整同步
  • 當(dāng)master上寫入新的值時(shí),slave會(huì)向master請求一次partial resynchronization,根據(jù)offset值,只進(jìn)行增量同步
  • 當(dāng)master重啟之后,slave向master請求增量同步時(shí),由于和之前的id不一致,所以會(huì)重新進(jìn)行一次完整同步

二、搭建master-sentinel模式 (哨兵模式)

sentinel模式可以在master下線后,從slave中選擇一臺(tái)升級為master。
配置環(huán)境列表:
ip: 11.11.1.108 port: 6379 (master) -------- ip: 11.11.1.108 port: 26379 (sentinel進(jìn)程)
ip: 11.11.1.107 port: 6379 (slave) -------- ip: 11.11.1.107 port: 26379 (sentinel進(jìn)程)
ip: 11.11.1.106 port: 6379 (master) -------- ip: 11.11.1.106 port: 26379 (sentinel進(jìn)程)

配置文件:
1、首先按照主備分別配置3臺(tái)服務(wù)器 ()
slave上的redis.conf 上,在默認(rèn)的配置文件里面添加

replicaof 11.11.1.108 6379   # 標(biāo)明是108的slave

然后在3臺(tái)服務(wù)器上分別啟動(dòng)redis

redis-server /etc/redis/redis.conf

2、配置 sentinel
下面是配置sentinel文件的典型配置:

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
  • sentinel monitor <master-group-name> <ip> <port> <quorum>
    意思是sentinel進(jìn)程,去監(jiān)聽一組名稱為:master-group-name 的redis服務(wù)。
    quorum的意思是仲裁的數(shù)量,例如 sentinel monitor mymaster 127.0.0.1 6379 2
    表示監(jiān)聽一組名稱為mymaster的服務(wù),監(jiān)聽的地址是127.0.0.1的6379端口, 仲裁的數(shù)量為2。
    ps: 需要設(shè)置仲裁的原因是,redis-sentinel模式是靠sentinel進(jìn)程去監(jiān)聽服務(wù),然后去變換master,如果你集群里面設(shè)置3個(gè)redis服務(wù),然后只有一個(gè)sentinel去監(jiān)聽,那么當(dāng)這個(gè)sentinel進(jìn)程掛掉的時(shí)候,就不會(huì)自動(dòng)變換master了呀。quorum = 2 表示兩個(gè)sentinel進(jìn)程監(jiān)聽到master下線了,就會(huì)觸發(fā)變換master的過程

  • down-after-milliseconds
    實(shí)例無法訪問超過這個(gè)時(shí)間后,sentinel就會(huì)認(rèn)為這個(gè)master已經(jīng)下線

  • parallel-syncs
    在執(zhí)行故障轉(zhuǎn)移時(shí), 最多可以有多少個(gè)從服務(wù)器同時(shí)對新的主服務(wù)器進(jìn)行同步

  • failover-timeout
    故障轉(zhuǎn)移時(shí),超時(shí)的時(shí)間

3、配置
配置11.11.1.108 (master) sentinel.conf

port 26379
bind 0.0.0.0
daemonize yes
sentinel monitor zycloud localhost 6379 2
sentinel down-after-milliseconds zycloud 30000
sentinel failover-timeout zycloud 180000
sentinel parallel-syncs zycloud 1

配置11.11.1.106,11.11.1.107 sentinel.conf

port 26379
bind 0.0.0.0
daemonize yes
sentinel monitor zycloud 11.11.1.108 6379 2
sentinel down-after-milliseconds zycloud 30000
sentinel failover-timeout zycloud 180000
sentinel parallel-syncs zycloud 1

然后在3臺(tái)服務(wù)器上分別把sentinel啟動(dòng)

redis-sentinel /etc/redis/sentinel.conf

4、測試

  • 首先在3臺(tái)服務(wù)器都存活的情況下


    image.png

    目前初始情況下,108是master。
    查看一下sentinel的信息:

~ redis-cli -h 11.11.1.108 -p 26379
11.11.1.108:26379> sentinel masters
1)  1) "name"
    2) "zycloud"
    3) "ip"
    4) "127.0.0.1"    #目前的master ip ,由于是通過108登錄進(jìn)來的,所以目前顯示的是127.0.0.1
    5) "port"
    6) "6379"
    7) "runid"
    8) "9d626bf0aaf0bdd9f00925436ac6b59702f68121"
    9) "flags"
   10) "master"
   11) "link-pending-commands"
   12) "0"

也可以通過sentinel的get-master-addr-by-name來獲取目前的master ip

11.11.1.108:26379> sentinel get-master-addr-by-name zycloud
1) "127.0.0.1"
2) "6379"
  • 現(xiàn)在斷開master,可以只殺掉redis-server的進(jìn)程,也可以直接關(guān)機(jī),我比較懶,直接斷開master的網(wǎng)卡
~ redis-cli -h 11.11.1.106 -p 26379
11.11.1.106:26379> sentinel get-master-addr-by-name zycloud
1) "11.11.1.107"
2) "6379"
11.11.1.106:26379>

可以看到,現(xiàn)在的master已經(jīng)被更換為107了。


1)由于上面設(shè)置的quorum = 2,所以測試的時(shí)候,最少需要兩個(gè)sentinel進(jìn)程存活,否則是無法選舉新的master
2)選舉哪臺(tái)從服務(wù)器升級為master是根據(jù)配置文件redis.conf里的replica-priority判斷的

image.png

3)配置文件redis.conf是會(huì)被sentinel修改配置的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 部署集群環(huán)境 1)redis集群搭建至少需要六臺(tái)機(jī)器,才能組成, ip地址規(guī)劃如下: – redisA 192....
    浪子心聲427閱讀 299評論 0 0
  • Redis集群 使用redis做緩存工具 實(shí)現(xiàn)系統(tǒng)高可用,redis需要做主備。使用redis做分片集群。 向業(yè)務(wù)...
    tanghuibook閱讀 614評論 0 0
  • 一、Redis集群簡介 目前redis的集群有3種搭建方式: 1)keepalived:通過 keepalived...
    面朝大海_1234閱讀 3,733評論 0 0
  • 背景 在測試服務(wù)器(CentOS 系統(tǒng))上搭建 Redis 集群,這里一步步實(shí)踐并整理一些較好的步驟。 正文 簡單...
    mrzhqiang閱讀 626評論 0 0

友情鏈接更多精彩內(nèi)容