首页 > 数据库 >Linux部署Redis哨兵集群 一主两从三哨兵

Linux部署Redis哨兵集群 一主两从三哨兵

时间:2023-11-28 15:11:35浏览次数:29  
标签:Redis redis 哨兵 usr Linux sentinel local 节点

目录
一、哨兵集群架构介绍
二、下载安装Redis
2.1、选择需要安装的Redis版本
2.2、下载并解压Redis
2.3、编译安装Redis
三、搭建Redis一主两从集群
3.1、准备配置文件
3.1.1、准备主节点6379配置文件
3.1.2、准备从节点6380配置文件
3.1.3、准备从节点6381配置文件
3.2、启动Redis主从复制集群
3.3、查看Redis集群信息和主从复制效果
3.4、关闭Redis
四、搭建Redis三哨兵集群
4.1、准备配置文件
4.1.1、准备节点26379配置文件
4.1.2、准备节点26380配置文件
4.1.3、准备节点26381配置文件
4.2、启动sentinel集群
4.3、查看三个哨兵节点信息
4.4、测试哨兵容灾切换效果
4.5、关闭Redis哨兵
五、注意事项
5.1、远程连接问题
5.2、Redis节点注册到哨兵的IP问题
六、SpringBoot集成Redis主从架构实现读写分离(哨兵模式)
一、哨兵集群架构介绍
Redis-Sentinel是redis官方推荐的高可用性解决方案,sentinel哨兵是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点,当用redis作master-slave的高可用时,如果master本身宕机,redis本身或者客户端都没有实现主从切换的功能,而redis-sentinel就是一个独立运行的进程,用于监控多个master-slave集群, 自动发现master宕机,进行自动切换slave > master,类似Java这类客户端会通过sentinel发现redis主节点并与其建立连接,也可以实现读写分离。

 

PS:本文使用一台主机部署,会使用不同端口区分。

二、下载安装Redis
2.1、选择需要安装的Redis版本
在官网发行版中选择一个自己需要的版本,我这里使用Redis6.2.0,小版本区别不大。
Redis发行版本列表:https://download.redis.io/releases


2.2、下载并解压Redis
下载redis到/usr/local/redis目录中
wget -P /usr/local/redis http://download.redis.io/releases/redis-6.2.0.tar.gz
1
进入/usr/local/redis目录解压redis
cd /usr/local/redis
tar -xzf redis-6.2.0.tar.gz
1
2


2.3、编译安装Redis
安装gcc
# redis是c语言编写的,编译Redis需要gcc环境
yum -y install gcc
# 安装好后查看gcc信息
gcc -v
1
2
3
4


编译
# 进入redis-6.2.0目录
cd redis-6.2.0
# 执行make开始编译 因为我们下载的是源码需要编译成可执行文件
make
1
2
3
4


安装
# 编译成功后,执行make PREFIX=/usr/local/redis/redis-6.2.0 install 安装redis
# 这里指定目录之后,方便后续卸载,直接rm -rf /usr/local/redis/redis-6.2.0 即可删除redis
make PREFIX=/usr/local/redis/redis-6.2.0 install
1
2
3
PREFIX 这个关键字的作用是安装的时候用于指定程序存放的路径,假设不添加该关键字Linux会将:
可执行文件存放在/usr/local/bin目录;
库文件会存放在/usr/local/lib目录;
配置文件会存放在/usr/local/etc目录;
其他的资源文件会存放在usr/local/share目录
1
2
3
4
5


三、搭建Redis一主两从集群
本文使用一台主机部署,会使用不同端口区分,主节点6379、从节点分别使用6380和6381。

3.1、准备配置文件
先进入Redis解压目录,后续都在该目录下操作

cd /usr/local/redis/redis-6.2.0
1
3.1.1、准备主节点6379配置文件
创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/node/6379
1
拷贝一份redis.conf到./node/6379目录中作为主节点配置文件。
cp redis.conf ./node/6379/redis.conf
1
修改几个配置
# 编辑拷贝的配置文件,,修改几个配置信息
vi ./node/6379/redis.conf
1
2
# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1

# redis进程的端口号 默认是6379
port 6379

# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6379.pid

# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/node/6379/redis.log

# 指定持久化存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/node/6379

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456

# 当master设置了密码保护时,slave服务连接master的密码
# 主节点中也要配置,如果不配置在主节点宕机后,哨兵选择了其它从节点作为主节点,如果不配置主节点授权密码,那么在这个节点重新加入集群时无法同步新的主节点数据,因为没有主节点授权密码
masterauth 123456

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
3.1.2、准备从节点6380配置文件
创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/node/6380
1
拷贝一份redis.conf到./node/6380目录中作为主节点配置文件。
cp redis.conf ./node/6380/redis.conf
1
修改几个配置
# 编辑拷贝的配置文件,,修改几个配置信息
vi ./node/6380/redis.conf
1
2
# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1

