单个Redis的Docker的通过这篇文章获取:Docker创建服务容器
集群搭建
Redis的集群要求最少有3个节点,否则会出现以下的错误提醒:
我们创建三个容器分别代表三个机器
docker create --name redis-node1 --network net --ip 172.18.0.161 --network-alias redis1 -p 16379:6379 redis --cluster-enabled yes --cluster-config-file node-1.conf
docker create --name redis-node2 --network net --ip 172.18.0.162 --network-alias redis2 -p 16380:6379 redis --cluster-enabled yes --cluster-config-file node-2.conf
docker create --name redis-node3 --network net --ip 172.18.0.163 --network-alias redis3 -p 16381:6379 redis --cluster-enabled yes --cluster-config-file node-3.conf
因为Redis集群对网络别名支持不友好,原本打算通过别名连接,但是会报以下的错误:
所以为了防止网络IP乱跳,我们最好固定指定IP地址,在这里分别对应172.18.0.161,172.18.0.162,172.18.0.163,另外别忘了让他们在同一个Docker网络下。
在创建完三个容器后,通过命令,或桌面端Docker运行容器,命令如下:
docker start redis-node1 redis-node2 redis-node3
启动完成后,进入到redis-node1的bash:
docker exec -it redis-ndoe1 /bin/bash
进入到终端后,执行以下命令:
redis-cli --cluster create 172.18.0.161:6379 172.18.0.162:6379 172.18.0.163:6379 --cluster-replicas 0
将三个节点成为一个集群,输入回车后,会显示节点分的哈希快,问你是否使用,输入:yes即可。
当集群搭建好后,通过 redis-cli -c
的方式进入到命令终端,进行集群测试:
当设置key时,根据哈希值自动切换到节点3设置,当查询时也会根据对应键到对应节点搜索后返回;
主从复制
主从复制可用于做读写分离,主节点可写入读出,从节点只可读出,主节点只有一个,从节点可以有多个。
首先我们在主节点内新增一个值,接下来创建一个从节点容器(和创建集群容器命令不同):
docker create --name redis-node4 --network net --ip 172.18.0.164 --network-alias redis4 -p 16382:6379 redis redis-server --slaveof 172.18.0.161 6379
创建完毕后,将容器运行起来进入到redis交互输入,get k1
即可看到已经从主节点复制了复制过来了。
并且在从节点内,是不能写入的
如果是需要做集群的主从处理,最好和集群等量的从节点,在测试过程中,如果在集群节点写入键时,请留意将键写入到了哪一个集群上,并且在对应的从节点才可以读取到。
PS:在本主从复制中的node1已经不是集群。