主頁 > 知識庫 > Redis集群的關閉與重啟操作

Redis集群的關閉與重啟操作

熱門標簽:魔獸2青云地圖標注 山東外呼銷售系統(tǒng)招商 鄭州人工智能電銷機器人系統(tǒng) 日本中國地圖標注 十堰營銷電銷機器人哪家便宜 貴州電銷卡外呼系統(tǒng) 超呼電話機器人 北京400電話辦理收費標準 宿遷便宜外呼系統(tǒng)平臺

Redis集群關閉與重啟

1、注意

[root@master bin]# ./redis-cli --cluster create 192.168.230.21:7001 192.168.230.21:7002 192.168.230.21:7003 192.168.230.21:8001 192.168.230.21:8002 192.168.230.21:8003 --cluster-replicas 1 -a 123456

上面的命令只能在新創(chuàng)健集群的時候執(zhí)行一次,目的是為了建立內(nèi)部各個節(jié)點的對應關系,比如主從關系,這些關系僅且只能在一個集群中初始化時對應一次;

如果再此執(zhí)行,則會出現(xiàn)如下錯誤:

[root@master bin]# ./redis-cli --cluster create 192.168.230.21:7001 192.168.230.21:7002 192.168.230.21:7003 192.168.230.21:8001 192.168.230.21:8002 192.168.230.21:8003 --cluster-replicas 1 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
[ERR] Node 192.168.230.21:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

2、集群關閉

集群關閉直接將各個節(jié)點的進程kill掉即可;

[root@master bin]# ps -ef | grep redis
root      11516      1  0 16:15 ?        00:00:10 ./redis-server 192.168.230.21:7002 [cluster]
root      11521      1  0 16:15 ?        00:00:09 ./redis-server 192.168.230.21:7003 [cluster]
root      11526      1  0 16:15 ?        00:00:10 ./redis-server 192.168.230.21:8001 [cluster]
root      11531      1  0 16:15 ?        00:00:10 ./redis-server 192.168.230.21:8002 [cluster]
root      11536      1  0 16:15 ?        00:00:10 ./redis-server 192.168.230.21:8003 [cluster]
root      11869      1  0 16:33 ?        00:00:07 ./redis-server 192.168.230.21:7001 [cluster]
root      12528   9737  0 17:39 pts/7    00:00:00 grep --color=auto redis
[root@master bin]# kill -9 11516
[root@master bin]# kill -9 11521
[root@master bin]# kill -9 11526
[root@master bin]# kill -9 11531
[root@master bin]# kill -9 11536
[root@master bin]# kill -9 11869
[root@master bin]# ps -ef | grep redis
root      12552   9737  0 17:40 pts/7    00:00:00 grep --color=auto redis

3、集群開啟及連接

(1)集群開啟

[root@master bin]# ./redis-server /opt/softWare/redis-cluster/redis01/redis.conf 
12553:C 31 Mar 2020 17:40:59.875 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12553:C 31 Mar 2020 17:40:59.875 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12553, just started
12553:C 31 Mar 2020 17:40:59.875 # Configuration loaded
[root@master bin]# ./redis-server /opt/softWare/redis-cluster/redis02/redis.conf 
12558:C 31 Mar 2020 17:41:03.697 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12558:C 31 Mar 2020 17:41:03.697 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12558, just started
12558:C 31 Mar 2020 17:41:03.697 # Configuration loaded
[root@master bin]# ./redis-server /opt/softWare/redis-cluster/redis03/redis.conf 
12563:C 31 Mar 2020 17:41:06.702 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12563:C 31 Mar 2020 17:41:06.702 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12563, just started
12563:C 31 Mar 2020 17:41:06.702 # Configuration loaded
[root@master bin]# ./redis-server /opt/softWare/redis-cluster/redis04/redis.conf 
12568:C 31 Mar 2020 17:41:09.742 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12568:C 31 Mar 2020 17:41:09.742 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12568, just started
12568:C 31 Mar 2020 17:41:09.742 # Configuration loaded
[root@master bin]# ./redis-server /opt/softWare/redis-cluster/redis05/redis.conf 
12574:C 31 Mar 2020 17:41:12.760 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12574:C 31 Mar 2020 17:41:12.760 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12574, just started
12574:C 31 Mar 2020 17:41:12.760 # Configuration loaded
[root@master bin]# ./redis-server /opt/softWare/redis-cluster/redis06/redis.conf 
12580:C 31 Mar 2020 17:41:16.406 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12580:C 31 Mar 2020 17:41:16.406 # Redis version=5.0.5, bits=64, commit=00000000, modified=0, pid=12580, just started
12580:C 31 Mar 2020 17:41:16.406 # Configuration loaded
[root@master bin]# ps -ef | grep redis
root      12554      1  0 17:40 ?        00:00:00 ./redis-server 192.168.230.21:7001 [cluster]
root      12559      1  0 17:41 ?        00:00:00 ./redis-server 192.168.230.21:7002 [cluster]
root      12564      1  0 17:41 ?        00:00:00 ./redis-server 192.168.230.21:7003 [cluster]
root      12569      1  0 17:41 ?        00:00:00 ./redis-server 192.168.230.21:8001 [cluster]
root      12575      1  0 17:41 ?        00:00:00 ./redis-server 192.168.230.21:8002 [cluster]
root      12581      1  0 17:41 ?        00:00:00 ./redis-server 192.168.230.21:8003 [cluster]
root      12587   9737  0 17:41 pts/7    00:00:00 grep --color=auto redis

