1.创建数据目录
[root@localhost redis]# pwd
/data/redis
[root@localhost redis]# mkdir 700{1..6}/data ##这个目录和下边yml文件的volumes对应
[root@localhost redis]# ls
7001 7002 7003 7004 7005 7006 docker-compose.yml
2.创建一个docker-compose.yml文件,内容如下:
version: '3'
services:
redis1:
image: publicisworldwide/redis-cluster
network_mode: host
restart: always
volumes:
- /data/redis/7001/data:/data
environment:
- REDIS_PORT=7001
redis2:
image: publicisworldwide/redis-cluster
network_mode: host
restart: always
volumes:
- /data/redis/7002/data:/data
environment:
- REDIS_PORT=7002
redis3:
image: publicisworldwide/redis-cluster
network_mode: host
restart: always
volumes:
- /data/redis/7003/data:/data
environment:
- REDIS_PORT=7003
redis4:
image: publicisworldwide/redis-cluster
network_mode: host
restart: always
volumes:
- /data/redis/7004/data:/data
environment:
- REDIS_PORT=7004
redis5:
image: publicisworldwide/redis-cluster
network_mode: host
restart: always
volumes:
- /data/redis/7005/data:/data
environment:
- REDIS_PORT=7005
redis6:
image: publicisworldwide/redis-cluster
network_mode: host
restart: always
volumes:
- /data/redis/7006/data:/data
environment:
- REDIS_PORT=7006
官网建议用host模式,如果不想用也可以使用briage模式:docker-compose.yml内容如下:
---
redismaster1:
image: 'publicisworldwide/redis-cluster'
environment:
REDIS_PORT: '7000'
ports:
- '7000:7000'
- '17000:17000'
redismaster2:
image: 'publicisworldwide/redis-cluster'
environment:
REDIS_PORT: '7001'
ports:
- '7001:7001'
- '17001:17001'
redismaster3:
image: 'publicisworldwide/redis-cluster'
environment:
REDIS_PORT: '7002'
ports:
- '7002:7002'
- '17002:17002'
redisslave1:
image: 'publicisworldwide/redis-cluster'
environment:
REDIS_PORT: '7003'
ports:
- '7003:7003'
- '17003:17003'
redisslave2:
image: 'publicisworldwide/redis-cluster'
environment:
REDIS_PORT: '7004'
ports:
- '7004:7004'
- '17004:17004'
redisslave3:
image: 'publicisworldwide/redis-cluster'
environment:
REDIS_PORT: '7005'
ports:
- '7005:7005'
- '17005:17005'
3.创建文件之后,启动服务
[root@k8s-m2 redis]# docker-compose up -d
Creating redis_redis1_1 ... done
Creating redis_redis5_1 ... done
Creating redis_redis4_1 ... done
Creating redis_redis3_1 ... done
Creating redis_redis6_1 ... done
Creating redis_redis2_1 ... done
[root@k8s-m2 redis]# docker-compose ps
Name Command State Ports
---------------------------------------------------------------
redis_redis1_1 /usr/local/bin/entrypoint. ... Up
redis_redis2_1 /usr/local/bin/entrypoint. ... Up
redis_redis3_1 /usr/local/bin/entrypoint. ... Up
redis_redis4_1 /usr/local/bin/entrypoint. ... Up
redis_redis5_1 /usr/local/bin/entrypoint. ... Up
redis_redis6_1 /usr/local/bin/entrypoint. ... Up
状态都为Up,说明服务均正常启动,如果有状态不正常的容器,看看自己服务器的端口是不是被占用了。
4.redis-cluster集群配置
上述只是启动了6个redis容器,并没有设置集群,随便进入一个redis容器,执行下面的命令,IP替换成自己宿主机的IP
[root@k8s-m2 redis]# docker exec -ti d3a904cc0d5a bash
root@k8s-m2:/data# redis-cli --cluster create 192.168.1.100:7001 192.168.1.100:7002 192.168.1.100:7003 192.168.1.100:7004 192.168.1.100:7005 192.168.1.100:7006 --cluster-replicas 1
>>> 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.1.100:7004 to 192.168.1.100:7001
Adding replica 192.168.1.100:7005 to 192.168.1.100:7002
Adding replica 192.168.1.100:7006 to 192.168.1.100:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 7237efa105ff4246c02da08c0e65c18246755f2f 192.168.1.100:7001
slots:[0-5460] (5461 slots) master
M: 241d6eb2abcd9a6d41db5231fcd80fac1d452bee 192.168.1.100:7002
slots:[5461-10922] (5462 slots) master
M: 493083f2733bc181295f5b9a9fa9bc6fdf821958 192.168.1.100:7003
slots:[10923-16383] (5461 slots) master
S: b60ef6cbea0ae06566d17db4a1b4452e56543419 192.168.1.100:7004
replicates 241d6eb2abcd9a6d41db5231fcd80fac1d452bee
S: b48e546e963f694eac91d49b285040bb2bec5513 192.168.1.100:7005
replicates 493083f2733bc181295f5b9a9fa9bc6fdf821958
S: 259de2d6be917e64cdc01604521da45cc1f8d842 192.168.1.100:7006
replicates 7237efa105ff4246c02da08c0e65c18246755f2f
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.1.100:7001)
M: 7237efa105ff4246c02da08c0e65c18246755f2f 192.168.1.100:7001
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 241d6eb2abcd9a6d41db5231fcd80fac1d452bee 192.168.1.100:7002
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
M: 493083f2733bc181295f5b9a9fa9bc6fdf821958 192.168.1.100:7003
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: b60ef6cbea0ae06566d17db4a1b4452e56543419 192.168.1.100:7004
slots: (0 slots) slave
replicates 241d6eb2abcd9a6d41db5231fcd80fac1d452bee
S: 259de2d6be917e64cdc01604521da45cc1f8d842 192.168.1.100:7006
slots: (0 slots) slave
replicates 7237efa105ff4246c02da08c0e65c18246755f2f
S: b48e546e963f694eac91d49b285040bb2bec5513 192.168.1.100:7005
slots: (0 slots) slave
replicates 493083f2733bc181295f5b9a9fa9bc6fdf821958
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
至此,基于docker部署的redis-cluster集群就已经完成。
下面设置密码,命令如下:
设置masterauth
config set masterauth 密码
设置requirepass
config set requirepass 密码
验证密码,以继续操作
auth LinShen
回写到文件,使其永久生效(如果这里出现Permission denied,则说明Dockerfile少了RUN chmod 777 /usr/local/etc/redis/redis.conf)
config rewrite
然后查看是否设置成功:
get masterauth
get requirepass