玩轉Redis集羣(下)

接上一篇《玩轉Redis集羣(上)》,咱們來繼續玩~

Redis集羣操做實踐

數據的分佈性


數據分佈性

從上面的操做,你能夠看到,當存儲某一個數據的時候,會分配一個slot,而這個slot從屬於某一個Master,也就是說你須要明白,數據是分佈的存儲在Redis集羣當中的。node

在線水平擴容

Redis Cluster有一個很是重要的特色就是能夠在線的添加節點,實現不影響業務的水平擴容。在這裏,我將會在原來6個redis節點上,再添加2個redis節點。作法和之前一致,注意修改redis.conf,而後在啓動800七、8008這2個redis實例。git

修改redis.conf配置


啓動新添加的2個redis實例


集羣狀態

其實,目前雖然啓動了新加的2個redis實例,可是它們是不屬於集羣的。下面,咱們來讓它們加入集羣中。github

add-node命令

./redis-trib.rb add-node 192.168.99.121:8007 192.168.99.121:8006
redis

./redis-trib.rb add-node 新節點 集羣中已經存在的節點
spring

在往集羣中添加節點A的時候,須要提供一個在集羣中已經存在的節點B的信息。由於知道了B的信息,就知道了整個集羣的信息。爲何這麼說呢,來,咱們看一個文件,你就知道了。tomcat

nodes-xxx.conf

要知道集羣中的每個節點都有這麼一個文件,存儲着集羣中每個節點的信息:節點的角色、節點的ID、鏈接狀態、slot範圍、IP/PORT信息等。仔細觀察圖中,你能夠發現,新加入的8007節點,實際上被默認爲master節點,而且沒有slot分配!這說明,新加入的節點如今還不能夠存儲數據,所以咱們要爲新節點分配slot槽。session

[root@mydream121 bin]# ./redis-trib.rb reshard 192.168.99.121:8001
插件

要知道slot都分配在master上,所以其實咱們要作的就是從集羣的masters上進行從新分配。上面的命令須要指定一個master節點進行reshard分片。orm

slot從新分配

圖中要爲新加入的節點8007分配500個slot,並且分配的方式是"all",all是什麼意思呢?all表明從已經存在的全部的master上均勻的分配一部分slot給8007。固然你能夠經過"done"來指定某一個master進行分配。注意分配給8007是經過節點ID來指定的。cdn

分配後的集羣信息

按照上面的操做,我將8008節點也加入集羣中,個人想法是讓8008成爲8007的從節點。既然是從節點,就不須要分配slot槽。注意到add-node方式加入的節點,默認就是master節點,所以這裏咱們得利用replicate指定主節點。

[root@mydream121 bin]# ./redis-trib.rb add-node 192.168.99.121:8008 192.168.99.121:8001


爲從節點指定主節點

那麼到如今,咱們就在線完成了對Redis集羣的水平擴容。那麼如何刪除節點呢?刪除節點時,數據怎麼辦呢?對於從節點,刪除就刪除了,並沒關係,關鍵是主節點,由於主節點上有slot。所以,在刪除主節點前,咱們要對主節點的slot進行從新分配,完成數據的遷移。這裏我就再也不演示了,直接給出命令。

刪除主節點:先reshard + 後del-node

刪除從節點:直接del-node

Redis實現Session共享

Redis能夠被用於Session共享,不過如今CAS實現單點登陸更容易些。(CAS之後爲你們介紹)

redis集羣存儲session信息

不管是Nginx掛了,仍是其中的Tomcat掛掉,都不會丟失Session信息。在實現上,有現成的插件,好比:https://github.com/jcoleman/tomcat-redis-session-manager

Java操做Redis

在單機Redis環境:Jedis

這個沒什麼好說的,就是給定IP/PORT實例化Jedis操做便可。

Jedis jedis = new Jedis("192.168.99.121", 8001);

在多臺Redis環境:ShardedJedis+ShardedJedisPool

ShardedJedis方式

這是一種切片的方式來操做redis,經過hash而均勻的分配到pool裏的redis機器中。

在Redis集羣環境:JedisCluster

JedisCluster

與Spring整合

咱們直接來看配置文件吧!

redis集羣與Spring整合

同上文Java操做Redis集羣的代碼對比下,其實XML就是代碼的映射。只不過經過spring的方式,幫助咱們配置生成了一個bean:redisCluster。咱們能夠經過注入的方式獲得redisCluster,而後咱們想幹啥就能夠幹啥,就這麼簡單~

到這裏,redis集羣部分整個就結束了,下一篇文章是關於什麼的呢,我不告訴你,哈哈~

做者:張豐哲 連接:https://www.jianshu.com/p/ee18dbd45d02 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索