文章目录

  • Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?
    • 配置环境
    • 构建 RedisSharding1
      • 安装 Redis
      • 配置 RedisSharding1
    • 构建 RedisSharding2
      • 安装 Redis
      • 配置 RedisSharding2
    • 构建 Sentinel Cluster
      • 配置 Sentinel
      • 启动 Sentinel
    • 构建 Twemproxy Cluster
      • 安装 Twemproxy
      • 配置 Twemproxy
      • 启动 Twemproxy
      • 测试 Twemproxy
    • 构建 Keepalived Cluster
      • 安装 Keepalived
      • 配置 Keepalived
        • 配置 Twemproxy 检测脚本
        • 配置 Keepalived Master 节点
        • 配置 Keepalived Backup 节点
      • 启动 Keepalived
      • 观察虚拟 IP
      • 测试 Redis 的连接
      • 测试虚拟 IP 的漂移
      • 再次测试 Redis 的连接
    • Twemproxy + Sentinel 组合架构的优点
    • Twemproxy + Sentinel 组合架构的缺点

Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?

使用 Sentinel 构建的主从复制架构,能够实现高可用,但是不能解决单个 Redis 节点的数据量过大的问题,如果单个 Redis 节点的数据量过大,主机内存过载,那么就需要使用 Redis 的集群架构来将数据进行分片处理,使其分布在不同的物理机上面,使其能够做到容量的扩展。

可以使用 Twemproxy + Sentinel 组合的架构方式,对 Redis 构建高可用的集群。以下图为例,开始一步一步的构建一种 Redis 的高可用集群。

配置环境

以下配置,仅仅表示我的配置环境,读者可以根据自己的环境进行配置。

注意:需要把主机的防火墙关闭。

  • 四台 Linux 主机(CentOS 7 版本),ip 分别为 10.211.55.5,10.211.55.6,10.211.55.7,10.211.55.8。
  • 在每台主机上安装 Redis(3.2.12 版本),可以使用 yum 进行安装。
  • 在 10.211.55.6 和 10.211.55.7 主机上安装 Twemproxy(0.5.0 版本)。
  • 在 10.211.55.6 和 10.211.55.7 主机上安装 Keepalved (1.3.5 版本)。

构建 RedisSharding1

在主机 10.211.55.5 和 10.211.55.6 节点上安装并配置 Redis 主从节点。

安装 Redis

请参考 Redis 如何配置读写分离架构(主从复制)?篇中的安装 Redis 步骤。

配置 RedisSharding1

# 在 10.211.55.5 主机上登陆 Redis 控制台,执行 slaveof 命令
slaveof 10.211.55.6 6379# 或者编辑 10.211.55.5 的 /etc/redis.conf 配置文件添加如下配置
vim /etc/redis.conf
slaveof 10.211.55.6 6379# 重启从节点 Redis 服务
systemctl restart redis

构建 RedisSharding2

在主机 10.211.55.7 和 10.211.55.8 节点上安装并配置 Redis 主从节点。

安装 Redis

请参考 Redis 如何配置读写分离架构(主从复制)?篇中的安装 Redis 步骤。

配置 RedisSharding2

# 在 10.211.55.8 主机上登陆 Redis 控制台,执行 slaveof 命令
slaveof 10.211.55.7 6379# 或者编辑 10.211.55.5 的 /etc/redis.conf 配置文件添加如下配置
vim /etc/redis.conf
slaveof 10.211.55.7 6379# 重启从节点 Redis 服务
systemctl restart redis

构建 Sentinel Cluster

分别在主机 10.211.55.5,10.211.55.6,10.211.55.7 上进行 Sentinel 的配置,配置步骤如下:

配置 Sentinel

