千家信息网

redis初探之主从与哨兵部署

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,一、单机版radis部署1、安装gccyum install gcc2、安装redistar -zxvf redis-3.2.9.tar.gz -C /usr/src/cd /usr/src/redi
千家信息网最后更新 2026年11月02日redis初探之主从与哨兵部署

一、单机版radis部署

1、安装gcc

yum install gcc

2、安装redis

tar -zxvf redis-3.2.9.tar.gz -C /usr/src/cd /usr/src/redis-3.2.9/makecd src && make install

3、创建redis目录存放命令和配置文件

mkdir -p /usr/local/redis/{etc,bin}

4、移动文件

cd /usr/src/redis-3.2.9/mv redis.conf /usr/local/redis/etccd srcmv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel redis-trib.rb /usr/local/redis/bin

5、配置环境变量

echo 'PATH=${PATH}:/usr/local/redis/bin/' >> /etc/profilesource /etc/profile

6、启动服务

启动redis服务需要指定配置文件的,后台启动的话需要修改redis.conf文件,daemonize no ---- >daemonize yes。redis服务端默认链接端口是6379,最好也将IP绑定为本机IP。

redis-server /usr/local/redis/etc/redis.conf 

7、客户端连接

redis-cli -h 192.168.118.137 -p 6379

8、停止redis服务

192.168.118.137:6379> shutdown或者:[root@node1 bin]# ps -ef|grep redisroot      49245   2816  0 10:39 pts/1    00:00:00 redis-server 127.0.0.1:6379root      49559   2816  0 10:59 pts/1    00:00:00 grep --color=auto redis[root@node1 bin]# kill -9 49245

二、主从复制

1、复制简述

redis的复制可以实现当一台数据库中的数据更新后,自动将新数据复制到其他数据库上;复制过程本身是异步的,也就是说,在有客户端对master执行写命令时,master在执行完命令后立即将结果返回客户端,并异步的将命令同步给slave,而不会等slave接收到命令在返回给客户端结果;这是一种乐观复制的策略,即容忍在一定时间内主从的数据不一致,但两者最终会数据同步,redis正是采用了乐观复制(optimistic replication)。

2、主从

redis分为两类,一类是主数据库(master),另一类是从数据库(slave)。master可以对数据进行读和写的操作,同时在有新的数据写入时,根据配置文件的设置将数据复制给slave,slave是只读的,所以一般对于数据库的写操作在master上,占据大量IO的读操作在slave上。

3、主从复制的原理

下面我们用一个图来讲解redis主从复制的过程。



Redis主从复制过程示意图


从上面的示意图可以看出,主服务器与从服务器建立连接之后,Redis主从复制过程主要有下面几步:
(1)从服务器都将向主服务器发送一个 SYNC 命令。
(2)主服务器接到 SYNC 命令后开启一个后台子进程并开始执行 BGSAVE,并在保存操作执行期间, 将所有新执行的写入命令都保存到一个缓冲区里面。
(3)当 BGSAVE 执行完毕后, 主服务器将执行保存操作所得的 .rdb 文件发送给从服务器, 从服务器接收这个 .rdb 文件, 并将文件中的数据载入到内存中。
(4)主服务器会以 Redis 命令协议的格式, 将写命令缓冲区中积累的所有内容都发送给从服务器。
从上面的主从复制过程中,有两个问题:一是当主从断开时BGSAVE操作是一次完整复制;二是每一次BGSAVE操作master都会将RDB文件保存在硬盘上,基于这两点,2.8以后的版本引入了无硬盘复制和增量复制

无硬盘复制:
redis的复制是基于RDB方式的持久化实现的,即master接到SYNC后保存RDB快照文件,并将rdb文件复制给slave。这种方式在复制初始化时需要在硬盘上创建RDB文件,当硬盘性能变低时,就会导致复制性能降低,所以无硬盘复制就是master不再保存RDB文件在硬盘上,而是直接将RDB文件网络传输给slave。

增量复制:
当主从数据库断开连接时,slave发送SYNC时,master会进行一次完整复制操作,这时可能总从数据库的数据基本一致,即使这样,也要将完整的rdb文件传给slave;这种情况下,增量复制可以让每次主从中断时不对数据进行全量复制,减少了资源消耗,提高了效率;设置为增量复制时,slave发送给master的是PSYNC命令。

4、主从复制的结构

最基础的redis主从是有一台主数据库,N台从数据库

不仅主服务器可以有从服务器, 从服务器也可以有自己的从服务器

图中的master会将数据同步至slave-master1和slave1,slave-master1会将数据同步至slave2和slave3,向slave-master1写入数据只会同步到slave2和slave3中,不会同步到master和slave1中。

三、主从部署

1、从数据库部署

重复第一步,并复制redis.conf为redis-repl.conf
redis配置一个从服务器非常简单, 只要在从服务器的配置文件redis-repl.conf中增加主服务器的IP地址和端口号就可以,如果主服务器设置了客户端密码,还需要在从服务器中配置主服务器的密码,如下

slaveof 192.168.118.137 6379
#masterauth 123456

2、启动从服务器

redis-server /usr/local/redis/etc/redis-repl.conf

3、主从验证


主可写,从可查

从不可写

