Docker容器配置redis集群
前言
Redis 集群是一种分布式数据库解决方案,旨在提供高性能、高可用性、可扩展性的数据存储服务。目前比较普遍流行的搭配则是三主三从配置,共6台redis服务进行集群配置。
Redis的三主三从配置是一种集群模式,其中包含三个主节点和三个从节点。每个从节点对应一个主节点,当主节点出现故障时,从节点可以自动升级为主节点,以保证服务的连续性。这种配置不仅提高了系统的可用性和可靠性,还实现了读写分离,从节点可以为客户端提供只读操作的服务,从而分担主节点的读操作压力。
一、安装Redis镜像
首先,确保你已经安装了Docker容器,然后拉取官方的Redis镜像:
~]# docker pull redis #默认拉取最新镜像
~]# docker images #查看镜像
镜像列表中看到具体镜像信息。
二、使用docker-compose.yml管理集群
先创建一个docker network方便容器之间访问。
~]# docker network create redis-net
接着是docker-compose.yml文件的配置,更好的处理多台redis服务。
version: '3' services: redis-node-1: image: redis restart: always command: redis-server --cluster-enabled yes --cluster-config-file nodes-1.conf --cluster-node-timeout 5000 --appendonly yes networks: - redis-net ports: - "6379:6379" redis-node-2: image: redis restart: always command: redis-server --cluster-enabled yes --cluster-config-file nodes-2.conf --cluster-node-timeout 5000 --appendonly yes networks: - redis-net ports: - "6380:6379" redis-node-3: image: redis restart: always command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes networks: - redis-net ports: - "6381:6379" redis-node-4: image: redis
restart: always command: redis-server --cluster-enabled yes --cluster-config-file nodes-4.conf --cluster-node-timeout 5000 --appendonly yes networks: - redis-net ports: - "6382:6379" redis-node-5: image: redis
restart: always command: redis-server --cluster-enabled yes --cluster-config-file nodes-5.conf --cluster-node-timeout 5000 --appendonly yes networks: - redis-net ports: - "6383:6379" redis-node-6: image: redis
restart: always command: redis-server --cluster-enabled yes --cluster-config-file nodes-6.conf --cluster-node-timeout 5000 --appendonly yes networks: - redis-net ports: - "6384:6379" networks: redis-net: external: true
然后,使用以下命令启动Redis集群:
~]# docker compose up –d #启动当前目录下的docker-compose.yml文件,并在后台运行(-d是后台执行的命令)
~]# docker compose down #停止并删除镜像(谨慎使用)
~]# docker compose stop redis-node-1 # 停止容器
~]# docker compose start redis-node-1 # 启动容器
下面是打印日志。
三、建立redis集群
上面6台redis服务已经搭建完成,可以通过 docker ps 查看运行中的redis容器。接着就是建立集群。
有了多个Redis节点,你需要使用redis-cli
来创建集群并分配slots。这通常在其中一个Redis节点上执行,但你需要能够访问所有节点的IP地址和端口。
~]# docker exec -it redis-redis-node-1-1 redis-cli --cluster create \ redis-redis-node-1-1:6379 \ redis-redis-node-2-1:6379 \ redis-redis-node-3-1:6379 \ redis-redis-node-4-1:6379 \ redis-redis-node-5-1:6379 \ redis-redis-node-6-1:6379 \ --cluster-replicas 1
执行创建集群命令后,需要输入yes接受生成的集群配置,才能创建成功。
测试集群是否能正常使用。进入到集群某个节点中。
~]# docker compose exec -it redis-node-1 redis-cli -c -h redis-node-1 -p 6379
下面是测试结果,发现存入数据时,会存到不同的节点中。同时会进入对应的节点中,获取数据时也是如此。
四、查看redis集群信息
1、使用redis-cli
的--cluster check
命令来验证集群的状态:
~]# docker compose exec -it redis-node-1 redis-cli --cluster check redis-node-1:6379
2、进入任意节点容器中,找到 /data/nodes-1.conf 的文件,查看信息。
~]# docker compose exec -it redis-node-1 bash #进入节点容器
查看conf文件,会看到三行master,三行slave的信息,分别代表三主三从的配置。0-5460代表哈希插槽。
3、进入任意redis节点,输入CLUSTER NODES查看节点信息,CLUSTER INFO 查看集群状态, CLUSTER SLOTS查看槽点分配。
~]# docker compose exec -it redis-node-1 redis-cli -c -h redis-node-1 -p 6379
Docker容器配置Redis集群就介绍到这。这里的/data/nodes-1.conf 是集群的配置文件,并不是redis.conf配置文件。若需要单独配置,需要自己创建放到指定位置(一般都放到/usr/local/etc/redis/ 目录下)。因为在docker-compose.yml中配置了restart:always属性,对应属性的容器会开机启动。若需要自己配置,也可以使用systemd配置,或者其他工具。