# 新建配置文件,并写入下列配置
vim /etc/redis-sentinel-26379.confport 26379sentinel monitor redis-sharding1 10.211.55.6 6379 2
sentinel down-after-milliseconds redis-sharding1 5000
sentinel failover-timeout redis-sharding1 60000
sentinel parallel-syncs redis-sharding1 1sentinel monitor redis-sharding2 10.211.55.7 6379 2
sentinel down-after-milliseconds redis-sharding2 5000
sentinel failover-timeout redis-sharding2 60000
sentinel parallel-syncs redis-sharding2 1# 保存配置并退出编辑

在上述配置文件中,sentinel 监控两个 Redis 主从节点,命名为 redis-sharding1 和 redis-sharding2。

启动 Sentinel

# 调用 Sentinel 启动命令
nohup redis-sentinel /etc/redis-sentinel-26379.conf > /dev/null 2>&1 &

构建 Twemproxy Cluster

分别在主机 10.211.55.6 和 10.211.55.7 节点安装并配置 Twemproxy Cluster。这里说 Cluster 并不妥当,实际上为主备架构。

安装 Twemproxy

# 这里将安装包下载 /opt 目录中,并进行编译安装
cd /opt
wget https://github.com/twitter/twemproxy/releases/download/0.5.0/twemproxy-0.5.0.tar.gz
tar -xvf twemproxy-0.5.0.tar.gz
cd /opt/twemproxy-0.5.0
./configure
make && make install

配置 Twemproxy

# 进入安装目录
cd /opt/twemproxy-0.5.0# 创建配置文件,并添加如下配置
vim conf/nutcracker-redis-cluster.ymlredis-cluster:listen: 0.0.0.0:22121hash: fnv1a_64distribution: ketamaauto_eject_hosts: trueredis: trueserver_retry_timeout: 2000server_failure_limit: 1servers:- 10.211.55.6:6379:1- 10.211.55.7:6379:1

启动 Twemproxy

# 启动 Twemproxy 实例
nutcracker -d -c /opt/twemproxy-0.5.0/conf/nutcracker-redis-cluster.yml

测试 Twemproxy

# 测试 10.211.55.6 主机的 Twemproxy
redis-cli -h 10.211.55.6 -p 22121# 测试 10.211.55.7 主机的 Twemproxy
redis-cli -h 10.211.55.7 -p 22121

构建 Keepalived Cluster

分别在主机 10.211.55.6 和 10.211.55.7 节点安装并配置 Keepalived Cluster,并以 10.211.55.10 为虚拟的 ip 对外提供服务。

安装 Keepalived

yum -y install keepalived

配置 Keepalived

配置 Twemproxy 检测脚本

分别在主机 10.211.66.6,10.211.66.7 节点上配置如下 Twemproxy 的检测脚本。

# 创建 check_nutcracker.sh 脚本
mkdir /usr/local/etc/twemproxy# 编辑 check_nutcracker.sh 文件
vim /usr/local/etc/twemproxy/check_nutcracker.sh# 添加如下内容
#!/bin/bashps -C nutcracker
if [[ $? -eq 0 ]];thenexit 0
elseexit 1
fi# 保存退出,并给该文件可执行的权限
chmod +x /usr/local/etc/twemproxy/check_nutcracker.sh

配置 Keepalived Master 节点

在主机 10.211.66.6 节点上按照如下要求配置 Master 节点

# 在 /etc/keepalived 目录中创建 keepalived-twemproxy.conf 配置文件
vim /etc/keepalived/keepalived-twemproxy.conf# 写入如下配置
global_defs {vrrp_garp_interval 0vrrp_gna_interval 0script_user rootenable_script_security
}vrrp_script check_nutcracker {script "/usr/local/etc/twemproxy/check_nutcracker.sh"interval 10weight -20
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 47priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.211.55.10}track_script {check_nutcracker}
}

配置 Keepalived Backup 节点

在主机 10.211.66.7 节点上按照如下要求配置 Backup 节点

