Docker搭建redis集群

Redis Cluster要求至少需要3个master才能组成一个集群,同时每个master至少需要有一个slave节点,这里我们搭建3个集群节点,每个集群节点包含1个master和2个slave,全都部署在一台服务器上,分别赋予不同的端口。

1.拉取镜像
docker pull redis:latest
2.编写redis配置文件

搭建的集群总共包含9个redis服务,每个redis服务需要一个配置文件。通过下面命令依次在服务器上创建出9个端口号不同的redis.conf配置文件。

for port in $(seq 1 9); \
do \
mkdir -p /usr/local/src/redis-cluster/node-${port}/conf
touch /usr/local/src/redis-cluster/node-${port}/conf/redis.conf
cat << EOF > /usr/local/src/redis-cluster/node-${port}/conf/redis.conf
port 736${port}
protected-mode no
masterauth 1234
requirepass 1234
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 127.0.0.1
cluster-announce-port 736${port}
cluster-announce-bus-port 1736${port}
appendonly yes
EOF
done

port :redis服务端口;
protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证;
requirepass:添加访问认证;
cluster-enabled:是否开启集群模式,默认 no;
cluster-config-file:集群节点信息文件;
cluster-node-timeout:集群节点连接超时时间;
cluster-announce-ip:集群节点 IP,填写宿主机的 IP;
cluster-announce-port:集群节点映射端口;
cluster-announce-bus-port:集群节点总线端口;
appendonly:是否开启 AOF 持久化模式,默认 no;

3.运行容器

通过命令依次启动这9个容器。

for port in $(seq 1 9); \
do \
docker run --privileged=true --name redis-node${port} --restart=always \
-p 736${port}:736${port} -p 1736${port}:1736${port} \
-v /usr/local/src/redis-cluster/node-${port}/data:/data \
-v /usr/local/src/redis-cluster/node-${port}/conf/redis.conf:/etc/redis/redis.conf \
-d redis:latest redis-server /etc/redis/redis.conf
done
4.构建集群
1.进入任一容器内
docker exec -it 0704786d044e bash
2.切换到 /usr/local/bin/ 目录
cd /usr/local/bin/
3.通过下面命令将所有的节点添加到集群中
redis-cli -a 1234 --cluster create 127.0.0.1:7361 127.0.0.1:7362 127.0.0.1:7363 127.0.0.1:7364 127.0.0.1:7365 127.0.0.1:7366 127.0.0.1:7367 127.0.0.1:7368 127.0.0.1:7369 --cluster-replicas 2
4.出现提示:Can I set the above configuration? (type 'yes' to accept): 后输入:yes

完成集群构建先会出现一下信息:
Docker搭建redis集群_第1张图片

5.查看集群
1.进入任一容器内
docker exec -it 0704786d044e bash
2.切换到 /usr/local/bin/ 目录
cd /usr/local/bin/
3.通过下面命令连接到任一集群客户端,连接到客户端后就可以执行对应的读/写等操作了
redis-cli -c -a 1234 -h 127.0.0.1 -p 7361
4.通过下面命令查看集群连接信息
cluster nodes

查询的集群连接信息显示为:
Docker搭建redis集群_第2张图片

当切换到 /usr/local/bin/ 目录后,也可以直接通过下面命令直接查询集群状态信息:

redis-cli -a 1234 --cluster check 127.0.0.1:7361

显示结果为:
Docker搭建redis集群_第3张图片

6.测试集群

连接任一的节点插入一条数据,再查看这条数据会存储到哪个具体的节点上。
Docker搭建redis集群_第4张图片
可以看到我们首先连接到7361端口的服务上,然后插入一个键为key1,集群会根据这个插入的键通过hash slot 算法来计算这个键的hash值由此来决定放置哪个槽,再根据放入的槽与节点的映射关系,最终插入的数据将会存储在槽所映射的节点上。由于每个集群节点又是一主二从的模式,所以3台redis服务上会存储同样的数据。
Docker搭建redis集群_第5张图片

你可能感兴趣的:(docker,docker,redis,java)