Docker下的Redis集群

redis-cli -a 密码 --cluster create 192.168.52.160:6378 192.168.52.160:6379 192.168.52.160:6380 192.168.52.160:6381 192.168.52.160:6382 192.168.52.160:6383 --cluster-replicas 1

redis集群要求的最低是6个机器,少于6个会报错,不排除有少于6个的部署方式,但是目前根据官网找到的建议,是三主三从

注意!要先创建redis.conf

port 端口
requirepass 密码
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.52.16
cluster-announce-port 端口
cluster-announce-bus-port 1端口

自动生成的方式:
for port in $(seq 79 84);
do
mkdir -p /docker-file/redis${port}/conf
touch /docker-file/redis${port}/conf/redis.conf
cat << EOF > /docker-file/redis${port}/conf/redis.conf
port 63${port}
requirepass 密码
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 服务器ip地址
cluster-announce-port 63${port}
cluster-announce-bus-port 163${port}
EOF
done

docker run -it -d -p 6378:6378 -p 16378:16378 --privileged=true -v /docker-file/redis78/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -v /docker-file/redis78/data:/data --restart always --name redis78 redis redis-server /usr/local/etc/redis/redis.conf

docker run -it -d -p 6379:6379 -p 16379:16379 --privileged=true -v /docker-file/redis79/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -v /docker-file/redis79/data:/data --restart always --name redis79 redis redis-server /usr/local/etc/redis/redis.conf

docker run -it -d -p 6380:6380 -p 16380:16380 --privileged=true -v /docker-file/redis80/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -v /docker-file/redis80/data:/data --restart always --name redis80 redis redis-server /usr/local/etc/redis/redis.conf

docker run -it -d -p 6381:6381 -p 16381:16381 --privileged=true -v /docker-file/redis81/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -v /docker-file/redis81/data:/data --restart always --name redis81 redis redis-server /usr/local/etc/redis/redis.conf

docker run -it -d -p 6382:6382 -p 16382:16382 --privileged=true -v /docker-file/redis82/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -v /docker-file/redis82/data:/data --restart always --name redis82 redis redis-server /usr/local/etc/redis/redis.conf

docker run -it -d -p 6383:6383 -p 16383:16383 --privileged=true -v /docker-file/redis83/conf/redis.conf:/usr/local/etc/redis/redis.conf --privileged=true -v /docker-file/redis83/data:/data --restart always --name redis83 redis redis-server /usr/local/etc/redis/redis.conf

docker run -it -d -p 6379:6379 -p 16379:16379 --privileged=true -v "D:DockerFilesredisconfredis.conf":/usr/local/etc/redis/redis.conf --privileged=true -v "D:DockerFilesredisdata":/data --restart always --name redis --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf

-it:交互
-d:后台运行,容器启动完成后打印容器
–privileged:是否让docker 应用容器 获取宿主机root权限(特殊权限-)
-p :端口映射
-v:文件挂载
–sysctl参数来设置系统参数,通过这些参数来调整系统性能
–restart always:在容器退出时总是重启容器
–name :给容器取名

同样有脚本自动化的方式:
for port in $(seq 78 83); \
do \
docker run -it -d -p 63${port}:63${port} -p 163${port}:163${port} \
--privileged=true -v /docker-file/redis${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v /docker-file/redis${port}/data:/data \
--restart always --name redis${port} \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf
done

docker exec -it redis78 /bin/bash

redis-cli -a 密码 --cluster create 192.168.1.115:6379 192.168.1.125:63790 192.168.1.125:63800 192.168.1.125:63810 192.168.1.125:63820 192.168.1.125:63830 --cluster-replicas 1

redis-cli -c -a 密码 -h ip -p 端口

cluster nodes
查看节点状态

停止和删除节点
for port in $(seq 78 83);
do
docker stop redis${port}
done

for port in $(seq 78 83);
do
docker rm redis${port}
done


扫描二维码,在手机上阅读!

发表评论

电子邮件地址不会被公开。 必填项已用*标注