搭建Redis 集群,测试集群:对节点主机重新分片

搭建Redis 集群

准备6台redis服务器,具体要求如下:

ip地址 端口 etho 日志文件名

192.168.4.51 6051 都可以接收连接请求 redis51.log

192.168.4.52 6052 都可以接收连接请求 redis52.log

192.168.4.53 6053 都可以接收连接请求 redis53.log

192.168.4.54 6054 都可以接收连接请求 redis54.log

192.168.4.55 6055 都可以接收连接请求 redis55.log

192.168.4.56 6056 都可以接收连接请求 redis56.log

环境准备

1 在6台redis服务器上运行服务,按照如下要求修改配置文件后,重启redis服务,清。

生成密钥与传密钥

[[email protected] ~]# ssh-keygen

[[email protected] ~]# for i in 192.168.4.{51..56}

do

ssh-copy-id $i

done

在每一台主机上创建redis

[[email protected] ~]# tar -xf redis/redis-4.0.8.tar.gz -C .

[[email protected] ~]# cd redis-4.0.8/

[[email protected] redis-4.0.8]# yum -y install gcc gcc-c++

[[email protected] redis-4.0.8]# make && make install

[[email protected] redis-4.0.8]# ./utils/install_server.sh

[[email protected] redis-4.0.8]# ln -s /etc/init.d/redis_6379 /bin/

在这大家可以也写个脚本批量安装redis

1.1 清空数据(在51-56上做一样的操作)

[[email protected] phpredis-2.2.4]# redis-cli -h 192.168.4.51 -p 6051

192.168.4.51:6051> FLUSHALL

OK

192.168.4.51:6051> keys *

(empty list or set)

192.168.4.51:6051>

[[email protected] phpredis-2.2.4]# vim /etc/redis/6379.conf

70 bind 192.168.4.51 //物理接口ip地址

93 port 6051 //端口

daemonize yes   //以守护方式运行

815 cluster-enabled yes //开启集群

823 cluster-config-file nodes-6051.conf // 集群的配置文件不要使用默认的名称

829 cluster-node-timeout 15000 // 请求超时 5 秒

[[email protected] phpredis-2.2.4]# redis_6379 stop

[[email protected] phpredis-2.2.4]# redis_6379 start

[[email protected] ~]# ss -antulp | grep redis

tcp LISTEN 0 128 192.168.4.51:6051 : users:(("redis-server",pid=24771,fd=6))

tcp LISTEN 0 128 192.168.4.51:16051 : users:(("redis-server",pid=24771,fd=8))

装包: 在执行创建集群命令的主机安装ruby软件包

安装解释ruby代码的软件包(在51上安装)

[[email protected] redis]# yum -y install ruby ruygems

[[email protected] redis]# rpm -q rubygems ruby

rubygems-2.0.14.1-30.el7.noarch

ruby-2.0.0.648-30.el7.x86_64

[[email protected] redis-cluster]#rpm -ivh --nodeps ruby-devel-2.0.0.648-30.el7.x86_64.rpm

安装ruby连接redis 接口程序 gem

[[email protected] redis-cluster]# gem install redis-3.2.1.gem

生成创建集群的脚本redis-trib.rb

[[email protected] redis]# tar -xf redis-4.0.8.tar.gz

[[email protected] redis]# cd redis-4.0.8/

[[email protected] redis-4.0.8]# ln -s /root/redis/redis-4.0.8/src/redis-trib.rb /sbin/

创建集群:

[[email protected] redis-4.0.8]# redis-trib.rb create --replicas 1 \

192.168.4.51:6051 \

192.168.4.52:6052 \

192.168.4.53:6053 \

192.168.4.54:6054 \

192.168.4.55:6055 \

192.168.4.56:6056

>> Creating cluster

>> Performing hash slots allocation on 6 nodes...

Using 3 masters:

192.168.4.51:6051

192.168.4.52:6052

192.168.4.53:6053

Adding replica 192.168.4.55:6055 to 192.168.4.51:6051

Adding replica 192.168.4.56:6056 to 192.168.4.52:6052

Adding replica 192.168.4.54:6054 to 192.168.4.53:6053

M: c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 192.168.4.51:6051

slots:0-5560 (5561 slots) master

M: 2c9ee556add7e5187621efd64e4a9fc54bc99489 192.168.4.52:6052

slots:5561-10922 (5562 slots) master

M: bcb32a6d6b9e988789e654c32856c8c478ef253e 192.168.4.53:6053

slots:10923-16383 (5561 slots) master

S: 799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0 192.168.4.54:6054

replicates bcb32a6d6b9e988789e654c32856c8c478ef253e

S: 18b86bca8fa9c9d36f3cad927a1c75c825bee9a4 192.168.4.55:6055

replicates c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01

S: 6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:6056

replicates 2c9ee556add7e5187621efd64e4a9fc54bc99489

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 192.168.4.51:6051)

M: c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 192.168.4.51:6051

slots:0-5560 (5561 slots) master

1 additional replica(s)

S: 6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:6056

slots: (0 slots) slave

replicates 2c9ee556add7e5187621efd64e4a9fc54bc99489

............................................

