千家信息网

redis主从同步与读写分离

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、原理Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面是关于redis主从复制的一些
千家信息网最后更新 2026年11月01日redis主从同步与读写分离

一、原理

Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构。下面是关于redis主从复制的一些特点:

1.master可以有多个slave。

2.除了多个slave连到相同的master外,slave也可以连接其他slave形成图状结构。

3.主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。

4.主从复制可以用来提高系统的可伸缩性,我们可以用多个slave 专门用于client的读请求,比如sort操作可以使用slave来处理。也可以用来做简单的数据冗余。

5.可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

二、主从复制过程

当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连 接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命 令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。

三、配置与应用

1)redis安装

(1)下载redis

# wget http://download.redis.io/releases/redis-3.0.7.tar.gz

(2)解压安装

# tar zxvf redis-3.0.7.tar.gz# cd redis-3.0.7# make PREFIX=/data/server/redis install

(3)配置redis

①:创建redis配置文件目录并拷贝配置文件至此目录

# mkdir -p /data/server/redis/etc# cp redis.conf  /data/server/redis/etc

②:设置redis运行方式为后台运行

# sed -i 's/daemonize no/daemonize yes/g' /data/server/redis/etc/redis.conf

③:下载redis init 启动文件至 init.d 目录下,并赋予权限.

# wget -c http://soft.vpser.net/lnmp/ext/init.d.redis -O /etc/init.d/redis# chmod 755 /etc/init.d/redis

④:创建redis日志目录及日志存放文件

# mkdir /data/server/redis/logs# touch /data/server/redis/logs/redis.log

⑤:创建pid目录与数据存储目录

# mkdir /data/server/redis/run# mkdir /data/server/redis/db

⑥:修改 vim /etc/init.d/redis 启动文件中文件path


2)redis主从同步配置

(1)Master服务器端:

# grep -v '^#' redis.conf |grep -v '^$'                      daemonize yes pidfile /data/server/redis/run/redis.pid#定义端口port 1234#绑定IPbind 10.10.10.2timeout 300 loglevel notice#指定日志目录logfile /data/server/redis/logs/redis.logdatabases 16#配置持久化(rdb模式)save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yes#定义数据文件和目录dbfilename master.rdbdir /data/server/redis/dbslave-serve-stale-data yesslave-read-only yesslave-priority 100appendonly noappendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mblua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb60client-output-buffer-limit pubsub 32mb 8mb 60

(2)slave服务器端

# grep -v '^#' redis.conf |grep -v '^$' daemonize yes pidfile /data/server/redis/run/redis.pidport 1234 bind 10.10.10.3timeout 300 loglevel noticelogfile /data/server/redis/logs/redis.log databases 16save 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename slave.rdbdir /data/server/redis/db slaveof 10.10.10.2 1234         #指定master的地址slave-serve-stale-data yesslave-read-only yesslave-priority 100appendonly noappendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mblua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-entries 512list-max-ziplist-value 64set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit slave 256mb 64mb60client-output-buffer-limit pubsub 32mb 8mb 60

(3)启动redis服务

Master:

# /data/server/redis/bin/redis-server /data/server/redis/etc/redis.conf# tail -fn100 /data/server/redis/logs/redis.log  //检查日志是否有报错

Slave:

# /data/server/redis/bin/redis-server /data/server/redis/etc/redis.conf# tail -fn100 /data/server/redis/logs/redis.log  //检查日志是否有报错

(4)检查redis主从同步

master:

redis-m > set data zhangsanredis-m > get data

slave:

redis-s > get data

注:由于在配置文件中配置了slave-read-only yes,因此从节点处于只读状态,无法对数据库进行操作和更改.

附件:http://down.51cto.com/data/2368174
文件 数据 配置 目录 主从 同步 多个 命令 日志 服务 数据库 服务器 进程 后台 处理 检查 强大 相同 同时 快照 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 有格互联网科技 厦门中拓互联网络科技有限公司 小马过河互联网科技 亿账通互联网科技 互联网金融 科技创新 撒么互联网科技公司 一五八零互联网科技 成都仁贤领冠互联网科技有限公司 济南和联互联网科技有限公司 互联网科技热点资讯 阿里互联网科技公司 荆州市昕露互联网络科技有限公司 互联网科技产业特征 宜昌元轩互联网科技有限公司 996高科技互联网公司 江苏互联网科技小贷 兰石爱特工业互联网科技分公司 美国五大互联网科技公司市值多少 黑龙江互联网科技公司 六子台科技互联网展会 互联网金融 金融科技 互联网女皇 腾讯科技 阿里巴巴算科技企业还是互联网 湖南一路畅行互联网科技 深圳市优智互联网科技有限公司 科技互联网行业投资研究 互联网对科技影响 青岛互联网科技园 优雇互联网科技有限公司 每日互联网科技新闻
0