一.集群简介

cluster介绍

redis cluster是去中心化的,集群中的每个节点都是平等的关系,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃。

这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。

cluster原理

Redis集群采用一致性哈希槽的方式将集群中每个主节点都分配一定的哈希槽,对写入的数据进行哈希后分配到某个主节点进行存储。

集群中每个主节点将承担一部分槽点的维护,而槽点中存储着数据,每个主节点都有至少一个从节点用于高可用。

节点通信方式:

开启一个端口 设置的端口号+10000,用于集群之间节点通信交换信息。每个节点默认每秒10次选择随机5个节点发送ping消息,将自身信息和知道的集群信息传递,收到ping消息后返回pong消息做回复。最后通过这种随机的消息交换,最终每个节点将获得所有信息。

当某个主节点挂掉,所有节点将会发现主节点挂掉了,作为主节点的从节点,就会接替主节点的工作,然后告诉所有其它节点,他成为了主。这样其它存活节点,就将它们维护的信息表更新。

这样当新的数据从任何一个节点从节点将接任做主,如果都挂掉集群将报错。当从一个节点操作,根据计算后将存储在其中一个主节点中,从节点将同步主的数据。

cluster特点

  • 无中心
  • 在线自动扩容缩减
  • 自动故障切换
  • 单层框架响应时间短
  • 对mget/mset支持不友好
  • 对pipline支持不友好

会开启一个单独端口 端口号为设置端口+10000,用于节点间通信,会不断和知道的节点交换信息表,最后知道集群全部信息,这会导致集群中不同节点之间要等一会信息才能一致。

应用场景

适用于单台Redis纵向扩展已经无法满足需求,集群将横向扩展。每个节点将承担一部分数据的维护,并且有从节点用于高可用。

二.集群部署

环境介绍

[Redis-Server-1]
主机名 = host-1
系统 = centos-7.3
地址 = 1.1.1.1
软件 = redis-3.2.9 7000 7001 [Redis-Server-2]
主机名 = host-2
系统 = centos-7.3
地址 = 1.1.1.2
软件 = redis-3.2.9 7002 7003 [Redis-Server-3]
主机名 = host-3
系统 = centos-7.3
地址 = 1.1.1.3
软件 = redis-3.2.9 7004 7005

节点部署

1.参照Centos7源码部署Redis3.2.9文档在每个节点上部署redis。

2.每台机器上创建2个节点,以第一台为例子

cd /usr/local/redis/

mkdir -p cluster/{7000,7001}

3.创建配置文件,编辑如下内容。在7000目录创建7000.conf配置文件,其他服务器和这台一样,都更改如下项目,端口对应即可。

[root@linkops ~]# vim 7000.conf
bind 1.1.1.1 127.0.0.1 #更改为绑定地址,127一定要在后面
protected-mode yes
port 7000 #监听端口
cluster-enabled yes
cluster-config-file nodes_7000.conf #加载配置文件
cluster-node-timeout 5000
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/log/redis/redis_7000.pid #PID文件,需要修改对应的端口
loglevel notice
logfile "/var/log/redis/redis-server.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

4.创建启动脚本(3台操作),启动脚本创建,3台都一样,需要更改如下内容

vim /etc/init.d/redis7000

#!/bin/sh
REDISPORT=7000 #更改全局变量端口
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/log/redis/redis_${REDISPORT}.pid
CONF="/usr/local/redis/cluster/${REDISPORT}/${REDISPORT}.conf" case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac

5.启动这些服务,加入自启动项目(3台都同样操作)

bash /etc/init.d/redis7000

启动集群

1.参照文档安装ruby(随便找一台即可操作)

2.安装redis的gem

wget http://shell-auto-install.oss-cn-zhangjiakou.aliyuncs.com/package/redis-4.0.1.gem

gem install package/redis-4.0.1.gem

3.启动集群

这里使用create命令,ruby脚本将创建集群。 --replicas 1 表示1主1从,前3个为主节点

/usr/local/redis/src/redis-trib.rb create  --replicas 1 1.1.1.1:7000 1.1.1.1:7001 1.1.1.2:7002 1.1.1.2:7003 1.1.1.3:7004 1.1.1.3:7005

三.集群测试

连接集群后,查看集群信息

/usr/local/redis/bin/redis-cli -c -h 192.168.4.212 -p 7001

CLUSTER INFO

Redis cluster 集群部署和配置的更多相关文章

  1. centos6下redis cluster集群部署过程

    一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...

  2. Redis Cluster集群搭建与配置

    Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...

  3. redis cluster集群部署

    上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...

  4. redis cluster 集群部署

    准备工作 1. 安装docker curl -s https://get.docker.com/ | sh 注:一键安装的事最新版docker.已安装docker可跳过此步骤 2. 获取基础镜像 do ...

  5. K8S部署Redis Cluster集群

    kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis 介绍 • Redis代表REmote DI ...

  6. K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

    一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...

  7. Redis Cluster集群知识学习总结

    Redis集群解决方案有两个: 1)  Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...

  8. redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移

    上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊r ...

  9. redis cluster 集群 安装 配置 详解

    redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...

随机推荐

  1. idea创建maven项目时一直在 Process Running

    解决方案: 1.设置maven的配置 File--->Settings(Ctrl+Alt+S)--->Build--->Build Tools--->Maven--->R ...

  2. cmd命令配置MySQL

    当安装完MySql后,每次windows启动的时候都会将MySql服务启动起来. 如果是winxp则不需要使用管理员权限既可以很简单的打开和关闭,具体在cmd中敲入命令: 1.启动MySql服务: n ...

  3. PHP绕过MD5比较的各种姿势

    1.用==进行弱类型比较时, 可以通过两个0e开头后面纯数字的md5绕过 php在进行弱类型比较时,如果为字符串为纯数字,包括浮点数.科学计数法.十六进制数等,都会转化为数字类型再进行比较,利用这点, ...

  4. html+css第一篇

    行间样式表 <div style="--"></div> 内部样式表 <style>----</style> 外部样式表 <l ...

  5. DPC++中的现代C++语言特性

    Ⅰ DPC++简介 DPC++是Data Parallel C++(数据并行C++)的首字母缩写,它是Intel为了将SYCL引入LLVM和oneAPI所开发的开源项目.SYCL是为了提高各种加速设备 ...

  6. Atcoder M-SOLUTIONS Programming Contest C - Best-of-(2n-1)(无穷级数求和+组合恒等式)

    Atcoder 题面传送门 & 洛谷题面传送门 无穷级数求和的简单题,稍微写写吧,正好也算帮我回忆下组合数这一块的内容. 首先我们不妨假设 A 赢,B 赢的情况就直接镜像一下即可.我们枚举 B ...

  7. Matlab 代码注释

    Matlab 代码注释 一直在找类似doxygen一样将程序注释发表成手册的方法,现在发现,Matlab的publish功能自己就能做到. Publish 简介 并非所有注释都能作为文本进行输出,MA ...

  8. R语言与医学统计图形-【12】ggplot2几何对象之条图

    ggplot2绘图系统--几何对象之条图(包括误差条图) 1.条图 格式: geom_bar(mapping = , data = , stat = 'count', #统计变换默认计数 positi ...

  9. 毕业设计之ansible_quan_bbs设置

    ansible创建连接: 客户端(管理节点) 可能需要安装包: yum install -y libselinux-python 实现ssh免密码登陆管理的服务器 [apps@anza ~]$ sud ...

  10. nginx_location

    Nginx location 配置语法 1. location [ = | ~ | ~* | ^~ ] uri { ... } 2. location @name { ... } location 配 ...