# 在 /etc/keepalived 目录中创建 keepalived-twemproxy.conf 配置文件
vim /etc/keepalived/keepalived-twemproxy.conf# 写入如下配置
global_defs {vrrp_garp_interval 0vrrp_gna_interval 0script_user rootenable_script_security
}vrrp_script check_nutcracker {script "/usr/local/etc/twemproxy/check_nutcracker.sh"interval 10weight -10
}vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 47priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {10.211.55.10}track_script {check_nutcracker}
}

注意:在配置 Keepalived 节点时,需要关注网卡接口名,也就是上述配置的 interface 后面的值,可以使用 ifconfig 自行查看。

启动 Keepalived

分别在主机 10.211.66.6,10.211.66.7 节点上执行如下命令启动 Keepalived。

keepalived -f /etc/keepalived/keepalived-twemproxy.conf# 可以通过 tail -f /var/log/messages 观察 Keepalived 日志

观察虚拟 IP

# 在 10.211.66.6 执行如下命令
ip a# 可以看到虚拟 ip(10.211.55.10) 在 10.211.66.6 节点上面
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000...inet 10.211.55.6/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0valid_lft 1302sec preferred_lft 1302secinet 10.211.55.10/32 scope global eth0valid_lft forever preferred_lft forever...# 在 10.211.66.6 执行如下命令,发现没有虚拟 ip
ip aeth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000...inet 10.211.55.7/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0valid_lft 1249sec preferred_lft 1249sec...

测试 Redis 的连接

redis-cli -h 10.211.55.10 -p 22121

测试虚拟 IP 的漂移

通过虚拟 ip 地址的漂移,来达到 Twemproxy 的高可用。可以通过如下命令来进行模拟

# 在 10.211.66.6 节点执行如下命令:
pkill -9 -f nutcracker# 在 10.211.66.6 执行 ip a,可以观察到 10.211.66.10 地址已经漂移走了
ip aeth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000...inet 10.211.55.6/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0valid_lft 1458sec preferred_lft 1458sec...# 在 10.211.66.7 执行 ip a,可以观察到 10.211.66.10 地址已经漂移过来
ip aeth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000...inet 10.211.55.7/24 brd 10.211.55.255 scope global noprefixroute dynamic eth0valid_lft 1733sec preferred_lft 1733secinet 10.211.55.10/32 scope global eth0valid_lft forever preferred_lft forever...

再次测试 Redis 的连接

# 执行如下命令,发现 Redis 的连接依然可用
redis-cli -h 10.211.55.10 -p 22121

Twemproxy + Sentinel 组合架构的优点

  • 通过 Sentinel 能够做到 Redis 节点的失效救援。
  • 配置简单且 Twemproxy 具有高并发的能力。
  • 能够均衡 Redis 的负载,提高 Redis 的吞吐能力。
  • 通过 Twemproxy 配置多个 Redis 节点,能够显著提高单节点容量的限制。

Twemproxy + Sentinel 组合架构的缺点

  • Twemproxy 实际上会给 Redis 带来一定的性能损耗。
  • Twemproxy 无法很好解决 Redis 扩容的问题,添加或者减少 Redis 节点时,不能够自动进行节点数据的再分配。
  • 需要使用 Keepalived 来解决 Twemproxy 单点的问题,给系统增加了复杂度。

