docker搭建Redis一主二从(学习搭建)
docker启动多个Redis实例,一主多从。
使用docker-compose 启动多个redis实例
主机和从机端口
role | 端口 |
---|---|
master | 6380 |
slave-1 | 6381 |
slave-2 | 6382 |
-
创建多个redis配置目录
redis_cluster/ ├── master # redis主机 │ ├── conf │ │ └── redis.conf │ ├── data │ ├── docker-compose.yml │ └── logs #logs目录最好 ├── slave-1 #redis从机1 │ ├── conf │ │ └── redis.conf │ ├── data │ ├── docker-compose.yml │ └── logs └── slave-2 #redis从机2 ├── conf │ └── redis.conf ├── data ├── docker-compose.yml └── logs
-
修改每个配置中的docker-compose.yaml
-
==master== docker-compose.yaml
version: '3' services: redis: image: "redis:6.2.3" container_name: "redis-master" #容器名需要更改,不能和已有的容器名相同 #network_mode: "host" restart: always volumes: - ./data:/data - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./logs:/usr/local/redis/logs command: # 以配置文件的方式启动 redis.conf redis-server /usr/local/etc/redis/redis.conf ports: - 6380:6379 #修改宿主机端口号,端口不能重叠
-
==slave== docker-compose.yaml
version: '3' services: redis: image: "redis:6.2.3" container_name: "redis-slave-1" #容器名需要更改,不能和已有的容器名相同 #network_mode: "host" restart: always volumes: - ./data:/data - ./conf/redis.conf:/usr/local/etc/redis/redis.conf - ./logs:/usr/local/redis/logs command: # 以配置文件的方式启动 redis.conf redis-server /usr/local/etc/redis/redis.conf ports: - 6381:6379 #修改宿主机端口号,端口不能重叠
-
-
修改==从机(slave)==的配置文件(conf/redis.conf)
如果主机没有设置密码,可以在从机中使用命令行指令 ==slaveof master_host master_port== 来指定该从机的主机,但是命令行修改的只是临时配置,如果重启redis后,配置就不生效了。
修改配置文件是永久的配置
找到masterauth和replicaof设置,设置了改两项配置,启动redis后默认就是从机
# 设置主机host和port replicaof yourIp yourPort # 主机的host和port # 设置主机验证,从机访问主机必须设置 masterauth yourpassword #主机的password
-
清空data目录。(我是清空所有的了然后==重启所有的redis容器==才成功的)
-
分别进入各个配置文件中,执行启动命令
docker-compose up -d
-
查看是否启动成功
be4a887efa85 redis:6.2.3 "docker-entrypoint.s…" 16 hours ago Up 16 hours 0.0.0.0:6382->6379/tcp redis-slave-2 370232d47fe4 redis:6.2.3 "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:6381->6379/tcp redis-slave-1 2770080d44d9 redis:6.2.3 "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:6380->6379/tcp redis-master
-
进入容器检查是否启动成功
docker exec -it be4a887efa85 /bin/bash
-
通过如下命令查看信息
-
主机信息master
docker-redis-master:0>info replication "# Replication role:master #角色 :主机 connected_slaves:2 #连接从机数量:2 slave0:ip=114.55.6.45,port=6379,state=online,offset=1428,lag=1 #从机0地址,状态, slave1:ip=114.55.6.45,port=6379,state=online,offset=1428,lag=0 #从机1地址,状态 master_failover_state:no-failover master_replid:06d51c95fc4c7edef4c8095da0df12cfeccd79cd master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1428 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1428 "
-
从机1信息slave-1
docker-redis-slave-1:0>info replication "# Replication role:slave #角色:从机 master_host:114.55.6.45 #主机地址: master_port:6380 #主机端口 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:1456 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:06d51c95fc4c7edef4c8095da0df12cfeccd79cd master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1456 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:1456 "
-
从机2信息slave-2
docker-redis-slave-2:0>info replication "# Replication role:slave master_host:114.55.6.45 master_port:6380 master_link_status:up master_last_io_seconds_ago:6 master_sync_in_progress:0 slave_repl_offset:1470 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:06d51c95fc4c7edef4c8095da0df12cfeccd79cd master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1470 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:211 repl_backlog_histlen:1260 "
-