redis logfile 只读_docker 配置redis主从,哨兵sentinel
注释:docker自行安装,主从使用一主两从,然后使用sentinel进行高可用配置,当主服务器挂掉,从服务器自动升为主服务器。
主从模式介绍
主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。
其中主从复制有如下特点:
* 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库
* 从数据库一般都是只读的,并且接收主数据库同步过来的数据
* 一个master可以拥有多个slave,但是一个slave只能对应一个master
* slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来
* master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务
* master挂了以后,不会在slave节点中重新选一个master
工作机制:
当slave启动后,主动向master发送SYNC命令。master接收到SYNC命令后在后台保存快照(RDB持久化)和缓存保存快照这段时间的命令,然后将保存的快照文件和缓存的命令发送给slave。slave接收到快照文件和命令后加载快照文件和缓存的执行命令。复制初始化后,master每次接收到的写命令都会同步发送给slave,保证主从数据一致性。
环境准备:拉取redis
[root@localhost ~]#docker pull redis
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 84c5f6e03bf0 11 days ago 104MB
[root@localhost ~]#
1、进行放置配置文件目录,不存在则创建【只要你开心,随意在哪个目录都可以】
2、下载redis.conf文件:
[root@localhost ~]# mkdir -p /home/lx/redis
[root@localhost ~]# cd /home/lx/redis/
[root@localhost redis]# pwd
/home/lx/redis
[root@localhost redis]# wget http://download.redis.io/redis-stable/redis.conf
3、查看是否下载成功
[root@localhost redis]# ls
redis.conf
[root@localhost redis]#
4、复制3份redis.conf
[root@localhost redis]# cp redis.conf redis-6379.conf
[root@localhost redis]# cp redis.conf redis-6380.conf
[root@localhost redis]# cp redis.conf redis-6381.conf
[root@localhost redis]# ls
redis-6379.conf redis-6380.conf redis-6381.conf redis.conf
[root@localhost redis]#
5、配置这3个文件【redis-6379.conf为主服务器配置文件,redis-6380.conf , redis-6381.conf为从服务器配置文件】
1)修改配置文件redis-6379.conf如下参数,然后保存退出
#sudo vim redis-6379.conf
#允许远程连接
bind 0.0.0.0
#关闭保护模式
protected-mode no
#开启后,Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里
appendonly yes
#日志文件
logfile "/var/log/redis/redis-6379.log"
2)修改配置文件redis-6380.conf,修改如下,然后保存退出
#sudo vim redis-6380.conf
bind 0.0.0.0
protected-mode no
appendonly yes
replicaof 172.17.0.4 6379
logfile "/var/log/redis/redis-6380.log"
3)修改配置文件redis-6381.conf,修改如下,然后保存退出
#sudo vim redis-6381.conf
bind 0.0.0.0
protected-mode no
appendonly yes
replicaof 172.17.0.4 6379
logfile "/var/log/redis/redis-6381.log"
6、启动三个容器如下:
-d:后台运行容器,默认不进入容器
--name:容器别名
-p:指定映射的端口号
-v:绑定挂载目录
主服务器:redis-6379
[root@localhost redis]#docker run -d --name redis-6379 -p 6379:6379 -v /home/lx/redis/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf
第二个从服务器redis-6380
[root@localhost redis]#docker run -d --name redis-6380 -p 6380:6379 -v /home/lx/redis/redis-6380.conf:/usr/local/etc/redis/redis-6380.conf redis
第三个从服务器redis-6381
[root@localhost redis]#docker run -d --name redis-6381 -p 6381:6379 -v /home/lx/redis/redis-6382.conf:/usr/local/etc/redis/redis-6382.conf redis
#docker ps
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3b0c49aac92 redis "docker-entrypoint.s…" 42 minutes ago Up 11 minutes 0.0.0.0:6381->6379/tcp redis-6381
87611597b78b redis "docker-entrypoint.s…" 42 minutes ago Up 13 minutes 0.0.0.0:6380->6379/tcp redis-6380
c35bc9444bd8 redis "docker-entrypoint.s…" 43 minutes ago Up 16 minutes 0.0.0.0:6379->6379/tcp redis-6379
7、测试3个容器是否安装成功,出现有名称为,redis-6379,redis-6380,redis-6381表示启动成功,启动不成功,排查路径及配置文件,是否配置正确
[root@localhost redis]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3b0c49aac92 redis "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:6381->6379/tcp redis-6381
87611597b78b redis "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:6380->6379/tcp redis-6380
c35bc9444bd8 redis "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 0.0.0.0:6379->6379/tcp redis-6379
注意:此时这三台容器都是主服务器,例如进入redis-cli查看:
查看redis-6379
[root@localhost redis]# docker exec -it redis-6379 redis-cli
127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:0
master_replid:0bf0414364343ee97efa450a9227a40f2951909f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:196
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:196
127.0.0.1:6379> 查看redis-6380
[root@localhost redis]# docker exec -it redis-6380 redis-cli
127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:0
master_replid:6d2f3af0760f89c9f3bcc0d06b24b2b25b18647f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379> 查看redis-6381
[root@localhost redis]# docker exec -it redis-6381 redis-cli
127.0.0.1:6379> info Replication
# Replication
role:master
connected_slaves:0
master_replid:28a80c14928ca6ffdaaa94b38d30d5d0b3760c2a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>
8、把【redis-6380,redis-6381配置成从服务器】
注释:配置从服务器,指向的是主服务器ip地址和端口号即可
[root@localhost redis]# docker exec -it redis-6380 redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.4 6379
OK
127.0.0.1:6379>
#如下info Replication查看配置是否成功
127.0.0.1:6379> info Replication
# Replication
role:slave
master_host:172.17.0.4
master_port:6379
master_link_status:up
... ...
127.0.0.1:6379> [root@localhost redis]# docker exec -it redis-6381 redis-cli
127.0.0.1:6379> SLAVEOF 172.17.0.4 6379
OK
127.0.0.1:6379>#如下使用info Replication查看配置是否成功
127.0.0.1:6379> info Replication
# Replication
role:slave
master_host:172.17.0.4
master_port:6379
master_link_status:up
... ...
127.0.0.1:6379>
9、测试主从是否成功,打开3个控制窗口,在主服务器设置键值,在从服务器获取键有值表示测试成功。
1)窗口1为redis-6379客户端
[root@localhost redis]# docker exec -it redis-6379 redis-cli
127.0.0.1:6379> set test 123
OK
127.0.0.1:6379> get test
"123"
127.0.0.1:6379>
2)窗口2为redis-6380客户端
[root@localhost redis]# docker exec -it redis-6380 redis-cli
127.0.0.1:6379> get test
"123"
127.0.0.1:6379>
3)窗口3为redis-6380客户端
[root@localhost redis]# docker exec -it redis-6381 redis-cli
127.0.0.1:6379> get test
"123"
127.0.0.1:6379>
10、本次测试从服务器没有写的权限
解决方案:因为连接的是从节点,从节点只有读的权限,没有写的权限
进入redis.conf配置文件,修改配置文件的slave-read-only为no,没有则添加此条记录,保存退出,重启容器再进行测试【一定要重启,3台都重启】
sentinel 配置[redis哨兵]
sentinel中文含义为哨兵,顾名思义,它的作用就是监控redis集群的运行状况,特点如下:
* sentinel模式是建立在主从模式的基础上,如果只有一个Redis节点,sentinel就没有任何意义
* 当master挂了以后,sentinel会在slave中选择一个做为master,并修改它们的配置文件,其他slave的配置文件也会被修改,比如slaveof属性会指向新的master
* 当master重新启动后,它将不再是master而是做为slave接收新的master的同步数据
* sentinel因为也是一个进程有挂掉的可能所以sentinel也会启动多个形成一个sentinel集群
* 多sentinel配置的时候,sentinel之间也会自动监控
* 当主从模式配置密码时,sentinel也会同步将配置信息修改到配置文件中,不需要担心
* 一个sentinel或sentinel集群可以管理多个主从Redis,多个sentinel也可以监控同一个redis
* sentinel最好不要和Redis部署在同一台机器,不然Redis的服务器挂了以后,sentinel也挂了
工作机制:
*每个sentinel以每秒钟一次的频率向它所知的master,slave以及其他sentinel实例发送一个 PING 命令
* 如果一个实例距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被sentinel标记为主观下线。
* 如果一个master被标记为主观下线,则正在监视这个master的所有sentinel要以每秒一次的频率确认master的确进入了主观下线状态
* 当有足够数量的sentinel(大于等于配置文件指定的值)在指定的时间范围内确认master的确进入了主观下线状态, 则master会被标记为客观下线
* 在一般情况下, 每个sentinel会以每 10 秒一次的频率向它已知的所有master,slave发送 INFO 命令
* 当master被sentinel标记为客观下线时,sentinel向下线的master的所有slave发送 INFO 命令的频率会从 10 秒一次改为 1 秒一次
* 若没有足够数量的sentinel同意master已经下线,master的客观下线状态就会被移除;
*若master重新向sentinel的 PING 命令返回有效回复,master的主观下线状态就会被移除
redis哨兵模式说明
使用docker启动3个redis服务器,一个master(主), 两个slave (从),进行主从配置。
3台redis服务器分别启动一个哨兵sentinel。
第一步:【master容器配置哨兵】:docker exec -it redis-6379 /bin/bash
#cd / (进入根目录)
#apt-get update (更新依赖)
#apt-get install -y vim (安装vim)
#vim sentinel.conf (建立sentinel(哨兵模式)的配置文件,保存退出,内容如下:)
port 26379 (指定哨兵监听端口)
dir "/data" #sentinel工作目录
logfile "26379.log" #日志文件
sentinel monitor name 172.17.0.4 6379 2 #启动哨兵(名称:name) 监听master
daemonize yes #后台运行
#启动哨兵:
#redis-sentinel sentinel.conf第二步:【slave01容器配置哨兵:docker exec -it redis-6380 /bin/bash】
#cd / (进入根目录)
#apt-get update (更新依赖)
#apt-get install -y vim (安装vim)
#vim sentinel.conf (建立sentinel配置文件保存退出,内容如下)
port 26380
dir "/data"
logfile "26380.log"
sentinel monitor name 172.17.0.4 6379 2
daemonize yes 启动哨兵:
redis-sentinel sentinel.conf第三步:【slave02容器配置哨兵:docker exec -it redis-6381 /bin/bash】
#cd / (进入根目录)
#apt-get update (更新依赖)
#apt-get install -y vim (安装vim)
#vim sentinel.conf (建立sentinel的配置文件保存退出,内容如下)
port 26381
dir "/data"
logfile "26381.log"
sentinel monitor name 172.17.0.4 6379 2
daemonize yes 启动哨兵:
redis-sentinel sentinel.conf
测试:本来redis-6379是主服务器,redis-6380, redis-6381是从服务器,
1、进入到容器,查看哨兵允许状态,26381.log为哨兵日志文件,上面有说道,此为实时显示最后20条日志
#docker exec -it redis-6381 /bin/bash
#tail -f 20 26381.log
==> 26381.log <==
12:X 20 Sep 2020 13:57:47.439 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12:X 20 Sep 2020 13:57:47.439 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=12, just started
12:X 20 Sep 2020 13:57:47.439 # Configuration loaded
13:X 20 Sep 2020 13:57:47.443 * Running mode=sentinel, port=26381.
... ...
1、现在把主服务器redis-6379容器停止,
查看redis-6379容器id
root@lixiong:/home/lx# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f8fd1c59f55 redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 6379/tcp, 0.0.0.0:26381->26379/tcp sentinel3
ee5093e6f3a9 redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 6379/tcp, 0.0.0.0:26380->26379/tcp sentinel2
8ed84c9b5621 redis "docker-entrypoint.s…" 2 hours ago Up 2 hours 6379/tcp, 0.0.0.0:26379->26379/tcp sentinel
d3b0c49aac92 redis "docker-entrypoint.s…" 3 hours ago Up 2 hours 0.0.0.0:6381->6379/tcp redis-6381
87611597b78b redis "docker-entrypoint.s…" 3 hours ago Up 2 hours 0.0.0.0:6380->6379/tcp redis-6380
128117e48e01 nginx "nginx -g 'daemon of…" 4 months ago Up 4 months 0.0.0.0:8083->80/tcp#docker stop 87611597b78b
87611597b78b
2、打开redis-6380客户端,:info replication查看,原先主服务器为redis-6379,此时从服务器会上升到主服务器[30秒后自动转换主服务器节点]
#docker exec -it redis-6380 redis-cli
127.0.0.1:6379>info replication
127.0.0.1:6379> info replication
# Replication
role:slave
master_host:172.17.0.6
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:32521
slave_priority:100
redis logfile 只读_docker 配置redis主从,哨兵sentinel相关推荐
- 面试官:Redis如何实现持久化的、主从哨兵又是什么?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新,可以微信搜索[小奇JAVA面试]第一时间阅 ...
- docker部署redis集群_Docker部署Redis集群----第九节(docker-redis哨兵集群“轮询分流”篇实例一)...
到此,我们的 Redis 哨兵集群就结束了,本篇章是第九篇章,也是使用集群方式的实例一来实现php的轮询分流. 1.准备工作: 在我们上一篇章实现redis 哨兵集群的基础上开始,在服务器上部署php ...
- docker部署redis集群_Docker部署Redis集群----第六节(docker-redis-sentinel集群的机制)...
通过前面的三个篇章的认知学习与实践,相信大家搭建自己的docker redis主从应该是没有任何问题了.普通的主从复制到此就结束了,下面我们要来分析讲解,普通主从复制的升级版"哨兵集群&qu ...
- 【redis】使用 URI 配置 redis
前言 ruoyi 4.6.0 Spring Boot Version: 2.2.13.RELEASE jedis 2.7.3 使用 URI 配置 redis 配置: redis.address=red ...
- 宝塔需在php设置中安装redis扩展,宝塔安装配置redis说明
[TOC] #### 安装Redis服务 * 首先进入宝塔管理后台,点击"`软件管理`",在"全部"或者"运行环境"中找到Redis,点击右 ...
- Redis之CentOS7安装配置Redis
centos:https://www.cnblogs.com/zuidongfeng/p/8032505.html 分为三部分:安装redis 设置守护进程 设置开机启动 安装redis 下载 [ro ...
- Redis 主从配置密码以及哨兵
目录: Redis 主从介绍 哨兵机制 Redis 主从配置 环境 安装 启动服务 检查主从状态 测试数据同步 默认是读写分离的 Redis Sentinel 配置 主Redis宕机测试 配置多个哨兵 ...
- docker+网桥+redis主从+哨兵模式
docker+网桥+redis主从+哨兵模式 我是在两台服务器上实验的,一台服务器的ip是192.168.213.144,另一台服务器的ip是192.168.213.145 1. 搭建网桥 关于第一部 ...
- redis+主从复制+集群配置
redis+主从复制+集群配置 redis是一个key-value存储系统.和memcached类似,不过redis支持的value类型更多,主要有:string(字符串).list(链表).set( ...
最新文章
- Mysql统计分组区间的人数和
- 熟练Linux ,先从这 26 个命令开始吧
- HBuilder离线打包启用Chrome Inspect调试
- 线性代数 第一章 行列式
- 【LeetCode】LeetCode之删除并获得点数——动态规划、排序+动态规划
- Java 403 forbidden错误解决
- jedis操作redis(二)
- 功能Java示例 第1部分–从命令式到声明式
- 程序崩溃 分析工具_程序分析工具| 软件工程
- python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...
- Replace Type Code with Class(以类取代类型码)
- python安装anaconda ubuntu_Ubuntu 16.4 安装anaconda 详细教程
- matlab时频分析工具箱安装_科研小班 | 加州大学伯克利分校 | 物理、电子工程:MATLAB信号和数据处理课题...
- java释放对象_在Java中释放Semaphore对象的正确方法是什么...
- 区块链优秀gitbook资料
- 淘淘商城:显示查询页面
- 【遥感影像处理与分析】遥感影像校正详解-辐射校正、几何校正流程与方法比较
- 项目配置管理工具研究
- 冰点还原无法修改计算机时间,安装冰点还原后无法更改系统时间怎么办
- SIM900A 开发板连线图
热门文章
- 怎样安装ubuntu系统
- 如何 sizing 一台物理机上可以承载多少 VMware 虚拟机? 分享 Vsphere HA 几个实用知识点
- 算法学习总结(3)——二叉树数据结构重点知识总结
- Java基础学习总结(101)——Junit5抢鲜看
- 来自百度的71款开源项目
- 鸿蒙系统怎么还不能用,【图片】华为鸿蒙系统的厉害之处在于 你可能非用不可
!【手机吧】_百度贴吧...
- url上传参 用requestmapping接受_14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽...
- pcb天线和纯铜天线_蓝牙模块采用陶瓷天线和PCB天线的区别
- BIO、NIO、AIO入门认识
- iframe的2个问题