..............................................

replicates bcb32a6d6b9e988789e654c32856c8c478ef253e

[OK] All nodes agree about slots configuration.

>> Check for open slots...

>> Check slots coverage...

[OK] All 16384 slots covered.

[[email protected] redis-4.0.8]# cat /var/lib/redis/6379/nodes-6051.conf #集群配置文件

6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:[email protected] slave 2c9ee556add7e5187621efd64e4a9fc54bc99489 0 1530777397000 6 connected

。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。

每台 redis服务 在本机登录 查看集群信息

[[email protected] redis-4.0.8]# redis-cli -c -h 192.168.4.51 -p 6051

192.168.4.51:6051> 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:934

cluster_stats_messages_pong_sent:1137

cluster_stats_messages_sent:2071

cluster_stats_messages_ping_received:1132

cluster_stats_messages_pong_received:934

cluster_stats_messages_meet_received:5

cluster_stats_messages_received:2071

192.168.4.51:6051> CLUSTER NODES # 查看本机信息

6a7196a77555cdf14f1a665386ff493928b31d94 192.168.4.56:[email protected] slave 2c9ee556add7e5187621efd64e4a9fc54bc99489 0 1530778521000 6 connected

bcb32a6d6b9e988789e654c32856c8c478ef253e 192.168.4.53:[email protected] master - 0 1530778520185 3 connected 10923-16383

18b86bca8fa9c9d36f3cad927a1c75c825bee9a4 192.168.4.55:[email protected] slave c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 0 1530778521000 5 connected

2c9ee556add7e5187621efd64e4a9fc54bc99489 192.168.4.52:[email protected] master - 0 1530778521187 2 connected 5561-10922

799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0 192.168.4.54:[email protected] slave bcb32a6d6b9e988789e654c32856c8c478ef253e 0 1530778520000 4 connected

c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01 192.168.4.51:[email protected] myself,master - 0 1530778519000 1 connected 0-5560

测试集群:

连接master库 存储数据,对应的从库 会自动同步数据

[[email protected] ~]# redis-cli -c -h master库ip地址 -p 对应的端口号

Master::

[[email protected] redis-4.0.8]# redis-cli -c -h 192.168.4.51 -p 6051

192.168.4.51:6051> set age 10

192.168.4.51:6051> set name aa

192.168.4.52:6052> keys *

1) "name"

Slave:

[[email protected] phpredis-2.2.4]# redis-cli -c -h 192.168.4.52 -p 6052

192.168.4.52:6052> keys *

1)"name"

选项 参数

– add-node 添加新节点(default master)

– check 对节点主机做检查

– reshard 对节点主机重新分片

– add-node --slave 添加从节点主机

– del-node 删除节点主机

集群选举测试:停止某个主库的redis服务 对应的从会自动升级主库

[[email protected] redis-4.0.8]# redis-trib.rb check 192.168.4.51:6051

M: bcb32a6d6b9e988789e654c32856c8c478ef253e 192.168.4.53:6053

slots:10923-16383 (5561 slots) master

1 additional replica(s)

S: 18b86bca8fa9c9d36f3cad927a1c75c825bee9a4 192.168.4.54:6054

slots: (0 slots) slave

replicates c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01

......................

由此可以看出4.53是master ,4.55是slave,现在我们停止53

[[email protected] ~]# redis-cli -c -h 192.168.4.53 -p 6053 shutdown

[[email protected] redis-4.0.8]# redis-trib.rb check 192.168.4.51:6051

M: 799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0 192.168.4.54:6054

slots:10923-16383 (5561 slots) master

对节点主机重新分片

[[email protected] ~]# redis-trib.rb reshard 192.168.4.51:6051

How many slots do you want to move (from 1 to 16384)? 5196

What is the receiving node ID? c5f725669ad74fbf48b907b06c3b0ff6ca5eeb01

Please enter all the source node IDs.

Type ‘all‘ to use all the nodes as source nodes for the hash slots.

Type ‘done‘ once you entered all the source nodes IDs.

Source node #1:799f99bc22d8c4a9e0fcdc98166f6e6f5e348df0

添加主节点主机:

redis-trib.rb add-node 添加的节点:端口号 集群主节点:端口号

[[email protected] ~]# redis-trib.rb add-node 192.168.4.48:6048 192.168.4.51:6051

添加从节点

redis-trib.rb add-node --slave 从节点 ip: 端口 192.168.4.51:6351

*如果不指定主节点的 id 的话,会把新节点 随机添加为 从节点 最少的主的从

[[email protected] ~]# redis-trib.rb add-node --slave 192.168.4.51:6051 192.168.4.51:6051

删除节点主机

删除从库

[[email protected] ~]# redis-trib.rb del-node 192.168.4.51:6051 676c81e55e491ea7d4f9eb9f53d5c72abc1b8513

>> Removing node 676c81e55e491ea7d4f9eb9f53d5c72abc1b8513 from cluster 192.168.4.51:6051

>> Sending CLUSTER FORGET messages to the cluster...

>> SHUTDOWN the node.

如果要想把删除的数据节点重新加入集群需要还原数据库

[[email protected] ~]# redis-cli -h 192.168.4.51 -p 6051