(2)集群連接

[root@master bin]# ./redis-cli -p 7001 -a 123456 -h 192.168.230.21 -a 123456 -c
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.230.21:7001> DBSIZE
(integer) 2
192.168.230.21:7001> keys *
1) "aa"
2) "ss"
192.168.230.21:7001> set str STR
-> Redirected to slot [6928] located at 192.168.230.21:7002
OK
192.168.230.21:7002>

Redis的三種集群方式

redis有三種集群方式:主從復制,哨兵模式和集群。

1.主從復制

主從復制原理:

  • 從服務器連接主服務器,發(fā)送SYNC命令;
  • 主服務器接收到SYNC命名后,開始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫命令;
  • 主服務器BGSAVE執(zhí)行完后,向所有從服務器發(fā)送快照文件,并在發(fā)送期間繼續(xù)記錄被執(zhí)行的寫命令;
  • 從服務器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照;
  • 主服務器快照發(fā)送完畢后開始向從服務器發(fā)送緩沖區(qū)中的寫命令;
  • 從服務器完成對快照的載入,開始接收命令請求,并執(zhí)行來自主服務器緩沖區(qū)的寫命令;(從服務器初始化完成)
  • 主服務器每執(zhí)行一個寫命令就會向從服務器發(fā)送相同的寫命令,從服務器接收并執(zhí)行收到的寫命令(從服務器初始化完成后的操作)

主從復制優(yōu)缺點:

優(yōu)點:

  • 支持主從復制,主機會自動將數(shù)據(jù)同步到從機,可以進行讀寫分離
  • 為了分載Master的讀操作壓力,Slave服務器可以為客戶端提供只讀操作的服務,寫服務仍然必須由Master來完成
  • Slave同樣可以接受其它Slaves的連接和同步請求,這樣可以有效的分載Master的同步壓力。
  • Master Server是以非阻塞的方式為Slaves提供服務。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請求。
  • Slave Server同樣是以非阻塞的方式完成數(shù)據(jù)同步。在同步期間,如果有客戶端提交查詢請求,Redis則返回同步之前的數(shù)據(jù)

缺點:

  • Redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
  • 主機宕機,宕機前有部分數(shù)據(jù)未能及時同步到從機,切換IP后還會引入數(shù)據(jù)不一致的問題,降低了系統(tǒng)的可用性。
  • Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。

2.哨兵模式

當主服務器中斷服務后,可以將一個從服務器升級為主服務器,以便繼續(xù)提供服務,但是這個過程需要人工手動來操作。 為此,Redis 2.8中提供了哨兵工具來實現(xiàn)自動化的系統(tǒng)監(jiān)控和故障恢復功能。

哨兵的作用就是監(jiān)控Redis系統(tǒng)的運行狀況。它的功能包括以下兩個。

(1)監(jiān)控主服務器和從服務器是否正常運行。

(2)主服務器出現(xiàn)故障時自動將從服務器轉(zhuǎn)換為主服務器。

