Redis集羣搭建與簡單使用(四)

工具

  • VMware版本號:12.0.0html

  • CentOS版本:7.0node

  • 三臺虛擬機(IP):192.168.1.八、192.168.1.九、192.168.1.10
    圖片描述redis

安裝 Redis

下載,解壓,編譯:算法

$ cd /usr/local/
$ wget http://download.redis.io/releases/redis-3.2.6.tar.gz
$ tar xzf redis-3.2.6.tar.gz
$ cd redis-3.2.6
$ make

建立 Redis 節點

首先在 192.168.1.8 機器上 /usr/local/redis-3.2.6 目錄下建立 redis_cluster 目錄segmentfault

$ mkdir /usr/local/redis-3.2.6/redis_cluster 

redis_cluster 目錄下,建立名爲700070017002的目錄,並將 redis.conf 拷貝到這三個目錄中ruby

$ mkdir 7000 7001 7002
$ cp /usr/local/redis-3.2.6/redis.conf /usr/local/redis-3.2.6/redis_cluster/7000
$ cp /usr/local/redis-3.2.6/redis.conf /usr/local/redis-3.2.6/redis_cluster/7001
$ cp /usr/local/redis-3.2.6/redis.conf /usr/local/redis-3.2.6/redis_cluster/7002

分別修改這三個配置文件,修改以下內容app

port                  7000                        //端口7000,7002,7003        
bind                  本機ip                      //默認ip爲127.0.0.1,須要改成其餘節點機器可訪問的ip,不然建立集羣時沒法訪問對應的端口,沒法建立集羣
daemonize             yes                         //redis後臺運行
pidfile               /var/run/redis_7000.pid     //pidfile文件對應7000,7001,7002
cluster-enabled       yes                         //開啓集羣,把註釋#去掉
cluster-config-file   nodes_7000.conf             //集羣的配置,配置文件首次啓動自動生成 7000,7001,7002
cluster-node-timeout  15000                       //請求超時,默認15秒,可自行設置
appendonly            yes                         //aof日誌開啓,有須要就開啓,它會每次寫操做都記錄一條日誌 

接着在另外兩臺機器上(192.168.1.9192.168.1.10)重複以上三步,只是把目錄改成700三、700四、700五、700六、700七、7008對應的配置文件也按照這個規則修改便可工具

啓動各個節點

##第一臺機器上執行
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7000/redis.conf
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7001/redis.conf
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7002/redis.conf
 
##第二臺機器上執行
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7003/redis.conf
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7004/redis.conf
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7005/redis.conf 

##第三臺機器上執行
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7006/redis.conf
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7007/redis.conf
$ /usr/local/redis-3.2.6/src/redis-server /usr/local/redis-3.2.6/redis_cluster/7008/redis.conf

檢查各 Redis 啓動狀況

##第一臺機器
$ ps -ef | grep redis           //redis是否啓動成功
$ netstat -tnlp | grep redis    //監聽redis端口

圖片描述
:確保每一個節點沒有配置錯誤,而且啓動起來測試

關閉防火牆

$ firewall-cmd --state  ##查看防火牆狀態
running

running 說明防火牆是打開狀態ui

$ systemctl stop firewalld  ##關閉防火牆
$ firewall-cmd --state
not running

: CentOS 7 關閉防火牆與 CentOS 6 有所不一樣

安裝 Ruby

$ yum -y install ruby ruby-devel rubygems rpm-build
$ gem install redis

:建立集羣時須要安裝 Ruby 運行redis-trib.rb

建立集羣

Redis 官方提供了 redis-trib.rb 這個工具,就在解壓目錄的 src 目錄中

$ /usr/local/redis-3.2.6/src/redis-trib.rb  create  --replicas  1  192.168.1.8:7000 192.168.1.8:7001  192.168.1.8:7002 192.168.1.9:7006  192.168.1.9:7004  192.168.1.9:7005 192.168.1.10:7006 192.168.1.10:7007 192.168.1.10:7008

其中,前三個 ip:port 爲第一臺機器的節點,中間三個爲第二臺機器,最後三個爲第三臺機器
圖片描述
輸入 yes,而後出現以下內容,說明安裝成功
圖片描述

集羣驗證

在第一臺機器上鍊接集羣的7000節點,在另一臺鏈接7004節點,鏈接方式爲:

##加參數 -C 可鏈接到集羣,由於 redis.conf 將 bind 改成了ip地址,因此 -h 參數不能夠省略,-p 參數爲端口號
$ /usr/local/redis-3.2.6/src/redis-cli -h 192.168.1.8 -c -p 7000

7004節點執行命令:

192.168.1.9:7004> set name redis

圖片描述

而後在另兩臺7000、7007端口,查看 keyname 的內容

192.168.1.8:7000> get name

圖片描述

192.168.1.10:7007> get name

圖片描述

說明集羣運做正常

總結

redis cluster在設計的時候,就考慮到了去中心化去中間件,也就是說,集羣中的每一個節點都是平等關係,都是對等的每一個節點保存各自的數據和整個集羣的狀態。每一個節點都和其餘全部節點鏈接,並且這些鏈接保持活躍,這樣就保證了咱們只須要鏈接集羣中的任意一個節點,就能夠獲取到其餘節點數據

Redis 集羣沒有並使用傳統的一致性哈希來分配數據,而是採用另一種叫作哈希槽 (hash slot)的方式來分配的。redis cluster 默認分配了 16384slot,當咱們 set 一個 key 時,會用CRC16算法來取模獲得所屬的 slot,而後將這個 key 分到哈希槽區間的節點上,具體算法就是:CRC16(key) % 16384。因此咱們在測試的時候看到 setget 的時候,直接跳轉到了7000端口的節點。

Redis 集羣會把數據存在一個 master 節點,而後在這個 master 和其對應的 salve 之間進行數據同步。當讀取數據時,也根據一致性哈希算法到對應的 master 節點獲取數據。只有當一個 master 掛掉以後,纔會啓動一個對應的 salve 節點,充當 master

須要注意的是:必需要3個以上主節點,不然在建立集羣時會失敗,而且當存活主節點數小於總節點數一半時,整個集羣沒法提供服務了。


相關文檔:
中文:http://www.redis.cn/topics/cl...
英文:https://redis.io/topics/clust...


相關連接:
Linux下PHP安裝Redis擴展(二)
Redis主從配置(三)
Redis持久化(五)

相關文章
相關標籤/搜索