主从功能:

为了防止 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. ballerina 学习六 xml && json

    ballerina xml && json 参考使用 代码比较简单,使用起来还是比较方便的 xml 代码说明: import ballerina/io; function main ( ...

  2. 解决openoffice进程异常退出的办法:

    实现以守护进程,定时检测openoffice是否退出,如果进程不存在,通过脚本将openoffice起起来即可.   具体操作步骤: 第一步: 将openoffice.sh脚本放置在root目录下面, ...

  3. Web 漏洞分析与防御之 CSRF(二)

    原文地址:Web 漏洞分析与防御之 CSRF(二) 博客地址:http://www.extlight.com 一.全称 跨站请求伪造(Cross-site Request Forgery) 二.原理 ...

  4. Linq 分组(group by)后列变行

    表一: 表二: 已知表一的List,想得到表二的结果: var query = from c in t.AsEnumerable() group c by new { pingming = c.Fie ...

  5. ORACLE用户的加锁、解锁

    在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用户解锁的操作方法,通过几条简单的解锁语句就能完成此项工作.下面是具体的过程: 默认的scott用户是 ...

  6. cocos2dx 3.0 编译工程

    下载完2dx,运行setup.py,参考设置ANDROID_SDK,NDK_ROOT,ANT_ROOT变量 创建工程 cocos new testGame -p com.game.test -l cp ...

  7. 算法提高 P1001【大数乘法】

    当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果 ...

  8. Netty--JDK序列化编解码传输对象

    使用JDK序列化不需要额外的类库,只需要实现Serializable即可,但是序列化之后的码流只有Java才能反序列化,所以它不是跨语言的,另外由于Java序列化后码流比较大,效率也不高,所以在RPC ...

  9. linux安装oracle12c

    参考: https://blog.csdn.net/who__are__you_/article/details/79178303 记录:

  10. java web 程序--注册页面/HashMap的用法。。要懂啊

    思路:1.一个form表单,用户输入后,提交 2.第二个是注册页面,主要是用Map.先假设往map里面拿东西,然后判断是否为空  若为空,new 一个HashMap它的子类,然后通过map.conta ...