MySQL 案例實戰--MySQL資料庫 多表查詢
Redis叢集
主從複製用來解決資料的冗餘備份,從節點僅僅用來同步資料,而哨兵機制實現了故障轉移,但是,哨兵機制無法解決:1)單節點併發壓力問題2)單節點記憶體和磁碟物理上限問題。
1.叢集
redis在3.0之後開始支援Cluster(模式),目前redis的叢集支援節點的自動發現,支援skave-master選舉和容錯,支援線上分片(sharding shard)等特性。
2. 叢集細節
-
所有的redis節點彼此互聯(PING-PANG機制),內部使用二進位制協議優化傳輸速度和頻寬。
-
節點的fail是通過叢集中超過半數的節點檢測失效時才會生效。
-
客戶端與redis節點直連,不需要中間proxy層,客戶端不需要連線叢集所有節點,連線叢集中任何一個可用節點即可
-
redis-cluster把所有的物理節點對映到[0-16383]slot上,cluster負責維護node<->slot<->value
在叢集中,通過CRC16演算法保證鍵均勻的分配到各個槽位,各個節點上。
CRC16演算法特點:
①對叢集模式下的所有key進行CRC16計算,計算的結果始終在0-16383之間
②對客戶端的key進行CRC16計算同一個key多次經過CRC16計算結果始終一致
③對客戶端的不同key進行CRC16進行計算,計算的結果會出現不同key的結果一致。
3. 叢集搭建
判斷一個叢集中的節點是否可用,是叢集中的所有主節點選舉過程,如果半數以上的節點認為當前節點掛掉,那麼當前節點就是掛掉了,所以搭建redis叢集時建議節點數最好為奇數,搭建節點最少需要三個主節點,三個從節點,至少需要六個點。
- 準備環境,安裝ruby以及redis叢集依賴
yum install -y ruby rubygems
gem install redis
- 在一臺機器建立7個目錄(為了方便管理,在test目錄下建立)。
mkdir 7001 7002 7003 7004 7005 7006 7007
- 把redis.conf配置檔案分別拷貝七份到對應目錄
cp redis-6.0.10/redis.conf test/7001/ cp redis-6.0.10/redis.conf test/7002/ cp redis-6.0.10/redis.conf test/7003/ cp redis-6.0.10/redis.conf test/7004/ cp redis-6.0.10/redis.conf test/7005/ cp redis-6.0.10/redis.conf test/7006/ cp redis-6.0.10/redis.conf test/7007/
- 修改不同目錄配置檔案(除了埠和)
//把數字改為對應埠即可
port 7001 //修改埠
dbfilename dump-7001.rdb //資料檔案
appendfilename "appendonly-7001.aof" //AOF持久化日誌檔案
cluster-config-file nodes-7001.conf //叢集節點配置檔案
//以下引數配置改為一致
bind 0.0.0.0 //開啟遠端連線
cluster-enabled yes //開啟叢集模式
cluster-node-timeout 5000 //叢集節點超時時間
appendonly yes //開啟AOF持久化
daemonize yes //守護程序啟動
- 指定不同目錄配置檔案啟動七個節點
./redis-server /root/test/7001/redis.conf
........
./redis-server /root/test/7007/redis.conf
-
檢視自己啟動的redis服務是否全部啟動成功
ps -ef|grep redis
-
複製指令碼到redis的bin目錄中(新版本直接使用redis-cli操作,假如你用舊版本的方式操作,它會提示你使用新版本的操作命令)
cp /root/redis-6.0.10/src/redis-trip.rb ./redis-trib.rb
-
啟動叢集服務
注意這裡我沒有新增7007的服務,到時候7007的服務無法正常使用。
./redis-cli --cluster create 192.168.73.128:7001 192.168.73.128:7002 192.168.73.128:7003 192.168.73.128:7004 192.168.73.128:7005 192.168.73.128:7006 --cluster-replicas 1
執行命令之後,控制檯輸出問你Can I set the above configuration? (type ‘yes’ to accept),輸入yes之後,叢集就建立成功了。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-LkLgTon1-1611639129809)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20210125214432140.png)]
-
執行下面的命令檢視redis叢集狀態。
./redis-cli --cluster check 192.168.73.128:7001
- 連線叢集任意一節點
./redis-cli -p 7002 -c //redis聯機連線服務 ./redis-cli -p 7002是單機連線
-
叢集節點狀態說明
通過不同的命令對key進行操作時,你會發現有時控制檯會重定向到其它服務對key進行操作,說明它的確是對key進行了CRC16演算法,將key分配到不同節點進行操作。
-
主節點
主節點存在hash slots,且節點的hash slots 沒有交叉
主節點不能刪除
一個主節點可以有多個從節點
主節點宕機時多個副本之間自動選舉主節點
-
從節點
從節點沒有hash slots
從節點可以刪除
從節點不負責資料的寫,只負責資料的同步
-
-
新增主節點
- add-node --save [新加入節點] [原始叢集任意節點]
./redis-cli --cluster add-node 192.168.73.128:7007 192.168.73.128:7006
新增新的主節點必須滿足以下條件
①庫必須為空,不能有任何內容②要新增的主節點必須先啟動
節點新增完以後,你還得分片,新新增的節點才有slot。
./redis-cli --cluster reshard 192.168.73.128:7007
執行完以後會有相關提示,分別輸入要新增slot(槽)的數量,以及剛剛新增的節點的id,輸入“all”,最後輸入“yes”,它就會重新分配節點到新新增的節點
檢視叢集資訊,如圖埠為7007的master節點已經被分到了1000slot(槽)
./redis-cli --cluster check 192.168.73.128:7007
偷個懶,關於節點的其它操作轉載別人的
以下為轉載筆記:[原文][https://www.cnblogs.com/zhoujinyi/p/11606935.html]
說明:redis-cli --cluster help
[](javascript:void(0)