集群搭建
本机IP 192.168.1.149
分别采用映射 192.168.1.149 的6379 6380 6381 三个端口模拟三台服务器。搭建三主无从的集群
首先可以在本机上创建三份redis.conf配置文件,分别命名为redis1.conf, redis2.conf, redis3.conf ,我这里放在/opt/redis/conf/中
redis*.conf
# redis进程的端口号
port 6379
# 绑定的主机地址
bind 0.0.0.0
#开启集群
cluster-enabled yes
# 当为集群模式 将无法配置多数据库,默认为0,这里可以不配置
# databases 0
#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭设置为no。
protected-mode no
# redis进程是否以守护进程的方式运行,yes为是,no为否(不以守护进程的方式运行会占用一个终端)。
daemonize no
#第一台
docker run --name redis1 -p 6379:6379 -p 16379:16379 --volume=/opt/redis/redis1.conf:/etc/redis.conf -d redis:7 redis-server /etc/redis.conf
#第二台
docker run --name redis2 -p 6380:6379 -p 16380:16379 --volume=/opt/redis/redis2.conf:/etc/redis.conf -d redis:7 redis-server /etc/redis.conf
#第三台
docker run --name redis3 -p 6381:6379 -p 16381:16379 --volume=/opt/redis/redis3.conf:/etc/redis.conf -d redis:7 redis-server /etc/redis.conf
进入其中一个容器,下面命令创建一个集群
docker exec -it redis1 bash
#执行下列命令,分配HASH槽
#--cluster-replicas 0 表示没有从节点,如果有每主配一台从节点,则需要6台节点。
redis-cli --cluster create 192.168.1.149:6379 192.168.1.149:6380 192.168.1.149:6381 --cluster-replicas 0
正常情况等待其它节点建立连接。。
其它失败可能如下
必须三个及以上节点,否则提示报错
ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master node
如果配置3主3从 --cluster-replicas 1,节点不够则报错
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 3 nodes and 1 replicas per node.
*** At least 6 nodes are required.
回到其它节点,与刚才的节点建立连接
#进入容器2
docker exec -it redis2 bash
#进入客户端
redis-cli
#连接到之前的节点
CLUSTER MEET 192.168.1.149 6379
CLUSTER MEET 192.168.1.149 6381
exit
#同样进入容器3
docker exec -it redis3 bash
#进入客户端
redis-cli
#连接到之前的节点
CLUSTER MEET 192.168.1.149 6379
CLUSTER MEET 192.168.1.149 6380
exit
当各节点都分配完成,测试一下集群效果,进入任何一个容器节点
docker exec -it redis2 bash
#进入客户端操作 ,设置多个值 ,OK,成功
redis-cli
#set a 111
#set b 111
#set c 111
#set d 111
极端
提示 Warning: 1 node(s) may be unreachable
The port 16379 of node 192.168.1.149 may be unreachable from:
192.168.1.149:6381
Cluster bus ports must be reachable by every node.
Remember that cluster bus ports are different from standard instance ports.
容器需要开放16379端口号,即6379+10000
某些情况下,还需重新分配hash槽,在节点中重新分配一下,执行下列命令,会提示节点未覆盖所有槽位,是否修复,输入yes
[ERR] Not all 16384 slots are covered by nodes.
./redis-cli --cluster fix 192.168.1.149:6379
./redis-cli --cluster fix 192.168.1.149:6380 #类似
./redis-cli --cluster fix 192.168.1.149:6381 #类似