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 的同步复制是否生效

参考文档

Last updated