千家信息网

Redis-3.2主从复制与集群搭建

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,一、Redis 主从搭建1.下载并解压yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl wget http://download.redis.i
千家信息网最后更新 2026年11月02日Redis-3.2主从复制与集群搭建

一、Redis 主从搭建

1.下载并解压

yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl wget  http://download.redis.io/releases/redis-3.2.4.tar.gztar -zxvf redis-3.2.4.tar.gzcd redis-3.2.4make cd src && make test && make installmkdir /etc/rediscp ../redis.conf /etc/redis/redis.conf

2.系统参数调优

vim /etc/sysctl.confnet.core.somaxconn = 20480  #最大队列长度,应付突发的大并发连接请求,默认为128net.ipv4.tcp_max_syn_backlog = 20480  #半连接队列长度,此值受限于内存大小,默认为1024vm.overcommit_memory = 10 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。1 允许分配超出物理内存加上交换内存的请求2 内核总是返回truesysctl -p  #加载生效参数

3.配置文件说明

3.1 后台运行

daemonize yes

3.2 bind地址监听

默认bind的填写的127.0.0.1这样配置是只允许本地访问bind 0.0.0.0

3.3 日志配置

logfile "/var/log/redis.log"

3.4 服务启动脚本

vim /etc/init.d/redis# chkconfig: 2345 90 10# description: service of redis for start and stop add by tomener PATH=/usr/local/bin:/sbin:/usr/bin:/binREDISPORT=6379EXEC=/usr/local/bin/redis-serverREDIS_CLI=/usr/local/bin/redis-cli PIDFILE=/var/run/redis_6379.pidCONF="/etc/redis/redis.conf"AUTH="Passwd"BIND_IP='0.0.0.0'case "$1" in        start)                if [ -f $PIDFILE ]                then                       echo "$PIDFILE exists, process is already running or crashed."                else                       echo "Starting Redis server..."                       $EXEC $CONF                fi                if [ "$?"="0" ]                then                       echo "Redis is running..."                fi                ;;        stop)                if [ ! -f $PIDFILE ]                then                       echo "$PIDFILE exists, process is not running."                else                       PID=$(cat $PIDFILE)                       echo "Stopping..."                       $REDIS_CLI -h $BIND_IP -a $AUTH -p $REDISPORT  SHUTDOWN                       sleep 2                       while [ -x $PIDFILE ]                       do                               echo "Waiting for Redis to shutdown..."                               sleep 1                       done                       echo "Redis stopped"                fi                ;;         restart|force-reload)                ${0} stop                ${0} start                ;;         *)                echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2                exit 1esac
chkconfig redis on    #设置开机自启动service redis restart    #启动服务

3.5 设置密码

编辑配置文件/etc/redis/redis.conf,重启生效

requirepass redispwd  redis-cli -p 6379 -a redispwd            #连接数据库需要-a参数输入密码

3.6 备份恢复

使用命令查看备份目录,此目录为服务启动时候的目录,恢复可以将文件存放到此目录下,重启启动redis服务,既可完成rdb数恢复。

CONFIG GET dir           #查看备份目录save                 #执行备份

4.Redis持久化

4.1 rdb方式

工作原理:

当redis生成dump.rdb文件时,工作过程如下:

redis主进程fork一个子进程,fork出来的子进程将内存的数据集dump到临时的RDB中

当子进程对临时的RDB文件写入完毕,redis用新的RDB文件代替旧的RDB文件

默认配置如下:

save 900 1save 300 10save 60 10000

其意义:

当1个key更新值时每900秒保存一次数据到硬盘

当10个key更新值时每300秒保存一次到硬盘

当10000个key更新值时每60秒保存一次到硬盘

4.2 aof方式

aof本质是redis操作(写操作)日志文件。aof默认是未开启的,需要在配置文件中进行设置,在配置文件中将这一行改为appendonly yes就可以了。

工作原理:

AOF :append only file。

每当Redis执行一个改变数据集的命令时,这个命令都会被追加到AOF文件的末尾。

当redis重新启动时,程序可以通过AOF文件恢复数据。

三种appedn方式:

appendfsync alwaysappendfsync everysecappendfsync no

appendfsync always每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全

appendfsync everysec每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。

appendfsync no从不 fsync :将数据交给操作系统来处理。更快,也更不安全的选择。

推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

aof能够保证数据的安全,但是在重启时比较耗时,而且aof文件的体积比rdb文件大。

5.Redis主从复制

5.1 概述

Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份。具有以下特点:

  • 异步复制,从2.8版本开始,slave能不时地从master那里获取到数据。

  • 允许单个master配置多个slave,易横向扩展

  • slave允许其它slave连接到自己。一个slave除了可以连接master外,它还可以连接其它的slave。形成一个图状的架构。

  • master在进行replication时是非阻塞的,这意味着在replication期间,master依然能够处理客户端的请求。

  • slave在replication期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定slave是否在进行replication时用旧数据响应客户端的请求,如果配置为否,那么slave将会返回一个错误消息给客户端。不过当新的数据接收完全后,必须将新数据与旧数据替换,即删除旧数据,在替换数据的这个时间窗口内,slave将会拒绝客户端的请求和连接。

  • 一般使用replication来可以实现扩展性,例如说,可以将多个slave配置为"只读",或者是纯粹的数据冗余备份。

  • 能够通过replication来避免master每次持久化时都将整个数据集持久化到硬盘中。只需把master配置为不进行持久化操作(把配置文件中持久化相关的配置项注释掉即可),然后连接上一个slave,这个slave则被配置持久化选项。不过需要注意的是,在这个方案中,必须确保master不会自动启动。

