redis复制和集群

配置redis的复制(主从)非常的简单,可以通过直接修改配置文件或使用SLAVEOF命令来完成。由于单个redis进程的内存管理能力有限,据相关方面的测算,单个redis进程内存超过20G之后,效率会急剧下降,他们给出的建议值是单个redis最好配置在8G以内,8G以上的redis缓存需求,通过twemproxy来提供支持。twemproxy是twitter开源的一套集群管理工具,可以用来搭建redis或memcached集群。
复制
1、通过修改配置文件实现Redis复制 配置文件开启slaveof项,指定master服务器的IP和监听端口。如果master实例设置有访问密码,还要开启masterauth 项,不过很少会为master实例设置密码。

1
slaveof 192.168.186.135 6379

然后启动slave实例就OK了。
查看master实例的复制信息,可以看到它目前有一个salve,可以看到slave的IP、端口等信息:

1
2
3
4
5
6
7
8
9
10
11
127.0.0.1:6379> info Replication 
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.186.136,port=6379,state=online,offset=12645,lag=1
master_repl_offset:12659
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:326
repl_backlog_histlen:12334
127.0.0.1:6379>

查看slave实例的复制信息,可以看到它目前连接到的master,可以看到master的IP等信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
127.0.0.1:6379> info Replication 
# Replication
role:slave
master_host:192.168.186.135
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:12967
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:115
repl_backlog_histlen:238
127.0.0.1:6379>

2、通过SLAVEOF命令动态实现redis的复制: SLAVEOF host port 命令,将master转变成salve或为salve指定新的master。

1
2
3
127.0.0.1:6379> SLAVEOF 192.168.186.135 6380 
OK
127.0.0.1:6379>

返回值总是“OK”所以还要查看下当前实例的复制信息 info replication,检测配置正确性。
SLAVEOF NO ONE 关闭slave的复制功能,并将实例从slave转变成master(redis的默认是master)。

1
2
3
127.0.0.1:6379> SLAVEOF no one 
OK
127.0.0.1:6379>

返回值总是“OK”所以还要查看下当前实例的复制信息 info replication,检测配置真确性。
当前的配置只是存在于内存中,重启失效。可以使用CONFIG REWRITE命令将当前的配置写到配置文件。
关于CONFIG命令的解释如下:
CONFIG GET parameter:
用于取得运行中的Redis服务器的配置参数(configuration parameters),在 Redis 2.4 版本中, 有部分参数没有办法用CONFIG GET访问,但是在最新的 Redis 2.6 版本中,所有配置参数都已经可以用CONFIG GET 访问了,CONFIG GET * 查看所有配置参数。
CONFIG RESETSTAT:
动态地调整 Redis 服务器的配置(configuration)而无须重启。
CONFIG REWRITE:
对启动 Redis 服务器时所指定的 redis.conf 文件进行改写: 因为 CONFIG SET 命令可以对服务器的当前配置进行修改, 而修改后的配置可能和 redis.conf 文件中 所描述的配置不一样, CONFIG REWRITE 的作用就是通过尽可能少的修改, 将服务器当前所使用的配置记录到 redis.conf 文件中。
CONFIG RESETSTAT:
重置 INFO 命令中的某些统计数据,包括:
Keyspace hits (键空间命中次数)
Keyspace misses (键空间不命中次数)
Number of commands processed (执行命令的次数)
Number of connections received (连接服务器的次数)
Number of expired keys (过期key的数量)
Number of rejected connections (被拒绝的连接数量)
Latest fork(2) time(最后执行 fork(2) 的时间)
The aof_delayed_fsync counter(aof_delayed_fsync 计数器的值)

集群
使用twitter开源twemproxy搭建redis集群。
1、安装autoconf
twemproxy的安装要求autoconf的版本在2.64以上,而系统(CentOS 6.4)自带的autoconf的版本就是2.63,不满足要求。

1
2
3
4
$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz 
$ tar xvfz autoconf-2.69.tar.gz
$ cd autoconf-2.69
$ ./configure && make && make install

2、安装twemproxy

1
2
3
4
5
6
7
8
9
10
$ wget https://github.com/twitter/twemproxy/archive/v0.4.0.tar.gz
$ mv v0.4.0 twemproxy.tar.gz
$ tar xvfz twemproxy.tar.gz
$ cd twemproxy-0.4.0/
#用新编译的autoreconf生成configure文件
$ ~/autoconf-2.69/bin/autoreconf -fvi
$ ./configure --prefix=/usr/local/twemproxy
$ make && make install
#将提供的配置模板拷贝到twemproxy安装目录
$ cp -rp conf /usr/local/twemproxy/

twemproxy的配置参数详解:
https://github.com/twitter/twemproxy

3、配置文件举例

1
2
3
4
5
6
7
8
9
10
11
12
redis01: 
listen: 127.0.0.1:22122
hash: fnv1a_64
hash_tag: "{}"
distribution: ketama
auto_eject_hosts: true
redis: true
server_retry_timeout: 3000
server_failure_limit: 1
servers:
- 127.0.0.1:6379:1
- 127.0.0.1:6380:1

4、启动服务

1
2
$ /usr/local/twemproxy/sbin/nutcracker -c /usr/local/twemproxy/conf/nutcracker01.yml -d 
$

-d 以守护进程运行
-c 指定配置文件,默认配置文件是conf/nutcracker.yml 更多的参数用
-h 参数查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ./nutcracker -h 
This is nutcracker-0.3.0

Usage: nutcracker [-?hVdDt] [-v verbosity level] [-o output file]
[-c conf file] [-s stats port] [-a stats addr]
[-i stats interval] [-p pid file] [-m mbuf size]
Options:
-h, --help : this help
-V, --version : show version and exit
-t, --test-conf : test configuration for syntax errors and exit
-d, --daemonize : run as a daemon
-D, --describe-stats : print stats description and exit
-v, --verbosity=N : set logging level (default: 5, min: 0, max: 11)
... ... ... ... ... ...

用redis-cli连接twemproxy监听的22122端口,测试服务:

1
2
3
4
5
6
$ ./redis-cli -p 22122 
127.0.0.1:22122> set v1 1
OK
127.0.0.1:22122> get v1
"1"
127.0.0.1:22122>
----------------本文结束 感谢阅读----------------