Docker_Redis
1. docker pull
拉取redis,并准备相对应版本的配置文件,配置文件不对应的话,可能会出问题。
[root@localhost redis]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 4.0 8280a2c45ce5 3 weeks ago 89.2MB
2. 修改配置文件
- 主机配置文件(只列出修改部分)
# bind 127.0.0.1 # 注掉ip绑定
protected-mode yes # 打开保护模式
port 6379 # 主机默认6379
masterauth 123456 # 从机也有密码,加上验证
requirepass 123456 # 验证密码
- 从机1配置文件(只列出修改部分)
# bind 127.0.0.1 # 注掉ip绑定
protected-mode yes # 打开保护模式
port 6380 # 从机6380端口
slaveof 192.168.0.159 6379 # 加上主机的ip和端口,等会儿docker启动redis的时候,使用的network是host,所以ip可以确定
masterauth 123456 # 从机也有密码,加上验证
requirepass 123456 # 验证密码
- 从机2配置文件(只列出修改部分)
# bind 127.0.0.1 # 注掉ip绑定
protected-mode yes # 打开保护模式
port 6381 # 从机6381端口
slaveof 192.168.0.159 6379 # 加上主机的ip和端口,等会儿docker启动redis的时候,使用的network是host,所以ip可以确定
masterauth 123456 # 从机也有密码,加上验证
requirepass 123456 # 验证密码
3. 启动redis
- 首先启动主机
docker run \
-v /dockerRedis/redis:/usr/local/etc/redis \ # 绑定数据卷,主机的redis.conf放到本地的/dockerRedis/redis目录中,它会同步到容器中
-v /dockerRedis/data:/data \ # 持久化数据
--name redis \
--network host \ # 使用host
-d redis:4.0 \
redis-server /usr/local/etc/redis/redis.conf \ # 以配置文件方式启动
--appendonly yes
- 启动从机1
docker run \
-v /dockerRedis80/redis:/usr/local/etc/redis \ # 绑定数据卷,从机1的redis.conf放到本地的/dockerRedis80/redis目录中,它会同步到容器中
-v /dockerRedis80/data:/data \ # 持久化数据
--name redis80 \
--network host \ # 使用host
-d redis:4.0 \
redis-server /usr/local/etc/redis/redis.conf \ # 以配置文件方式启动
--appendonly yes
- 启动从机2
docker run \
-v /dockerRedis81/redis:/usr/local/etc/redis \ # 绑定数据卷,从机2的redis.conf放到本地的/dockerRedis81/redis目录中,它会同步到容器中
-v /dockerRedis81/data:/data \ # 持久化数据
--name redis81 \
--network host \ # 使用host
-d redis:4.0 \
redis-server /usr/local/etc/redis/redis.conf \ # 以配置文件方式启动
--appendonly yes
- 查看是否启动成功
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba3bf2106517 redis:4.0 "docker-entrypoint.s…" 6 hours ago Up About an hour redis81
12974de744bb redis:4.0 "docker-entrypoint.s…" 6 hours ago Up 27 minutes redis80
889f5f75d2a8 redis:4.0 "docker-entrypoint.s…" 6 hours ago Up 34 minutes redis
-
登陆redis客户端查看主从是否成功
- 主机
[root@localhost ~]# docker exec -it redis redis-cli 127.0.0.1:6379> auth 123456 OK 127.0.0.1:6379> info replication # Replication role:master # master角色 connected_slaves:2 # 连接的从机数量 slave0:ip=192.168.0.159,port=6381,state=online,offset=792339,lag=1 # 从机6381 slave1:ip=192.168.0.159,port=6380,state=online,offset=792195,lag=1 # 从机6380 master_replid:36b946e492eb817705b37c850bf8556136df22b7 master_replid2:2d958c8ec641afb7144b329ec0ee6d54a9eb389d master_repl_offset:792497 second_repl_offset:396598 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:333961 repl_backlog_histlen:458537
- 从机(另一个从机信息差不多)
127.0.0.1:6380> [root@localhost ~]# docker exec -it redis80 redis-cli -p 6380 127.0.0.1:6380> auth 123456 OK 127.0.0.1:6380> info replication # Replication role:slave # slave角色 master_host:192.168.0.159 # 主机ip master_port:6379 # 主机端口 master_link_status:up # 连接状态 master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:831773 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:36b946e492eb817705b37c850bf8556136df22b7 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:831773 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:405043 repl_backlog_histlen:426731
4. 启动哨兵
- 哨兵
sentinel.conf
配置文件(三个哨兵配置文件都一样,唯一不同的就是上面的端口号,分别为主机的26379和两个从机的26380、26381)
port 26379
sentinel monitor masterRedis 192.168.0.159 6379 2
sentinel auth-pass masterRedis 123456
-
将三个
sentinel.conf
配置文件分别放在刚才放redis.conf
的三个文件夹中,它们会自动同步到docker容器内。 -
启动主机哨兵
使用命令: docker exec -it redis redis-sentinel /usr/local/etc/redis/sentinel.conf
- 为了直接看到启动效果,我在前台运行,然后用
Ctrl + P + Q
快捷键,不关闭容器的情况下退出。 - 这里启动哨兵的方式,是用刚才的Redis主机容器,新开窗口启动,接下开两个从机也是相同的方式。
- 为了直接看到启动效果,我在前台运行,然后用
[root@localhost redis]# docker exec -it redis redis-sentinel /usr/local/etc/redis/sentinel.conf
24:X 17 Dec 07:04:00.734 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
24:X 17 Dec 07:04:00.734 # Redis version=4.0.14, bits=64, commit=00000000, modified=0, pid=24, just started
24:X 17 Dec 07:04:00.734 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 4.0.14 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._