目录
创建集群
网络环境配置
创建虚拟网卡
创建虚拟网卡,主要是用于redis-cluster能于外界进行网络通信,一般常用桥接模式。
docker network create redis-net
查看docker网卡信息
如果想查看docker的网卡信息,可使用如下指令
docker network ls
查看详细信息
如果想查看docker网络详细信息,可使用命令
docker network inspect redis-net
创建Redis配置模板
先创建一个目录,用于存放redis的配置模板。命令如下
mkdir -p /usr/local/docker/redis-cluster
切换到此目录下面
cd /usr/local/docker/redis-cluster
创建配置模板
vim redis-cluster.tmpl
向配置模板里面输入以下内容
port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.126.128
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
命令解释:
- port:节点端口,即对外提供通信的端口
- cluster-enabled:是否启用集群
- cluster-config-file:集群配置文件
- cluster-node-timeout:连接超时时间
- cluster-announce-ip:宿主机ip
- cluster-announce-port:集群节点映射端口
- cluster-announce-bus-port:集群总线端口
- appendonly:持久化模式
创建节点配置文件
继续在redis-cluster目录下执行以下命令,这样就通过模板文件创建了6个目标文件(这6个目标文件分别对应于不同的redis容器的端口)
for port in $(seq 8010 8015); \
do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
- 指令envsubst <源文件>目标文件,用于将源文件内容更新到目标文件中.
其中for 变量 in $(seq var1 var2);do....;done为Linux中的一种shell循环脚本 ,例如:
[root@centos7964 ~]# for i in $(seq 1 5);
> do echo $i;
> done;
1
2
3
4
5
[root@centos7964 ~]#
使用以下命令可以批量查看配置文件内容
cat /usr/local/docker/redis-cluster/801{0..5}/conf/redis.conf
创建Redis集群节点容器
上面已经完成了创建容器的准备工作,下面使用以下命令就可以创建集群中的redis节点容器了.
for port in $(seq 8010 8015); \
do \
docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \
--privileged=true -v /usr/local/docker/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v /usr/local/docker/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net redis-net \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done
上述命令也是进行的批量操作,避免了一个一个的手动创建.
相关命令解释如下:
- --privileged=true表示让启动的容器用户具备真正root权限
- --sysctl net.core.somaxconn=1024 这是一个linux的内核参数,用于设置请求队列大小,默认为128,后续启动redis的启动指令需要先放到这个请求队列中,然后依次启动.
创建成功后就可以使用 docker ps 命令来查看节点容器的内容了.
需要注意,现在只是完成了多个容器的创建 ,还没有设置集群,也即这几个容器之间现在还没有任何联系.
创建redis-cluster集群配置
使用以下两个步骤就可以完成集群的配置
先随机进入一个容器当中:
docker exec -it redis-8010 bash
然后输入以下命令:
redis-cli --cluster create 192.168.126.128:8010 192.168.126.128:8011 192.168.126.128:8012 192.168.126.128:8013 192.168.126.128:8014 192.168.126.128:8015 --cluster-replicas 1
注意这个命令尽量放在一行执行,其中最后的数字1表示主从比例(即总共有6个redis服务,主服务占3个,从服务也占3个).如果出现选择提示信息时,输入yes即可.
同时可以看到有一个slots槽点信息,它里面的数字范围表示各自redis服务拥有的槽点数,后面存取数据都是根据key的hash值与槽点对应,然后指向对应的redis服务.
进入redis服务
连接redis-cluster,并添加数据到redis,进入端口号为8010的redis服务,后续如果需要改变redis服务,直接修改成对应的端口号即可.
redis-cli -c -h 192.168.126.128 -p 8010
批量操作
在搭建过程,可能在出现问题后,需要停止或直接删除docker容器,可以使用以下参考命令
批量停止docker容器
docker ps -a | grep -i "redis-801*" | awk '{print $1}' | xargs docker stop
批量删除docker容器
docker ps -a | grep -i "redis-801*" | awk '{print $1}' | xargs docker rm -f
批量删除文件
rm -rf 801{0..5}/conf/redis.conf