`1.建立磁盤 mkdir redis-cluster 2.複製redis文件 cp redis/bin redis-cluster/redis01 -r 3.進入redis01文件目錄 cd redis-cluster/redis01 4.刪除dump.rdb 和 appendonly.aof文件 rm -f dump.rdb 5 編輯redis.conf 文件 vim redis.conf 改 port 端口爲:7001 打開cluster-enabled yes 6 複製多份redis01文件 並改redis.conf文件的port端口爲 7002 。。。。 7 啓動redis多個服務器 ./redis-all.sh 8 查看redis啓動狀況 ps aux|grep redis 9. 進入redis源碼目錄,複製到redis集羣中去 /root/redis-3.0.0/src cp redis-trib.rb /usr/local/redis-cluster/ 10.安裝rb 運行環境 10.一、使用ruby腳本搭建集羣。須要ruby的運行環境。 安裝ruby yum install ruby yum install rubygems 10.2 按alt+p 打開文件傳輸列表 把redis-3.0.0.gem 傳入服務器 cp redis-3.0.0.gem /usr/local/redis-cluster/ cd /usr/local/redis-cluster/ 10.3 安裝 redis-3.0.0.gem gem install redis-3.0.0.gem 10.4 啓動reids-trib.rb 文件 ./redis-trib.rb create --replicas 1 192.168.36.30:7001 192.168.36.30:7002 192.168.36.30:7003 192.168.36.30:7004 192.168.36.30:7005 192.168.36.30:7006 10.5 而後點擊yes 11. 測試redis集羣的使用 redis01/redis-cli -p 7004 -c set a 123 get a
redis-cluster投票:容錯java
架構細節:node
(1)全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.redis
(2)節點的fail是經過集羣中超過半數的節點檢測失效時才生效.算法
(3)客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可vim
(4)redis-cluster把全部的物理節點映射到[0-16383]slot上,cluster 負責維護node<->slot<->valueruby
Redis 集羣中內置了 16384 個哈希槽,當須要在 Redis 集羣中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,而後把結果對 16384 求餘數,這樣每一個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大體均等的將哈希槽映射到不一樣的節點服務器
5.2. Redis集羣的搭建 Redis集羣中至少應該有三個節點。要保證集羣的高可用,須要每一個節點有一個備份機。 Redis集羣至少須要6臺服務器。 搭建僞分佈式。可使用一臺虛擬機運行6個redis實例。須要修改redis的端口號7001-7006 5.2.1. 集羣搭建環境 一、使用ruby腳本搭建集羣。須要ruby的運行環境。 安裝ruby架構
yum install ruby yum install rubygems
二、安裝ruby腳本運行使用的包。app
[root@localhost ~]# gem install redis-3.0.0.gem Successfully installed redis-3.0.0 1 gem installed Installing ri documentation for redis-3.0.0... Installing RDoc documentation for redis-3.0.0... [root@localhost ~]# [root@localhost ~]# cd redis-3.0.0/src [root@localhost src]# ll *.rb -rwxrwxr-x. 1 root root 48141 Apr 1 2015 redis-trib.rb
5.2.2. 搭建步驟 須要6臺redis服務器。搭建僞分佈式。 須要6個redis實例。 須要運行在不一樣的端口7001-7006分佈式
第一步:建立6個redis實例,每一個實例運行在不一樣的端口。須要修改redis.conf配置文件。配置文件中還須要把cluster-enabled yes前的註釋去掉。
第二步:啓動每一個redis實例。 第三步:使用ruby腳本搭建集羣。
./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
建立關閉集羣的腳本:
[root@localhost redis-cluster]# vim shutdow-all.sh redis01/redis-cli -p 7001 shutdown redis01/redis-cli -p 7002 shutdown redis01/redis-cli -p 7003 shutdown redis01/redis-cli -p 7004 shutdown redis01/redis-cli -p 7005 shutdown redis01/redis-cli -p 7006 shutdown [root@localhost redis-cluster]# chmod u+x shutdow-all.sh
[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.25.153:7001 192.168.25.153:7002 192.168.25.153:7003 192.168.25.153:7004 192.168.25.153:7005 192.168.25.153:7006
package com.shi.page; import java.util.HashSet; import java.util.Set; import org.junit.Test; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisCluster; import redis.clients.jedis.JedisPool; public class JedisTest { //jedis鏈接redis的基本使用 @Test public void testJedis()throws Exception{ //1建立一個jedis對象,參數 host,port Jedis jedis=new Jedis("192.168.36.30",6379); //2直接使用jedis操做reids,全部jedis操做都對應一個方法 jedis.set("abc", "zhangsan"); String abc=jedis.get("abc"); System.out.println("abc="+abc); //3 關閉鏈接 jedis.close(); } //使用JedisPool鏈接池來鏈接redis @Test public void testJedisPool()throws Exception{ //1 建立一個鏈接池對象,倆個參數host,port JedisPool jedisPool=new JedisPool("192.168.36.30",6379); //2 從鏈接池得到一個鏈接,就是一個jedis對象 Jedis jedis=jedisPool.getResource(); //3 使用jedis操做redis jedis.set("shi", "shiye"); String shi=jedis.get("shi"); System.out.println("shi="+shi); //4 關閉鏈接,每次使用完畢以後關閉鏈接,鏈接遲迴收資源 jedis.close(); //5 關閉鏈接池 jedisPool.close(); } //使用jedisCluster鏈接redis集羣 @Test public void testJedisCluster()throws Exception{ /*1 建立一個jedisCluster對象,有一個參數nodes是一個set類型, set中包含若干個hostAndPort對像*/ Set<HostAndPort> nodes=new HashSet<HostAndPort>(); nodes.add(new HostAndPort("192.168.36.30", 7001)); nodes.add(new HostAndPort("192.168.36.30", 7002)); nodes.add(new HostAndPort("192.168.36.30", 7003)); nodes.add(new HostAndPort("192.168.36.30", 7004)); nodes.add(new HostAndPort("192.168.36.30", 7005)); nodes.add(new HostAndPort("192.168.36.30", 7006)); JedisCluster jedisCluster=new JedisCluster(nodes); //2 直接使用jedisCluster對象操做reids jedisCluster.set("test", "123"); String test=jedisCluster.get("test"); System.out.println("test="+test); //3 關閉jedisCluster對像 jedisCluster.close(); } }