### redis-trib.rb簡介
`redis-trib.rb` 是采用 `Ruby` 實現的 Redis 集群管理工具。內部通過 Cluster 相關命令幫我們簡化集群創建、檢查、槽遷移和均衡等常見運維操作,使用之前需要安裝 Ruby 依賴環境。
### 搭建集群
#### 安裝 Ruby 依賴環境
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
#### 安裝rubygem redis依賴
wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem
#### 查看redis-trib.rb支持的操作
```
redis-trib.rb help
Usage: redis-trib <command> <options> <arguments ...>
#創建集群
create host1:port1 ... hostN:portN
--replicas <arg> #帶上該參數表示是否有從,arg表示從的數量
#檢查集群
check host:port
#查看集群信息
info host:port
#修復集群
fix host:port
--timeout <arg>
#在線遷移slot
reshard host:port #個是必傳參數,用來從一個節點獲取整個集群信息,相當于獲取集群信息的入口
--from <arg> #需要從哪些源節點上遷移slot,可從多個源節點完成遷移,以逗號隔開,傳遞的是節點的node id,還可以直接傳遞--from all,這樣源節點就是集群的所有節點,不傳遞該參數的話,則會在遷移過程中提示用戶輸入
--to <arg> #slot需要遷移的目的節點的node id,目的節點只能填寫一個,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。
--slots <arg> #需要遷移的slot數量,不傳遞該參數的話,則會在遷移過程中提示用戶輸入。
--yes #設置該參數,可以在打印執行reshard計劃的時候,提示用戶輸入yes確認后再執行reshard
--timeout <arg> #設置migrate命令的超時時間。
--pipeline <arg> #定義cluster getkeysinslot命令一次取出的key數量,不傳的話使用默認值為10。
#平衡集群節點slot數量
rebalance host:port
--weight <arg>
--auto-weights
--use-empty-masters
--timeout <arg>
--simulate 不會真正遷移,測試用的
--pipeline <arg> 一次遷移多少分數據
--threshold <arg>
#將新節點加入集群
add-node new_host:new_port existing_host:existing_port
--slave
--master-id <arg>
#從集群中刪除節點
del-node host:port node_id
#設置集群節點間心跳連接的超時時間
set-timeout host:port milliseconds
#在集群全部節點上執行命令
call host:port command arg arg .. arg
#將外部redis數據導入集群
import host:port
--from <arg>
--copy
--replace
```
啟動好6個節點之后,使用 `redis-trib.rb create` 命令完成節點握手和槽分配過程
redis-trib.rb create --replicas 1 47.98.147.49:6391 47.98.147.49:6392 47.98.147.49:6393 47.98.147.49:6394 47.98.147.49:6395 47.98.147.49:6396
`--replicas` 參數指定集群中每個主節點配備幾個從節點,這里設置為1,redis-trib.rb 會盡可能保證主從節點不分配在同一機器下,因此會重新排序節點列表順序。節點列表順序用于確定主從角色,先主節點之后是從節點。創建過程中首先會給出主從節點角色分配的計劃,并且會生成報告。
### Redis-cluster原理
#### 1、節點通信
在分布式存儲中需要提供維護節點元數據信息的機制,所謂元數據是指:節點負責哪些數據,是否出現故障等狀態信息,Redis 集群采用 Gossip(流言)協議,Gossip 協議工作原理就是節點彼此不斷通信交換信息,一段時間后所有的節點都會知道集群完整的信息,這種方式類似流言傳播
集群中的每個節點都會單獨開辟一個 TCP 通道,用于節點之間彼此通信,通信端口號在基礎端口上加10000。
2)每個節點在固定周期內通過特定規則選擇幾個節點發送 ping 消息。
3)接收到 ping 消息的節點用 pong 消息作為響應。
集群中每個節點通過一定規則挑選要通信的節點,每個節點可能知道全部節點,也可能僅知道部分節點,只要這些節點彼此可以正常通信,最終它們會達到一致的狀態。當節點出故障、新節點加入、主從角色變化、槽信息變更等事件發生時,通過不斷的 ping/pong 消息通信,經過一段時間后所有的節點都會知道整個集群全部節點的最新狀態,從而達到集群狀態同步的目的。
- 微服務
- 服務器相關
- 操作系統
- 極客時間操作系統實戰筆記
- 01 程序的運行過程:從代碼到機器運行
- 02 幾行匯編幾行C:實現一個最簡單的內核
- 03 黑盒之中有什么:內核結構與設計
- Rust
- 入門:Rust開發一個簡單的web服務器
- Rust的引用和租借
- 函數與函數指針
- Rust中如何面向對象編程
- 構建單線程web服務器
- 在服務器中增加線程池提高吞吐
- Java
- 并發編程
- 并發基礎
- 1.創建并啟動線程
- 2.java線程生命周期以及start源碼剖析
- 3.采用多線程模擬銀行排隊叫號
- 4.Runnable接口存在的必要性
- 5.策略模式在Thread和Runnable中的應用分析
- 6.Daemon線程的創建以及使用場景分析
- 7.線程ID,優先級
- 8.Thread的join方法
- 9.Thread中斷Interrupt方法學習&采用優雅的方式結束線程生命周期
- 10.編寫ThreadService實現暴力結束線程
- 11.線程同步問題以及synchronized的引入
- 12.同步代碼塊以及同步方法之間的區別和關系
- 13.通過實驗分析This鎖和Class鎖的存在
- 14.多線程死鎖分析以及案例介紹
- 15.線程間通信快速入門,使用wait和notify進行線程間的數據通信
- 16.多Product多Consumer之間的通訊導致出現程序假死的原因分析
- 17.使用notifyAll完善多線程下的生產者消費者模型
- 18.wait和sleep的本質區別
- 19.完善數據采集程序
- 20.如何實現一個自己的顯式鎖Lock
- 21.addShutdownHook給你的程序注入鉤子
- 22.如何捕獲線程運行期間的異常
- 23.ThreadGroup API介紹
- 24.線程池原理與自定義線程池一
- 25.給線程池增加拒絕策略以及停止方法
- 26.給線程池增加自動擴充,閑時自動回收線程的功能
- JVM
- C&C++
- GDB調試工具筆記
- C&C++基礎
- 一個例子理解C語言數據類型的本質
- 字節順序-大小端模式
- Php
- Php源碼閱讀筆記
- Swoole相關
- Swoole基礎
- php的五種運行模式
- FPM模式的生命周期
- OSI網絡七層圖片速查
- IP/TCP/UPD/HTTP
- swoole源代碼編譯安裝
- 安全相關
- MySql
- Mysql基礎
- 1.事務與鎖
- 2.事務隔離級別與IO的關系
- 3.mysql鎖機制與結構
- 4.mysql結構與sql執行
- 5.mysql物理文件
- 6.mysql性能問題
- Docker&K8s
- Docker安裝java8
- Redis
- 分布式部署相關
- Redis的主從復制
- Redis的哨兵
- redis-Cluster分區方案&應用場景
- redis-Cluster哈希虛擬槽&簡單搭建
- redis-Cluster redis-trib.rb 搭建&原理
- redis-Cluster集群的伸縮調優
- 源碼閱讀筆記
- Mq
- ELK
- ElasticSearch
- Logstash
- Kibana
- 一些好玩的東西
- 一次折騰了幾天的大華攝像頭調試經歷
- 搬磚實用代碼
- python讀取excel拼接sql
- mysql大批量插入數據四種方法
- composer好用的鏡像源
- ab
- 環境搭建與配置
- face_recognition本地調試筆記
- 虛擬機配置靜態ip
- Centos7 Init Shell
- 發布自己的Composer包
- git推送一直失敗怎么辦
- Beyond Compare過期解決辦法
- 我的Navicat for Mysql
- 小錯誤解決辦法
- CLoin報錯CreateProcess error=216
- mysql error You must reset your password using ALTER USER statement before executing this statement.
- VM無法連接到虛擬機
- Jetbrains相關
- IntelliJ IDEA 筆記
- CLoin的配置與使用
- PhpStormDocker環境下配置Xdebug
- PhpStorm advanced metadata
- PhpStorm PHP_CodeSniffer