Redis的主从集群与哨兵模式_redis的主从和哨兵集群-程序员宅基地

技术标签: 缓存与加速  哨兵  redis  nosql  

Redis的主从模式

1、Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。
2、为了分担读压力,Redis支持主从复制,保证主数据库的数据内容和从数据库的内容完全一致。
3、Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。

全量同步

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。
1.从服务器连接主服务器,发送SYNC命令;
2.主服务器接收到SYNC命令后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
3.主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
4.从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
5.主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
6.从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。

增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

Redis主从同步策略流程

1、主从刚刚连接的时候,进行全量同步;
2、全同步结束后,进行增量同步。当然,如果有需要,slave在任何时候都可以发起全量同步。
3、redis策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步

redis主从部署

环境

主1 192.168.188.10
从1 192.168.188.20
从2 192.168.188.30
注:一定要关闭防火墙和放心防护

三台一起

[root@server1 ~]# systemctl stop firewalld
[root@server1 ~]# setenforce 0
[root@server1 ~]# tar zxvf redis-5.0.4.tar.gz 
[root@server1 ~]# cd
[root@server1 ~]# cd redis-5.0.4/
[root@server1 redis-5.0.4]# make
[root@server1 redis-5.0.4]# make PREFIX=/usr/local/redis install
[root@server1 redis-5.0.4]# cd
[root@server1 ~]# ln -s /usr/local/redis/bin/ * /usr/local/bin
[root@server1 ~]# cd redis-5.0.4/utils/
[root@server1 utils]# ls -lh 
总用量 52K
-rw-rw-r--. 1 root root  593 319 2019 build-static-symbols.tcl
-rw-rw-r--. 1 root root 1.3K 319 2019 cluster_fail_time.tcl
-rw-rw-r--. 1 root root 1.1K 319 2019 corrupt_rdb.c
drwxrwxr-x. 2 root root   60 319 2019 create-cluster
-rwxrwxr-x. 1 root root 2.1K 319 2019 generate-command-help.rb
drwxrwxr-x. 3 root root   31 319 2019 graphs
drwxrwxr-x. 2 root root   39 319 2019 hashtable
drwxrwxr-x. 2 root root   70 319 2019 hyperloglog
-rwxrwxr-x. 1 root root 9.4K 319 2019 install_server.sh
drwxrwxr-x. 2 root root   63 319 2019 lru
-rw-rw-r--. 1 root root 1.3K 319 2019 redis-copy.rb
-rwxrwxr-x. 1 root root 1.4K 319 2019 redis_init_script
-rwxrwxr-x. 1 root root 1.1K 319 2019 redis_init_script.tpl
-rw-rw-r--. 1 root root 1.8K 319 2019 redis-sha1.rb
drwxrwxr-x. 2 root root  135 319 2019 releasetools
-rwxrwxr-x. 1 root root 3.7K 319 2019 speed-regression.tcl
-rwxrwxr-x. 1 root root  693 319 2019 whatisdoing.sh
[root@server1 utils]# ./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@server1 utils]# netstat -anpt | grep redis  
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      60166/redis-server  
[root@server1 utils]# 

主服务器修改

[root@server1 utils]# vi /etc/redis/6379.conf
检索Protected  上面bind 192.168.188.10  # 改成本机地址
检索daemonize yes  不修改 开启守护进程
检索logfile /var/log/redis_6379.log   #修改日志文件目录
检索dir /var/lib/redis/6379  # 修改工作目录
检索appendonly no  把no修改成yes  #开启AOF持久化功能

从服务器

[root@server2 utils]# vi /etc/redis/6379.conf 
检索replicaof  去掉#号 修改replicaof 192.168.188.10 6379
检索Protected  上面修改bind 0.0.0.0
检索appendonly  不修改appendonly yes
检索daemonize yes  不修改
检索logfile /var/log/redis_6379.log  不修改
检索dir /var/lib/redis/6379  不修改

重启服务

[root@server1 utils]#  /etc/init.d/redis_6379 restart
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
Starting Redis server...

查看日志

[root@server1 utils]# tail -f /var/log/redis_6379.log 

在这里插入图片描述

测试主从数据复制功能
在主服务器上

[root@server1 utils]# redis-cli -h 192.168.188.10 -p 6379 
192.168.188.10:6379> info replication   #信息复制,状态信息
# Replication
role:master    #状态:主服务器
connected_slaves:2    #连接节点2个
slave0:ip=192.168.188.30,port=6379,state=online,offset=546,lag=0
slave1:ip=192.168.188.20,port=6379,state=online,offset=546,lag=0
master_replid:19e2cc45688b300737a3ecb4f22d88a69c9cf082
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:546
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:546
192.168.188.10:6379> 

哨兵模式原理

哨兵模式概述

哨兵(sentinel) 是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master。所以整个运行哨兵的集群的数量不得少于3个节点。

哨兵模式的作用

