linux Redis 5.0集群搭建
文档结构如下:

Redis cluster 是redis的分布式解决方案,在3.0版本正式推出后,有效的解决了redis分布式方面的需求;当遇到单机内存,并发,流量等瓶颈是,可以采用cluster架构方案达到负载均衡的目的。
官方网站:
https://redis.io/topics/cluster-tutorial
Redis数据分区
Redis cluster 采用虚拟槽分区,所有的键根据哈希函数映射到0~16383整数槽内,计算公式:
Slot=CRC16(key)&16384。每个节点负责维护一部分槽以及槽所映射的键值数据。
redis群集中的每个节点都负责哈希槽的子集,例如,您可能拥有一个包含3个节点的群集,其中:
节点A包含从0到5500的散列槽。
节点B包含从5501到11000的散列槽。
节点C包含从11001到16383的散列槽。

由于我的环境只有三台服务器master 和slave为同一台,一台服务器,两张网卡。
Redis Cluster主从模型
为了在主节点子集发生故障或无法与大多数节点通信时保持可用,Redis Cluster使用主从模型,其中每个散列槽从1(主机本身)到N个副本(N) -1个额外的从节点)。
在具有节点A,B,C的示例群集中,如果节点B发生故障,则群集无法继续,因为我们不再能够在5501-11000范围内提供服务哈希位置的方法。
然而,当创建集群时(或稍后),我们向每个主节点添加一个从节点,以便最终集群由作为主节点的A,B,C和作为从节点的A1,B1,C1组成。 ,如果节点B出现故障,系统就能继续运行。
节点B1复制B,B失败,集群将节点B1升级为新的主节点,并将继续正常运行。
但请注意,如果节点B和B1同时发生故障,Redis Cluster将无法继续运行。

Redis群集配置参数
我们即将创建一个示例集群部署。在继续之前,让我们介绍Redis Cluster在redis.conf文件中引入的配置参数。有些人会很明显,有些人会在你继续阅读时更清楚。
cluster-enabled<yes/no>:如果是,则在特定Redis实例中启用Redis群集支持。否则,实例像往常一样作为独立实例启动。
cluster-config-file<filename>:请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是每次发生更改时Redis群集节点自动保持群集配置(基本上是状态)的文件,为了能够在启动时重新阅读它。该文件列出了集群中其他节点,状态,持久变量等内容。由于某些消息接收,通常会将此文件重写并刷新到磁盘上。
cluster-node-timeout<milliseconds>:Redis群集节点不可用的最长时间,不会被视为失败。如果主节点的可访问时间超过指定的时间,则其从属节点将进行故障转移。此参数控制Redis群集中的其他重要事项。值得注意的是,在指定时间内无法访问大多数主节点的每个节点都将停止接受查询。
cluster-slave-validity-factor<factor>:如果设置为零,则从站将始终尝试对主站进行故障切换,而不管主站和从站之间的链路是否保持断开连接的时间长短。如果该值为正,则计算最大断开时间作为节点超时值乘以此选项提供的因子,如果节点是从属节点,则如果主链接断开连接的时间超过指定的时间,则不会尝试启动故障转移。例如,如果节点超时设置为5秒,并且有效性因子设置为10,则从主设备断开超过50秒的从设备将不会尝试故障转移其主设备。请注意,如果没有从站能够对其进行故障转移,则任何不同于零的值都可能导致Redis群集在主站发生故障后不可用。在这种情况下,只有当原始主服务器重新加入群集时,群集才会返回。
cluster-migration-barrier<count>:主服务器将保持连接的最小从服务器数,以便另一个从服务器迁移到不再由任何从服务器覆盖的主服务器。有关详细信息,请参阅本教程中有关副本迁移的相应部分。
cluster-require-full-coverage<yes/no>:如果设置为yes,则默认情况下,如果任何节点未覆盖某个百分比的密钥空间,则集群将停止接受写入。如果该选项设置为no,即使只能处理有关键子集的请求,群集仍将提供查询。
a) 关闭防火墙
vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
setenforce 0
service iptables stop
chkconfig iptables off
b) 三台服务器配置好yum
mount /dev/sr0 /mnt/
cd /etc/yum.repos.d/
mv redhat.repo redhat.repo.bak
mv rhel-source.repo rhel-source.repo.bak
vi /etc/yum.repos.d/rhel-debuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux $releasever - $basearch - Debug
baseurl=file:///mnt/
enabled=1
gpgcheck=0
安装yum:
yum -y install make gcc* rubygems
由于需要安装ruby环境,所以采用yum安装
搭建集群
Redis-trib.rb是采用ruby实现的redis集群管理工具。内部通过cluster相关命令简化集群创建,检查,槽迁移和均衡等常见运维操作,使用之前需要安装Ruby依赖环境。
1、环境准备
下载ruby(5.0可以不用ruby):
最新为Ruby 2.6.0,地址:http://www.ruby-lang.org/zh_cn/downloads/
由于yum 安装的版本不符合要求
我单独下载的
tar -zxvf ruby-2.6.0.tar.gz
./configure -prefix=/usr/local/ruby
make
make install
cd /usr/local/ruby/
cp bin/ruby /usr/local/bin/
cp bin/gem /usr/local/bin/