# redis进程的端口号 默认是6379
port 6380

# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6380.pid

# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/node/6380/redis.log

# 指定持久化存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/node/6380

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456

# 当master设置了密码保护时,slave服务连接master的密码
masterauth 123456

# 设置主机的 ip+ 端口,来指明主机的redis
replicaof 10.0.20.13 6379

# 配置从节点读写权限,支持参数[yes,no],yes:只读 no:支持读写操作,从节点默认yes
replica-read-only yes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
3.1.3、准备从节点6381配置文件
创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/node/6381
1
拷贝一份redis.conf到./node/6381目录中作为主节点配置文件。
cp redis.conf ./node/6381/redis.conf
1
修改几个配置
# 编辑拷贝的配置文件,,修改几个配置信息
vi ./node/6381/redis.conf
1
2
# 绑定的主机地址,建议填redis安装服务器的业务私网地址
# 这里为了方便直接找到这个配置注释了
#bind 127.0.0.1 -::1

# redis进程的端口号 默认是6379
port 6381

# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6381.pid

# log文件输出位置
logfile /usr/local/redis/redis-6.2.0/node/6381/redis.log

# 指定持久化存放目录(默认当前启动时所在目录),因为我这里是一台机器部署的要区分开每个节点持久化文件存放的目录
dir /usr/local/redis/redis-6.2.0/node/6381

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 123456

# 当master设置了密码保护时,slave服务连接master的密码
masterauth 123456

# 设置主机的 ip+ 端口,来指明主机的redis
replicaof 10.0.20.13 6379

# 配置从节点读写权限,支持参数[yes,no],yes:只读 no:支持读写操作,从节点默认yes
replica-read-only yes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
3.2、启动Redis主从复制集群
启动Redis
# 携带配置启动主节点6379
./bin/redis-server ./node/6379/redis.conf

# 携带配置启动从节点6380
./bin/redis-server ./node/6380/redis.conf
# 携带配置启动从节点6381
./bin/redis-server ./node/6381/redis.conf
1
2
3
4
5
6
7
查看各节点启动状态
# 查看redis进程,这里可以看到启动了三个进程
# 如果有进程没有启动成功可以去每个节点信息存储目录查看日志,分析异常原因
ps -aux | grep redis
1
2
3


3.3、查看Redis集群信息和主从复制效果
1、使用Redis自带redis-cli工具连接主节点查看集群信息
# 使用密码连接本机端口号为6379的redis
./bin/redis-cli -p 6379 -a 123456

# 查看集群信息
127.0.0.1:6379> info replication
1
2
3
4
5


2、在主节点写入数据
127.0.0.1:6379> set names kerwin
127.0.0.1:6379> get names
1
2


3、登录从节点查看集群信息和主节点写入的数据
# 使用密码连接本机端口号为6379的redis
./bin/redis-cli -p 6380 -a 123456

# 查看集群信息
127.0.0.1:6380> info replication
# 获取key为names的数据
127.0.0.1:6380> get names
1
2
3
4
5
6
7


3.4、关闭Redis
# 普通关闭,通过redis-cli的shutdown关闭
./bin/redis-cli -p 6379 -a 123456 shutdown

# 强制关闭
## 查看redis的进程pid,通过kill -9强制关闭
ps -aux | grep redis
kill -9 pid
1
2
3
4
5
6
7
四、搭建Redis三哨兵集群
本文使用一台主机部署,会使用不同端口区分哨兵,分别使用26379、26380、26381。

4.1、准备配置文件
先进入Redis解压目录,后续都在该目录下操作

cd /usr/local/redis/redis-6.2.0
1
4.1.1、准备节点26379配置文件
1、创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/sentinel/26379
1
2、拷贝一份sentinel.conf到./sentinel/26379中
cp sentinel.conf ./sentinel/26379/sentinel.conf
1
3、修改几个配置
vi ./sentinel/26379/sentinel.conf
1
#端口默认为26379。
port 26379

# 是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问,这里关闭保护模式设置为no。
protected-mode no

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端,终端关闭redis服务也会关闭)。
daemonize yes

#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26379.pid

#日志文件
logfile /usr/local/redis/redis-6.2.0/sentinel/26379/sentinel.log

#sentinel工作目录(默认/tmp)
dir /usr/local/redis/redis-6.2.0/sentinel/26379

# 指定Redis主节点主机IP地址和端口,ip根据实际情况调整,mymaster这个名称随便取,下面配置时也需要指定这个名称,客户端连接时也会使用
# 最后的2是指需要有2个以上sentinel节点认为redis主节点失效,才是真的失效,一般为(sentinel总数/2+1)
sentinel monitor mymaster 10.0.20.13 6379 2

