redis系列(五):搭建redis-cluster集群

1、为什么要用redis-cluster

a、并发要求  redis官方声称可以达到10万每秒,但是如果业务需要每秒100万条呢?b、数据量太大  一台服务器的内存正常是16-256G,如果业务需要500G内存怎么办?

2、搭建redis-cluster

针对上述问题,redis-cluster集群就提供了很好的解决方案。

(1)、先准备环境,开启多个redis实例

[[email protected] redis_conf]# ls
redis-7000.conf  redis-7002.conf  redis-7004.conf
redis-7001.conf  redis-7003.conf  redis-7005.conf
[[email protected] redis_conf]# 

暂时准备了6个配置文件,

daemonize yes
port 7000
logfile ./data/7000/redis.log #日志存放位置
dir ./data/7000  # 数据存放位置
dbfilename  dbmp.rdb # 数据文件名称
cluster-enabled yes # 开启集群模式
cluster-config-file nodes-7000.conf # 集群内部的配置文件
cluster-require-full-coverage no # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no

上面的配置为redis-7000.conf的配置文件内容,其他配置文件内容相同,只是将7000全部改成对应的端口。

可以使用如下命令快速生成:

sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf

通过sed命令将redis-7000.conf中的7000修改成7001,然后写入redis-7001.conf文件中

每个节点仅仅是端口的不同。

注意:还要确保配置中的日志以及数据存放文件夹存在。

比如我的:

[[email protected] redis_conf]# mkdir -p data/{7000,7001,7002,7003,7004,7005}
[[email protected] redis_conf]# tree
.
├── data
│   ├── 7000
│   ├── 7001
│   ├── 7002
│   ├── 7003
│   ├── 7004
│   └── 7005
├── redis-7000.conf
├── redis-7001.conf
├── redis-7002.conf
├── redis-7003.conf
├── redis-7004.conf
└── redis-7005.conf

7 directories, 6 files

(2)、运行redis实例

[[email protected] redis_conf]# redis-server redis-7000.conf
[[email protected] redis_conf]# redis-server redis-7001.conf
[[email protected] redis_conf]# redis-server redis-7002.conf
[[email protected] redis_conf]# redis-server redis-7003.conf
[[email protected] redis_conf]# redis-server redis-7004.conf
[[email protected] redis_conf]# redis-server redis-7005.conf

查看是否已经启动

[[email protected] redis_conf]# ps -ef | grep redis
root      3733     1  0 08:13 ?        00:00:00 redis-server *:7000 [cluster]
root      3763     1  0 08:13 ?        00:00:00 redis-server *:7001 [cluster]
root      3768     1  0 08:13 ?        00:00:00 redis-server *:7002 [cluster]
root      3773     1  0 08:13 ?        00:00:00 redis-server *:7003 [cluster]
root      3779     1  0 08:13 ?        00:00:00 redis-server *:7004 [cluster]
root      3784     1  0 08:13 ?        00:00:00 redis-server *:7005 [cluster]
root      3816  3514  0 08:14 pts/0    00:00:00 grep --color=auto redis
[[email protected] redis_conf]# 

此时集群还用不了,可以登录redis查看

[[email protected] redis_conf]# redis-cli -p 7000
127.0.0.1:7000> set name felixi
(error) CLUSTERDOWN Hash slot not served
127.0.0.1:7000> 

(3)、创建redis-cluster

a、准备ruby环境