安装rubygem redis 依赖:
最新版本为4.1
https://rubygems.org/gems/redis/versions/4.1.0
cd /soft/
/usr/local/bin/gem install -l redis-4.1.0.gem

/usr/local/bin/gem list redis gem

安装redis5.0 单机
/soft/redis-5.0.0
make
make install
cd /soft/redis-5.0.0/src/
cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6379
cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6380
cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6381
cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6382
cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6383
cp redis-cli redis-server ../redis.conf /usr/local/redis-cluster/redis6384
安装redis-trib.rb
cd /soft/redis-5.0.0/src
./redis-trib.rb –help

5.0 redis-cli --cluster

redis-cli --cluster help具有以下功能:
1、 create :创建集群
2、 check :检查集群
3、 info :查看集群信息
4、 fix :修复集群
5、 reshard :在线迁移slot
6、 rebalance :平衡集群节点slot数量
7、 add-node :将新节点加入集群
8、 del-node :从集群中删除节点
9、 set-timeout :设置集群节点间心跳连接的超时时间
10、 call :在集群全部节点上执行命令
11、 import :将外部redis数据导入集群
cp /soft/redis-5.0.0/src/redis-trib.rb /usr/local/bin/
准备目录:
mkdir –p /redis6379
mkdir –p /redis6380
mkdir -p /usr/local/redis-cluster/redis6379
mkdir -p /usr/local/redis-cluster/redis6380
cp
mkdir –p /redis6381
mkdir –p /redis6382
mkdir -p /usr/local/redis-cluster/redis6381
mkdir -p /usr/local/redis-cluster/redis6382
mkdir –p /redis6383
mkdir –p /redis6384
mkdir -p /usr/local/redis-cluster/redis6383
mkdir -p /usr/local/redis-cluster/redis6384
准备redis 集群配置文件:
redis6379.cnf
save 900 1
bind 0.0.0.0 --运行所有IP
daemonize yes
port 6379
loglevel warning
timeout 60
logfile "6379.log"
dbfilename dump6379.rdb
pidfile /var/run/redis_6379.pid
maxmemory-policy volatile-ttl
auto-aof-rewrite-min-size 10GB
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file nodes-6379.conf
protected-mode no --让客户端都可以连接redis
其他节点按照6379进行相应的修改成对应的端口。
redis-server /usr/local/redis-cluster/redis6379/redis6379.conf
redis-server /usr/local/redis-cluster/redis6380/redis6380.conf

redis-server /usr/local/redis-cluster/redis6381/redis6381.conf
redis-server /usr/local/redis-cluster/redis6382/redis6382.conf

redis-server /usr/local/redis-cluster/redis6383/redis6383.conf
redis-server /usr/local/redis-cluster/redis6384/redis6384.conf

2、集群创建
例子:create创建集群
create命令可选replicas参数,replicas表示需要有几个slave。
在3.0每个有一个slave的集群的创建命令如下:
由于redis5.0版本与3.0差异很大
官方如下:

有两种方法:
方法一:
redis-cli --cluster create 172.16.10.21:6379 172.16.10.23:6381 172.16.10.25:6383 172.16.10.22:6380 172.16.10.24:6382 172.16.10.26:6384 --cluster-replicas 1


方法二:
/usr/local/bin/redis-trib.rb create --replicas 1 172.16.10.21:6379 172.16.10.23:6381 172.16.10.25:6383 172.16.10.22:6380 172.16.10.24:6382 172.16.10.26:6384

由于我的redis-trib.rb不可用。用的第一种方法。
3、查看集群信息
redis-cli -h 172.16.10.21 -p 6379 –c
cluster nodes
查看节点信息:


