Redis集群部署(cluster模式——Docker)
本次部署采用的是Docker环境进行部署,如不知Docker环境如何搭建的请看这篇文章【k8s搭建(超详细,保姆级教程)】的第4.1小节。
1、开始搭建
拉取redis的镜像【redis:6.2 】。
[root@localhost ~]# docker pull redis:6.2
6.2: Pulling from library/redis
......
Digest: sha256:0eca17393889e1dd31fec58bb9aadc396dff01d00c3fcdbd31d60b4f80155504
Status: Downloaded newer image for redis:6.2
docker.io/library/redis:6.2
[root@localhost ~]#
查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.2 0f48e801b37d 10 days ago 113MB
下载redis6.2版本的配置文件
[root@localhost redis]# wget https://github.com/redis/redis/blob/6.2/redis.conf -O redis.conf --no-check-certificate
此次我这里搭建的是3主3从。准备6份redis.conf配置文件,配置内容如下:
bind * -::* #任意ip都能连接redis服务
cluster-enabled yes #开启cluster集群模式
protected-mode no #关闭保护模式
requirepass abcd12345abcd #启用密码,也可以不启用
masterauth abcd12345abcd #启用密码时必须配置,要不然主从同步时会产生大量日志导致磁盘空间占满
maxmemory 536870912 #最大内存512M,可以不启用
maxmemory-policy allkeys-lru #内存淘汰策略,可以不启用
准备如下6个目录,并复制redis.conf到这6个目录下。
创建6个目录
[root@localhost redis]# mkdir -p rd1 rd2 rd3 rd4 rd5 rd6
复制redis.conf到rd1 rd2 rd3 rd4 rd5 rd6这六个文件目录下
[root@localhost redis]# ll |grep rd | awk '{system("cp redis.conf "$9"")}'
启动6个redis容器
[root@localhost redis]# docker run -d --name redis1 -v /root/redis/rd1/redis.conf:/usr/local/etc/redis/redis.conf redis:6.2 redis-server /usr/local/etc/redis/redis.conf
[root@localhost redis]# docker run -d --name redis2 -v /root/redis/rd2/redis.conf:/usr/local/etc/redis/redis.conf redis:6.2 redis-server /usr/local/etc/redis/redis.conf
[root@localhost redis]# docker run -d --name redis3 -v /root/redis/rd3/redis.conf:/usr/local/etc/redis/redis.conf redis:6.2 redis-server /usr/local/etc/redis/redis.conf
[root@localhost redis]# docker run -d --name redis4 -v /root/redis/rd4/redis.conf:/usr/local/etc/redis/redis.conf redis:6.2 redis-server /usr/local/etc/redis/redis.conf
[root@localhost redis]# docker run -d --name redis5 -v /root/redis/rd5/redis.conf:/usr/local/etc/redis/redis.conf redis:6.2 redis-server /usr/local/etc/redis/redis.conf
[root@localhost redis]# docker run -d --name redis6 -v /root/redis/rd6/redis.conf:/usr/local/etc/redis/redis.conf redis:6.2 redis-server /usr/local/etc/redis/redis.conf
查看6个redis容器已经正确启动成功
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d8eacdbc6c80 redis:6.2 "docker-entrypoint.s…" 32 seconds ago Up 31 seconds 6379/tcp redis6
8c2d2bd56b94 redis:6.2 "docker-entrypoint.s…" 41 seconds ago Up 40 seconds 6379/tcp redis5
b70ee4db9103 redis:6.2 "docker-entrypoint.s…" 53 seconds ago Up 52 seconds 6379/tcp redis4
2ef568f53f9e redis:6.2 "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp redis3
2ab4df33c5ff redis:6.2 "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp redis2
4a2d8729355d redis:6.2 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 6379/tcp redis1
查看6个服务器的IP地址。
[root@localhost redis]# docker inspect $(docker ps -a -q)|grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.7",
"IPAddress": "172.17.0.7",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.6",
"IPAddress": "172.17.0.6",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.5",
"IPAddress": "172.17.0.5",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.4",
"IPAddress": "172.17.0.4",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
随意选择一个容器,然后执行如下命令创建cluster集群,副本数为1。
[root@localhost redis]# docker exec -it redis1 redis-cli -a abcd12345abcd --cluster create 172.17.0.2:6379 172.17.0.3:6379 172.17.0.4:6379 172.17.0.5:6379 172.17.0.6:6379 172.17.0.7:6379 --cluster-replicas 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 172.17.0.6:6379 to 172.17.0.2:6379
Adding replica 172.17.0.7:6379 to 172.17.0.3:6379
Adding replica 172.17.0.5:6379 to 172.17.0.4:6379
M: d82fbacc9a1adb6c48178439f7ecb99e31719f4f