docker搭建redis-cluster集群,多机器
redis-cluster搭建
机器列表
主机名 | IP地址 |
---|---|
redis1 | 10.0.0.85 |
redis2 | 10.0.0.48 |
redis3 | 10.0.0.65 |
- 此教程安装目录默认为 /community/rediscluster
- 3台都是
免密登录(可不做)
- 登录10.0.0.85
ssh-keygen -t rsa
[root@0002 .ssh]# cat authorized_keys
[root@0002 .ssh]# cat ./id_rsa.pub >> authorized_keys
[root@0002 .ssh]# chmod 600 authorized_keys
[root@0002 .ssh]# cd ..
[root@0002 ~]# chmod -R 700 .ssh/
- 复制密匙到其他机器
ssh-copy-id -i ~/.ssh/id_rsa.pub [romte_ip]
编写配置文件
vim redis-cluster.tmpl
- 注意: daemonize必须为no
bind 0.0.0.0
port ${PORT}
# docker安装必须为no,如果是yes,docker会认为这个程序未启动
daemonize no
requirepass "123456"
logfile "/var/log/redis.log"
dbfilename "redis.rdb"
dir "/data"
appendonly yes
appendfilename "appendonly.aof"
masterauth "123456"
#是否开启集群
cluster-enabled yes
# 生成的node文件,记录集群节点信息,默认为nodes.conf,防止冲突,改为nodes-${PORT}.conf
cluster-config-file nodes-${PORT}.conf
#节点连接超时时间
cluster-node-timeout 20000
#集群节点的ip,当前节点的ip
cluster-announce-ip 10.0.0.85
#集群节点映射端口
cluster-announce-port ${PORT}
#集群节点总线端口,节点之间互相通信,常规端口+1万
cluster-announce-bus-port 1${PORT}
创建文件夹命令
vim mkdir.sh
path=/community/rediscluster/
for port in `seq 7000 7001`; #创建每个实例的conf 和data 文件夹
do \
mkdir -p ${path}cluster${port}/conf \
&& PORT=${port} envsubst < ${path}redis-cluster.tmpl > ${path}cluster${port}/conf/redis.conf \
&& mkdir -p ${path}cluster${port}/data && mkdir -p ${path}cluster${port}/log \
&& chmod -R 777 ${path}cluster${port}/log;\
done
创建镜像命令
vim create.sh
for port in `seq 7000 7001`; do
#运行每个实例
echo "docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /community/rediscluster/cluster${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /community/rediscluster/cluster${port}/data:/data \
-v /community/rediscluster/cluster${port}/log:/var/log \
--restart always --name redis-${port} \
--privileged=true \
redis redis-server /etc/redis/redis.conf
"
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /community/rediscluster/cluster${port}/conf/redis.conf:/etc/redis/redis.conf \
-v /community/rediscluster/cluster${port}/data:/data \
-v /community/rediscluster/cluster${port}/log:/var/log \
--restart always --name redis-${port} \
--privileged=true \
redis redis-server /etc/redis/redis.conf
done
创建操控其他机器的命令
vim mycmd.sh
host=("10.0.0.85" "10.0.0.65" "10.0.0.48")
for item in ${host[@]};
do
echo "==================== ${item} ===================="
ssh root@${item} "source /etc/profile; $@"
echo ""
echo ""
echo ""
done
将上述文件传到各个文件
- 将 redis-cluster.tmpl、 mkdir.sh、 create.sh传到其他机器上面
scp redis-cluster.tmpl mkdir.sh create.sh root@10.0.0.48:/community/rediscluster/
scp redis-cluster.tmpl mkdir.sh create.sh root@10.0.0.65:/community/rediscluster/
- 修改 10.0.0.48,10.0.0.65的 redis-cluster.tmpl中的当前节点的ip为当前机器ip
- 修改 10.0.0.48,10.0.0.65的 redis-cluster.tmpl中的当前节点的ip为当前机器ip
- 修改 10.0.0.48,10.0.0.65的 redis-cluster.tmpl中的当前节点的ip为当前机器ip
创建redis容器
- 如果不做免密登录,可以自己到对应的机器执行相对于的脚本
- 如果不做免密登录,可以自己到对应的机器执行相对于的脚本
- 如果不做免密登录,可以自己到对应的机器执行相对于的脚本
- 1.先创建文件夹
sh mycmd.sh sh /community/rediscluster/mkdir.sh
- 2.创建redis容器
sh mycmd.sh sh /community/rediscluster/create.sh
- 3.查看redis容器是否启动
sh mycmd.sh docker ps
创建集群
-
进去一台redis容器
-
docker exec -it redis-7000 sh
-
创建集群
redis-cli -a 密码 --cluster create 10.0.0.48:7000 10.0.0.48:7001 10.0.0.65:7000 10.0.0.65:7001 10.0.0.85:7000 10.0.0.85:7001 --cluster-replicas 1
- 检查状态信息(其中一个节点执行即可)
redis-cli -a 密码 --cluster check 10.0.0.48:7000