下载,编译,安装ruby (ruby官网地址

1、下载(个人用的当前的最新版本2.6.0)
wget https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz
2、解压,安装
tar -zxvf ruby-2.6.0.tar.gz
cd ruby-2.6.0
./configure --prefix=/opt/ruby/
make && make install
3、添加环境变量
export PATH=/opt/ruby/bin/:$PATH # 将这句添加到./bashrc和/etc/profile文件末尾。
source ./bashrc /etc/profile # 加载一下

b、查看是否已经安装

[[email protected] ~]# gem -v
3.0.1
[[email protected] ~]# 

c、下载安装ruby操作redis的模块包

[[email protected] ~]# gem install redis
Successfully installed redis-4.1.0
Parsing documentation for redis-4.1.0
Done installing documentation for redis after 1 seconds
1 gem installed
[[email protected] ~]# 

7、启动集群

我的redis版本是5.0.2,使用如下方式启动

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

其他旧版本可能需要如下命令:注意(redis-trib.rb可能找不到,可以通过find / -name redis-trib.rb来查找)

/opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005

8、出现如下说明启动成功

[[email protected] ~]# redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: 511bc46a1da42e3964ce41f48234076bd5743baf 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
M: bb029209525fb9aa2eeaa8c27182065ca1b29457 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
M: 72b6ad9d36ba9cc7770bfaf6899c8e3262c677b0 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
S: 25c00188cc8b58f5442ac674647389ab4f9206e9 127.0.0.1:7003
   replicates 511bc46a1da42e3964ce41f48234076bd5743baf
S: bd093c559ebbc54fead2da9200d6f0c10a90bc87 127.0.0.1:7004
   replicates bb029209525fb9aa2eeaa8c27182065ca1b29457
S: 3c0031255f960fbc15bbf9a78dacd7427ac24115 127.0.0.1:7005
   replicates 72b6ad9d36ba9cc7770bfaf6899c8e3262c677b0
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
...
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 511bc46a1da42e3964ce41f48234076bd5743baf 127.0.0.1:7000
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 72b6ad9d36ba9cc7770bfaf6899c8e3262c677b0 127.0.0.1:7002
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: bb029209525fb9aa2eeaa8c27182065ca1b29457 127.0.0.1:7001
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: bd093c559ebbc54fead2da9200d6f0c10a90bc87 127.0.0.1:7004
   slots: (0 slots) slave
   replicates bb029209525fb9aa2eeaa8c27182065ca1b29457
S: 25c00188cc8b58f5442ac674647389ab4f9206e9 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 511bc46a1da42e3964ce41f48234076bd5743baf
S: 3c0031255f960fbc15bbf9a78dacd7427ac24115 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 72b6ad9d36ba9cc7770bfaf6899c8e3262c677b0
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[[email protected] ~]# 

9、查看主从状态

redis-cli -p 7000  info replication

结果如下:

[[email protected] ~]# redis-cli -p 7002  info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=7005,state=online,offset=140,lag=0
master_replid:2b20fa4941542dc58d9fc2c32fe6f3dbb6cce72b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:154
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:154
[[email protected] ~]# redis-cli -p 7003  info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:7000
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:154
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:ad11aa24aa797d942a54550ee77ab0e185e9d92c
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:154
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:154
[[email protected] ~]# 

9、向redis集群写入数据,查看数据流向

redis-cli -p 7000 -c  #这里会将key自动的重定向,放到某一个节点的slot槽位中

效果如下:

[[email protected] ~]# redis-cli -p 7000 -c
127.0.0.1:7000> keys *
(empty list or set)
127.0.0.1:7000>
127.0.0.1:7000> set name felix
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK
127.0.0.1:7001> keys *
1) "name"
127.0.0.1:7001> 

至此,集群就搭建好了

原文地址:https://www.cnblogs.com/felixwang2/p/10211688.html

时间: 2024-10-30 20:39:39

redis系列(五):搭建redis-cluster集群的相关文章

centos7搭建ELK Cluster集群日志分析平台(三)

续  centos7搭建ELK Cluster集群日志分析平台(一) 续  centos7搭建ELK Cluster集群日志分析平台(二) 已经安装好elasticsearch 5.4集群和logstash 5.4 安装kibana步骤 1.下载安装Kibana  ~]#wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.0-x86_64.rpm 如果链接失效,官网下载:https://www.elastic.co/down

centos7搭建ELK Cluster集群日志分析平台(二)

续  centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 1. 安装Java 8 官方说明:需要安装Java 8 ,不支持Java 9... //自行安装,略过 2. 安装Logstash 可以同elasticsearch一样建立repo文件通过yum安装,也可以去官网直接下载rpm包进行本地安装:   ~]# rpm -ivh logstash-5.4.0.rpm  //这里直接下载好进行本地安装 3.