5.2 安全性

Master持久化功能关闭时Replication的安全性当有需要使用到replication机制时,一般都会强烈建议把master的持久化开关打开。即使为了避免持久化带来的延迟影响,不把持久化开关打开,那么也应该把master配置为不会自动启动的。

5.3 replication工作原理

为如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个SYNC命令给master请求复制数据。

master收到SYNC命令后,会在后台进行数据持久化,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份数据集发送给slave,slave会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。

当master与slave之间的连接由于某些原因而断开时,slave能够自动重连master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,支

5.4 主从配置

与replication相关的配置比较简单,只需要把下面一行加到slave的配置文件中:

slaveof masterIPaddress 6379

如果master通过requirepass配置项设置了密码,slave每次同步操作都需要验证密码,可以通过在slave的配置文件中添加以下配置项:

masterauth

6 常用命令

启动redis:

redis-server /etc/redis/redis.conf

客户端命令工具

/usr/local/bin/redis-cli -h 192.168.1.1192.168.1.1:6379> auth Passwd           #登录,密码验证192.168.1.1:6379>info               #查看数据库状态192.168.1.1:6379>info replication            #查看slave的复制状态192.168.1.1:6379>set key 123          #插入数据192.168.1.1:6379>keys *            #列出数据flushdb                    #清空当前数据flushall                   #清除所有数据库


7.测试主从及切换

7.1 主从测试



7.2主从切换

停止主


切换从为主

redis-cli -h localhost slaveof NO ONE

恢复原来主数据库

将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录

启动原来的主redis


在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379

测试从已经切换回来



二、Redis 集群搭建

Redis高版本使用ruby实现了集群,所以需要ruby环境,安装ruby环境和redis的gem接口后,就可以使用redis的redis-trib.rb脚本创建集群。

Redis安装成功后,创建单独目录

mkdir /usr/local/redis/cluster -p

再在其下创建目录 7000、7001、7002、7003

mkdir /usr/local/redis/cluster/7000 -pcp redis.conf /usr/local/redis/cluster/7000/

将redis.conf分别拷贝到这几个目录下面,并分别修改redis.conf 中的端口号port和目录名一致

分别修改配置文件

daemonize    yes                          //redis后台运行pidfile  /var/run/redis_7000.pid              //pidfile文件对应7000,7002,7003port  7000                                //端口7000,7002,7003cluster-enabled  yes                        //开启集群  把注释#去掉cluster-config-file  nodes_7000.conf          //集群的配置  配置文件首次启动自动生成 7000,7001,7002cluster-node-timeout  5000                  //请求超时  设置5秒够了appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志


查看服务是否已经起来


2.安装相关软件包

yum -y install ruby ruby-devel rubygems rpm-build

再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包

gem install redis

如果安装失败,可手动安装

wget https://rubygems.global.ssl.fastly.NET/gems/redis-3.2.1.gemsudo gem install -l ./redis-3.2.1.gem

3.redis-trib.rb脚本创建集群

cd /root/redis-3.2.4/src./redis-trib.rb create --replicas 1 172.17.10.191:7000 172.17.10.191:7001 172.17.107005 172.17.10.191:7006

--replicas 1 表示 自动为每一个master节点分配一个slave节点



./redis-trib.rb check 172.17.10.191:7000


4.测试

redis-cli -c -p 7000

设置数据,然后停止7000端口监听的redis

登录其他,查看获取数据。




数据 配置 文件 命令 内存 目录 客户 主从 集群 安全 备份 数据库 密码 端的 切换 服务 多个 日志 硬盘 进程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 互联网科技有限公司图片 金诺互联网科技 西安互联网科技 互联网 的科技创新 互联网科技革命 浩特互联网科技 鑫亿盛互联网科技 互联网 新科技 衡水科技产业互联网平台 青岛中康互联网医疗科技有限公司 欧洲十大科技互联网公司 岳阳华臻互联网科技有限公司 知域互联网科技有限公司大骗子 链环科技传统企业怎么转型互联网 深圳艾果互联网通讯科技 工业互联网展湾科技股份有限公司 山东子淼互联网科技有限公司 江苏苏星互联网科技有限公司 中天科技中国工业互联网 深圳九邦互联网科技有限公司 华宇互联网科技 互联网未来科技 奇酷互联网络科技公司 联恩商钥互联网科技有限公司 济南和联互联网科技有限公司 阿里互联网科技公司 杭州壁岐互联网科技有限公司 宇信科技在杭州互联网排第几 数字科技和互联网金融哪个好
0