目录
一、概念
redis主从复制是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。
二、作用
(一)数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
(二)故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
(三)负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
(四)高可用:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
三、缺点
(一)故障恢复无法自动化;
(二)写操作无法负载均衡;
(三)存储能力受到单机的限制。
四、流程
第一步:若启动一个Slave机器进程,则它会向Master机器发送一个“sync command”命令,请求同步连接。
第二步:无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。
第三步:后台进程完成缓存操作之后,Maste机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。
第四步:Master机器收到Slave端机器的连接后,将其完整的数据文件发送给Slave端机器,如果Mater同时收到多个Slave发来的同步请求,则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。
五、搭建
(一)搭建环境
1、关闭Networkmanager以及开机不自启
systemctl stop NetworkManager
systemctl disable NetworkManager
2、关闭防火墙开机以及不自启
systemctl stop firewalld
systemctl disable firewalld
3、关闭selinux
vim /etc/selinux/config
setenforce 0
4、静态配置IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
(二)解决依赖关系
yum install -y epel-release
(三)安装redis
yum install -y redis
(四)创建目录
cd /usr/local
mkdir redis_master_slave
cd redis_master_slave
mkdir master_conf slave1_conf #master_conf作为主服务器的配置文件
#slave1_conf 作为从服务器的配置文件
(五)复制配置文件
cp /etc/redis.conf master_conf
cp /etc/redis.conf slave_conf
(六)修改配置文件
1、修改主服务器的配置文件
命令:cd master_conf
vim redis.conf
bind 0.0.0.0 #修改监听地址
port 6379 #修改监听端口号
protected-mode no #修改保护模式
daemonize yes #是否以守护进程方式运行Redis服务器,yes表示后台进程
2、修改从服务器的配置文件
命令:cd slave1_conf
vim redis.conf
bind 0.0.0.0 #修改监听地址
port 6380 #修改监听端口号
protected-mode no #修改保护模式
daemonize yes #是否以守护进程方式运行Redis服务器,yes表示后台进程
slaveof 192.168.115.128 6379 #用于将当前Redis实例设置为一个备份实例,它将从指定IP地址和端口号指定的主Redis实例中复制数据。将图一改为图二
#slaveof masterip masterport
其中,masterip是主Redis实例的IP地址,masterport是主Redis实例的端口号。
#注意有些是将注释取消掉进行修改的。
(七)启动服务
redis-server /usr/local/redis_master_slave/master_conf/redis.conf
redis-server /usr/local/redis_master_slave/slave1_conf/redis.conf
(八)检查端口是否启动
netstat -anptul | grep redis
(九)验证
使用redis-cli命令行登录redis服务器,输入role指令查看状态
redis-cli -h 192.168.115.128 -p 6379
在master节点上,录入数据,在slave节点上查看到对应数据即可