redis集群简介:
Redis集群是一个实现分布式并且允许单点故障的Redis高级版本。
Redis集群没有最重要或者说中心节点,这个版本最主要的一个目标是设计一个线性可伸缩(可随意增删节点?)的功能。
Redis集群为了数据的一致性可能牺牲部分允许单点故障的功能,所以当网络故障和节点发生故障时这个系统会尽力去保证数据的一致性和有效性。(这里我们认为节点故障是网络故障的一种特殊情况)
为了解决单点故障的问题,我们同时需要masters 和 slaves。 即使主节点(master)和从节点(slave)在功能上是一致的,甚至说他们部署在同一台服务器上,从节点也仅用以替代故障的主节点。 实际上应该说 如果对从节点没有read-after-write(写并立即读取数据 以免在数据同步过程中无法获取数据)的需求,那么从节点仅接受只读操作。
twemproxy简介:
twemproxy,也叫nutcraker。是一个twtter开源的一个redis和memcache代理服务器。 redis作为一个高效的缓存服务器,非常具有应用价值。但是当使用比较多的时候,就希望可以通过某种方式 统一进行管理。避免每个应用每个客户端管理连接的松散性。同时在一定程度上变得可以控制。 搜索了不少的开源代理项目,知乎实现的python分片客户端。node的代理中间层,还有各种restfull的开源代理。
服务器系统:CentOS 6.5 x86_64
服务器架构:
10.57.1.127 twemproxy master,redis master 10.57.1.197 twemproxy slave,redis slave 10.57.1.111 keepalived
服务版本:
redis: 2.4.10 keepalived: 1.2.8 autoconf: 2.69 twemproxy: 0.4.0
一、redis
1、在redis master和redis slave主机上安装redis
先安装epel源
yum -y localinstall http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y install redis
redis master上修改/etc/redis.conf以下内容:
port 6379 bind 0.0.0.0
redis slave上修改/etc/redis.conf以下内容:
port 6379 bind 0.0.0.0 slaveof 10.57.1.127 6379
2、启动redis服务
/etc/init.d/redis restart
3、验证redis服务
登录到redis master服务器,执行
redis-cli -h 10.57.1.127 -p 6379 info|grep role
如果显示
role:master
登录到redis slave服务器,执行
redis-cli -h 10.57.1.197 -p 6379 info|grep role
如果显示
role:slave
说明redis的master/slave已经完成配置
二、twemproxy
1、在redis master和redis slave主机上安装twemproxy
首先去下载最新的twemproxy,在github上面找到最新版本
git clone https://github.com/twitter/twemproxy.git cd twemproxy/ CFLAGS="-ggdb3 -O0" autoreconf -fvi && ./configure --prefix=/usr/local/twemproxy --enable-debug=log make make install /usr/local/twemproxy/bin/nutcracker -t nutcracker: configuration file ‘conf/nutcracker.yml‘ syntax is ok cp conf/nutcracker.yml /usr/local/twemproxy
2、配置twemproxy master
vim /usr/local/twemproxy/nutcracker.yml redis1: listen: 0.0.0.0:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: true servers: - 10.57.1.127:6379:1 server1 # redis实例的ip,端口,权重 - 10.57.1.197:6379:1 server2
3、配置twemproxy slave
vim /usr/local/twemproxy/nutcracker.yml redis2: listen: 0.0.0.0:22122 hash: fnv1a_64 hash_tag: "{}" distribution: ketama auto_eject_hosts: true timeout: 400 redis: true servers: - 10.57.1.127:6379:1 server1 # redis实例的ip,端口,权重 - 10.57.1.197:6379:1 server2
4、使用twemproxy启动脚本启动twemproxy master、twemproxy slave
vim /etc/init.d/redis-twemproxy #!/bin/bash source /etc/profile; function Stop() { /usr/bin/pkill nutcracker } function Start() { /usr/local/twemproxy/sbin/nutcracker -d -c /usr/local/twemproxy/nutcracker.yml } case $1 in stop) Stop ;; start) Start ;; *) echo "Usage: `basename $0` {stop|start}" ;; esac
5、redis测试服务
执行
redis-cli -h 10.57.1.127 -p 22122 redis-cli -h 10.57.1.197 -p 22122
如果没有报错,说明成功!
三、keepalived
1、在keepalived主机上安装keepalived和ipvsadm
yum -y install keepalived ipvsadm
2、配置keepalived
vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtp.yeah.net smtp_connect_timeout 30 router_id redis_twemproxy } vrrp_instance VIP_1 { interface eth0 state MASTER virtual_router_id 55 priority 100 virtual_ipaddress { 10.57.1.101 } } virtual_server 10.57.1.101 6379 { delay_loop 3 lb_algo wrr lb_kind DR protocol TCP sorry_server 127.0.0.1 22122 real_server 10.57.1.127 22122 { TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 10.57.1.197 22122 { TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
3、启动keepalived
/etc/init.d/keepalived start
4、验证keepalived
ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.57.1.101:6379 wrr -> 10.57.1.127:22122 Route 1 0 0 -> 10.57.1.197:22122 Route 1 0 0
说明keepalived配置成功
5、测试一下10.57.1.101的6379端口是否畅通
nc -nvz -w 5 10.57.1.101 6379 Connection to 10.57.1.101 6379 port [tcp/*] succeeded!
显示succeeded表明已成功
redis集群已经配置成功。