1、监控
不断的检查master和slave是否正常运行。
master存活检测、master与slave运行情况检测
2、通知(提醒)
当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。
3、自动故障转移
断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
PS:
(1)哨兵也是一台redis服务器,只是不提供数据服务
(2)哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式,所有节点上都需要部署哨兵模式,哨兵模式会监控所有的redis工作节点是否正常,当master出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个master的确出现问题,然后会通知哨兵间,然后从slaves中选取一个作为新的master。

哨兵模式项目部署

1、配置哨兵模式

[root@server1 ~]# vim redis-5.0.4/sentinel.conf 
检索protected-mode no  去掉#号  关闭保护模式
检索daemonize no   把no修改yes     指定sentine1为后台启动,开启守护进程
检索logfile  修改成logfile "/var/log/sentinel.log"   #指定日志存放路径
检索dir  修改成dir /var/lib/redis/6379  指定数据库存放路径
检索sentinel monitor mymaster  修改成sentinel monitor mymaster 192.168.188.10 6379 2
指定几个哨兵(slave)检测主服务器故障,才会进行故障迁移(主服务器ip地址,端口号,slave数)
检索sntinel down-after-milliseconds  修改成sentinel down-after-milliseconds mymaster 3000 
去掉#号判定服务器down掉的时间周期,默认30000毫秒(30秒)

检索sentinel failover-timeout   修改成sentinel failover-timeout mymaster 100000
故障节点的最大超时时间为100000毫秒(100秒)

2、启动哨兵模式 (主从都启动)
先启master服务器,后启slave服务器

[root@server1 ~]# redis-sentinel redis-5.0.4/sentinel.conf &
[1] 60966

3、查看日志(主)

[root@server1 ~]# tail -f /var/log/sentinel.log 

在这里插入图片描述

查看进程状态

[root@server1 ~]# ps aux | grep redis
root      60349  0.1  0.3 165612 11736 ?        Ssl  20:23   0:06 /usr/local/bin/redis-server 192.168.188.10:6379
root      60946  0.3  0.1 153836  7488 ?        Ssl  21:16   0:01 redis-sentinel *:26379 [sentinel]
root      61015  0.0  0.0 112676   984 pts/1    S+   21:22   0:00 grep --color=auto redis
[root@server1 ~]# ps aux | grep sentinel
root      60946  0.3  0.1 153836  7488 ?        Ssl  21:16   0:01 redis-sentinel *:26379 [sentinel]
root      61025  0.0  0.0 112676   980 pts/1    S+   21:23   0:00 grep --color=auto sentinel
[root@server1 ~]# 

在这里插入图片描述

登录数据库查看哨兵状态

[root@server1 ~]# redis-cli -h 192.168.188.10 -p 26379 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.188.10:6379,slaves=2,sentinels=3
[root@server1 ~]# redis-cli -h 192.168.188.10 -p 6379 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.188.30,port=6379,state=online,offset=121462,lag=0
slave1:ip=192.168.188.20,port=6379,state=online,offset=121462,lag=0
master_replid:19e2cc45688b300737a3ecb4f22d88a69c9cf082
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:121462
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:121462
[root@server1 ~]# 

在这里插入图片描述
在这里插入图片描述

[root@server1 ~]# ps -ef | grep redis
root      60349      1  0 20:23 ?        00:00:08 /usr/local/bin/redis-server 192.168.188.10:6379
root      60946      1  0 21:16 ?        00:00:03 redis-sentinel *:26379 [sentinel]
root      61104  55732  0 21:30 pts/1    00:00:00 grep --color=auto redis
[root@server1 ~]# kill -9 60349
[root@server1 ~]# tail -f /var/log/sentinel.log

在这里插入图片描述

[root@server1 ~]# redis-cli -p 26379 INFO Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.188.20:6379,slaves=2,sentinels=3
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_50345059/article/details/111463904

智能推荐

解决win10/win8/8.1 64位操作系统MT65xx preloader线刷驱动无法安装_mt65驱动-程序员宅基地

文章浏览阅读1.3w次。转载自 http://www.miui.com/thread-2003672-1-1.html 当手机在刷错包或者误修改删除系统文件后会出现无法开机或者是移动定制(联通合约机)版想刷标准版,这时就会用到线刷,首先就是安装线刷驱动。 在XP和win7上线刷是比较方便的,用那个驱动自动安装版,直接就可以安装好,完成线刷。不过现在也有好多机友换成了win8/8.1系统,再使用这个_mt65驱动

SonarQube简介及客户端集成_sonar的客户端区别-程序员宅基地

文章浏览阅读1k次。SonarQube是一个代码质量管理平台,可以扫描监测代码并给出质量评价及修改建议,通过插件机制支持25+中开发语言,可以很容易与gradle\maven\jenkins等工具进行集成,是非常流行的代码质量管控平台。通CheckStyle、findbugs等工具定位不同,SonarQube定位于平台,有完善的管理机制及强大的管理页面,并通过插件支持checkstyle及findbugs等既有的流..._sonar的客户端区别

