前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何部署 Redis 集群

如何部署 Redis 集群

原创
作者头像
大数据弄潮儿
修改2018-10-30 16:41:01
8.3K0
修改2018-10-30 16:41:01
举报

Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Redis集群。本文参考了Rdis的官方文档和使用Redis官方提供的Redis Cluster工具搭建Rdis集群。

本教程将指导你在CVM上搭建Redis集群。你需要拥有云服务器并对防火墙知识有一定的了解。如果您还没有腾讯云的服务器,可以先点击这里进行免费套餐的试用。免费套餐包含企业版和个人版,超过11款热门产品和42款长期免费的云产品可以供您选择。如果您有长期搭建服务器的需求的话,可以点击这里进行服务器的购买,现在的促销力度很大哦。

在每个CVM上安装Redis

根据您的Linux版本,可以通过包管理器安装Redis。只有Redis 3.0及更高版本支持群集。以下步骤用于安装最新的Redis稳定分支。

  1. 安装依赖项:
sudo apt-get update && sudo apt-get upgrade
sudo apt install make gcc libc6-dev tcl

注意 您也可以使用build-essential加载Redis的依赖项。

  1. 从文档中,下载当前的稳定分支,然后提取:
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
sudo make install
  1. 运行以下命令确保安装成功:
make test

如果安装成功,控制台将输出:

\ o /所有测试都没有错误!

  1. 对群集中每个服务器重复以上步骤。

配置主节点和从节点

本指南在三个CVM上手动连接每个主节点和从节点。考虑使用tmux来管理多个终端窗口。

虽然官方文档建议创建六个节点,但本指南将使用具有以下拓扑的最少三个节点:

此设置使用三个CVM,每个CVM运行两个Redis服务器实例。您必须确保每个主机都是独立的,然后在需要维护正常运行时间要求时考虑使用其他节点。

  1. SSH到服务器1。导航redis-stable/然后复制redis.conf。本指南中的配置文件的命名与上图一致:
cp redis.conf c_slave.conf
  1. a_master.conf,注释该bind指令并启用集群模式。此示例中的端口范围为6379到6381。
  • /redis-stable/a_master.conf
1 # bind 127.0.0.1
2 protected-mode no
3 port 6379
4 pidfile /var/run/redis_6379.pid
5 cluster-enabled yes
6 cluster-config-file nodes-6379.conf
7 cluster-node-timeout 15000

警告 Redis群集中的节点需要定义的端口和高于10000的端口。在此实例中,TCP端口6379和16379都需要打开。确保正确配置iptables或ufw。

  1. c_slave.conf,除了更新端口号之外,其他配置将与前面的配置类似。redis-trib.rb稍后将使用它将其配置为适当主设备的从设备,而不是slaveof指令。
  • /redis-stable/c_slave.conf
1 # bind 127.00.1
2 protected-mode no
3 port 6381
4 pidfile /var/run/redis_6381.pid
5 cluster-enabled yes
6 cluster-config-file nodes-6381.conf
7 cluster-node-timeout 15000
  1. 在剩余的两个CVM上重复此过程,注意指定所有主从对的端口号。

服务器

1

6379

6381

2

6380

6379

3

6381

6380

连接主和从属

通过在每个节点上运行Redis服务器的两个实例,可以跨三个节点实现主/从复制。

  1. SSH到服务器1并启动两个Redis实例。
