第一步:安裝Redis
前面已經安裝過了 不解釋,
Reids安裝包裏有個集羣工具,要複製到/usr/local/bin裏去
cp redis-3.2.9/src/redis-trib.rb /usr/local/bin
第二步:修改配置,創建節點
我們現在要搞六個節點,三主三從,
端口規定分別是7001,7002,7003,7004,7005,7006
我們先在root目錄下新建一個redis_cluster目錄,然後該目錄下再創建6個目錄,
分別是7001,7002,7003,7004,7005,7006,用來存在redis配置文件;
這裏我們要使用redis集羣,要先修改redis的配置文件redis.conf
先複製一份配置文件到7001目錄下
[root@localhost redis_cluster]# cd
[root@localhost ~]# cp redis-3.2.9/redis.conf redis_cluster/7001/
我們修改下這個配置文件
vi redis_cluster/7001/redis.conf
修改一下幾個,注意前面有#的也要去掉#
port 7001 //六個節點配置文件分別是7001-7006
daemonize yes //redis後臺運行
pidfile /var/run/redis_7001.pid //pidfile文件對應7001-7006
cluster-enabled yes //開啓集羣
cluster-config-file nodes_7001.conf //保存節點配置,自動創建,自動更新對應7001-7006
cluster-node-timeout 5000 //集羣超時時間,節點超過這個時間沒反應就斷定是宕機
appendonly yes //存儲方式,aof,將寫操作記錄保存到日誌中
7001下的修改完後,我們把7001下的配置分別複製到7002-7006 然後對應的再修改下配置,也就是把文件中有7001的都改成響應的端口;
編輯後面5個配置文件,把 port ,pidfile,cluster-config-file 分別修改下即可;
第三步:啓動六個節點的redis
[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7001/redis.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7002/redis.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7003/redis.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7004/redis.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7005/redis.conf
[root@localhost ~]# /usr/local/redis/bin/redis-server redis_cluster/7006/redis.conf
查找下redis進程
ps -ef | grep redis
出現如圖,說明都啓動成功了
第四步:創建集羣
edis官方提供了redis-trib.rb工具,第一步裏已經放到裏bin下 ;
但是在使用之前 需要安裝ruby,以及redis和ruby連接,步驟如下
1.yum install centos-release-scl-rh //會在/etc/yum.repos.d/目錄下多出一個CentOS-SCLo-scl-rh.repo源
2.yum install rh-ruby23 -y //直接yum安裝即可
3.scl enable rh-ruby23 bash //必要一步 代表2.3版本
4.ruby -v //查看安裝版本
5.gem install redis
創建集羣
[root@localhost ~]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
從運行結果看 主節點就是7001 7002 7003 從節點分別是7004 7005 7006
7001分配到的哈希槽是 0-5460
7002分配到的哈希槽是 5461-10922
7003分配到的哈希槽是 10923-16383
最後問我們是否接受上面的設置,輸入yes 就表示接受,我們輸入yes
然後顯示:
顯示配置哈希槽,以及集羣創建成功,可以用了;
前面的M代表master也就是主節點,S代表slave奴隸節點也就是從節點
第五步:集羣數據測試
我們先連接任意一個節點,然後添加一個key:
redis-cli是redis默認的客戶端工具,啓動時加上`-c`參數,-p
指定端口,就可以連接到集羣。
連接任意一個節點端口:
[root@localhost ~]# /usr/local/redis/bin/redis-cli -c -p 7002
前面說過Redis Cluster值分配規則,所以分配key的時候,它會使用CRC16(‘my_name’)%16384算法,來計算,將這個key 放到哪個節點,這裏分配到了4038slot 就分配到了7003(0-5460)這個節點上。所以有:
Redirected to slot [4038] located at 127.0.0.1:7003
我們從其他集羣節點 ,都可以獲取到數據
第六步:集羣宕機測試
假如我們幹掉一個節點,比如7002 這個主節點
然後再來看下集羣的情況
redis-trib.rb check 127.0.0.1:7001
我們發現 7004本來是從節點,由於他對應的主節點掛了,就自動變成主節點master,所有會有最後一個說明
All 16384 slots covered. 所有哈希槽都可覆蓋了; 集羣可以正常使用;
假如我們把7004也幹掉,試試看
這裏我們發現 出事了,因爲主從節點都掛了 所以有一部分哈希槽沒得分配,最後一句
[ERR] Not all 16384 slots are covered by nodes. 沒有安全覆蓋;
所以不能正常使用集羣;