准备工作
创建集群目录
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
- 本机创建(使用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
- 内网创建(同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
- 公网创建
./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,导致外网无法访问
搭建公网集群时遇到的问题
- 程序ERR This isntance has cluster support disabled
开启配置:
cluster-enabled yes
- [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
- 创建集群命令时卡在Waiting for the cluster to join …
解决:阿里云开启17000~17005 总线接口