redis-server redis-stable/a_master.conf
redis-server redis-stable/c_slave.conf
  1. 替换剩余的两台服务器a_master.confc_slave.conf并使用适当的配置文件。所有主节点都应以群集模式启动。
    • 服务器1
 1                      _._
 2                 _.-``__ ''-._
 3            _.-``    `.  `_.  ''-._           Redis 4.0.1 (00000000/0) 64 bit
 4        .-`` .-```.  ```\/    _.,_ ''-._
 5       (    '      ,       .-`  | `,    )     Running in cluster mode
 6       |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 7       |    `-._   `._    /     _.-'    |     PID: 10352
 8       `-._    `-._  `-./  _.-'    _.-'
 9       |`-._`-._    `-.__.-'    _.-'_.-'|
10       |    `-._`-._        _.-'_.-'    |           http://redis.io
11       `-._    `-._`-.__.-'_.-'    _.-'
12       |`-._`-._    `-.__.-'    _.-'_.-'|
13       |    `-._`-._        _.-'_.-'    |
14       `-._    `-._`-.__.-'_.-'    _.-'
15           `-._    `-.__.-'    _.-'
16               `-._        _.-'
17                   `-.__.-'

使用内置Ruby脚本创建集群

此时,每个CVM都托管两个独立的主节点。Redis安装附带一个Ruby脚本~/redis-stable/src/,可以帮助创建和管理集群。

  1. 如果尚未安装Ruby,可以在包管理器中找到它:
sudo apt install ruby
  1. 安装Redis gem:
gem install redis
  1. 导航到源目录以运行脚本。
redis-stable/src/redis-trib.rb create ip.of.server1:6379 ip.of.server2:6380 ip.of.server3:6381
  1. 接受三个主节点的配置。成功设置群集将返回以下消息:
>>>Creating cluster
>>>Performing hash slots allocation on 3 nodes...
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join.
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  1. 使用该redis-cli工具查看连接到群集的所有当前节点。该-c标志指定与群集的连接。
redis-cli -c -h ip.of.server1 -p 6379
ip.of.server1>CLUSTER NODES

这将返回当前在其ID和从属标识的集群中的节点列表 - 如果存在。要退出界面,请单击exit

ip.of.server1>exit

注意 Redis关键字不区分大小写。但是,为了清楚起见,它们在本指南中作为所有大写字母编写。

添加从节点

redis-trib工具还可用于向集群添加新节点。使用其余三个节点,您可以手动将它们添加到选定的主节点。

  1. 使用add-note和指定将从站连接到给定的主站master_id
./redis-trib.rb add-node --slave --master-id [master_id_c] ip.of.server1:6381 ip.of.server3:6381

结果输出应该是:

>>> Adding node ip.of.server1:6381 to cluster ip.of.server3:6381
>>> Performing Cluster Check (using node ip.of.server3:6381)
M: [master_id_c] ip.of.server3:6381
slots:10923-16383 (5461 slots) master
0 additional replica(s)
M: [master_id_a] ip.of.server1:6379
slots:0-5460 (5461 slots) master
0 additional replica(s)
M: [master_id_b] ip.of.server2:6380
slots:5461-10922 (5462 slots) master
0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node ip.of.server1:6381 to make it join the cluster.
Waiting for the cluster to join...
>>> Configure node as replica of ip.of.server3:6381.
  1. 对其余两个节点重复以上步骤。
./redis-trib.rb add-node --slave --master-id [master_id_a] ip.of.server2:6379 ip.of.server1:6379
./redis-trib.rb add-node --slave --master-id [master_id_b] ip.of.server3:6380 ip.of.server2:6380

添加键值对和分片

除了返回有关群集的信息之外,命令行界面还提供了一种方法SETGET键。在本地计算机上,您可以连接到任何主节点并浏览Redis群集的某些属性。

  1. 如果需要,请在本地计算机上重复安装Redis。检查防火墙设置是否允许与主节点通信。
redis-cli -c -h ip.of.server1 -p 6379
  1. 使用此CLUSTER INFO命令可以查看有关群集状态的信息,例如大小,哈希槽和故障(如果有)。
ip.of.server1:6379>CLUSTER INFO
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:8375
cluster_stats_messages_pong_sent:9028
cluster_stats_messages_meet_sent:1
cluster_stats_messages_sent:17404
cluster_stats_messages_ping_received:9022
cluster_stats_messages_pong_received:8376
cluster_stats_messages_meet_received:6
cluster_stats_messages_received:17404
  1. 要检查主/从复制,请INFO replication返回有关从站的信息。
ip.of.server1:6379>INFO replication
role:master
connected_slaves:1
slave0:ip=ip.of.server1,port=6381,state=online,offset=213355,lag=1
master_replid:cd2e27cba094f2e7ed38b0313dcd6a979ab29b7a
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:213355
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:197313
repl_backlog_histlen:16043
  1. 要演示分片,您可以设置一些示例键值对。设置密钥会将值重定向到三个主节点中的散列槽。
ip.of.server1:6379> SET John Adams
-> Redirected to slot [6852] located at ip.of.server2:6380
OK
ip.of.server2:6380> SET James Madison
-> Redirected to slot [2237] located at ip.of.server1:6379
OK
ip.of.server1:6379> SET Andrew Jackson
-> Redirected to slot [15768] located at ip.of.server3:6381
OK
ip.of.server3:6381> GET John
-> Redirected to slot [6852] located at ip.of.server2:6380
"Adams"
ip.of.server2:6380>

将从节点升级为主节点

根据当前拓扑,如果其中一个Linode发生故障,群集将保持联机状态。此时,您可以期望从属服务器在复制数据的情况下升级为主服务器。

  1. 添加键值对。
ip.of.server1:6379> SET foo bar
-> Redirected to slot [12182] located at ip.of.server3:6381
OK
ip.of.server3:6381> GET foo
"bar"

密钥foo将添加到服务器3上的主服务器并复制到服务器1上的从服务器

  1. 在事件服务器3关闭的情况下,服务器1上的从属设备将成为主设备,并且群集将保持在线。
ip.of.server1:6379> CLUSTER NODES
[slave_id_b] ip.of.server3:6380@16380 slave,fail [master_id_b] 1502722149010 1502722147000 6 connected
[slave_id_a] ip.of.server2:6379@16379 slave [master_id_a] 0 1502722242000 5 connected
[slave_id_c_promoted] ip.of.server1:6381@16381 master - 0 1502722241651 7 connected 10923-16383
[master_id_b] ip.of.server2:6380@16380 master - 0 1502722242654 2 connected 5461-10922
[master_id_c] ip.of.server3:6381@16381 master,fail - 1502722149010 1502722145402 3 connected
[master_id_a] ip.of.server1:6379@16379 myself,master - 0 1502722241000 1 connected 0-5460
  1. 以前位于服务器3上的散列槽中的密钥,密钥值对现在存储在服务器1上
ip.of.server1:6379> GET foo
-> Redirected to slot [12182] located at ip.of.server1:6381
"bar"

请记住确保防火墙设置适用于所有Redis实例。如果您需要浏览其他补充功能,例如添加其他节点,创建多个从属或重新分片,请参阅Redis官方文档以了解如何实现这些功能。

结论

您现在已经在云服务器上部署了Redis的集群服务。若您觉得部署过程过于复杂,推荐您试用腾讯云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。可将您从耗时的数据库管理任务中解放出来,让您有更多时间专注于您的应用和业务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在每个CVM上安装Redis
  • 配置主节点和从节点
  • 连接主和从属
  • 使用内置Ruby脚本创建集群
  • 添加从节点
  • 添加键值对和分片
  • 将从节点升级为主节点
  • 结论
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档