主从功能:

为了防止 Redis 磁盘损坏,导致数据丢失,Redis 提供了复制功能,将一个主数据库的数据自动同步到从数据库,防止数据丢失。
同时还可以配置一主多从来分担主压力,主只接受写的操作,将读的操作给从来实现;其中从库也可以接受其它从库的同步请求。
如果主、从因为网络原因出现连接断开,网络正常后从可以自动连接主,连接成功后主会将完整的数据同步一次给从,保证数据一致性。

主从原理:

1、从数据库启动后,向主数据库发送 SYNC 命令
2、主数据库收到 SYNC 命令后开始保存快照,在此期间所有发给主数据库的命令都被缓存起来
3、快照保存完后,主数据库把快照和缓存的命令一起发给从数据库
4、从数据库保存主数据发来的快照文件,并依次执行主数据库发来的缓存命令

在同步过程中,主、从数据库都不会阻塞:

-----> 主库可以继续接受客户端提交的查询或修改请求;
-----> 从库默认使用同步之前的数据继续响应客户端发来的命令

一、配置 Redis 主从

## 这里可以使用一台服务器启动两个 Redis 服务,只需指定不同的配置文件,不同的端口即可
## 为了加入防火墙规则,我使用两台服务器来完成

Redis Master :192.168.1.88
Redis Slave :192.168.1.80

1、Redis Master ( 这里不写安装过程了,写到 Slave 位置 )

[root@master ~]# vim /usr/local/redis/redis.conf

daemonize yes
port
timeout
loglevel verbose
pidfile /usr/local/redis/logs/redis.pid
logfile /usr/local/redis/logs/redis.log requirepass redispassword
databases save
save
save
rdbcompression yes
dbfilename dump.rdb dir /usr/local/redis/data/ appendonly no
appendfilename appendonly.aof
appendfsync everysec no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb [root@master ~]# redis-server /usr/local/redis/redis.conf [root@master ~]# netstat -anpt | grep redis
tcp 0.0.0.0: 0.0.0.0:* LISTEN /redis-server [root@master ~]# iptables -I INPUT -s 192.168.1.80 -p tcp --dport -j ACCEPT

2、Redis Slave

下载地址:https://code.google.com/p/redis/downloads/list

[root@slave ~]# cd /usr/local/src/
[root@slave src]# tar zxf redis-2.6..tar.gz
[root@slave src]# cd redis-2.6.
[root@slave redis-2.6.]# make ; make install [root@slave ~]# mkdir /usr/local/redis
[root@slave ~]# cd !$
cd /usr/local/redis
[root@slave redis]# cp ../src/redis-2.6./redis.conf .
[root@slave redis]# cp ../src/redis-2.6./src/redis-cli .
[root@slave redis]# cp ../src/redis-2.6./src/redis-server .
[root@slave redis]# cp ../src/redis-2.6./src/redis-sentinel .
[root@slave redis]# cp ../src/redis-2.6./src/redis-benchmark .
[root@slave redis]# cp ../src/redis-2.6./src/redis-check-aof .
[root@slave redis]# cp ../src/redis-2.6./src/redis-check-dump . [root@slave redis]# echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
[root@slave redis]# sysctl vm.overcommit_memory=
[root@slave redis]# mkdir data logs
[root@slave redis]# vim redis.conf daemonize yes
port
timeout
loglevel verbose
pidfile /usr/local/redis/logs/redis.pid
logfile /usr/local/redis/logs/redis.log #requirepass redispassword
databases save
save
save
rdbcompression yes
dbfilename dump.rdb dir /usr/local/redis/data/ appendonly no
appendfilename appendonly.aof
appendfsync everysec no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb masterauth redispassword
slaveof 192.168.1.88

## 直接复制 Master 的配置文件,添加最后两行即可

[root@slave ~]# redis-server /usr/local/redis/redis.conf

[root@slave ~]# netstat -anpt | grep redis
tcp 0.0.0.0: 0.0.0.0:* LISTEN /redis-server
tcp 192.168.1.80: 192.168.1.88: ESTABLISHED /redis-server

## 可以看到启动成功,并且建立了一条到 Master 的连接

[root@slave ~]# ls /usr/local/redis/data/
dump.rdb

## data 目录下也有了 master 同步过来的数据( 虽然主库并没有写入数据 )

二、测试 Redis 主从

[root@master ~]# redis-cli -a redispassword
redis 127.0.0.1:> keys *
(empty list or set)
redis 127.0.0.1:> set name wang
OK
redis 127.0.0.1:> set id
OK
redis 127.0.0.1:> keys *
) "id"
) "name"
redis 127.0.0.1:> quit