哨兵的工作方式:

  • 每個Sentinel(哨兵)進程以每秒鐘一次的頻率向整個集群中的Master主服務器,Slave從服務器以及其他Sentinel(哨兵)進程發(fā)送一個 PING 命令。
  • 如果一個實例(instance)距離最后一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel(哨兵)進程標記為主觀下線(SDOWN)
  • 如果一個Master主服務器被標記為主觀下線(SDOWN),則正在監(jiān)視這個Master主服務器的所有 Sentinel(哨兵)進程要以每秒一次的頻率確認Master主服務器的確進入了主觀下線狀態(tài)
  • 當有足夠數(shù)量的 Sentinel(哨兵)進程(大于等于配置文件指定的值)在指定的時間范圍內(nèi)確認Master主服務器進入了主觀下線狀態(tài)(SDOWN), 則Master主服務器會被標記為客觀下線(ODOWN)
  • 在一般情況下, 每個 Sentinel(哨兵)進程會以每 10 秒一次的頻率向集群中的所有Master主服務器、Slave從服務器發(fā)送 INFO 命令。
  • 當Master主服務器被 Sentinel(哨兵)進程標記為客觀下線(ODOWN)時,Sentinel(哨兵)進程向下線的 Master主服務器的所有 Slave從服務器發(fā)送 INFO 命令的頻率會從 10 秒一次改為每秒一次。
  • 若沒有足夠數(shù)量的 Sentinel(哨兵)進程同意 Master主服務器下線, Master主服務器的客觀下線狀態(tài)就會被移除。若 Master主服務器重新向 Sentinel(哨兵)進程發(fā)送 PING 命令返回有效回復,Master主服務器的主觀下線狀態(tài)就會被移除。

哨兵模式的優(yōu)缺點

優(yōu)點:

  • 哨兵模式是基于主從模式的,所有主從的優(yōu)點,哨兵模式都具有。
  • 主從可以自動切換,系統(tǒng)更健壯,可用性更高。

缺點:

  • Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。

3.Redis-Cluster集群

redis的哨兵模式基本已經(jīng)可以實現(xiàn)高可用,讀寫分離 ,但是在這種模式下每臺redis服務器都存儲相同的數(shù)據(jù),很浪費內(nèi)存,所以在redis3.0上加入了cluster模式,實現(xiàn)的redis的分布式存儲,也就是說每臺redis節(jié)點上存儲不同的內(nèi)容。

Redis-Cluster采用無中心結(jié)構,它的特點如下:

  • 所有的redis節(jié)點彼此互聯(lián)(PING-PONG機制),內(nèi)部使用二進制協(xié)議優(yōu)化傳輸速度和帶寬。
  • 節(jié)點的fail是通過集群中超過半數(shù)的節(jié)點檢測失效時才生效。
  • 客戶端與redis節(jié)點直連,不需要中間代理層.客戶端不需要連接集群所有節(jié)點,連接集群中任何一個可用節(jié)點即可。

工作方式:

在redis的每一個節(jié)點上,都有這么兩個東西,一個是插槽(slot),它的的取值范圍是:0-16383。還有一個就是cluster,可以理解為是一個集群管理的插件。當我們的存取的key到達的時候,redis會根據(jù)crc16的算法得出一個結(jié)果,然后把結(jié)果對 16384 求余數(shù),這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節(jié)點,然后直接自動跳轉(zhuǎn)到這個對應的節(jié)點上進行存取操作。

為了保證高可用,redis-cluster集群引入了主從模式,一個主節(jié)點對應一個或者多個從節(jié)點,當主節(jié)點宕機的時候,就會啟用從節(jié)點。當其它主節(jié)點ping一個主節(jié)點A時,如果半數(shù)以上的主節(jié)點與A通信超時,那么認為主節(jié)點A宕機了。如果主節(jié)點A和它的從節(jié)點A1都宕機了,那么該集群就無法再提供服務了。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 比較幾種Redis集群方案
  • Redis 哨兵集群的實現(xiàn)
  • 詳解Redis集群搭建的三種方式
  • 深入淺析Redis 集群伸縮原理
  • Redis6.0搭建集群Redis-cluster的方法
  • redis 集群批量操作實現(xiàn)
  • Redis主從集群切換數(shù)據(jù)丟失的解決方案

標簽:吉安 朝陽 大慶 江蘇 北京 楊凌 果洛 臺州

巨人網(wǎng)絡通訊聲明:本文標題《Redis集群的關閉與重啟操作》,本文關鍵詞  Redis,集群,的,關閉,與,重啟,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Redis集群的關閉與重啟操作》相關的同類信息!
  • 本頁收集關于Redis集群的關閉與重啟操作的相關信息資訊供網(wǎng)民參考!
  • 推薦文章