元学习系列(六):神经图灵机详细分析_神经图灵机方法改进-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏27次。神经图灵机是LSTM、GRU的改进版本,本质上依然包含一个外部记忆结构、可对记忆进行读写操作,主要针对读写操作进行了改进,或者说提出了一种新的读写操作思路。神经图灵机之所以叫这个名字是因为它通过深度学习模型模拟了图灵机,但是我觉得如果先去介绍图灵机的概念,就会搞得很混乱,所以这里主要从神经图灵机改进了LSTM的哪些方面入手进行讲解,同时,由于模型的结构比较复杂,为了让思路更清晰,这次也会分开几..._神经图灵机方法改进

【机器学习】机器学习模型迭代方法(Python)-程序员宅基地

文章浏览阅读2.8k次。一、模型迭代方法机器学习模型在实际应用的场景,通常要根据新增的数据下进行模型的迭代,常见的模型迭代方法有以下几种:1、全量数据重新训练一个模型,直接合并历史训练数据与新增的数据,模型直接离线学习全量数据,学习得到一个全新的模型。优缺点:这也是实际最为常见的模型迭代方式,通常模型效果也是最好的,但这样模型迭代比较耗时,资源耗费比较多,实时性较差,特别是在大数据场景更为困难;2、模型融合的方法,将旧模..._模型迭代

base64图片打成Zip包上传,以及服务端解压的简单实现_base64可以装换zip吗-程序员宅基地

文章浏览阅读2.3k次。1、前言上传图片一般采用异步上传的方式,但是异步上传带来不好的地方,就如果图片有改变或者删除,图片服务器端就会造成浪费。所以有时候就会和参数同步提交。笔者喜欢base64图片一起上传,但是图片过多时就会出现数据丢失等异常。因为tomcat的post请求默认是2M的长度限制。2、解决办法有两种:① 修改tomcat的servel.xml的配置文件,设置 maxPostSize=..._base64可以装换zip吗

Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字-程序员宅基地

文章浏览阅读1k次,点赞17次,收藏22次。Opencv自然场景文本识别系统(源码&教程)_opencv自然场景实时识别文字

随便推点

ESXi 快速复制虚拟机脚本_exsi6.7快速克隆centos-程序员宅基地

文章浏览阅读1.3k次。拷贝虚拟机文件时间比较长,因为虚拟机 flat 文件很大,所以要等。脚本完成后,以复制虚拟机文件夹。将以下脚本内容写入文件。_exsi6.7快速克隆centos

好友推荐—基于关系的java和spark代码实现_本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。-程序员宅基地

文章浏览阅读2k次。本文主要实现基于二度好友的推荐。数学公式参考于:http://blog.csdn.net/qq_14950717/article/details/52197565测试数据为自己随手画的关系图把图片整理成文本信息如下:a b c d e f yb c a f gc a b dd c a e h q re f h d af e a b gg h f bh e g i di j m n ..._本关任务:使用 spark core 知识完成 " 好友推荐 " 的程序。

南京大学-高级程序设计复习总结_南京大学高级程序设计-程序员宅基地

文章浏览阅读367次。南京大学高级程序设计期末复习总结,c++面向对象编程_南京大学高级程序设计

4.朴素贝叶斯分类器实现-matlab_朴素贝叶斯 matlab训练和测试输出-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏12次。实现朴素贝叶斯分类器,并且根据李航《统计机器学习》第四章提供的数据训练与测试,结果与书中一致分别实现了朴素贝叶斯以及带有laplace平滑的朴素贝叶斯%书中例题实现朴素贝叶斯%特征1的取值集合A1=[1;2;3];%特征2的取值集合A2=[4;5;6];%S M LAValues={A1;A2};%Y的取值集合YValue=[-1;1];%数据集和T=[ 1,4,-1;..._朴素贝叶斯 matlab训练和测试输出

Markdown 文本换行_markdowntext 换行-程序员宅基地

文章浏览阅读1.6k次。Markdown 文本换行_markdowntext 换行

错误:0xC0000022 在运行 Microsoft Windows 非核心版本的计算机上,运行”slui.exe 0x2a 0xC0000022″以显示错误文本_错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行-程序员宅基地

文章浏览阅读6.7w次,点赞2次,收藏37次。win10 2016长期服务版激活错误解决方法:打开“注册表编辑器”;(Windows + R然后输入Regedit)修改SkipRearm的值为1:(在HKEY_LOCAL_MACHINE–》SOFTWARE–》Microsoft–》Windows NT–》CurrentVersion–》SoftwareProtectionPlatform里面,将SkipRearm的值修改为1)重..._错误: 0xc0000022 在运行 microsoft windows 非核心版本的计算机上,运行“slui.ex