## 这是在 master 上的操作,-a 指定认证密码

[root@slave ~]# redis-cli
redis 127.0.0.1:> keys *
) "id"
) "name"
redis 127.0.0.1:> get name
"wang"
redis 127.0.0.1:> get id
""
redis 127.0.0.1:> set cc
(error) READONLY You can't write against a read only slave.
redis 127.0.0.1:> quit

## 这是在从上的操作,其中 slave 没有设密码所以不用 -a 指定,可以查到同步过来的 keys ,因为要保持数据一致性,所以不能写入。
## 如果在主执行 del name 那么从上的 name 也被删除。
## 主从同步完成 !

Redis 主从同步配置的更多相关文章

  1. redis主从同步配置

    主服务器无需操作,从服务器 SLAVEOF 主服务器IP 端口 即可. 断开主从,执行 SLAVEOF NO ONE 即可. 同事和我在内网配置了连内网测试的服务器可以执行,但是连对方的不行,开始以为 ...

  2. redis主从同步故障切换及集群配置

    一.redis是一中高性能的缓存数据库, 原理:1. 从服务器向主服务器发送 SYNC 命令.2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下 ...

  3. Redis系列之(二):Redis主从同步,读写分离

    1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...

  4. redis 主从同步

    修改redis.conf配置文件 vi redis.conf 在编辑模式下 输入  /slaveof 来搜索 将slaveof启用 即 将#删除 依次配置所有 slave 并将进程 kill 掉 重启 ...

  5. Redis系列之(二):Redis主从同步,读写分离(转)

    1. Redis主从同步 Redis支持主从同步.数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制. 2. 配置主从同步 Mater Slave的模式,从Slave向Maste ...

  6. Redis主从环境配置

    1.Redis主从同步原理 redis主服务器会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,然后将数据文件同步给从服务器,从服务器加载记录文件,在内存库中更新新数据. 2.VMWar ...

  7. Redis主从同步分析(转)

    一.Redis主从同步原理 1.1 Redis主从同步的过程 配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接 ...

  8. 15.6,redis主从同步

    redis主从同步 原理:1. 从服务器向主服务器发送 SYNC 命令.2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下来执行的所有写命令.3 ...

  9. Redis主从同步分析

    一.Redis主从同步原理1.1 Redis主从同步的过程配置好slave服务器连接的master后,slave会建立和master的连接,然后发送sync命令.无论是第一次同步建立的连接还是连接断开 ...

随机推荐

  1. HDU5880 Family View ac自动机第二题

    Steam is a digital distribution platform developed by Valve Corporation offering digital rights mana ...

  2. 用eclipse打包可执行的jar(含第三方jar包)

    在eclipse中的解决方式如下: 在工程目录下(与src同层)建立lib目录,将第三方Jar包放到这个目录里(copy,paste即可)[如果直接引用本地的jar,一旦换电脑就呵呵了...] 右击工 ...

  3. VSCode插件开发

    VSCode插件开发全攻略(十)打包.发布.升级 发布方式 插件开发完了,如何发布出去分享给他人呢?主要有3种方法: 方法一:直接把文件夹发给别人,让别人找到vscode的插件存放目录并放进去,然后重 ...

  4. sailsjs 不用写代码就能生成rest api 代码

    1. 脚手架安装 npm install sails -g     2. 生成基本项目 a. 项目 sails new appdemo b. 创建api sails new api demoapi a ...

  5. Gixy Nginx 配置分析工具

    项目简介 Gixy 是一款用来分析 Nginx 配置的工具. Gixy 的主要目标是防止安全配置错误,并自动进行缺陷检测. 目前支持的 Python 版本是 2.7 和 3.5+ . 免责声明:Gix ...

  6. (转)如何制作nodejs,npm “绿色”安装包

      摘自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=8625039&id=3817492       由于公司环境 ...

  7. 抽象工厂模式(abstract)创建型模式

    (一)简单工厂模式? 现在的学习是面向对象面向接口的,但是执行时的操作需要实例化后的对象.随着我们需要的类的增加,我们就需要把这些共同的东西提取出来,放在一个抽象类中,让这些子类来继承抽象类.当我们调 ...

  8. mac下导出JetBrains IDE Support插件给linux

    自从google被和谐以后,上google的store安装插件是如此的费劲,好在mac下的chrome已经装好了,直接导出给linux就可以 mac下chrome的插件目录为 ~/Library/Ap ...

  9. [模板]LCA的倍增求法解析

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  10. (转)Java调用SQL Server的存储过程详解

    本文转载自:http://dev.yesky.com/128/8088128.shtml 1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序 ...