slave上查看状态

四、redis-sentinel

在一个一主多从的redis系统中,slave在整个系统中起到了数据冗余备份和读写分离的作用,当master遇到故障,我们需要手动才能将slave切换为master,且需要将写的操作移到新的master上,这段时间的写数据都会丢失,为此,redis在2.8版本后提供了哨兵机制,顾名思义,哨兵的作用就是监控主从数据库以及哨兵自己,在master故障时自动切换。

Sentinel示意图

这是一个单哨兵监控的示意图,哨兵可以有多个,且哨兵之间互相监控

哨兵配置实例:

1、配置单机多端口主从

Master :192.168.118.141:6379Slave1:192.168.118.141:6380Slave2:192.168.118.141:6381

2、启动主从

[root@node1 etc]# redis-server /usr/local/redis/etc/redis.conf [root@node1 etc]# redis-server /usr/local/redis/etc/redis-6380.conf [root@node1 etc]# redis-server /usr/local/redis/etc/redis-6381.conf 

3、查看主从状态

[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6379192.168.118.141:6379> info replication# Replicationrole:masterconnected_slaves:2slave0:ip=192.168.118.141,port=6380,state=online,offset=85,lag=1slave1:ip=192.168.118.141,port=6381,state=online,offset=85,lag=1master_repl_offset:85repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:84

4、准备哨兵配置文件

[root@node1 etc]# cat sentinel.conf sentinel monitor mymaster 192.168.118.141 6379 1

5、哨兵配置文件

mymaster:监控的主数据库名,自定义192.168.118.141:监控的主数据库IP6379:监控的主数据库端口1:表示执行故障恢复操作前至少需要几个哨兵节点同意

6、开启哨兵

[root@node1 etc]# redis-sentinel sentinel.conf 60725:X 14 Mar 23:13:53.909 * Increased maximum number of open files to 10032 (it was originally set to 1024).                _._                                                             _.-``__ ''-._                                                   _.-``    `.  `_.  ''-._           Redis 3.2.9 (00000000/0) 64 bit  .-`` .-```.  ```\/    _.,_ ''-._                                    (    '      ,       .-`  | `,    )     Running in sentinel mode |`-._`-...-` __...-.``-._|'` _.-'|     Port: 26379 |    `-._   `._    /     _.-'    |     PID: 60725  `-._    `-._  `-./  _.-'    _.-'                                    |`-._`-._    `-.__.-'    _.-'_.-'|                                   |    `-._`-._        _.-'_.-'    |           http://redis.io          `-._    `-._`-.__.-'_.-'    _.-'                                    |`-._`-._    `-.__.-'    _.-'_.-'|                                   |    `-._`-._        _.-'_.-'    |                                    `-._    `-._`-.__.-'_.-'    _.-'                                         `-._    `-.__.-'    _.-'                                                 `-._        _.-'                                                         `-.__.-'                                               60725:X 14 Mar 23:13:53.915 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.60725:X 14 Mar 23:13:53.925 # Sentinel ID is fe3fb6bef25af9641e46f40f76a0e00fd491acbb60725:X 14 Mar 23:13:53.925 # +monitor master mymaster 192.168.118.141 6379 quorum 160725:X 14 Mar 23:13:53.927 * +slave slave 192.168.118.141:6380 192.168.118.141 6380 @ mymaster 192.168.118.141 637960725:X 14 Mar 23:13:53.928 * +slave slave 192.168.118.141:6381 192.168.118.141 6381 @ mymaster 192.168.118.141 6379

7、关闭主数据库:哨兵自动切换master

[root@node1 ~]# redis-cli -h 192.168.118.141 -p 6379192.168.118.141:6379> shutdownnot connected> [root@node1 ~]# redis-cli -h 192.168.118.141 -p 6380192.168.118.141:6380> info replication# Replicationrole:masterconnected_slaves:1slave0:ip=192.168.118.141,port=6381,state=online,offset=0,lag=1master_repl_offset:1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:2repl_backlog_histlen:0

参考文章:
redis官方:https://redis.io/documentation
菜鸟教程:http://www.runoob.com/redis/redis-tutorial.html

数据 服务 服务器 主从 文件 数据库 哨兵 命令 配置 硬盘 监控 客户 客户端 过程 同步 增量 示意图 故障 端口 切换 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 中国互联网科技工作委员会毛军 杭州互联网科技公司 互联网金融 科技创新 互联网科技美容 开启互联网科技时代小说 科技赋能互联网健康 中国科技互联网公司收入 互联网经济与金融科技 阿大互联网科技有限公司 米聚互联网科技南京有限公司排面 洛阳共同富裕互联网科技有限公司 科技大学互联网 2021互联网科技公司排名 互联网硬科技公司 云南互联网科技学费 互联网领先科技成果宣传视频 银川新华互联网科技学校招聘 现代科技的标志之一的互联网 广州全民伙伴互联网科技有限公司 关于新基建和互联网科技 麻工互联网科技 互联网的科技创新 紫鲸互联网科技 米客互联网科技 银川新华互联网科技职业技术培训学校图片 互联网公司黑科技创始人 容联科技互联网电商 互联网科技企业商标注意事项 恒生科技指数 中概互联网
0