redis-cluster 集群搭建
Redis集群配置
基于Docker容器进行安装,安装步骤如下
-
拉取Redis镜像
docker pull redis
-
创建redis-cluster.tmpl配置Redis信息
-
创建redis.sh配置需要创建的redis信息
-
添加redis集群使用的网络
-
执行redis.sh创建redis
-
执行redis-cli创建集群
配置Redis信息
-
创建redis-cluster.tmpl配置redis信息
#端口 port ${PORT} #非保护模式 protected-mode no #启用集群模式 cluster-enabled yes cluster-config-file nodes.conf #超时时间 cluster-node-timeout 5000 #集群各节点IP地址 cluster-announce-ip 192.168.4.11 #集群节点映射端口 cluster-announce-port ${PORT} #集群总线端口 cluster-announce-bus-port 1${PORT} #开启aof持久化策略 appendonly yes #后台运行 #daemonize yes #进程号存储 pidfile /var/run/redis_${PORT}.pid #集群加密 #masterauth 123456 #requirepass 123456
-
创建
redis.sh
#!/bin/bash #在/usr/local/server/redis-cluster下生成conf和data目标,并生成配置信息 #输入信息 read -p "请输入本机IP地址:" Native_IP # 创建文件夹 # 下载redis配置模板 echo "正在下载redis-cluster.tmpl配置模板,请手动下载redis-cluster.tmpl文件并复制到/usr/local/server/redis-cluster目录"; # 文件下载地址 请手动下载redis-cluster.tmpl文件 #wget -P /usr/local/server/redis-cluster https://srv-file22.gofile.io/download/RoGvVk/redis-cluster.tmpl echo "正在创建redis-net网络"; #c创建网络 docker network create redis-net echo "正在创建redis配置文件"; for port in `seq 7001 7006`; do mkdir -p /usr/local/server/redis-cluster/${port}/conf && PORT=${port} Native_IP=${Native_IP} envsubst < /usr/local/server/redis-cluster/redis-cluster.tmpl > /usr/local/server/redis-cluster/${port}/conf/redis.conf && mkdir -p /usr/local/server/redis-cluster/${port}/data; done echo "正在启动redis容器"; #创建6个redis容器 for port in `seq 7001 7006`; do docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /usr/local/server/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/server/redis-cluster/${port}/data:/data --privileged=true --restart always --name redis-${port} --net redis-net --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; done #查找ip for port in `seq 7001 7006`; do echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" "; done #换行 echo -e "\n" #输入信息 read -p "请把输入要启动的docker容器名称,默认redis-7001:" DOCKER_NAME #判断是否为空 if [ ! $DOCKER_NAME ]; then DOCKER_NAME='redis-7001'; fi #进入容器 docker exec -it redis-7001 /bin/bash
-
创建移除脚本
创建stop.sh脚本,用于停止Redis容器,并移除相应的容器
#!/bin/bash docker stop redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 docker rm redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 redis-7006 rm -rf 7001 7002 7003 7004 7005 7006
-
脚本授权
给
redis.sh
和stop.sh
添加可执行权限chmod +x redis.sh chmod +x stop.sh
-
创建集群关联
执行脚本创建
./redis.sh
进入到任意一个安装好的redis节点的
/usr/local/bin
目录,执行redis-cli
创建集群./redis-cli --cluster create 192.168.4.11:7001 192.168.4.11:7002 192.168.4.11:7003 192.168.4.11:7004 192.168.4.11:7005 192.168.4.11:7006 --cluster-replicas 1
创建结果如下:
root@53641db0582e:/data# cd /usr/local/bin/ root@53641db0582e:/usr/local/bin# ls root@53641db0582e:/usr/local/bin# ./redis-cli --cluster create 192.168.4.11:700 192.168.4.11:7002 192.168.4.11:7003 192.168.4.11:7004 192.168.4.11:7005 192.16 .4.11:7006 --cluster-replicas 1:7003 192.168.4.11:7004 192.168.4.11:7005 192.168. >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.4.11:7005 to 192.168.4.11:7001 Adding replica 192.168.4.11:7006 to 192.168.4.11:7002 Adding replica 192.168.4.11:7004 to 192.168.4.11:7003 >>> Trying to optimize slaves allocation for anti-affinity [WARNING] Some slaves are in the same host as their master M: 4ef2f70857556008274c21a669e6930aaa39422f 192.168.4.11:7001 slots:[0-5460] (5461 slots) master M: c21ada5c05b3356c41c937116d4b90362f689851 192.168.4.11:7002 slots:[5461-10922] (5462 slots) master M: 6775a75e445dc10cc3e5966c3f6bf5114d95661f 192.168.4.11:7003 slots:[10923-16383] (5461 slots) master S: 7e4dbe4871e7971488a6052764f7bf8b01ef318b 192.168.4.11:7004 replicates 6775a75e445dc10cc3e5966c3f6bf5114d95661f S: 7a6d6eb3dbbf07ff37b3c5aa5194bcad185d28cb 192.168.4.11:7005 replicates 4ef2f70857556008274c21a669e6930aaa39422f S: 7f58d08ecdc7dc5b13608dfe9a034ec134fc148f 192.168.4.11:7006 replicates c21ada5c05b3356c41c937116d4b90362f689851 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join . >>> Performing Cluster Check (using node 192.168.4.11:7001) M: 4ef2f70857556008274c21a669e6930aaa39422f 192.168.4.11:7001 slots:[0-5460] (5461 slots) master 1 additional replica(s) S: 7e4dbe4871e7971488a6052764f7bf8b01ef318b 192.168.4.11:7004 slots: (0 slots) slave replicates 6775a75e445dc10cc3e5966c3f6bf5114d95661f M: 6775a75e445dc10cc3e5966c3f6bf5114d95661f 192.168.4.11:7003 slots:[10923-16383] (5461 slots) master 1 additional replica(s) S: 7a6d6eb3dbbf07ff37b3c5aa5194bcad185d28cb 192.168.4.11:7005 slots: (0 slots) slave replicates 4ef2f70857556008274c21a669e6930aaa39422f S: 7f58d08ecdc7dc5b13608dfe9a034ec134fc148f 192.168.4.11:7006 slots: (0 slots) slave replicates c21ada5c05b3356c41c937116d4b90362f689851 M: c21ada5c05b3356c41c937116d4b90362f689851 192.168.4.11:7002 slots:[5461-10922] (5462 slots) master 1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.