• 1、规划
  • 2、启动时或者启动后手动设置Slave
  • 2.1 启动master
  • 2.2 启动6380
  • 2.3 验证6380
  • 2.4 设置6381
  • 2.5 验证6381
  • 3、配置文件方式
  • 3.1 拷贝redis.conf
  • 3.2设置6379配置文件
  • 3.3设置6380配置文件
  • 3.4设置6381配置文件
  • 3.5 启动
  • 3.6 验证
  • 4、主从复制问题



Redis主从复制 Replication从服务器执行客户端发送的读命令,比如GET、LRANGE、SMEMMBERS、HGET、ZRANGE等等客户端可以连接Slaves执行读请求,来降低Master的读压力。


本文主要通过单台服务器多个端口实现Redis的主从复制搭建。本文不再讲解redis的安装。

1、规划

端口

6379

6380

6381

主从

Master

Slave

Slave

2、启动时或者启动后手动设置Slave

2.1 启动master

进入/opt/app/redis目录
启动

redis-sever 
 #此时 默认启动 6379`

redis简单主从复制的实现_配置文件

2.2 启动6380

再打开一个窗口 启动 6380

redis-sever  --port 6380

redis简单主从复制的实现_客户端_02


2.3 设置6380

打开一个shell 界面

登录6380客户端

redis-cli -p 6380
slaveof 127.0.0.1 6379

将服务器6380转换为6379的从库(Slave)

6380 服务器上输出如下 称为 6379的slave 开始从6379上同步数据

redis简单主从复制的实现_配置文件_03


此时6379上输出如下

开始向6380上同步数据

redis简单主从复制的实现_redis简单主从复制的实现_04

2.3 验证6380

再打开shell 登录6380客户端

redis-cli -p 6380
set keya a

此时 如果在6380上不能在进行写操作

redis简单主从复制的实现_redis简单主从复制的实现_05


此时再打开界面,登录6379客户端

redis-cli -p 6379
set keya a

redis简单主从复制的实现_配置文件_06


再回到6380 上 马上能读取到keya 的值

redis简单主从复制的实现_配置文件_07

2.4 设置6381

此时再打开一个shell界面
启动时指定作为6379的从库

redis-sever  --port 6381 --slaveof 127.0.0.1 6379

6381 上输出

redis简单主从复制的实现_redis_08

master 6379上输出

redis简单主从复制的实现_配置文件_09

2.5 验证6381

在6379上再set master值 为6379

redis简单主从复制的实现_客户端_10


再连接上6381客户端,读取maste值如下

redis简单主从复制的实现_客户端_11


停止从master复制数据,恢复独立数据库身份

在 6381客户端上执行

slaveof no one

redis简单主从复制的实现_redis简单主从复制的实现_12


看到6379上输出

此时 在6379上写入数据

set slave1 6380

在这里插入图片描述

回到6381客户端上,不能再获取6379上的值

redis简单主从复制的实现_redis简单主从复制的实现_13

3、配置文件方式

关闭刚刚启动的 6379、6380、6381

redis-cli -p 6379 shutdown
redis-cli -p 6380 shutdown
redis-cli -p 6381  shutdown

3.1 拷贝redis.conf

将redis安装包中的配置文件拷贝redis安装目录

cp /opt/app/redis-2.8.18/redis.conf  /opt/app/redis

再复制3份

cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf

3.2设置6379配置文件

设置6379 为后台启动,编辑redis6379.conf 找到daemonize 行,把no 改为yes

vim redis6379.conf
daemonize yes

3.3设置6380配置文件

编辑redis6380.conf 找到daemonize 行,把no 改为yes,把port 设置为6380,再加上master设置

vim redis6379.conf
daemonize yes
port 6380

slaveof 127.0.0.1 6379

redis简单主从复制的实现_redis_14


redis简单主从复制的实现_redis_15

3.4设置6381配置文件

编辑redis6381.conf 找到daemonize 行,把no 改为yes,把port 设置为6381,再加上master设置

redis简单主从复制的实现_配置文件_16


redis简单主从复制的实现_配置文件_17

3.5 启动

redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf

3.6 验证

登录6380
看到在6380库上不能进行写操作
此时由于6379未写入数据,也不能读取数据

redis-cli -p 6380
set slave1 6380
get slave1
keys *

redis简单主从复制的实现_redis简单主从复制的实现_18


在6381上操作也是同样的结果

redis-cli -p 6381
set slave2 6381
get slave2
keys *

redis简单主从复制的实现_redis简单主从复制的实现_19

回到主库6379 写如数据

redis-cli -p 6379
set slave1 6380
set slave2 6381
set master 6379

redis简单主从复制的实现_redis简单主从复制的实现_20


回到6380和6381上都能读取到刚写入的数据

redis简单主从复制的实现_客户端_21


redis简单主从复制的实现_redis简单主从复制的实现_22

4、主从复制问题

  1. 一个Master可以有多个Slaves
  2. Slave下线,只是读请求的处理性能下降
  3. Master下线,写请求无法执行
  4. 其中一台Slave使用SLAVEOF no one命令成为Master,其它Slaves执行SLAVEOF命令指向这个新的Master,从它这里同步数据


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis