Redis主从、哨兵和集群环境搭建图文教程

Java技术 潘老师 9个月前 (08-12) 224 ℃ (0) 扫码查看

介绍

Redis是一个开源的内存数据存储系统,具有高性能和高可用性。为了提高Redis的可靠性和扩展性,可以采用主从复制、哨兵和集群等方式来组织Redis环境。

主从复制(Master-Slave Replication):主从复制是Redis中最基本的高可用方案之一。通过主从复制,可以将主节点的数据复制到多个从节点上,实现数据的备份和读写分离。主节点负责写入操作,而从节点负责读取操作,从而提高系统的读取性能和可用性。

哨兵(Sentinel):哨兵是Redis提供的一种自动故障转移和监控机制。通过哨兵,可以监控Redis节点的状态,并在主节点发生故障时自动将一个从节点升级为新的主节点,以保证系统的高可用性。哨兵还负责监控和管理Redis集群中的节点,进行故障检测和故障转移。

集群(Cluster):Redis集群是一种分布式解决方案,用于在多个节点之间分配数据和负载。Redis集群将数据分片存储在多个节点上,并通过节点间的数据交互来实现数据的高可用性和负载均衡。集群中的每个节点都可以处理部分数据,并且可以自动进行数据迁移和故障转移。

在Redis集群环境中,每个节点都是独立的,具有相同的权重。客户端可以通过集群路由功能将请求发送到正确的节点上,并且集群会自动进行数据重定向和故障转移。

需要注意的是,主从复制、哨兵和集群都是为了提高Redis的可用性和扩展性而设计的解决方案。根据具体的需求和场景,可以选择适合的方案来构建可靠和高性能的Redis环境。

一、Redis单机安装

(1)安装依赖的C语言

yum install -y gcc-c++ automake autoconf libtool make tcl 

(2)上传安装包并解压

cd /usr/local/tmp

tar zxf redis-5.0.5.tar.gz

(3)编译并安装

cd /usr/local/tmp/redis-5.0.5/

# 编译
make

# 安装
make install PREFIX=/usr/local/redis

(4)开启守护进程

复制 /usr/local/tmp/redis-5.0.5/redis.conf 配置文件

cp redis.conf /usr/local/redis/bin/

修改配置文件

cd /usr/local/redis/bin/

vim redis.conf

把 daemonize 的值由 no 修改为 yes

(5)修改外部访问
在redis5中需要修改配置文件redis.conf允许外部访问。需要修改两处。

注释掉 bind 127.0.0.1
把 protected-mode 的值由 yes 改成 no

(6)启动并测试

# 启动 redis
./redis-server redis.conf

# 重启redis
./redis-cli shutdown
./redis-server redis.conf

二、Redis主从搭建

我们可以继续在单机Redis基础上安装,先关闭Redis单机版

./redis-cli shutdown

(1)新建目录

mkdir /usr/local/replica

(2)复制目录
把之前安装的redis单机版中bin目录复制三份,分别叫做:master、slave1、slave2

cp -r /usr/local/redis/bin /usr/local/replica/master
cp -r /usr/local/redis/bin /usr/local/replica/slave1
cp -r /usr/local/redis/bin /usr/local/replica/slave2

(3)修改从节点配置文件
修改从节点的 redis.conf,指定主节点ip和端口;修改从节点自身端口号防止和其他redis冲突

从节点slave1

vim /usr/local/replica/slave1/redis.conf

# 指定主节点ip和端口
replicaof 192.168.93.10 6379

# 修改自己的端口
port 6380

从节点slave2

vim /usr/local/replica/slave2/redis.conf

# 指定主节点ip和端口
replicaof 192.168.93.10 6379

# 修改自己的端口
port 6381

(4)启动Redis实例

cd /usr/local/replica

vim startup.sh

在启动脚本中添加下面内容

cd /usr/local/replica/master/
./redis-server redis.conf
cd /usr/local/replica/slave1
./redis-server redis.conf
cd /usr/local/replica/slave2
./redis-server redis.conf

给脚本执行权限

chmod a+x startup.sh

执行脚本

./startup.sh 

(5)查看启动状态

ps aux | grep redis

(6)测试

cd /usr/local/replica/master/
./redis-cli 

三、Redis 哨兵搭建

Redis的主从复制默认情况下,只有主节点具备写入能力,而从节点只能进行读取操作。如果主节点宕机,整个节点将无法进行写入操作。为了解决这个问题,可以将一个从节点升级为新的主节点,使整个节点恢复正常工作。而当之前的主节点恢复后,可以将其作为新的从节点加入到节点中。

Redis的哨兵(Sentinel)用于监控整个节点的状态。当节点的主节点宕机或发生其他故障时,哨兵可以自动选取一个新的主节点来替代宕机的主节点,以确保节点的高可用性。Redis的哨兵支持单哨兵和多哨兵模式。在单哨兵模式下,一旦哨兵发现主节点宕机,就会直接选取另一个节点作为新的主节点。而在多哨兵模式下,需要达到一定数量的哨兵认为主节点宕机后,才会进行重新选取主节点的操作。本篇笔记以多哨兵为例进行演示。