# 配置连接密码,此处的密码需要与 redis.conf里面配置的连接密码一致
sentinel auth-pass mymaster 123456

# 这里设置了主机多少毫秒无响应,则认为挂了,,默认:30000毫秒
sentinel down-after-milliseconds mymaster 30000

# 主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs mymaster 1

#故障转移的超时时间毫秒,默认:180000毫秒
sentinel failover-timeout mymaster 180000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
4.1.2、准备节点26380配置文件
1、创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/sentinel/26380
1
2、拷贝一份26379的sentinel.conf到./sentinel/26380中,方便修改
cp ./sentinel/26379/sentinel.conf ./sentinel/26380/sentinel.conf
1
3、修改几个配置,这里因为是从26379拷贝过来的只需要修改端口和一些文件存储地址即可
vi ./sentinel/26380/sentinel.conf
1
#端口默认为26379。
port 26380

#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26380.pid

#日志文件
logfile /usr/local/redis/redis-6.2.0/sentinel/26380/sentinel.log

#sentinel工作目录(默认/tmp)
dir /usr/local/redis/redis-6.2.0/sentinel/26380
1
2
3
4
5
6
7
8
9
10
11
4.1.3、准备节点26381配置文件
1、创建一个目录用来存放节点配置和其它信息
mkdir -p /usr/local/redis/redis-6.2.0/sentinel/26381
1
2、拷贝一份26379的sentinel.conf到./sentinel/26381中,方便修改
cp ./sentinel/26379/sentinel.conf ./sentinel/26381/sentinel.conf
1
3、修改几个配置,这里因为是从26379拷贝过来的只需要修改端口和一些文件存储地址即可
vi ./sentinel/26381/sentinel.conf
1
#端口默认为26379。
port 26381

#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26381.pid

#日志文件
logfile /usr/local/redis/redis-6.2.0/sentinel/26381/sentinel.log

#sentinel工作目录(默认/tmp)
dir /usr/local/redis/redis-6.2.0/sentinel/26381
1
2
3
4
5
6
7
8
9
10
11
4.2、启动sentinel集群
启动sentinel
# 携带配置启动哨兵26379节点
./bin/redis-sentinel ./sentinel/26379/sentinel.conf
# 携带配置启动哨兵26380节点
./bin/redis-sentinel ./sentinel/26380/sentinel.conf
# 携带配置启动哨兵26381节点
./bin/redis-sentinel ./sentinel/26381/sentinel.conf
1
2
3
4
5
6
查看各节点启动状态
# 查看redis-sentinel进程,这里可以看到启动了三个进程
# 如果有进程没有启动成功可以去每个节点信息存储目录查看日志,分析异常原因
ps -aux | grep redis-sentinel
1
2
3


4.3、查看三个哨兵节点信息
# 使用redis-cli连接哨兵
./bin/redis-cli -p 端口
# 连接上后查看哨兵节点信息
127.0.0.1:26379> info sentinel
1
2
3
4
可以看到一个master主节点,两个salve节点状态,三个哨兵节点都正常


sentinel集群都启动完毕后,会将哨兵集群的元数据信息写入所有sentinel的配置文件里去(追加在文件的
最下面),可以打开一个查看一下。

vi ./sentinel/26379/sentinel.conf
1


4.4、测试哨兵容灾切换效果
1、模拟主节点宕机
# 通过redis-cli的shutdown关闭Redis主节点
./bin/redis-cli -p 6379 -a 123456 shutdown
1
2
# 确认主节点6379进程已经下线
ps -aux | grep redis-server
1
2


2、查看是否将从节点切换成主节点
# 查看6380和6381主从复制信息
./bin/redis-cli -p 6380 -a 123456 info replication
./bin/redis-cli -p 6381 -a 123456 info replication
1
2
3
这里可以看到主节点6379下线后,哨兵将6381切换成了主节点。


4.5、关闭Redis哨兵
# 普通关闭,通过redis-cli的shutdown关闭
./bin/redis-cli -p 端口号 shutdown

# 强制关闭
## 查看redis的进程pid,通过kill -9强制关闭
ps -aux | grep redis-sentinel
kill -9 pid
1
2
3
4
5
6
7
五、注意事项
5.1、远程连接问题
虽然Redis的配置中都开启了远程连接,但是服务器的端口可能没有开放远程连接,需要将Redis服务和哨兵的端口打开外部才能连接上,或者将防火墙关闭,这里是本地操作,如果是云服务器则需要设置对应安全组。

# 开放指定端口号
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
# 重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload
1
2
3
4

#检测防火墙状态 active (running),就是运行状态
systemctl status firewalld
# 停止防火墙
systemctl stop firewalld
# 永久关闭
systemctl disable firewalld
1
2
3
4
5
6
5.2、Redis节点注册到哨兵的IP问题

