Redis集羣規範:https://redis.io/topics/cluster-spec
1. 原理簡述:
此處的集羣指的是Cluster, 通過分區/分片來實現一定程度的分佈式與高可用部署。
2. 集羣配置:
2.1 準備工作:
Redis 最小集羣規劃,需要包含至少三個主節點,此處測試部署具有三個主服務器和三個從服務器的六節點羣集。計劃是在一臺機器上模擬一個集羣,主節點端口7000,7001,7002, 從節點7003,7004,7005,這和生產環境的集羣搭建沒本質區別
[root@hadoop104 bin]# yum install ruby -y
[root@hadoop104 bin]# yum install rubygems -y //rubygems,ruby組件的打包系統,安裝之後纔可以運行.gem結尾的文件
上傳rubygems-update-3.0.0.gem,
下載地址:https://rubygems.org/gems/rubygems-update/versions/3.0.0
[root@hadoop104 software]# gem install rubygems-update-3.0.0.gem -y
2.2 集羣搭建:
節點配置文件修改
1. 進入安裝目錄/opt/module/redis/bin/目錄下,將redis服務關掉
[root@hadoop104 bin]# ./redis-cli shutdown
2. 創建一個文件夾redis-cluster,並將bin目錄拷貝至該文件夾
[root@hadoop104 redis]# mkdir /opt/module/redis-cluster
[root@hadoop104 redis]# cp -r bin /opt/module/redis-cluster/redis01
3. 進入/opt/module/redis-cluster/redis01,刪除dump.rdb,還原redis初始狀態。
[root@hadoop104 redis01]# pwd
/opt/module/redis-cluster/redis01[root@hadoop104 redis01]# rm -f dump.rdb
4. 修改配置文件
①修改端口
②開啓集羣模式
集羣配置文件修改:
1. 將配置好的節點複製六份
[root@hadoop104 redis-cluster]# pwd
/opt/module/redis-cluster[root@hadoop104 redis-cluster]# cp -r redis01/ redis02(~6)
將複製出來的節點的端口號修改就可以了,這裏改爲7002~7006
2. 將解壓的文件夾下的所有 .rb結尾的文件拷貝之redis-cluster文件夾下
[root@hadoop104 src]# pwd
/opt/module/redis-4.0.14/src[root@hadoop104 src]# cp *.rb /opt/module/redis-cluster/
3. 將六個節點的redis服務啓動
建一個腳本文件startup.sh
#!/bin/bash
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
給腳本添加執行權限
[root@hadoop104 redis-cluster]# chmod a+x startup.sh
啓動腳本,所有redis服務啓動
[root@hadoop104 redis-cluster]# ./startup.sh
4.啓動複製過來的redis-trib.rb腳本,啓動redis集羣
該過程出現錯誤,可以參考:https://www.jb51.net/article/123987.htm
[root@hadoop104 redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.1.104:7001 192.168.1.104:7002 192.168.1.104:7003 192.168.1.104:7004 192.168.1.104:7005 192.168.1.104:7006
2.3 測試
隨便進入一個節點的客戶端
[root@hadoop104 redis01]# ./redis-cli -p 7001 -c //-p表示連接那個端口,-c表示以集羣模式啓動,
使用redisDesktopManager連接失敗,原因是端口未放開
修改防火牆端口,並重啓防火牆
[root@hadoop104 redis-cluster]# vim /etc/sysconfig/iptables
[root@hadoop104 redis-cluster]# service iptables restart
再次連接,連接六個redis服務:
3 jedis訪問集羣
Jedis jedis = new Jedis(); Set<HostAndPort> set = new HashSet<>(); set.add(new HostAndPort("192.168.1.104",7001)); set.add(new HostAndPort("192.168.1.104",7002)); set.add(new HostAndPort("192.168.1.104",7003)); set.add(new HostAndPort("192.168.1.104",7004)); set.add(new HostAndPort("192.168.1.104",7005)); set.add(new HostAndPort("192.168.1.104",7006)); JedisCluster cluster = new JedisCluster(set); String result = cluster.get("a"); System.out.println(result);