Redis 集群搭建
集群概览
我准备创建一个由 2 个分片组成的 redis 集群,这 2 个分片由 2 台服务器承载,分别是 172.17.32.105,172.17.32.106,每台服务器上运行 2 个 redis 实例,其监听端口分别为 6379 和 6380,其中,6379 为 master,6380 为 slave,通过 redis 自带的主从复制功能进行数据的同步,为了提高可用性,同一个分片的 master 和 slave 不能运行在同一台服务器上,top 结构如下图(图中箭头表示主从复制的方向)

这样的结构可以保证任意一台服务器故障,整个集群依然可以提供服务
准备工作
组件
一个可用的 zookeeper 集群,可以自己搭建,也可以使用公司的开发环境,这里使用公司开发环境
各个组件的安装包
Twemproxy.tar.gz 及 twemproxy 库文件
Redis-zoo-watchdog-centos-64.tar.gz
redis-2.6.16.tar.gz
解释一下
twemproxy:这是一个 redis 代理,其主要功能就是在多个 redis 节点和访问者之间做路由分发:访问者不需要自己判断某个 key 该存储到哪一个 redis 节点或者该到哪个节点去获取某个 key 的值——这是一个负载均衡组件
watchdog:监控 redis 节点的状态,并在主节点故障时启用从节点——这是一个高可用组件
zookeeper 节点
redis 集群环境基于 zookeeper,需要先手工创建所需的节点,假定要创建一个名为 icd 的 redis 集群
/redis/proxy/icd
这个节点是给 twemproxy 使用的,保存的是 proxy 的 ip 和 端口
/redis/cluster/icd/
这个节点是给 watchdog 使用的,根据 redis 分片数量,在下面创建对应的节点
/redis/cluster/icd/redis-0000, /redis/cluster/icd/redis-0001
我们的 redis 集群由 2 个分片组成,所以创建了 2 个 zk 节点,节点下是组成该分片的 master,slave 的连接信息;节点本身还存储了权重信息
安装 twemproxy 库文件
解压缩 Twemproxylibso-centos-64.tar.gz
该操作会解压缩 libso 目录到当前目录下,然后将该目录下所有文件复制到 /usr/include/lib
修改 /etc/ld.so.conf,添加 /usr/include/lib(注意新起一行),然后执行 ldconfig
redis
安装
配置
redis 的配置文件是 redis.conf,为了搭建一个高可用的集群,我们将创建 4 个 redis 节点,分别运行在 2 台服务器上
172.17.32.105
master(105) 节点
slave(106) 节点
172.17.32.106
master(106) 节点
slave(105) 节点
现在在 172.17.32.105 上,我们创建 2 个 redis 配置文件,如下
master 和 slave 的配置文件都从默认的配置文件复制而来,然后修改如下配置即可
在 redis 目录下创建 master 和 slave 子目录,分别作为 master 和 slave 的工作目录,然后对于 master 和 slave 的配置,各自修改为如下值
172.17.32.106 的操作类似
启动
先要创建日志目录
然后分别先后启动 master 和 slave,注意 master 和 slave 在不同服务器上
watchdog
安装
将 Redis-zoo-watchdog.tar.gz 解压缩到 redis-zoo-watchdog 目录下
配置
修改 zoo-watchdog.conf 配置
这个配置文件很简单,不解释了
启动
我们已经在 zk 上创建了 /redis/cluster/icd/redis-0000 和 /redis/cluster/icd/redis-0001,这 2 个 zk 节点各自保存一组 master 和 slave 的信息,那么要启动运行在 127.17.32.105 上的一组 master & slave,如下
现在到 zk 上查一下看看
twemproxy
安装
配置
在 conf 目录下已经有一些配置文件了,这里我们创建自己的配置文件 icd.yml
在 172.17.32.105 上的配置文件内容如下
启动
在 172.17.32.106 上也启动 proxy 后,看下 zk
验证
使用你的代码读写几个不同的 redis key,然后分别登录上面的 4 个 redis 节点,感受 proxy 的分发和 redis 的同步复制是否生效
参考文档
Redis集群HA
Redis单实例HA方案
Last updated