Docker 部署redis主从
Redis 单机安装
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