5.搭建集群
1.配置機器1
- 在演示中,192.168.12.107為當前ubuntu機器的ip
- 在192.168.12.107上進入Desktop目錄,創建redis目錄
- 在redis目錄下創建文件7000.conf,編輯內容如下
port 7000
bind 192.168.12.107
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes
- 在redis目錄下創建文件7001.conf,編輯內容如下
port 7001
bind 192.168.12.107
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes
- 在redis目錄下創建文件7002.conf,編輯內容如下
port 7002
bind 192.168.12.107
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes
- 總結:三個文件的配置區別在port、pidfile、cluster-config-file三項
- 使用配置文件啟動redis服務
redis-server7000.conf
redis-server 7001.conf
redis-server 7002.conf
?
?
2.配置機器2
- 在演示中,192.168.12.84為學生的一臺ubuntu機器的ip,為了演示方便,使用ssh命令連接
ssh 192.168.12.84
- 在192.168.12.84上進入Desktop目錄,創建redis目錄
- 在redis目錄下創建文件7003.conf,編輯內容如下
port 7003
bind 192.168.12.84
daemonize yes
pidfile 7003.pid
cluster-enabled yes
cluster-config-file 7003_node.conf
cluster-node-timeout 15000
appendonly yes
- 在redis目錄下創建文件7004.conf,編輯內容如下
port 7004
bind 192.168.12.84
daemonize yes
pidfile 7004.pid
cluster-enabled yes
cluster-config-file 7004_node.conf
cluster-node-timeout 15000
appendonly yes
- 在redis目錄下創建文件7005.conf,編輯內容如下
port 7005
bind 192.168.12.84
daemonize yes
pidfile 7005.pid
cluster-enabled yes
cluster-config-file 7005_node.conf
cluster-node-timeout 15000
appendonly yes
- 總結:三個文件的配置區別在port、pidfile、cluster-config-file三項
- 使用配置文件啟動redis服務
redis-server7003.conf
redis-server 7004.conf
redis-server 7005.conf
?
?
3.創建集群
- redis的安裝包中包含了redis-trib.rb,用于創建集群
- 接下來的操作在192.168.12.107機器上進行
- 將命令復制,這樣可以在任何目錄下調用此命令
sudo cp/usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/
- 安裝ruby環境,因為redis-trib.rb是用ruby開發的
sudo apt-get install ruby
- 運行如下命令創建集群
redis-trib.rb create --replicas1 192.168.12.107:7000 192.168.12.107:7001?192.168.12.107:7002 192.168.12.84:7003?192.168.12.84:7004? 192.168.12.84:7005
- 執行上面這個指令在某些機器上可能會報錯,主要原因是由于安裝的 ruby 不是最新版本
- 天朝的防火墻導致無法下載最新版本,所以需要設置 gem 的源
- 解決辦法如下:
-- 先查看自己的 gem 源是什么地址
gem source -l?? -- 如果是https://rubygems.org/? 就需要更換
-- 更換指令為
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
-- 通過 gem 安裝 redis 的相關依賴
sudo gem install redis
-- 然后重新執行指令
redis-trib.rb create --replicas 1 192.168.12.107:7000 192.168.12.107:7001? 192.168.12.107:7002 192.168.12.84:7003? 192.168.12.84:7004? 192.168.12.84:7005
?
?
數據驗證
- 根據上圖可以看出,當前搭建的主服務器為7000、7001、7003,對應的從服務器是7004、7005、7002
- 在192.168.12.107機器上連接7002,加參數-c表示連接到集群
redis-cli -h 192.168.12.107 -c-p 7002
- 寫入數據
set hello world
?
在哪個服務器上寫數據:CRC16
- redis cluster在設計的時候,就考慮到了去中心化,去中間件,也就是說,集群中的每個節點都是平等的關系,都是對等的,每個節點都保存各自的數據和整個集群的狀態。每個節點都和其他所有節點連接,而且這些連接保持活躍,這樣就保證了我們只需要連接集群中的任意一個節點,就可以獲取到其他節點的數據
- Redis集群沒有并使用傳統的一致性哈希來分配數據,而是采用另外一種叫做哈希槽 (hash slot)的方式來分配的。redis cluster 默認分配了 16384 個slot,當我們set一個key 時,會用CRC16算法來取模得到所屬的slot,然后將這個key 分到哈希槽區間的節點上,具體算法就是:CRC16(key) % 16384。所以我們在測試的時候看到set 和 get 的時候,直接跳轉到了7000端口的節點
- Redis 集群會把數據存在一個 master 節點,然后在這個 master 和其對應的salve 之間進行數據同步。當讀取數據時,也根據一致性哈希算法到對應的 master 節點獲取數據。只有當一個master 掛掉之后,才會啟動一個對應的 salve 節點,充當 master
- 需要注意的是:必須要3個或以上的主節點,否則在創建集群時會失敗,并且當存活的主節點數小于總節點數的一半時,整個集群就無法提供服務了
?
?
總結
- 上一篇: Ubuntu下svn 版本管理客户端工具
- 下一篇: 2.数据完整性