Redis 如何使用 Twemproxy 和 Sentinel 构建高可用集群架构?相关推荐

  1. RabbitMQ 构建高可靠集群架构

    主备模式和主从模式的区别? 主备模式:主节点读写,从节点读写都不可,作为备胎,启动切换,主备相互转换,主节点可能变成从节点,从节点有一天会变成主节点,有点备胎的意思.一主多备. 主从模式:主节点读写, ...

  2. Java SaaS高可用集群架构与微服务架构分析

    可能大部分读者都在想,为什么在这以 dubbo.spring cloud 为代表的微服务时代,我要还要整理这种已经 "过时" 高可用集群架构? 本人工作上大部分团队都是 7-15 ...

  3. 现阶段Java高可用集群架构与微服务架构的简单分析

    一.如何选择 1.高可用集群 适用于中小型创业公司项目架构,小型技术团队快速迭代版本发布部署需求,前期低成本运行,爆发时可通过投入适量成本横向扩容服务器抗压. 特点: 前期技术开发成本低 一定的服务器 ...

  4. 安排,谷粒商城java分布式开发基础篇高级篇与高可用集群架构篇2020

    来源: 来自网络,如侵权请告知博主删除????. 仅学习使用,请勿用于其他- 最近有小伙伴管我要分布式这类的项目,还有一些要商城的,还有要springboot,springcloud,k8s等,几乎涵 ...

  5. RocketMQ的组织架构和基本概念,Dledger高可用集群架构原理

    文章目录 1. MQ产品介绍 2. rocketMQ组织架构 ①:NameServer ②:Broker ③:生产者(Producer) ④:消费者(Consumer) ⑤:主题(Topic) ⑥:消 ...

  6. 企业中MySQL高可用集群架构三部曲之MM+keepalived

    各位老铁们,老张与大家又见面了.看到各位在博客里面给我的留言和访问量的情况,我很是欣慰,也谢谢大家对我的认可.我写这些博客,就是想把自己对于MySQL数据库的一些看法和自己平时的实战经验分享出来,我们 ...

  7. K8S高可用集群架构部署 dashborad插件部署 Nginx实现动静分离 K8S在线升级

    K8S官方文档 注意:该集群每个master节点都默认由kubeadm生成了etcd容器,组成etcd集群.正常使用集群,etcd的集群不能超过一半为down状态. docker的namespace: ...

  8. MYSQL高可用集群架构——MHA架构

    MHA高可用集群 文章目录 一.MHA 简介: 二.部署 MHA: 第一步:三台主从服务器安装 mysql 第二步:修改 mysql 的主配置文件:/etc/my.cnf ,注意三台服务器的 serv ...

  9. Redis基础与高可用集群架构进阶详解

    一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...

最新文章

  1. 一个简单的缓冲区溢出的思考
  2. 户籍改革更进一步!我国将推动户籍准入年限同城化累计互认
  3. 投影仪和电脑连接故障
  4. VSCode开发.NETCore项目入门(1)设置中文语言环境
  5. DEFINE_PER_CPU
  6. 小米登录协议分析_性能测试篇之Loadrunner与ida工具结合完成java vuser协议的脚本...
  7. MySQL日常应用操作记录
  8. 帮你防沉迷、为你打call、解救路痴,一文看懂Google I/O 2018
  9. Visual Studio Tip 之 如何查看隐形的空格(white space)和制表符(tab)
  10. IP地址 0.0.0.0 是什么意思?
  11. 【简单python爬虫】爬取豆瓣电影Top250的基本信息
  12. 5.23低版本到高版本问题
  13. Linux下常用软件大比拼
  14. Mysql 不包含某个字符
  15. 英语12种记忆单词的方法
  16. 【EXLIBRIS】随笔记 008
  17. 未转变者服务器tp指令大全,Unturned未转变者3.21版本高级指令大全
  18. Photoshop文字之——制作晶莹剔透胶体特效
  19. ea测试软件,在EA测试过程中,如何获得99.9%的数据质量,提高EA测试的准确性?...
  20. 简易的js获取星期几的两种方法

热门文章

  1. 第13课 形变之城--故事卡--听我说
  2. 限定IE浏览器的网址验证域失败解决方案
  3. 电商厂搬砖码农的工作生活体验
  4. 表格中json数据展示
  5. 别再吐槽明日之后了,玩了这些国产末日生存手游你会感谢网易的
  6. 微信小程序口红项目新手练习Day2
  7. 微信小程序口红项目新手练习Day1
  8. python程序输出日历
  9. d你好Arduino
  10. Linux磁盘的分区操作