Redis主从复制简介node
和MySQL主从复制的缘由同样,Redis虽然读取写入的速度都特别快,可是也会产生读压力特别大的状况。为了分担读压力,Redis支持主从复制,Redis的主从结构能够采用一主多从或者级联结构,Redis主从复制能够根据是不是全量分为全量同步和增量同步。linux
redis主从复制特性:redis
一、Redis主从部署vim
1.环境规划centos
全部机器统一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/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节点统一的配置文件)centos7
#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.
二、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