主从复制,是指将一台Redis服务器的数据复制到其他的Redis服务器,前者称为主节点(master/leader),后者称为从节点(slave/follower)。一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点,同时每个从节点也可以是别的从节点的父节点,即主从节点连接形成树结构。
主从结构中数据的复制是单向的,只能由主节点到从节点,所有的内存变更,即数据的增删改都只能在主节点上进行,从节点通过同步的方式完成修改。默认情况下,从节点对非Master节点客户端是只读的。Redis使用主从复制的作用有:
数据冗余:实现数据冗余备份,这样一台节点挂了之后,其上的数据不至于丢失。
故障恢复:当主节点出现问题时,其从节点可以被提升为主节点继续提供服务,实现快速的故障恢复;
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。
虚拟机版本 | VMware® Workstation 16 Pro 16.2.4 build-20089737 |
镜像版本 | CentOS-7-x86_64-DVD-1708.iso |
Redis版本 | Redis-5.0.7 |
主服务器地址 | 192.168.254.106/24:6379 |
从服务器1地址 | 192.168.254.107/24:6379 |
从服务器2地址 | 192.168.254.108/24:6379 |
通过安装并配置Redis配置文件实现Redis主从复制。
三台服务器通用配置
yum install -y gcc gcc-c++ make //安装依赖包
tar zxvf redis-5.0.7.tar.gz -C /opt/ //将redis的软件包解压到opt下
cd /opt/redis-5.0.7/ //进入到redis文件夹内
make //编译
make PREFIX=/usr/local/redis install //指定安装目录
#由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。
cd /opt/redis-5.0.7/utils
./install_server.sh
#执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件
回车4次,选择默认设置。
Please select the redis executable path [] /usr/local/redis/bin/redis-server
#在选择可执行文件路径这一栏需要手动修改为 /usr/local/redis/bin/redis-server ,注意要一次性正确输入。
结束后确认信息如下:
Selected config:
Port : 6379 #默认侦听端口为6379
Config file : /etc/redis/6379.conf #配置文件路径
Log file : /var/log/redis_6379.log #日志文件路径
Data dir : /var/lib/redis/6379 #数据文件路径
Executable : /usr/local/redis/bin/redis-server #可执行文件路径
Cli Executable : /usr/local/bin/redis-cli #客户端命令工具
#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/
-----修改 Redis 配置文件(Master节点操作)-----
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
appendonly yes #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart //重启redis服务
-----修改 Redis 配置文件(Slave节点操作)-----
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改监听地址为0.0.0.0
daemonize yes #137行,开启守护进程
logfile /var/log/redis_6379.log #172行,指定日志文件目录
dir /var/lib/redis/6379 #264行,指定工作目录
replicaof 192.168.10.22 6379 #288行,指定要同步的Master节点IP和端口
appendonly yes #700行,开启AOF持久化功能
/etc/init.d/redis_6379 restart //重启redis服务
-----验证主从效果-----
在Master节点上看日志:
tail -f /var/log/redis_6379.log
Replica 192.168.10.18:6379 asks for synchronization
Replica 192.168.10.19:6379 asks for synchronization
在Master节点上验证从节点:
redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.18,port=6379,state=online,offset=1246,lag=0
slave1:ip=192.168.10.19,port=6379,state=online,offset=1246,lag=1
Redis主从复制已成功配置。