前言
我们都知道,服务如果只部署一个节点,很容易出现单点故障,从而导致服务不可用。所以服务做成高可用是很有必要的,Redis服务自然也是这样。本文主要从理论和实践两方面讲解Redis高可用集群。手把手教你搭建一个高可用的redis主从复制集群。
本文采取理论和实践穿插讲解的方式,如果只关心集群的搭建,可以跳过文中理论部分。
分享一份Java面试资料,由于文章篇幅限制,不可能将所有面试题以文字形式把大厂面试题展示出来,本篇为大家精选了一些面试题,如果你需要这份完整版的面试笔记,获取面试资料只需:点击这里领取!!! 暗号:CSDN
前置阅读
Redis持久化:Redis:持久化
实验环境
VMware Workstation 15
CentOS Linux release 7.7.1908
Redis-5.0.8
注意事项
三个节点ip分别为192.168.1.101、192.168.1.102、192.168.1.103
确保三个节点都能访问互联网,并且三个节点能够相互通信
确保Linux的yum、wget、tar、gcc等基础命令、编译器可用
建议先关闭防火墙,Centos 7操作如下firewall-cmd --state ## 查看防火墙状态 not running表示已经关闭 systemctl stop firewalld.service ## 关闭防火墙 systemctl disable firewalld.service ## 禁止开机启动防火墙
redis单机安装
下载wget download.redis.io/relea
解压tar -zxvf redis-5.0.8.tar.gz
编译cd redis-5.0.8 make
安装make install ## 或者指定安装目录 make install PREFIX=指定路径。默认路径是/usr/local/bin ./utils/install_server.sh ## 安装成服务,如果上一步配置了PREFIX,需要把安装路径配置到环境变量/etc/profile
install_server.sh是redis提供的脚本,运行之后会让你指定几个配置:端口号、配置文件路径、日志文件路径、数据文件路径。
如果都设置成默认值,redis根据按照端口号来区分同一台主机上的不同的实例,因为install_server.sh可以多次运行,每次运行相当于安装了一个实例。
安装过程如果都是默认安装,会有以下几个配置:
端口号:6379
配置文件路径:/etc/redis/6379.conf
日志文件路径:/var/log/redis_6379.log
数据文件路径:/var/lib/redis/6379/
redis-server.sh路径:/usr/local/bin/
redis-cli.sh路径:/usr/local/bin/
安装成功会出现如下日志
Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service…
Successfully added to chkconfig! Successfully added to runlevels 345!
Starting Redis server… Installation successful!
可以看到redis服务已经自动启动。
主从复制
Redis主从复制是redis3.0之后自带的一种集群实现方式,不需要其他的中间件。是一种基于异步复制的主从实现方式。所以Redis主从复制并不能保证数据的强一致性.。集群在特定的条件下可能会丢失写操作。
集群结构
现在来搭建一个一主两从的集群,集群拓扑图如下
其中master节点可写可读,一般用来处理写请求,slave节点默认情况下是只读的,所以用来处理读请求。两个slave节点的数据都是从master节点复制过去的。所以这种集群也叫读写分离。
配置
redis配置文件默认路径为/etc/redis/6379.conf,用vi/vim打开,三个节点都配置如下内容
需要绑定的ip地址 bind 127.0.0.1 192.168.1.101 192.168.1.102 192.168.1.103
关闭后台运行,便于观察 daemonize no
注释日志路径,让日志直接输出在控制台,便于观察
logfile /var/log/redis_6379.log
关闭AOF持久化模式
appendonly no
启动
配置完成后分别启动三个节点
cd /usr/local/bin redis-server /etc/redis/6379.conf
设置主从关系
两个slave节点用redis-cli客户端连接redis-server后,均执行如下命令,把自己设置成master节点的slave
> replicaof 192.168.1.101 6379
replicaof也可以直接写在配置文件中(文中为了实验效果,以命令的方式执行)
################################# REPLICATION #################################
Master-Replica replication. Use replicaof to make a Redis instance a copy of
another Redis server. A few things to understand ASAP about Redis replication.
±-----------------+ ±--------------+
| Master | —> | Replica |
| (receive writes) | | (exact copy) |
±-----------------+ ±--------------+
1) Redis replication is asynchronous, but you can configure a master to
stop accepting writes if it appears to be not connected with at least
a given number of replicas.
2) Redis replicas are able to perform a partial resynchronization with the
master if the replication link is lost for a relatively small amount of
time. You may want to configure the replication backlog size (see the next
sections of this file) with a sensible value depending on your needs.
3) Replication is automatic and does not need user intervention. After a
network partition replicas automatically try to reconnect to masters
and resynchronize with them.
replicaof
replicaof在redis5.0之前的版本叫slaveof,命令描述如下
127.0.0.1:6379> he