Redis cluster 集群部署和配置
一.集群简介
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 集群部署和配置的更多相关文章
- centos6下redis cluster集群部署过程
一般来说,redis主从和mysql主从目的差不多,但redis主从配置很简单,主要在从节点配置文件指定主节点ip和端口,比如:slaveof 192.168.10.10 6379,然后启动主从,主从 ...
- Redis Cluster集群搭建与配置
Redis Cluster是一种服务器sharding分片技术,关于Redis的集群方案应该怎么做,请参考我的另一篇博客http://www.cnblogs.com/xckk/p/6134655.ht ...
- redis cluster集群部署
上一篇http://www.cnblogs.com/qinyujie/p/9029153.html,主要讲解了 redis cluster 集群架构 的优势.redis cluster 和 redis ...
- redis cluster 集群部署
准备工作 1. 安装docker curl -s https://get.docker.com/ | sh 注:一键安装的事最新版docker.已安装docker可跳过此步骤 2. 获取基础镜像 do ...
- K8S部署Redis Cluster集群
kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis 介绍 • Redis代表REmote DI ...
- K8S部署Redis Cluster集群(三主三从模式) - 部署笔记
一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...
- Redis Cluster集群知识学习总结
Redis集群解决方案有两个: 1) Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...
- redis cluster 集群畅谈(三) 之 水平扩容、slave自动化迁移
上一篇http://www.cnblogs.com/qinyujie/p/9029522.html, 主要讲解 实验多master写入.读写分离.实验自动故障切换(高可用性),那么本篇我们就来聊了聊r ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...
随机推荐
- 【linux系统】命令学习(一)ssh
ssh 1.在终端执行命令 ssh -p22 username@host 2.密码输入是看不到内容的 3.登入成功后默认进入的是home目录,就是根目录下的home目录 4.[root@VM-4-1 ...
- FastAPI(六十三)实战开发《在线课程学习系统》梳理系统需要接口
针对上一篇FastAPI(六十二)实战开发<在线课程学习系统>需求分析需求的功能,我们对需要的接口进行梳理,大概的规划出来现有的接口,作为我们第一版的接口的设计出版,然后我们根据设计的接口 ...
- 【GitHub】本地代码上传
本地代码上传GitHub 2019-11-18 20:03:45 by冲冲 1.注册GitHub https://github.com/ 2.安装Git工具 https://git-for-win ...
- Electron跨平台程序破解
1. npm install asar -g 2. asar --version 如果有版本号就继续 3.找到需要解压的软件位置 在app.asar的地址输入 asar e app.asar tm ...
- layui的入门使用
1.如果使用单独的layui插件的话需要先引入jquery的插件,官方建议1.8+的版本. 2.引入后就能根据规则正常使用了.
- 常用的分布式ID生成器
为何需要分布式ID生成器 **本人博客网站 **IT小神 www.itxiaoshen.com **拿我们系统常用Mysql数据库来说,在之前的单体架构基本是单库结构,每个业务表的ID一般从1增,通过 ...
- Python+selenium 之xpath定位
- redis的RDB和AOF两种持久化机制
思维导图:我的redis基础知识汇总 RDB持久化机制的优点 (1)RDB会生成多个数据文件,每个数据文件都代表了某一个时刻中redis的数据,这种多个数据文件的方式,非常适合做冷备,可以将这种完整的 ...
- Codeforces 1303G - Sum of Prefix Sums(李超线段树+点分治)
Codeforces 题面传送门 & 洛谷题面传送门 个人感觉这题称不上毒瘤. 首先看到选一条路径之类的字眼可以轻松想到点分治,也就是我们每次取原树的重心 \(r\) 并将路径分为经过重心和不 ...
- 开始读 Go 源码了
原文链接: 开始读 Go 源码了 学完 Go 的基础知识已经有一段时间了,那么接下来应该学什么呢?有几个方向可以考虑,比如说 Web 开发,网络编程等. 在下一阶段的学习之前,写了一个开源项目|Go ...