Docker 部署redis主从复制

Docker 部署redis主从

Redis 单机安装

二进制安装包方式

Redis Docker镜像单机安装

Docker hub

Docker hub Redis

安装

docker 镜像启动命令

docker run --name redis-docker -v $PWD/data:/data -v $PWD/conf:/usr/local/etc/redis -p port:6379 -d redis:tag redis-server /usr/local/etc/redis/redis.conf
测试
yefeng@yefeng-PC:~$ docker exec -it redis-m /bin/bash
root@yefeng-PC:/data# redis-cli -p 6382
127.0.0.1:6382> set name redis
OK
127.0.0.1:6382> get name
"redis"
127.0.0.1:6382> 

Redis Docker 主从

准备工作
  • 准备配置文件 redis.conf

    ################### NETWORK #######################################
    port 6380 # 设置各节点的端口号
    ################### KEYS TRACKING #################################
    replicaof <masterip> <masterport> # master 机器的 IP Port 除了master外地slave机器都需要配置
    
  • 设置容器网络

    • none模式,使用–net=none指定,该模式关闭了容器的网络功能。
    • host模式,使用--net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。(本文使用此模式)
    • bridge模式,使用–net=bridge指定,默认设置 ,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信
    • ontainer模式,使用–net=container:NAME_or_ID指定,创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
启动主从
yefeng@yefeng-PC:~$ docker run --name redis-docker -v $PWD/data:/data -v $PWD/conf:/usr/local/etc/redis --net host -d redis:tag redis-server /usr/local/etc/redis/redis-m.conf
yefeng@yefeng-PC:~$ docker run --name redis-docker -v $PWD/data:/data -v $PWD/conf:/usr/local/etc/redis --net host -d redis:tag redis-server /usr/local/etc/redis/redis-s1.conf
yefeng@yefeng-PC:~$ docker run --name redis-docker -v $PWD/data:/data -v $PWD/conf:/usr/local/etc/redis --net host -d redis:tag redis-server /usr/local/etc/redis/redis-s2.conf
测试
  • 主节点
yefeng@yefeng-PC:~$ docker exec -it redis-m /bin/bash
root@yefeng-PC:/data# 
root@yefeng-PC:/data# redis-cli -p 6382
127.0.0.1:6382> info replication
# Replication
role:master
connected_slaves:3
slave0:ip=127.0.0.1,port=6383,state=online,offset=193754,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=193754,lag=1
master_replid:d6dc11f655164c8ec117ccad51a2446313d6a3cf
master_replid2:c539a74cfc0afef693dd3ad0802d32e367ab74a8
master_repl_offset:193887
second_repl_offset:10688
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:193887
127.0.0.1:6382> 
  • 从节点
root@yefeng-PC:/data# redis-cli -p 6381
127.0.0.1:6381> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6382
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:201769
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:d6dc11f655164c8ec117ccad51a2446313d6a3cf
master_replid2:c539a74cfc0afef693dd3ad0802d32e367ab74a8
master_repl_offset:201769
second_repl_offset:10688
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:201769
127.0.0.1:6381> 
测试主从复制
root@yefeng-PC:/data# redis-cli -p 6382 # 主机
127.0.0.1:6382> set name redis # set key
OK
127.0.0.1:6382> get redis # 无key
(nil)
127.0.0.1:6382> get name #有key
"redis"
127.0.0.1:6382> 
root@yefeng-PC:/data# redis-cli -p 6381 # 从机
127.0.0.1:6381> get name #有key
"redis"
127.0.0.1:6381> set name slave # 无法set key 因为从机只负责查询
(error) READONLY You can't write against a read only replica.
127.0.0.1:6381> 

结尾

  • 环境 deepin 20.2 docker

你可能感兴趣的:(docker,学习笔记)