redis+twemproxy+keepalive集群搭建

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
timeout 300

redis slave上修改/etc/redis.conf以下内容:

port 6379
bind 0.0.0.0
timeout 300
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: 300000
  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: 300000 
  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
# chkconfig: 2345 96 14
# description: shell init script for Linux.
# created by sdwang.
. /etc/init.d/functions
source /etc/bashrc
source /etc/profile
TWEMPROXY_HOME=/usr/local/twemproxy
export TWEMPROXY_HOME
start() {
$TWEMPROXY_HOME/sbin/nutcracker -d -c $TWEMPROXY_HOME/nutcracker.yml
}
stop() {
/usr/bin/pkill nutcracker
}
case "$1" in
  start)
    start
        ;;
  stop)
    stop
        ;;
  restart)
    stop
    start
        ;;
  version)
        exec $TWEMPROXY_HOME/sbin/nutcracker --version
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|version}"
        exit 1
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 300
    nb_get_retry 3
    delay_before_retry 3
    }
    }
    real_server 10.57.1.197 22122 {
    TCP_CHECK {
    connect_timeout 300
    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集群已经配置成功。





本文出自 “让一切随风” 博客,谢绝转载!

你可能感兴趣的:(redis,Web,cache)