Redis学习整理
个人学习思维导图
自己整理的思维导图,后续按照导图一步一步进行笔记整理,补充到文章里
redis-cluster集群搭建步骤
备注:采用一台linux centos7服务器模拟集群
-
创建一个redis-cluster文件夹,后续在此文件夹下搭建集群。
-
创建6个文件夹,作为6个节点,三主三从,分别是:6368 6369 6378 6379 6388 6389。
-
上述6个文件夹下分别创建conf和data,作为防止每个节点配置文件以及数据的地方。
-
将标准的redis.conf下载后进行修改,放进6368 6369等文件下的conf目录下。
这里修改的是绑定的主机地址,设置成0.0.0.0是为了处理所有请求,这样设置不是合理,可以设置成本机的ip。
这里设置的是集群的密码,从节点必须与主节点的密码保持一致,这里都设置成一样的。
这是设置redis的密码,我设置的和上述的masterauth一致
开启集群,cluster-config-file是集群配置文件,集群节点自动维护
cluster-announce-port:集群节点映射端口
cluster-announce-bus-port:集群总线端口
经过上述修改后,放进6368 6369等文件下的conf目录下,作为redis启动的配置文件。 -
配置docker-compose-redis.yml文件,通过docker-compose来启动多个docker任务容器,即启动三主三从,命名分别为redis-m1、redis-m2、redis-m3、redis-s1、redis-s2、redis-s3,采用的镜像是redis:6.2.5版本。
version: '2'
services:
redis1:
mem_limit: 512m
image: redis:6.2.5 #自己的仓库地址,我这里隐藏了我的仓库名称
restart: always #表示docker重启时,该任务容器也会重启
container_name: redis-m1 #容器名称
ports:
- 6368:6379 #6379映射到主机6368
- 16368:16379 #16379映射到主机16368
command:
redis-server /etc/redis/redis.conf
volumes:
- ./6368/data:/data #数据映射到6368文件夹下data文件夹
- ./6368/conf/redis.conf:/etc/redis/redis.conf #配置文件映射到6368文件夹下conf文件夹
logging:
options:
max-size: "10m"
max-file: "10"
redis2:
mem_limit: 512m
image: redis:6.2.5
restart: always
container_name: redis-m2
ports:
- 6378:6379
- 16378:16379
command:
redis-server /etc/redis/redis.conf
volumes:
- ./6378/data:/data
- ./6378/conf/redis.conf:/etc/redis/redis.conf
logging:
options:
max-size: "10m"
max-file: "10"
redis3:
mem_limit: 512m
image: redis:6.2.5
restart: always
container_name: redis-m3
ports:
- 6388:6379
- 16388:16379
command:
redis-server /etc/redis/redis.conf
volumes:
- ./6388/data:/data
- ./6388/conf/redis.conf:/etc/redis/redis.conf
logging:
options:
max-size: "10m"
max-file: "10"
redis4:
mem_limit: 512m
image: redis:6.2.5
restart: always
container_name: redis-s1
ports:
- 6369:6379
- 16369:16379
command:
redis-server /etc/redis/redis.conf
volumes:
- ./6369/data:/data
- ./6369/conf/redis.conf:/etc/redis/redis.conf
logging:
options:
max-size: "10m"
max-file: "10"
redis5:
mem_limit: 512m
image: redis:6.2.5
restart: always
container_name: redis-s2
ports:
- 6379:6379
- 16379:16379
command:
redis-server /etc/redis/redis.conf
volumes:
- ./6379/data:/data
- ./6379/conf/redis.conf:/etc/redis/redis.conf
logging:
options:
max-size: "10m"
max-file: "10"
redis6:
mem_limit: 512m
image: redis:6.2.5
restart: always
container_name: redis-s3
ports:
- 6389:6379
- 16389:16379
command:
redis-server /etc/redis/redis.conf
volumes:
- ./6389/data:/data
- ./6389/conf/redis.conf:/etc/redis/redis.conf
logging:
options:
max-size: "10m"
max-file: "10"
networks:
default:
external:
name: myDocker #这是你创建的网桥 可在这一步之前先执行sudo docker network create myDocker 创建容器虚拟网桥
-
docker-compose -f docker-compose-redis.yml up -d 启动6个容器任务,代表6个节点。
-
docker inspect <各容器id> |grep IPAddress
查看各容器的虚拟IP
-
docker exec -it redis-m1 bash
进入到其中一个节点容器 -
redis-cli --cluster create 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.2:6379 172.17.0.7:6379 172.17.0.3:6379 --cluster-replicas 1 -a <password>
如果在redis.conf里设置了密码,这里就需要加上-a <password>
,否则则不需要,如果出现了[ERR] Node 172.17.0.4:6379 NOAUTH Authentication required.
则表示需要密码。 -
运行第9点的命令后,中间会出现输入yes or no,输入yes后,若出现
[OK] All 16384 slots covered.
则表示成功。 -
redis-cli -c -a <你的password>
链接到redis,-c表示集群,-a表示密码,如果设置了一定要输入,不然每次重定向到新的节点都会出现-> Redirected to slot [12299] located at 172.17.0.6:6379 (error) NOAUTH Authentication required.
这样的错,而且在set的时候如果重定向到其他节点,但是又没有权限,最后使用get获取该key的值的时候会返回 (nil)
-
此时输入
cluster info
可以获取集群信息,如果出现NOAUTH Authentication required.
则表示没有权限,此时可以通过auth <你的password>
认证,出现ok则表示成功。再次输入cluster info
,可获取集群信息。
上述是在一个服务器上模拟redis-cluster集群,实际开发中会在多个服务器上,会有不同,后续去尝试一下多服务器,再来补充。