MySQL集群---②Windows平台搭建MySQL CLUSTER集群

本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. MySQL集群支持多台电脑,本文搭建的MySQL集群以两台机子为例,其中一台(IP为192.168.24.33)部署管理节点.数据节点和SQL节点,另一台(IP为192.168.24.82)部署数据节点和SQL节点. 实际应用中,不要将管理节点跟数据节点部署到一台机子上,因为如果数据节点宕机会导致管理节点不可用,同时整个MySQL群集也就都不可用了.所以一个MySQL群集理想情况下至少有三台服务器,将管理节点单独放到一台

centos7搭建ELK Cluster集群日志分析平台(四):简单测试

续之前安装好的ELK集群 各主机:es-1 ~ es-3 :192.168.1.21/22/23 logstash: 192.168.1.24 kibana: 192.168.1.25 测试机:client: 192.168.1.26 在测试机上安装并启动filebeat 1. 下载filebeat  ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.4.0-linux-x86_64.tar.gz

Redis Cluster集群搭建与应用

1.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper,但从redis 3.0之后版本支持redis-cluster集群,redis-cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis-cluster架构图如下: 其结构特点 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. 节点的fail是通过集群中超过半数的节点检测失效时才生效. 客户端与redis节点直

Redis Cluster集群搭建测试

# Redis Clutser # ## 一.Redis Cluster集群 ## 参考资料: http://www.cnblogs.com/lykxqhh/p/5690923.html Redis集群搭建的方式有多种,例如使用zookper等,但从redis3.0之后版本支持redis cluster集群,Redis Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis cluster架构图如下: 其结构特点: 1.所有的redis节点彼此互

Redis进阶实践之十一 Redis的Cluster集群搭建

原文:Redis进阶实践之十一 Redis的Cluster集群搭建 一.引言 本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的所涉及到的概念做深入的探讨.本文只是针对如何设置集群.测试和操作集群做了简述,并且从用户的角度描述了系统的行为,并不涉及Redis集群规范中所包含的细节.但是,本教程试图从最终用户的角度来解释有关Redis的Cluster集群的可用性和一致性的特点,并以简单易懂的方式讲解. 请注意,本教程需要使用Redis 3.0版本或更高版本. 如果您打算部署

redis集群与分片(2)-Redis Cluster集群的搭建与实践

Redis Cluster集群 一.redis-cluster设计 Redis集群搭建的方式有多种,例如使用zookeeper等,但从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接.其redis-cluster架构图如下: 其结构特点: 1.所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.     2.节点的fail是通过集群中超过半

Redis Cluster集群部署搭建

在Oracle的路上走了许多年,换换感觉,尝试一下新的知识,也是一个不错的感觉.Redis,一个超轻量化的内存数据库,只做一小块数据库功能实现,却非常优秀的一个产品.今天,就分享一下安装Redis集群的过程. 搭建redis集群,建议至少需要准备3台服务器,共搭建6个节点,3个master,3个slave,并且要求3个master节点不能全部跑到同一台服务器上,保证节点安全,3台服务器的配置相同,使用redistest账号搭建,对应的端口是7000/7001/7002端口 我的集群分配如下,每个

(五)Redis Cluster 集群

Redis Cluster 需求:1.请求量过大 100w/s 2.数据量大 1.数据分布 哈希分布特点: 数据分散度高 键值分布业务无关 无法顺序访问 支持批量操作 顺序分布特点: 数据分散度易倾斜 键值业务相关 可顺序访问 支持批量操作 2.数据分区 节点取余分区特点: 客户端分片:哈希 + 取余 节点伸缩数据迁移率过大 节点伸缩采用翻倍扩展 一致性哈希特点: 使用token环,顺时针定位节点 节点伸缩时影响临近节点,存在数据迁移 翻倍伸缩,保证最小迁移数据和负债均衡 虚拟哈希分区特点: 预