Redis集羣搭建:解決java程序外網無法連接集羣

準備工作

創建集羣目錄

mkdir redis-cluster

創建節點目錄(集羣至少需要三主三從)

cd redis-cluster
mkdir 7000 7001 7002 7003 7004 7005

複製redis至集羣目錄

cp -r * /usr/local/redis-cluster/(這裏複製了redis所有文件,理論上只複製redis-server.c文件即可,不過未進行嘗試)

修改配置

vim redis-conf

基礎配置

解決外網訪問
1.bind 註釋掉,即開啓外部訪問
2.使用密碼,安全訪問
設置密碼:
requirepass xxxx
後臺啓動
daemonize yes
修改端口
port 7000

集羣配置

1.開啓集羣模式
cluster-enabled yes
2.集羣配置文件
cluster-config-file nodes-700x.conf
3.集羣節點超時連接
cluster-node-timeout 5000
4.開啓aof模式
appendonly yes
5.數據庫文件修改
dbfilename dump700x.rdb
6.pidfile
pidfile /var/run/redis_700x.pid

複製配置文件到節點目錄

cd ../local/redis-cluster/
cp redis.conf 7000
cp redis.conf 7001
cp redis.conf 7002
cp redis.conf 7003
cp redis.conf 7004
cp redis.conf 7005

創建集羣

redis5

  1. 本機創建(使用jedisCluster解析獲取的集羣節點ip是127.0.0.1,外界無法訪問)
    ./redis-cli --cluster create 127.0.0.1:7000 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 --cluster-replicas 1
  2. 內網創建(同1,不同局域網程序無法訪問)
    ./redis-cli --cluster create 172.17.128.38:7000 172.17.128.38:7001 172.17.128.38:7002 172.17.128.38:7003 172.17.128.38:7004 172.17.128.38:7005 --cluster-replicas 1 -a password
  3. 公網創建
    ./redis-cli --cluster create 公網ip:7000 公網ip:7001 公網ip:7002 公網ip:7003 公網ip:7004 公網ip:7005 --cluster-replicas 1 -a password(設置了密碼需要加此命令)
  • create創建新集羣
  • cluster-replicas爲每個主機提供1個從機

redis3/4

使用redis-trib.rb(src下)

安裝redisgem

gem install redis

創建集羣

./redis-trib.rb create --replicas 1 127.0.0.1:7000 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

創建成功

[OK] All 16384 slots covered

腳本創建集羣

https://redis.io/topics/cluster-tutorial

啓動集羣

cd 7000
../src/redis-server redis.conf
cd ../7001
../src/redis-server redis.conf
cd ../7002
../src/redis-server redis.conf
cd ../7003
../src/redis-server redis.conf
cd ../7004
../src/redis-server redis.conf
cd ../7005
../src/redis-server redis.conf
cd ..

查看節點狀態

ps -ef | grep redis

root 31002 1 0 20:49 ? 00:00:00 …/src/redis-server *:7000 [cluster]
root 31007 1 0 20:49 ? 00:00:00 …/src/redis-server *:7001 [cluster]
root 31009 1 0 20:49 ? 00:00:00 …/src/redis-server *:7002 [cluster]
root 31011 1 0 20:49 ? 00:00:00 …/src/redis-server *:7003 [cluster]
root 31016 1 0 20:49 ? 00:00:00 …/src/redis-server *:7004 [cluster]
root 31018 1 0 20:49 ? 00:00:00 …/src/redis-server *:7005 [cluster]

登錄集羣

./redis-cli -c -p 7000 -a password

查看集羣信息

cluster nodes

配置阿里雲安全組

在安全組中添加端口開放規則

關於公網集羣

如果搭建的不是公網集羣,java程序使用集羣時,獲取的節點信息是內網ip,導致外網無法訪問

搭建公網集羣時遇到的問題

  1. 程序ERR This isntance has cluster support disabled
    開啓配置:
    cluster-enabled yes
  2. [ERR] Node xxx:7000 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
  • 刪除每個節點的aof.rdb文件
  • 刪除每個節點的節點文件
  • 刪除之後連接每個集羣節點執行命令
    • flushdb
    • cluster reset
  1. 創建集羣命令時卡在Waiting for the cluster to join …
    解決:阿里雲開啓17000~17005 總線接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章