当前位置: > 数据库 > NoSQL >

配置 redis 主从复制一例

时间:2014-09-08 21:47来源:linux.it.net.cn 作者:it

本文介绍redis主从复制的安装与配置,并对配置文件做了比较详细的注释,初学者可以参考学习下。

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

Redis的主从复制的配置很简洁,而且支持多级Master/Slave,比如B是A的slave,C是B的Slave。
下面以单台机器为例说明。

Master/Slave配置

一个Redis服务实例需要一个配置文件,因此启动slave,只需要复制master的配置文件,然后做少量修改即可。假设master监听1010端口,slave监听2020端口,假设复制好的slave的配置文件名为slave.conf。
修改slave.conf以下两项的值
port 2020
dbfilename slave.rdb
在slave.conf加入
slaveof 127.0.0.1 1010 (这个表示,他是127.0.0.1 1010的slave服务)
启动master和slave,然后写入数据到master,读取slave,可以看到数据被复制到slave了。
用途:数据备份,读写分离等等

Redis 性能( 摘自官方测试描述 )

在 50 个并发的情况下请求 10w 次,写的速度是 110000
次/s,读的速度是 81000 次/s
测试环境:
1. 50 个并发,请求 100000 次
2. 读和写大小为 256bytes 的字符串
3. Linux2.6 Xeon X3320 2.5GHz 的服务器上
4. 通过本机的 loopback interface 接口上执行

Redis介绍

redis是一个key/value内存数据库,数据可以异步复制到磁盘,性能非常高,都知道memcached的性能很好,redis的读写能力不逊于memcached,甚至还要强。除此外,redis具有memcached的很多没有的强大特性。memcached数据无法持久化,全部是纯内存模式,不支持主从复制,数据的操作接口很有限。相同的是,两者的负载均衡策略都一样,客户端基于一致性哈希选择服务器。redis的支持的数据类型和数据操作很丰富,他的值可以是 string(字符串)、list(列表)、sets(集合)或者是 ordered sets(被排序的集合),所有的数据类型都具有 push/pop、add/remove、执行服务端的并集、交集、两个 sets 集中的差别等等操作,这些操作都是具有原子性的,Redis 还支持各种不同的排序能力。

Redis 安装及配置

下载 Redis:wget http://redis.googlecode.com/files/redis-2.0.0-rc4.tar.gz
james@james-desktop: ~/src]$ tar xvzf redis-2.0.0-rc4.tar.gz
james@james-desktop: ~/src]$ cd redis-2.0.0-rc4
james@james-desktop: ~/src/redis-2.0.0-rc4]$ make
james@james-desktop: ~/src/redis-2.0.0-rc4]$ mkdir ~/redis-2.0.0
james@james-desktop: ~/src/redis-2.0.0-rc4]$cp redis-server ~/redis-2.0.0
james@james-desktop: ~/src/redis-2.0.0-rc4]$cp redis-benchmark ~/redis-2.0.0
james@james-desktop: ~/src/redis-2.0.0-rc4]$cp redis-cli ~/redis-2.0.0
james@james-desktop: ~/src/redis-2.0.0-rc4]$cp redis.conf ~/redis-2.0.0
james@james-desktop: ~/src/redis-2.0.0-rc4]$ cd ~/redis-2.0.0/

配置 redis.conf 配置文件:

复制代码代码如下:

#是否作为守护进程运行 
daemonize yes

#配置 pid 的存放路径及文件名,默认为当前路径下 
pidfile redis.pid

#Redis 默认监听端口 
port 6379

#客户端闲置多少秒后,断开连接 
timeout 300

#日志显示级别 
loglevel verbose

#指定日志输出的文件名,也可指定到标准输出端口 
logfile stdout

#设置数据库的数量,默认连接的数据库是 0,可以通过 select N 来连接不同的数据库 
databases 16

#保存数据到 disk 的策略 
#当有一条 Keys 数据被改变是,900 秒刷新到 disk 一次 
save 900 1

#当有 10 条 Keys 数据被改变时,300 秒刷新到 disk 一次 
save 300 10

#当有 1w 条 keys 数据被改变时,60 秒刷新到 disk 一次 
save 60 10000

#当 dump .rdb 数据库的时候是否压缩数据对象 
rdbcompression yes

#dump 数据库的数据保存的文件名 
dbfilename dump.rdb

#Redis 的工作目录 
dir /home/falcon/redis-2.0.0/

########### Replication ##################### 
#Redis 的复制配置 
# slaveof <masterip> <masterport> 
# masterauth <master-password>

############## SECURITY ########### 
# requirepass foobared

############### LIMITS ############## 
#最大客户端连接数 
# maxclients 128 
#最大内存使用率 
# maxmemory <bytes>

########## APPEND ONLY MODE ######### 
#是否开启日志功能 
appendonly no 
# 刷新日志到 disk 的规则 
# appendfsync always 
appendfsync everysec 
# appendfsync no

################ VIRTUAL MEMORY ########### 
#是否开启 VM 功能 
vm-enabled no 
# vm-enabled yes 
vm-swap-file logs/redis.swap 
vm-max-memory 0 
vm-page-size 32  
vm-pages 134217728 
vm-max-threads 4

############# ADVANCED CONFIG ############### 
glueoutputbuf yes 
hash-max-zipmap-entries 64 
hash-max-zipmap-value 512 
#是否重置 Hash 表 
activerehashing yes

启动 Redis
james@james-desktop: ~/redis-2.0.0$ ./redis-server redis.conf

(责任编辑:IT)
------分隔线----------------------------