Docker搭建Redis集群
1. 安装Redis
- 拉取redis官方镜像
docker pull redis
- 查看镜像
docker images
- 启动redis
docker run -it -p 6379:6379 --name myredis docker.io/redis
- 查看redis服务
docker ps
- 测试
docker exec -it [容器id] redis-cli
2. 搭建集群
以搭建6个节点,三主三从结构为例,分如下步骤
-
创建目录myredis,并创建服务节点子目录,这里我们创建6个子目录slave01、slave02、slave03、slave04、slave05、slave06
-
下载配置文件redis.conf到myredis中
wget http://download.redis.io/redis-stable/redis.conf
-
修改配置文件redis.conf
修改后的配置文件需要copy到slave目录中,以slave01为例,修改内容参考# bind 127.0.0.1 // 注释掉,表示默认所有ip都能访问该redis服务 protected-mode no // 关闭保护模式,开启可能导致无法通过公网访问 port 6381 // 自定义端口 pidfile /var/run/redis_6381.pid // 将文件名加上当前端口名 cluster-enabled yes // 开启集群 cluster-config-file nodes-6381.conf // 集群的配置文件,首次启动会自动生成
-
编写dockerfile,以slave01为例
FROM docker.io/redis # 复制上一步修改的配置文件到redis中 COPY redis.conf /usr/local/etc/redis/redis.conf # 修改文件权限,后面设置密码可以通过config rewrite重写 RUN chmod 777 /usr/local/etc/redis/redis.conf # Redis客户端连接端口 EXPOSE 6381 # 集群总线端口 EXPOSE 16381 # 启动redis服务 CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
-
编写docker-compose.yml,注意该文件的位置
version: '3' services: redis-slave1: network_mode: "host" build: ./slave01 volumes: - ./data/slave01:/data ports: - 6381:6381 - 16381:16381 privileged: true # CentOS7中的安全模块selinux把权限禁掉了 redis-slave2: network_mode: "host" build: ./slave02 volumes: - ./data/slave02:/data ports: - 6382:6382 - 16382:16382 privileged: true redis-slave3: network_mode: "host" build: ./slave03 volumes: - ./data/slave03:/data ports: - 6383:6383 - 16383:16383 privileged: true redis-slave4: network_mode: "host" build: ./slave04 volumes: - ./data/slave04:/data ports: - 6384:6384 - 16384:16384 privileged: true redis-slave5: network_mode: "host" build: ./slave05 volumes: - ./data/slave05:/data ports: - 6385:6385 - 16385:16385 privileged: true redis-slave6: network_mode: "host" volumes: - ./data/slave06:/data build: ./slave06 ports: - 6386:6386 - 16386:16386 privileged: true
-
启动服务
docker-compose up -d
-
创建集群
redis-trib 是redis官方提供的一个集群管理工具docker run --rm -it zvelo/redis-trib create --replicas 1 [ip]:6381 [ip]:6382 [ip]:6383 [ip]:6384 [ip]:6385 [ip]:6386
-
验证集群
连接任何一个redis服务,查看集群信息,然后测试数据操作cluster info
-
设置集群密码
连接每台redis节点服务,做以下操作,注意每个节点密码保持一致config set masterauth [密码] config set requirepass [密码] auth [密码] config rewrite // 回写到文件/usr/local/etc/redis/redis.conf
-
重启集群
docker-compose restart
重启后集群依然正常工作则大功告成