redis集羣配置
0,總體概述
總體來講就是:
1,安裝redis
2,配置多個redis實例
3,安裝 ruby和rubygems
4,啓動redis實例,使用ruby腳本命令將redis實例建立爲集羣
1,安裝
1,安裝redis 3.x 下載到手redis-3.2.5.tar.gz以後,放到linux裏進行解壓make,具體參照網絡。
2,安裝ruby和rubygems,參照命令(具體能夠參照網絡)
tar xzvf rubygems-2.2.3.tgz
cd rubygems-2.2.3
ruby setup.rb --no-rdoc --no-ri
wget https://rubygems.org/downloads/redis-3.2.1.gem
gem install redis-3.2.1.gem --local --no-rdoc --no-ri
2,創建多個redis實例 配置
修改redis配置文件,redis.conf
bind 127.0.0.1--綁定只有這個ip可以訪問到 配置好集羣后也能夠修改
cluster-enabled yes---開啓集羣配置
cluster-config-file nodes-6388.conf--這個配置文件不是要咱們去配的,而是Redis運行時保存配置的文件,因此咱們也不能夠修改這個文件。
cluster-node-timeout 15000--結點超時多久則認爲它宕機了。
cluster-require-full-coverage no--默認是yes,只要有結點宕機致使16384個槽沒全被覆蓋,整個集羣就所有中止服務,因此必定要改成no
daemonize yes--後臺運行
logfile 「./redis.log」--日誌文件,本身定義便可
port 6379 端口
pidfile /var/run/redis_6379.pid
dbfilename dump6379.rdb rdb持久化文件
#requirepass fdsafdsa 先註釋掉 等配置好集羣后,再放開便可
#masterauth fdasfdsa 這個是集羣須要密碼的時候也放開,和requirepass同樣就行(還有個地方是/usr/lib/ruby/gems/1.8/gems/redis-3.3.0/lib/redis/client.rb 這裏也有個配置密碼的 修改下)
在安裝的redis目錄同一層中建立多個redis目錄至少六個。而後拷貝六份配置文件到這些文件夾裏並修改配置文件的端口等其餘信息便可。
3,創建集羣
啓動全部redis實例
redis-server 指定啓動的redis.conf的路徑。啓動完成後,有如下進程
使用redis-trb.rb腳本命令將redis實例建立成集羣。
建立集羣命令: 默認前3個實例做爲Master,後3個做爲Slave
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 ...
這樣就建立完成了,使用命令來查看集羣的狀況(能夠查看集羣的主從關係,主集羣的slots分佈狀況等等信息)
redis-cli -c -h 127.0.0.1 -p 6379 cluster nodes(若是後期有密碼了,那麼閒登陸進去而後執行 cluster nodes便可)
設置keyvalue測試一下。
隨便連接到一個redis實例裏,
redis-cli -c -p 6379
而後,set 幾個keyvalue,能夠看到有重定向的log出來,get的時候也會有,說明集羣建立成功了,數據開始分佈到各個master節點去了。
4,添加節點到集羣
1,按照上面說的,再建立兩個redis實例,而後啓動起來。6387 6388(上面的截圖是我添加過了的 ,下面就只說下步驟便可)
2,使用ruby腳本命令將其中一個添加進去,默認爲master
redis-trib.rb add-node 127.0.0.1:6387 127.0.0.1:6379
使用查看集羣狀況命令
redis-cli -c -h 127.0.0.1 -p 6379 cluster nodes
能夠看到剛纔添加的已經進去了而且是master
再添加另外一個進去 而且做爲這個的slave
redis-trib.rb add-node --slave --master-id 907b572063b0a6fd3dc9d1cca2c2daef3adaf043 127.0.0.1:6388 127.0.0.1:6379
中間的id爲master的id便可。
3,添加進去以後,下面進行slots遷移,直接使用ruby腳本命令
redis-trib.rb reshard 127.0.0.1:6379
就自動的把沒有slots的master給平均從其餘master裏拿出來,放進去了。
4,而後就能夠進去到新添加的master,查看下keys *了。
5,故障轉移
在高可用性方面,Redis可算是可以」Auto」一把了!Redis Cluster重用了Sentinel的代碼邏輯,不須要單獨啓動一個Sentinel集羣,Redis Cluster自己就能自動進行Master選舉和Failover切換。
kill 掉集羣中的一個master,而後查看集羣的狀況,會發現這個master下面的slave會有一個出來當成了master了,保證了集羣的可用性。
這裏若是這個上來的master沒有slave了,redis集羣會自動從其餘master拿過來一些slave過來。
若是同時把master和它的slave kill掉,那麼數據也就沒有了。可是能夠經過持久化出來的快照或者aof文件恢復。
6 redis本身的集羣命令
上面的集羣配置都是使用的ruby腳原本建立的,也能夠本身用redis的命令來建立集羣
相似這樣的: redis-cli -c -h 192.168.1.100 -p 7000 cluster meet 192.168.1.100 7001
挨個的meet,這樣就都加入到集羣裏了。
而後就是配置主從關係
redis-cli -c -h 192.168.1.100 -p 7003 cluster replicate 33c0bd93d7c7403ef0239ff01eb79bfa15d2a32c
將一個節點配置成另外一個的從節點
而後就是指派slots,總共16384個,按需分配到每一個master便可。
redis-cli -c -h 192.168.1.100 -p 7000 cluster addslots {0..5000}
redis-cli -c -h 192.168.1.100 -p 7001 cluster addslots {5001..10000}
redis-cli -c -h 192.168.1.100 -p 7001 cluster addslots {10001..16383}
這樣也建立了一個redis集羣。