Linux Redis 高可用之主从复制

news/2024/9/17 17:12:37

Redis主从复制简介

和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据是否是全量分为全量同步和增量同步。

clipboard.png

redis主从复制特性:

使用异步复制
一个主服务器可以有多个从服务器
从服务器也可以有自己的从服务器
复制不会阻塞主服务器
可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可
1、Redis主从部署

1.环境规划

所有机器统一centos7.4系统环境,安装redis 3.2.2,并且配置环境变量

主机名IP地址服务linux-node1172.16.1.170redis 主库linux-node2172.16.1.171redis 从库linux-node3172.16.1.173redis 从库

2.安装redis软件(所有节点统一安装)

1.确保系统已安装了Pcre(编译安装依赖于pcre组件)

[root@xmh ~]# yum install pcre -y

2.下载redis

mkdir /data
cd /data
wget http://download.redis.io/rele...

3.解压并编译redis

tar xf redis-3.2.2.tar.gz
mv redis-3.2.2 redis
cd redis
make

4.配置redis环境变量,使其能直接在命令使用redis命令

echo 'export PATH="/data/redis/src/:$PATH"' >>/etc/profile
source /etc/profile
编译安装完成后会在当前目录生成src这个目录(/data/redis/src),该目录存放的是redis的各种命令。
3.redis添加配置文件(所有redis节点统一的配置文件)

1.创建存放redis配置文件的目录,

mkdir /data/6379 -p

2.redis配置文件参数如下:

vim /data/6379/redis.conf

daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
protected-mode no
save 900 1
save 300 10
save 60 10000
参数解释:
daemonize yes #开启守护进程
port 6379 #redis端口号
logfile /data/6379/redis.log #redis日志文件保存路径
dir /data/6379 #redis数据文件保存路径
dbfilename dump.rdb #redis持久化RDB文件名(默认也是该文件名)
protected-mode no #关闭redis安全模式
save 900 1 #900秒后至少有1个key更改(save为RDB的持久化参数)
save 300 10 #300秒后至少有10个key更改
save 60 10000 #60秒后至少有10000个key更改
注意:持久化参数可有可无都不会影响本次实验,作者添加该参数的原因仅仅是为了配置文件参数的完整性
4.启动redis服务(所有redis节点统一执行)

redis-server /data/6379/redis.conf
ss -lntup |grep "6379"
5.开启主从(在从库上执行)

进入到redis cli模式,执行 SLAVEOF [主库IP] [主库端口]

redis-cli

127.0.0.1:6379> SLAVEOF 172.16.1.170 6379
6.从库上检查主从复制的状态(截取部分状态参数)

redis-cli

127.0.0.1:6379> info replication

Replication

role:slave #当前角色,从库
master_host:172.16.1.170 #主库的IP地址
master_port:6379 #主库的端口
master_link_status:up #主库状态up
7.主库上检查主从复制的状态(截取部分状态参数)

redis-cli

127.0.0.1:6379> info replication

Replication

role:master #当前角色,主库
connected_slaves:2 #有两个从库连接
slave0:ip=172.16.1.171,port=6379,state=online,offset=379,lag=0
slave1:ip=172.16.1.172,port=6379,state=online,offset=379,lag=1

默认情况下redis的从库没有写数据的权限

127.0.0.1:6379> set a 10
(error) READONLY You can't write against a read only slave.
2、Redis故障切换

手工的方式实现主从故障切换,当redis主库宕机后,需要选择一个从库作为临时顶替的主库,把SLAVEOF信息清除,然后其它从库也把SLAVEOF信息清楚,重新和新的主库构建主从关系

1.将主库的redis关闭(模拟主库故障)

[root@linux-node1 ~]# redis-cli shutdown
2.登录到任意一个从库查看主从状态(主库的状态是处于down)

[root@linux-node3 /]# redis-cli
127.0.0.1:6379> info replication

Replication