我们可以查看哨兵中Redis节点的IP,我这里使用的云服务器,哨兵中注册的Redis会使用到内网IP,可以自己ip addr查看一下,就是我们的内网卡,内网通过这个IP连接是没有问题的,但是外网肯定不能使用这个IP,会使用一个云服务给我们提供的外网IP,如果我们直接连接Redis服务,通过外网加6379端口肯定是没有问题的,但是我们外网别的应用中会通过连接到哨兵,然后通过哨兵获取Redis集群信息,也就是说我们通过哨兵获取到的Redis服务IP是服务器的内网IP,例如我这里获取到master节点IP就会是10.0.20.13这样一个内网地址,在外部网络是无法访问的。

六、SpringBoot集成Redis主从架构实现读写分离(哨兵模式)
跳转:https://blog.csdn.net/weixin_44606481/article/details/134017117


————————————————
版权声明:本文为CSDN博主「kerwin_code」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44606481/article/details/133990331

标签:Redis,redis,哨兵,usr,Linux,sentinel,local,节点
From: https://www.cnblogs.com/hanease/p/17862005.html

相关文章

  • Linux学习笔记 虚拟机的安装
    VMWare是当前最主流、应用最广泛的虚拟软件(来搭建虚拟环境)。它可以保证在一台现有的计算机操作系统上,模拟出一个新的硬件环境,以实现在一个电脑上真正同时运行两个OS。其官网为:www.vmware.com。在我看来:使用VMWare装的OS还可以同Windows主机进行网络通信的。安装VMWare的配置建议......
  • 发掘Linux中输入输出重定向的妙用
        在Linux系统中,输入输出重定向是一项强大的功能,为用户提供了更灵活的命令行操作和文件处理方式。本文将深入研究Linux中输入输出重定向的功能,探讨其基本概念、常见用法以及如何在命令行环境中充分发挥其优势。1.输入输出重定向基础首先,让我们回顾一下输入输出重定向......
  • Linux的进程状态
        在Linux操作系统中,进程状态是系统管理和性能优化中至关重要的一环。理解和有效地监控进程状态不仅是系统管理员的责任,也是确保系统稳定性和性能的关键。本文将深入研究Linux的进程状态,从基本概念到状态管理的方方面面1.进程基础知识首先,让我们回顾一下进程的基本概......
  • Linux I/O重定向与管道
    在生产环境中,每天凌晨需要备份数据库,这时工作人员会编写一个简单的脚本创建计划任务,把脚本执行结果放到一个或几个文件中以便第二天查看,这个过程就叫重定向。在使用"psaux"命令时,为了快速找到所需要信息,经常使用grep命令进行过滤,此时就需要使用管道符。I/O重定向   I/O运......
  • 我对linux的学习计划
     对于现在的我来说,现在还没有明确的从业方向,还在慢慢的摸索过程中,但无论以后做什么工作都需要不断的学习,对于计算机行业来说,新技术不断涌现,保持学习的态度,及时了解新的发展和趋势,不断更新自己的知识和技能。 千里之行,始于足下。任何东西基础是必须的。万丈高楼平地起,再高的大......
  • Linux 05
    第五章进程管理本章学习目标:1.了解进程的基本概念2.掌握查看进程的基本方法3.熟悉信号控制进程4.了解进程优先级原理5.了解作业控制一、初识进程1.1进程是已启动的可执行程序的运行实例。进程有一下组成部分。①已分配内存的地址空间。②安全属性,包括所有权凭据和特权......
  • Linux第八次博客
     这次博客主要还是讲存储管理,将前面没有讲清楚的地方和后面没讲的一起讲完了。 补充内容告诉了我们硬盘机和一些其他的dev表达式,如:IDE硬盘机为/dev/hd[a-d],SCSI/SATA/U盘硬盘机为/dev/sd[a-p],控制台为/dev/console,内存/dev/random。 随后就讲到创建系统文件,在终端输入mkf......
  • Linux文件查找,打包压缩及解压
    1.文件查找1.1which命令:which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。语法格式:which[参数]文件参......
  • linux提权
    LinuxPrivilegeEscalation机器信息收集拿到一个立足点可以执行简单命令后,对机器的一些信息收集hostname:主机名在某些情况下,它可以提供有关目标系统在企业网络中的角色的信息(例如用于生产SQL服务器的SQL-PROD-01)uname-a:linux内核版本等信息,对提权有用提供有关内核版本......
  • Linux解压文件指令
    一、ZIP解压1、把文件解压到当前目录下unzip文件名.zip2、如果要把文件解压到指定的目录下,需要用到-d参数。unzip-d目录文件名.zip3、解压的时候,有时候不想覆盖已经存在的文件,那么可以加上-n参数unzip-n文件名.zipunzip-n-d目录文件名.zip压缩的话同理:zip文件夹......