主从功能:

为了防止 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. HDU3652 B-number 数位DP第二题

    A wqb-number, or B-number for short, is a non-negative integer whose decimal form contains the sub- ...

  2. 每天一个linux命令(性能、优化):【转载】vmstat命令

    vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深 ...

  3. POJ3696 The Windy's 【网络流】

    #include<iostream> #include<vector> #include<cstring> #include<algorithm> #i ...

  4. IOS SEL (@selector) 原理及使用总结(一)

    SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...

  5. Django 打印

    转自:http://bbs.chinaunix.net/archiver/tid-1227401.html fentin 发表于 2008-07-28 17:52:44 请教Django Python ...

  6. 洛谷P1309 瑞士轮

    传送门 题目大意: 2*n个人,有初始的比赛分数和实力值. 每次比赛前总分从大到小排序,总分相同编号小的排在前面. 每次比赛是1和2比,3和4比,5和6比. 实力值大的获胜得1分. 每次比赛前排序确定 ...

  7. psd文件导出为图片教程

    美术给过来PSD文件好多层啊.怎么挨个把需要的图片导出来呢. 1. 选中 要导出的图片的图层 2.ctrl+N 新建个文档  然后把图片拉到 新的里面 然后点图像-裁剪 确定就行了,然后ctrl+s保 ...

  8. 给 odoo 的 bom 明细加上位置字段

    给 odoo 的 bom 明细加上位置字段 odoo 的 BOM 明细没有位置字段,这可无法用于电子生产中. 摸索了几天,找了一些教程,最终实现了. 在模型中找到 mrp_bom_line 增加自定义 ...

  9. 关于angular的好文推荐

    独立作用域篇 1)http://www.angularjs.cn/A09C 2)http://www.cnblogs.com/wangmeijian/p/4944030.html 理解$watch , ...

  10. Ubuntu 16.04 配置安卓5.1编译环境

    Ubuntu 16.04版本 电脑cpu必须是64位 硬盘分配大约100G的空间 1.ubuntu中更新源 $ sudo apt-get update 2.安装 openjdk-8-jdk $ sud ...