热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

主从配置_redis的主从配置与故障切换恢复操作

篇首语:本文由编程笔记#小编为大家整理,主要介绍了redis的主从配置与故障切换恢复操作相关的知识,希望对你有一定的参考价值。1)机器信息Redis主从结构支持

篇首语:本文由编程笔记#小编为大家整理,主要介绍了redis的主从配置与故障切换恢复操作相关的知识,希望对你有一定的参考价值。


1)机器信息
Redis主从结构支持一主多从,这里我使用一主两从(一主一从也行,配置一样)
主节点 172.16.0.237 master-node
从节点 172.16.0.131 slave-node1

关闭两个节点机的iptables防火墙和selinux

2)安装redis
三台节点机的安装步骤一样
[[email protected] ~]# wget http://download.redis.io/redis-stable.tar.gz
[[email protected] ~]# tar -zvxf redis-stable.tar.gz
[[email protected] ~]# cd redis-stable
[[email protected] redis-stable]# make
[[email protected] redis-stable]# cd src/
[[email protected] src]# cp redis-server redis-cli redis-check-aof redis-check-rdb redis-sentinel redis-trib.rb /usr/local/bin/

然后新建目录,存放配置文件
[[email protected] src]# mkdir /etc/redis
[[email protected] src]# mkdir /var/redis
[[email protected] src]# mkdir /var/redis/log
[[email protected] src]# mkdir /var/redis/run
[[email protected] src]# mkdir /var/redis/redis

在redis解压根目录中找到配置文件模板
[[email protected] src]# cd ../
[[email protected] redis-stable]# cp redis.conf /etc/redis/redis.conf

设置启动脚本
[[email protected] redis-stable]# cp utils/redis_init_script /etc/init.d/redis
[[email protected] redis-stable]# chmod 755 /etc/init.d/redis

修改脚本pid及conf路径为实际路径
[[email protected] redis-stable]# vim /etc/init.d/redis
......
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

PIDFILE=/var/redis/run/redis_6379.pid
COnF="/etc/redis/redis.conf"
.......

3)主从复制配置
master-node
[[email protected] ~]# vim /etc/redis/redis.conf
.......
port 6379
.......
daemonize yes //这个修改为yes
.......
bind 0.0.0.0 //绑定的主机地址。说明只能通过这个ip地址连接本机的redis。最好绑定0.0.0.0;注意这个不能配置成127.0.0.1,否则复制会失败!用0.0.0.0或者本机ip地址都可以
.......
pidfile /var/redis/run/redis_6379.pid
.......
logfile /var/redis/log/redis_6379.log
.......
dir /var/redis/redis #redis数据目录
.......
appendonly yes #启用AOF持久化方式
appendfilename "appendonly.aof" #AOF文件的名称,默认为appendonly.aof
appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,是受推荐的方式。
.....
save 900 1 #启用RDB快照功能,默认就是启用的
save 300 10
save 60 10000 #即在多少秒的时间内,有多少key被改变的数据添加到.rdb文件里
.......
dbfilename dump.rdb #快照文件名称
......

slave-node1和slave-node2两个从节点相比于master-node主节点的redis.conf配置,只是多了下面一行配置,其它都一样:
slaveof 172.16.0.237 6379

启动三个节点的redis(启动命令一样)
[[email protected] ~]# /etc/init.d/redis start
Starting Redis server...
[[email protected] ~]# lsof -i:6379
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 10475 root 4u IPv4 88640 0t0 TCP localhost:6379 (LISTEN)

登陆主节点master-node的redis,查看状态
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 //使用172.16.0.237也可以登录,或者直接使用redis-cli也可以登录
127.0.0.1:6379> info
......
......
#Replication
role:master //节点在集群中的状态
connected_slaves:1 //slave节点的个数
slave0:ip=172.16.0.131,port=6379,state=online,offset=1,lag=1
........
技术分享图片

登录从节点slave-node1的redis,查看状态
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
.......
.......
#Replication
role:slave
master_host:172.16.0.237
master_port:6379
master_link_status:up
......
技术分享图片

4)测试数据同步

主节点master-node上写入新数据
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name lichao
OK
127.0.0.1:6379> get name
"lichao"

然后到两台从节点上查看是否同步了上面写入的数据
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get name
"lichao"

redis主从复制默认是读写分离的,即:
主节点上可以读写操作;从节点上只能进行读操作,不能写数据
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name chenzixiu
(error) READONLY You can‘t write against a read only slave.

5)主从切换

5.1)停止主节点master-node的redis
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 shutdown
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
Could not connect to Redis at 127.0.0.1:6379: Connection refused
Could not connect to Redis at 127.0.0.1:6379: Connection refused

将从节点slave-node1的redis设成主redis
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE //这条命了只是临时将该节点设置为主节点;当redis重启后,就会失效;可以登录redis,通过info信息查看!
OK
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 //变为主redis后,slave-node1就可以进行写入操作了
127.0.0.1:6379> set name chenzixiu
OK
127.0.0.1:6379> info
......
#Replication
role:master //可知已经变成master主节点了
connected_slaves:0
master_repl_offset:0

这时候master-node节点已经故障了,此时slave-node1已经变成主redis了
配置修改为slave-node1

5.2)原来的主redis恢复正常了,要重新切换回去
比如原来的主redis节点master-node现在恢复了
[[email protected] ~]# /etc/init.d/redis start
Starting Redis server...
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
......
#Replication
role:master 从节点slave-node1在master-node故障期间临时变为主节点
connected_slaves:0
......

那么现在要重新将主节点切换回去。步骤如下:

a)登录临时切换的主节点slave-node1
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set name chenchen
OK
127.0.0.1:6379> get name
"chenchen"
127.0.0.1:6379> save //将数据保存
OK

b)将现在的主redis(即slave-node1节点,临时设置的主节点)根目录下app文件和dump.rdb文件拷贝覆盖到原来主redis的根目录(覆盖前将原来主redis下的持久化文件备份下)
[[email protected] ~]# rsync -e "ssh -p22" -avpgolr /var/redis/redis/dump.rdb 172.16.0.237:/var/redis/redis/
[[email protected] ~]# rsync -e "ssh -p22" -avpgolr /var/redis/redis/appendonly.aof 172.16.0.237:/var/redis/redis/

c)重启原来的主redis(即master-node节点)
[[email protected] ~]# /etc/init.d/redis stop
[[email protected] ~]# /etc/init.d/redis start

d)在现在的主redis(即slave-node1)中切换(或者直接重启该节点的redis,因为redis.conf文件中已经配置了;如果不想重启redis,就使用下面的命令)
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379 slaveof 172.16.0.237 6379
OK

e)登录原来的主redis(也就是master-node)查看
[[email protected] ~]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> info
.......
#Replication
role:master
connected_slaves:1
slave0:ip=172.16.0.131,port=6379,state=online,offset=1,lag=0
master_repl_offset:1
......

注意事项
如果使用主从复制,那么要确保你的master激活了持久化,或者确保它不会在当掉后自动重启,原因:
a)slave是master的完整备份,因此如果master通过一个空数据集重启,slave也会被清掉。
b)在配置redis复制功能的时候,如果主数据库设置了密码,需要在从数据的配置文件中通过masterauth参数设置主数据库的密码,这样从数据库在连接
主数据库时就会自动使用auth命令认证了。相当于做了一个免密码登录。


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
author-avatar
sfktrd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有