当我们杀掉主节点时,整个节点将无法进行写入操作,而从节点的身份不会发生变化,主节点的信息也不会改变。

我们还是在 Redis 单机版的基础上进行搭建,搭建步骤如下:

(1)新建目录

mkdir /usr/local/sentinel

(2)复制 Redis

cp -r /usr/local/redis/bin/* /usr/local/sentinel

(3)复制配置文件
从 Redis 解压目录中复制 sentinel 配置文件

cd /usr/local/tmp/redis-5.0.5/
cp sentinel.conf /usr/local/sentinel/

(4)修改配置文件

cd /usr/local/sentinel
vim sentinel.conf

port 26379
daemonize yes
logfile “/usr/local/sentinel/26379.log”
sentinel monitor mymaster 192.168.93.10 6379 2

对这行配置进行解析一下,
sentinel monitor mymaster 192.168.93.10 6379 2,它的
意思是 Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 127.0.0.1,端口号为 6379 ,而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意,只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行。

复制 sentinel.conf,命名为 sentinel-26380.conf

cp sentinel.conf sentinel-26380.conf
vim sentinel-26380.conf

port 26380
daemonize yes
logfile “/usr/local/sentinel/26380.log”
sentinel monitor mymaster 192.168.93.10 6379 2

复制 sentinel.conf,命名为 sentinel-26381.conf

cp sentinel.conf sentinel-26381.conf
vim sentinel-26381.conf

port 26381
daemonize yes
logfile “/usr/local/sentinel/26381.log”
sentinel monitor mymaster 192.168.93.10 6379 2

(5)启动主从
如果已经启动状态,忽略下面命令。如果启动部分,全部kill后重新启动,使用kill杀死全部 Redis 实例。

ps aux|grep redis
kill -9 进程号

启动主从

cd /usr/local/replica
./startup.sh

(6)启动三个哨兵

cd /usr/local/sentinel

./redis-sentinel sentinel.conf
./redis-sentinel sentinel-26380.conf
./redis-sentinel sentinel-26381.conf

四、集群环境搭建

当集群中等于或者超过一半的节点不可用时,整个集群不可用。为了搭建稳定集群,集群节点数最好都采用奇数节点。

(1)复制 Redis 配置文件

从 /usr/local/redis/bin 下把 redis.conf 复制到当前目录中,命名为 redis-7001.conf

cp /usr/local/redis/bin/redis.conf /usr/local/redis/bin/redis-7001.conf

(2)修改 redis-7001.conf

cd /usr/local/redis/bin
vim redis-7001.conf

需要修改如下

port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
# appendonly yes 如果开启aof默认,需要修改为yes。如果使用rdb,此处不需要修改
daemonize yes
protected-mode no
pidfile /var/run/redis_7001.pid

(3)复制配置文件,并修改内容

把 redis-7001.conf 复制5份,分别叫做 redis-7002.conf、redis-7003.conf、redis-7004.conf、redis-7005.conf、redis-7006.conf

cp redis-7001.conf redis-7002.conf
cp redis-7001.conf redis-7003.conf
cp redis-7001.conf redis-7004.conf
cp redis-7001.conf redis-7005.conf
cp redis-7001.conf redis-7006.conf

新复制的5个配置文件都需要需改三处,例如 nodes-7002.conf 中需要把所有 7001都换成7002。其他配置文件同理修改即可

port 7002
cluster-config-file nodes-7002.conf
pidfile /var/run/redis_7002.pid

(4) 启动6个 Redis

可以使用 redis-server 结合6个配置文件进行启动6个实例,执行之前一定要先删除dump.rdb

rm -f dump.rdb
vim startup.sh

./redis-server redis-7001.conf
./redis-server redis-7002.conf
./redis-server redis-7003.conf
./redis-server redis-7004.conf
./redis-server redis-7005.conf
./redis-server redis-7006.conf


chmod a+x startup.sh
./startup.sh

(5)查看启动状态

(6)建立集群

在 Redis3 的时候需要借助 ruby 脚本实现集群;在 Redis5 中可以使用自带的redis-cli实现集群功能,比Redis3 更加方便。建议配置静态ip,ip改变集群失效

./redis-cli --cluster create 192.168.93.10:7001 192.168.93.10:7002 192.168.93.10:7003 192.168.93.10:7004 192.168.93.10:7005 192.168.93.10:7006 --cluster-replicas 1

(7) 测试

集群测试时,千万不要忘记最后一个-c参数。

./redis-cli -p 7001 -c

set age 18

(8)编写关闭脚本

vim stop.sh
chmod a+x stop.sh

./redis-cli -p 7001 shutdown
./redis-cli -p 7002 shutdown
./redis-cli -p 7003 shutdown
./redis-cli -p 7004 shutdown
./redis-cli -p 7005 shutdown
./redis-cli -p 7006 shutdown

总结

以上就是Redis主从、哨兵和集群环境搭建的全过程,希望对你有帮助!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/8062.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】