192.168.4.51:6051> CLUSTER INFO

cluster_state:ok

cluster_slots_assigned:16384

cluster_slots_ok:16384

cluster_slots_pfail:0

cluster_slots_fail:0

cluster_known_nodes:9

cluster_size:3

。。。。。。。。

192.168.4.51:6051> CLUSTER RESET

OK

192.168.4.51:6051> CLUSTER INFO

cluster_state:fail

cluster_slots_assigned:0

cluster_slots_ok:0

cluster_slots_pfail:0

这样才可以重新添加

删除主机master

[[email protected] ~]# redis-trib.rb reshard 192.168.4.51:6051

How many slots do you want to move (from 1 to 16384)? 2000 #增加的槽数

What is the receiving node ID? 18ad59ca4d756e61a5076ea2f6a93d567e521a5c #增加到哪个节点

Source node #1:6e8a84fdd95193fd53a9386f8b24c24c4e5122ff #重哪个节点上移出

Do you want to proceed with the proposed reshard plan (yes/no)?yes

[[email protected] ~]# redis-trib.rb del-node 192.168.4.48 6e8a84fdd95193fd53a9386f8b24c24c4e5122ff

>> Removing node 6e8a84fdd95193fd53a9386f8b24c24c4e5122ff from cluster 192.168.4.48

Invalid IP or Port (given as 192.168.4.48) - use IP:Port format

原文地址:http://blog.51cto.com/13124606/2147900

时间: 2024-10-01 06:00:05

搭建Redis 集群,测试集群:对节点主机重新分片的相关文章

hbase 集群搭建(公司内部测试集群)

我用的是cdh4.5版本:配置文件:$HBASE_HOME/conf/hbase-env.shexport JAVA_HOME=$JAVA_HOMEexport JAVA_HOME=/home/hadoop/jdk1.7.0_51export HBASE_CLASSPATH=$HBASE_HOME/conf# Tell HBase whether it should manage it's own instance of Zookeeper or not.export HBASE_MANAGES

交叉验证与训练集、验证集、测试集

一.前言 训练集.验证集和测试集这三个名词在机器学习领域极其常见,但很多人并不是特别清楚,尤其是后两个经常被人混用. 在有监督(supervise)的机器学习中,数据集常被分成2~3个,即:训练集(train set),验证集(validation set),测试集(test set). 二.训练集.验证集.测试集 如果给定的样本数据充足,我们通常使用均匀随机抽样的方式将数据集划分成3个部分——训练集.验证集和测试集,这三个集合不能有交集,常见的比例是8:1:1.需要注意的是,通常都会给定训练集

训练集,测试集数量的确定

import osimport random g_root_path = "E:/DeepLearning/Faster-RCNN-TensorFlow-Python3.5-master/data/VOCdevkit2007/VOC2007/"xmlfilepath = "E:\DeepLearning\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\Annotations" #

R_Studio(cart算法决策树)对book3.csv数据用测试集进行测试并评估模型

对book3.csv数据集,实现如下功能: (1)创建训练集.测试集 (2)用rpart包创建关于类别的cart算法的决策树 (3)用测试集进行测试,并评估模型 book3.csv数据集 setwd('D:\\data') list.files() dat=read.csv(file="book3.csv",header=TRUE) #变量重命名,并通过x1~x11对class属性进行预测 colnames(dat)<-c("x1","x2"

分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

自学总结redis第四部分(集群搭建以及增加和删除节点)

十六.redis集群 参考网站"https://redis.io/topics/cluster-tutorial" 16.1集群搭建 #下述是在一台机器模拟六个节点,3主3从 [[email protected] ~]# cd /application/ [[email protected] application]# cd redis [[email protected] redis]# mkdir redis-cluster [[email protected] redis-clu

Redis主从以及哨兵集群搭建(二)

Redis主从以及哨兵集群搭建 一.前言 Redis主从同步原理同MySQL的主从原理十分相似,而解决Redis单点故障的哨兵机制(sentinel)又同解决MySQL单点故障的MHA十分相似.因此我们在学习Redis时,可以将学习MySQL的知识迁移,这样一来,有利于我们快速掌握Redis主从机制,Redis哨兵集群的搭建.Redis的Sentinel机制大概是这样的.sentinel即哨兵,作用即放哨.开个玩笑,其实哨兵有三个作用:监控.通知和自动故障转移.哨兵是用来监控Redis的mast

CentOS搭建Redis集群

集群原理-redis-cluster架构图 架构细节: (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail是通过集群中超过半数的节点检测失效时才生效. (3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可 (4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->val

使用Codis搭建redis集群服务

转(http://www.jianshu.com/p/f8e968e57863) 一. 应用场景 redis 作为数据结构存储引擎,有着很多优点 高性能单机引擎可以达到5-10W qps 数据结构全面,支持快速开发业务string,list,set,sorted set, hashes 问题: 存储容量受限单机最大容量即为单机内存最大容量 单机数据的持久化依赖aof和rdb机制,如果机器整个down掉,服务不可用 二. redis集群选型 正是由于单机redis引擎有着这样的问题,所以,基本每个