Redis 主从复制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 主从复制相关的知识,希望对你有一定的参考价值。
Redis主从复制简介
和mysql主从复制的原因一样,Redis
虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis
支持主从复制
,Redis
的主从结构可以采用一主多从或者级联结构,Redis主从复制
可以根据是否是全量分为全量同步
和增量同步
。
redis主从复制特性:
- 使用异步复制
- 一个主服务器可以有多个从服务器
- 从服务器也可以有自己的从服务器
- 复制不会阻塞主服务器
- 可以通过复制功能来让主服务器免于执行持久化操作,由从服务器去执行持久化操作即可
1、Redis主从部署
1.环境规划
所有机器统一centos7.4
系统环境,安装redis 3.2.2
,并且配置环境变量
主机名 | IP地址 | 服务 |
---|---|---|
linux-node1 | 172.16.1.170 | redis 主库 |
linux-node2 | 172.16.1.171 | redis 从库 |
linux-node3 | 172.16.1.173 | redis 从库 |
2.安装redis软件(所有节点统一安装)
#1.确保系统已安装了Pcre(编译安装依赖于pcre组件)
[[email protected] ~]# yum install pcre -y
#2.下载redis
mkdir /data
cd /data
wget http://download.redis.io/releases/redis-3.2.2.tar.gz
#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关闭(模拟主库故障)
[[email protected] ~]# redis-cli shutdown
2.登录到任意一个从库查看主从状态(主库的状态是处于down)
[[email protected] /]# 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节点
[[email protected] /]# redis-cli
127.0.0.1:6379> SLAVEOF no one
4.手工将linux-node3和新的主库重新构建主从关系
#1.先取消当前的从库角色,
[[email protected] /]# 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
以上是关于Redis 主从复制的主要内容,如果未能解决你的问题,请参考以下文章