介紹
redis三種模式
一、主從模式
????????Redis雖然讀取寫入的速度都特別快,但是也會產生讀壓力特別大的情況。為了分擔讀壓力,Redis支持主從復制,Redis的主從結構可以采用一主多從或者級聯結構。下圖為一主兩從結構。
怎樣實現主從復制? 1.從服務器初始化時進行全量同步 2.初始化完成后執行增量同步 優點 :實現數據備份,做到讀寫分離 缺點 :當主節點發生故障掉線時,需要人工進行:故障轉移
二、哨兵模式
????????可以說是主從復制的升級版本,增加了一個新的角色。由一個或多個哨兵實例組成的哨兵系統可以監視任意多個主服務器,以及這些主服務器屬下的所有從服務器,并在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級為新的主服務器。
Server1掉線后 之后:
優點: 如果Master 異常,則會進行Master-slave 轉換,自動實現故障轉移。將其中一個Slave作為Master,之前的Master重新上線后作為Slave、
缺點: 如果是從節點下線了,哨兵是不會對其進行故障轉移的,連接從節點的客戶端也無法獲取到新的可用從節點
三、 集群模式
????????任何兩個節點之間都是相互連通的。客戶端可以與0任何一個節點相連接,然后就可以訪問集群中的任何一個節點。對其進行存取和其他操作。一般集群建議搭建三主三從架構,三主提供服務,三從提供備份功能。每一個節點都存有這個集群所有主節點以及從節點的信息
掉線判斷: ????????過程是集群中所有master參與,如果半數以上master節點與某個master節點通信超時(cluster-node-timeout),認為該master節點掛掉.
什么時候整個集群不可用(cluster_state:fail)? (1)如果集群任意master掛掉,且當前master沒有slave.集群進入fail狀態, (2)如果集群超過半數以上master掛掉,無論是否有slave,集群進入fail狀態.
優點: ????????有效的解決了redis在分布式方面的需求遇到單機內存。并發和流量瓶頸等問題時,可采用集群方案達到負載均衡的目的。可實現動態擴容。自動故障轉移
缺點: 架構新,實踐較少 今天這里為大家講解的是集群模式(也稱為三主三從模式) 先介紹一下,我們的服務器信息(3臺服務器,cpu,內存、數據盤等不作要求)
192.168.100.21master 192.168.100.22 slaves1 192.168.100.22 slaves2
一、上傳解壓先在每臺機器上部署單機redis
1、上傳 2、解壓
[root@master servers]# pwd
/opt/servers
[root@master servers]# tar -zxvf redis-5.0.8.tar.gz -C /opt/servers/
3、安裝redis的相關依賴 這里三臺機器都需要安裝
[root@slaves2 ~]# yum -y install gcc-c++ tcl
4、進入redis編譯
[root@master servers]# cd redis-5.0.8/
[root@master redis-5.0.8]# make && make install
5、修改redis配置文件 創建日志文件 cd /opt/servers/redis-5.0.8/ mkdir -p /opt/servers/redis-5.0.8/logs mkdir -p /opt/servers/redis-5.0.8/redisdata 編輯 vim redis.conf
#設置ip
bind 本機ip
#設置讓redis開啟后可以在后臺運行,除非kill -9,如果設置為no,exit后redis就關閉
daemonize yes
#保存redis的pid,這是默認路徑,可自行修改
pidfile /var/run/redis_6379.pid
#保存日志文件
logfile "/opt/servers/redis-5.0.8/logs/redis.log"
#本地數據庫存放路徑
dir /opt/servers/redis-5.0.8/redisdata#密碼設置
#主節點密碼設置
#requirepass 1234abcD 配置集群這里先不要設置密碼
6、啟動
[root@node01 redis-5.0.8]# cd /opt/servers/redis-5.0.8/src/
[root@node01 src]# redis-server ../redis.conf
ps -ef | grep redis
二、開始將單機模式變成三主三從集群
1、每臺創建其中兩實例對應的配置文件、日志文件及數據文件的存放目錄
mkdir –p /opt/servers/redis-5.0.8/16379
mkdir –p /opt/servers/redis-5.0.8/16380
mkdir –p /opt/servers/redis-5.0.8/log
mkdir –p /opt/servers/redis-5.0.8/redisdata16379
mkdir –p /opt/servers/redis-5.0.8/redisdata16380
2、拷貝配置文件 將redis.conf分別拷貝到16379、16380中
cp /opt/servers/redis-5.0.8/redis.conf /opt/servers/redis-5.0.8/16379
3、修改配置文件 vim /opt/servers/redis-5.0.8/16379/redis.conf
#設置ip
bind 本機ip
#開啟集群模式
cluster-enabled yes
#設置集群模式config文件(是集群自動創建,用于記錄集群節點信息以及持久化參數)
cluster-config-file nodes-16379.conf
#設置讓redis開啟后可以在后臺運行,除非kill -9,如果設置為no,exit后redis就關閉
daemonize yes
#設置端口
port 16379
#保存redis的pid,這是默認路徑,可自行修改
pidfile /var/run/redis_16379.pid
#保存日志文件
logfile "/opt/servers/redis-5.0.8/logs/redis-16379.log"
#本地數據庫存放路徑
dir /opt/servers/redis-5.0.8/redisdata16379
cp /opt/servers/redis-5.0.8/16379/redis.conf /opt/servers/redis-5.0.8/16380/ vim /opt/servers/redis-5.0.8/1638/redis.conf
#設置集群模式config文件(是集群自動創建,用于記錄集群節點信息以及持久化參數)
cluster-config-file nodes-16380.conf
#設置端口
port 16380
#保存redis的pid,這是默認路徑,可自行修改
pidfile /var/run/redis_16380id
#保存日志文件
logfile "/opt/servers/redis-5.0.8/logs/redis-16380og"
#本地數據庫存放路徑
dir /opt/servers/redis-5.0.8/redisdata16380
4、啟動 先在每臺機器上啟動
cd /opt/servers/redis-5.0.8/src/
redis-server ../16379/redis.conf
redis-server ../16380/redis.conf
5、查看集群狀態是否正常
[root@master redis-5.0.8]# ps -ef | grep redis
root 17676 1 0 21:51 ? 00:00:00 src/redis-server master:16379 [cluster]
root 17685 1 0 21:51 ? 00:00:00 src/redis-server master:16380 [cluster]
root 17729 9823 0 21:52 pts/0 00:00:00 grep --color=auto redis
這里大家注意一下: 如果使用5.0版本以上的redis創建集群的命令就有所不同了,原因是因為redis5.0使用redis-cli作為創建集群的命令,使用c語言實現,不再使用ruby語言。 6、這里我先為大家直接講一下redis5.0版本的,后面在為大家擴展5.0以下redis版本,創建集群的方式。
[root@master redis-5.0.8]# src/redis-cli --cluster create 192.168.100.21:16379 192.168.100.21:16380 192.168.100.22:16379 192.168.100.22:16380 192.168.100.23:16379 192.168.100.23:16380 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.100.22:16380 to 192.168.100.21:16379
Adding replica 192.168.100.23:16380 to 192.168.100.22:16379
Adding replica 192.168.100.21:16380 to 192.168.100.23:16379
M: 2cda3eec9cb484a7d91103e998c3a5e3e6791961 192.168.100.21:16379slots:[0-5460] (5461 slots) master
S: 6f3d94bf87d0237f35b638944493a99ecb92d603 192.168.100.21:16380replicates 646a498c7b3406395a62e1df2dc418fc834d257e
M: 8057cb6e27f0baeb9306c475e99cbb0272c3c946 192.168.100.22:16379slots:[5461-10922] (5462 slots) master
S: 2f77c304a17db87a273892109181250006c8716a 192.168.100.22:16380replicates 2cda3eec9cb484a7d91103e998c3a5e3e6791961
M: 646a498c7b3406395a62e1df2dc418fc834d257e 192.168.100.23:16379slots:[10923-16383] (5461 slots) master
S: 88786bdaee76fffd171cd670db9227152d1fb2d2 192.168.100.23:16380replicates 8057cb6e27f0baeb9306c475e99cbb0272c3c946
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.........
>>> Performing Cluster Check (using node 192.168.100.21:16379)
M: 2cda3eec9cb484a7d91103e998c3a5e3e6791961 192.168.100.21:16379slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 2f77c304a17db87a273892109181250006c8716a 192.168.100.22:16380slots: (0 slots) slavereplicates 2cda3eec9cb484a7d91103e998c3a5e3e6791961
S: 88786bdaee76fffd171cd670db9227152d1fb2d2 192.168.100.23:16380slots: (0 slots) slavereplicates 8057cb6e27f0baeb9306c475e99cbb0272c3c946
M: 8057cb6e27f0baeb9306c475e99cbb0272c3c946 192.168.100.22:16379slots:[5461-10922] (5462 slots) master1 additional replica(s)
S: 6f3d94bf87d0237f35b638944493a99ecb92d603 192.168.100.21:16380slots: (0 slots) slavereplicates 646a498c7b3406395a62e1df2dc418fc834d257e
M: 646a498c7b3406395a62e1df2dc418fc834d257e 192.168.100.23:16379slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
7、登入,并且設置主從的密碼
[root@master redis-5.0.8]# src/redis-cli -h master -p 16379 -c
master:16379> config set masterauth 1234abcD
OK
master:16379> config set requirepass 1234abcD
OKmaster:16379> auth '1234abcD'
OK
master:16379> CONFIG rewrite
OK
master:16379> set name 123
-> Redirected to slot [5798] located at 192.168.100.22:16379
OK
192.168.100.22:16379> keys *
1) "name"
192.168.100.22:16379>
master:16379> auth '1234abcD'
OK
#重寫配置
master:16379> CONFIG rewrite
OK
master:16379> set name 123
-> Redirected to slot [5798] located at 192.168.100.22:16379
OK
192.168.100.22:16379> keys *
1) "name"
#查看集群的詳細信息
192.168.100.22:16379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:3
cluster_stats_messages_ping_sent:1584
cluster_stats_messages_pong_sent:1488
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:3077
cluster_stats_messages_ping_received:1487
cluster_stats_messages_pong_received:1589
cluster_stats_messages_meet_received:1
cluster_stats_messages_received:3077
192.168.100.22:16379>
#查看主從之間的關系
192.168.100.22:16379> cluster nodes
88786bdaee76fffd171cd670db9227152d1fb2d2 192.168.100.23:16380@26380 slave 8057cb6e27f0baeb9306c475e99cbb0272c3c946 0 1611981803000 6 connected
8057cb6e27f0baeb9306c475e99cbb0272c3c946 192.168.100.22:16379@26379 myself,master - 0 1611981804000 3 connected 5461-10922
2f77c304a17db87a273892109181250006c8716a 192.168.100.22:16380@26380 slave 2cda3eec9cb484a7d91103e998c3a5e3e6791961 0 1611981805000 4 connected
646a498c7b3406395a62e1df2dc418fc834d257e 192.168.100.23:16379@26379 master - 0 1611981805965 5 connected 10923-16383
2cda3eec9cb484a7d91103e998c3a5e3e6791961 192.168.100.21:16379@26379 master - 0 1611981804000 1 connected 0-5460
6f3d94bf87d0237f35b638944493a99ecb92d603 192.168.100.21:16380@26380 slave 646a498c7b3406395a62e1df2dc418fc834d257e 0 1611981805000 5 connected
擴展:
當如果你們使用redis的5.0版本以下的后可能會出現這個錯誤: (error) CLUSTERDOWN Hash slot not served
1、準備redis-trib.rb的運行環境 相關連接:https://blog.csdn.net/weixin_45697341/article/details/102736907
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz
yum -y install zlib-devel
tar xvf ruby-2.5.1.tar.gz
cd ruby-2.5.1/
./configure -prefix=/usr/local/ruby
make
make install
cd /usr/local/ruby/
cp bin/ruby /usr/local/bin
cp bin/gem /usr/local/bin
2、安裝redis-trib依賴
wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem
3、構建集群 ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
10、驗證集群 通過客戶端命令連接上,通過集群命令看一下狀態和節點信息等
[root@master src]# ./redis-cli -h 192.168.100.21 -p 16379 -c
192.168.100.21:16379> auth '密碼'
OK192.168.100.21:16379> clster info
192.168.100.21:16379> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0
總結
以上是生活随笔 為你收集整理的Redis三主三从集群搭建(三台机器) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。