用docker安装官方redis和主从配置
1:拉取redis官方镜像
docker pull redis:3.2
2:查看拉取的镜像
docker images
3:因为我拉取的是redis3.2版本,所以需要在redis官网下载redis3.2版本的redis.conf文件
https://github.com/antirez/redis/releases/tag/3.2.11
现在本地修改redis.conf文件
想要远程连接,首先把绑定到本地地址的配置注释掉
保护模式关掉
设置登录密码
4:把修改好的redis.conf放到建立的目录下:
我在根目录下的docker/redis下放置redis.conf文件,然后在这个路径下运行run命令。
5:运行镜像生成容器
docker run -p 6379:6379 --name myredis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yes
--name myredis : 指定容器名称,这个最好加上,不然在看docker进程的时候会很尴尬。
-p 6699:6379 : 指定端口映射,默认redis启动的是6379,至于外部端口不冲突就行。
-v $PWD/redis.conf:/etc/redis/redis.conf : 将主机中当前目录下的redis.conf配置文件映射。
-v $PWD/data:/data -d redis:3.2 : 将主机中当前目录下的data挂载到容器的/data
--redis-server --appendonly yes :在容器执行redis-server启动命令,并打开redis持久化配置
6:运行好后,查看容器是否在运行 docker ps -a
7:得到容器id,进入redis客户端。
docker exec -it 9f75b03abe0d bash
redis-cli
能进入说明配置没有问题。
8:远程用redis工具链接
配置ip地址、端口号、密码,然后可以正常链接。
9:主从配置
在另一台虚拟机上安装一个redis,配置文件redis.conf内容修改:
slaveof 192.168.155.56 6379
192.168.155.56 是我前一个redis的地址
启动redis镜像生成容器:
docker run -p 6379:6379 --name redis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data -d redis:3.2 redis-server /etc/redis/redis.conf --appendonly yes
这样,我在192.168.155.56,192.168.155.55 都启动了redis。 55是56的备份机 56是Master节点 55是Slaver节点
当往56上写数据的时候,会自动同步给55
10:主从切换
在https://github.com/antirez/redis/releases/tag/3.2.11 把sentinel.conf配置文件下来,修改内面的内容:
sentinel monitor mymaster 192.168.155.56 6379 1
我把最后一个值设置为1,测试使用。(一般会设置为2) 这个值表示当有1台机器监测到56redis当掉的话,就启动55当master
启动镜像
docker run -p 26379:26379 --name sentinel -v /docker/redis/sentinel.conf:/etc/redis/sentinel.conf -v /docker/redis/data:/data -d redis:3.2 redis-sentinel /etc/redis/sentinel.conf --appendonly yes --slave-read-only yes
把56机器上的redis停掉,看下55机器的日志
docker logs -f sentinel
55变成master,56变成slave
11:工程中application.yml的修改为
# name of Redis server 哨兵监听的Redis server的名称
spring.redis.sentinel.master=mymaster
# comma-separated list of host:port pairs 哨兵的配置列表
spring.redis.sentinel.nodes=192.168.155.56:26379,192.168.155.55:26379,192.168.155.45:26379
这样写就可以自动切换redis节点了。