a1 这个槽位在10.25这台redis上。
查看集群信息
cluster info

查看集群完整性:
redis-cli --cluster check 172.16.10.21:6379

可以看出来,三个master 中的slots正好分配完16384个槽
linux Redis 5.0集群搭建的更多相关文章
- Redis 3.0 集群搭建
Redis 3.0 集群搭建 开启两个虚拟机 分别在两个虚拟机上开启3个Redis实例 3主3从两个虚拟机里的实例互为主备 下面分别在两个虚拟机上安装,网络设置参照codis集群的前两个主机 分别关闭 ...
- Redis 5.0 集群搭建
Redis 5.0 集群搭建 单机版的 Redis 搭建 https://www.jianshu.com/p/b68e68bbd725 /usr/local/目录 mkdir redis-cluste ...
- Redis 3.0集群搭建/配置/FAQ
·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...
- Redis 3.0集群 Window搭建方案
Redis 3.0集群 Window搭建方案 1.集群安装前准备 安装Ruby环境,安装:rubyinstaller-2.3.0-x64.exe http://dl.bintray.com/onecl ...
- Linux环境下Hadoop集群搭建
Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...
- Ubuntu 12.04下Hadoop 2.2.0 集群搭建(原创)
现在大家可以跟我一起来实现Ubuntu 12.04下Hadoop 2.2.0 集群搭建,在这里我使用了两台服务器,一台作为master即namenode主机,另一台作为slave即datanode主机 ...
- redis 3.0 集群__数据迁移和伸缩容
添加节点 1,启动2个新的redis-sever, 参照 ( redis 3.0 集群____安装 ),端口号为 7007 和 7008 2,使用命令 redis-trib.rb add-node 命 ...
- 国际站中国区,孟买上Redis 4.0 集群版
信息摘要: 国际站中国区,孟买上线Redis 4.0 集群版适用客户: 所有用户版本/规格功能: redis 4.0 集群版产品文档: https://www.alibabacloud.com/hel ...
- Redis进阶实践之十一 Redis的Cluster集群搭建
一.引言 本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...
随机推荐
- mui图片懒加载
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- 【sqli-labs】 less2 GET - Error based - Intiger based (基于错误的GET整型注入)
与less1相同,直接走流程 提交参数,直接order by http://localhost/sqli/Less-2/?id=1 order by 1%23 http://localhost/sql ...
- What is the difference between PKCS#5 padding and PKCS#7 padding
The difference between the PKCS#5 and PKCS#7 padding mechanisms is the block size; PKCS#5 padding is ...
- Vue双向数据绑定实现原理
https://zendq1998.github.io/2018/04/12/vue%E5%8F%8C%E5%90%91%E6%95%B0%E6%8D%AE%E7%BB%91%E5%AE%9A%E5% ...
- BOS工具之BOS应用框架
大纲: 应用框架概述,bos应用框架总体,bos应用框架详细设计,代码结构以及常用应用,开发常用接口 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象组件及组件实例间交互的 ...
- 51nod1596 搬货物
现在有n个货物,第i个货物的重量是 2wi .每次搬的时候要求货物重量的总和是一个2的幂.问最少要搬几次能把所有的货物搬完. 样例解释: 1,1,2作为一组. 3,3作为一组. Input 单组测试数 ...
- Linux思维导图之inode、mv、cp和硬软链接
标准I / O和管道: ps aux进程管理命令(和win任务管理器一样); 当前命令行输出窗口,键盘的输入即是标准输入.标准输出就是执行了的命令,无法执行的命令或错误信息是标准错误, ...
- 编码GBK和GB2312、Unicode、UTF-8
一.编码GBK和GB2312 随着计算机发展,各国已经不满足于单纯用ASCII码: 对于我们来说能在计算机中显示中文字符是至关重要的,所以我们还需要一张关于中文和数字对应的关系表: 一个字节8位二进制 ...
- Codeforces 902C/901A - Hashing Trees
传送门:http://codeforces.com/contest/902/problem/C 本题是一个关于“树”的问题. 将一棵高度为h的有根树表示为数列{ai|i=0,1,2,...,h},其中 ...
- Shell入门基础
Shell的Helloworld #!/bin/bash echo "helloworld taosir" 执行方式 方式一:用 bash 或 sh 的相对或绝对路径(不用赋予脚本 ...