role:slave
master_host:172.16.1.170
master_port:6379
master_link_status:down #主库状态是down
3.让linux-node2成为主库(临时充当)

取消当前从库的角色,变成master节点

[root@linux-node2 /]# redis-cli
127.0.0.1:6379> SLAVEOF no one
4.手工将linux-node3和新的主库重新构建主从关系

1.先取消当前的从库角色,

[root@linux-node3 /]# redis-cli
127.0.0.1:6379> SLAVEOF no one

2.重新和新的主库构建主从关系

127.0.0.1:6379> SLAVEOF 172.16.1.170 6379

3.查看主从状态

127.0.0.1:6379> INFO replication

Replication

role:slave
master_host:172.16.1.171
master_port:6379
master_link_status:up #与主库连接的状态up


http://lihuaxi.xjx100.cn/news/235358.html

相关文章

解决Swift中present(uiImagePickerController,animated: true,completion: nil)闪退的问题

swift中开发选择图片上传,会使用到Tap Gesture Recognizer控件,对应 UITapGestureRecognizer API,以下是代码示例(取自IOS developer library): IBAction func selectImageFromPhotoLibrary(_ sender: UIT…

我是如何设计 Upload 上传组件的

Upload 组件设计的目标是解决用户上传文件的便利性&#xff0c;但是中后台 Upload 组件的场景是多种多样的&#xff0c;所以可扩展能力是 Upload 组件不可忽视的另一方面。 同样为了大家能够更加容易的理解&#xff0c;我会从最原始的 input 标签开始说起 <form action"…

闲来无事,总结 Xcode常用快捷键

IOS模拟器home键&#xff1a;Command Shift H 构建应用程序&#xff1a;Command &#xff0b; B 运行app&#xff1a;Command &#xff0b; R 清理工程&#xff1a;Command &#xff0b; Shift &#xff0b; K 打开Xcode首选项&#xff1a;Command &#xff0b; &#xff…

从理论到实践 全面理解HTTP/2

前言 为了降低加载时间&#xff0c;相信大多数人都做过如下尝试 Keep-alive: TCP持久连接&#xff0c;增加了TCP连接的复用性&#xff0c;但只有当上一个请求/响应完全完成后&#xff0c;client才能发送下一个请求Pipelining: 可同时发送多个请求&#xff0c;但是服务器必须严格…

全面的Swift学习资料整理

资料1 ---教程类 官方文档中文翻译http://wiki.jikexueyuan.com/project/swift/Github上的地址点我 Using Swift with Cocoa and Objective-C WWDC 2015 系统化的开发文档iOS Developer Library Swift 开源及跨平台开发swift.org 斯坦福课程Stanford University: Develo…

Cocoapods的安装以及使用(2)

Cocoapods 在网上看博客&#xff0c;看了好多次&#xff0c;都没有学会cocoapods&#xff0c;今天上午浪费了一上午的时间&#xff0c;终于算是学会了。其实也是很简单的。 iOS 新版 CocoaPods 安装流程 1.换掉现有Ruby默认源&#xff08;由于好多人都没有翻墙&#xff0c;所…

数据千万条,备份第一条,数据找不回,老板两行泪

2019独角兽企业重金招聘Python工程师标准>>> 开工第一天&#xff0c;请带着你的回忆看下文&#xff0c;想想你这些年删过的库&#xff0c;被删过的库。。。 数据库备份是个老生常谈的话题&#xff0c;看似很简单&#xff0c;但在实际操作过程中&#xff0c;运维人员…

酷派、华为不能打印log解决办法

我发现我的手机无法再eclipse里面输出自己打的log.i等log&#xff0c;一开始还以为是我手机root或刷过机的问题。 最终非常偶然找到了解决的方法&#xff1a; 酷派大神F1&#xff0c;F2在出厂时将log的级别做了限制。 解除限制的方法是&#xff1a;拨号盘输入*20121220# ->…