Redis集群的优点:

无中心架构,分布式提供服务。数据按照slot存储分布在多个redis实例上。增加slave做standby数据副本,用于failover,使集群快速恢复。实现故障auto failover,节点之间通过gossip协议交换状态信息;投票机制完成slave到master角色的提升。支持在线增加或减少节点。降低硬件成本和运维成本,提高系统的扩展性和可用性。

Redis集群的缺点:

client实现复杂,驱动要求实现smart client,缓存slots mapping信息并及时更新。目前仅JedisCluster相对成熟,异常处理部分还不完善,比如常见的“max redirect exception”。客户端的不成熟,影响应用的稳定性,提高开发难度。节点会因为某些原因发生阻塞(阻塞时间大于clutser-node-timeout),被判断下线。这种failover是没有必要,sentinel也存在这种切换场景。

#hosts文件配置

cat >> /etc/hosts << EOF
192.168.5.65 redis65
192.168.5.66 redis65
EOF

一、搭建redis5.0集群

从redis 3.0之后版本支持redis-cluster集群,redis-4.0.0开始支持module,redis-5.0.0开始支持类似于kafka那样的消息队列,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。这样就可以很好的保证redis的高可用性,下面就来部署个Redis Cluster,在两台服务器上部署6个redis节点

IP和端口配置文件名

192.168.5.65:600165_6001/redis.conf

192.168.5.65:600265_6002/redis.conf

192.168.5.65:600365_6003/redis.conf

192.168.5.66:600166_6001/redis.conf

192.168.5.66:600266_6002/redis.conf

192.168.5.66:600366_6003/redis.conf

1、修改系统参数

#修改最大可打开文件数

cat >> /etc/security/limits.conf << EOF
* soft nofile 102400
* hard nofile 102400
EOF

#TCP监听队列大小

echo "net.core.somaxconn = 32767" >> /etc/sysctl.conf
sysctl -p

#OOM相关:vm.overcommit_memory

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p

#开启内核的“Transparent Huge Pages (THP)”特性

echo never > /sys/kernel/mm/transparent_hugepage/enabled

#请将“echo never > /sys/kernel/mm/transparent_hugepage/enabled”加入到文件/etc/rc.local中

2、安装redis并配置redis-cluster

[root@redis65 /]# cd /opt
[root@redis65 /]# wget http://download.redis.io/releases/redis-5.0.0.tar.gz
[root@redis65 /]# tar -zxvf redis-5.0.0.tar.gz
[root@redis65 /]# cd redis-5.0.0/
[root@redis65 /]# make
[root@redis65 /]# make install PREFIX=/usr/local/redis-cluster

#创建实例目录

[root@redis65 redis-5.0.0]# mkdir -p /usr/local/redis-cluster/{65_6001,65_6002,65_6003}
[root@redis66 redis-5.0.0]# mkdir -p /usr/local/redis-cluster/{66_6001,66_6002,66_6003}

#配置官方配置文件,去掉#开头的和空格行

cat redis.conf |grep -v ^# |grep -v ^$

#redis65 6001配置文件

[root@redis65 /]#cd /usr/local/redis-cluster
[root@redis65 redis-cluster]# cat >> 65_6001/redis.conf << EOF
bind 0.0.0.0
protected-mode no
port 6001
daemonize no
dir /usr/local/redis-cluster/65_6001
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/65_6001/nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/redis-cluster/65_6001/redis.pid
logfile /usr/local/redis-cluster/65_6001/redis.log
EOF

#redis65 6002配置文件

[root@redis65 redis-cluster]# sed 's/6001/6002/g' 65_6001/redis.conf > 65_6002/redis.conf

#redis65 6003配置文件

[root@redis65 redis-cluster]# sed 's/6001/6003/g' 65_6001/redis.conf > 65_6003/redis.conf

#写一个启动脚本start-redis-cluster.sh

[root@redis65 /]#cat /usr/local/redis-cluster/start-redis-cluster.sh
#!/bin/sh
REDIS_HOME=/usr/local/redis-cluster
$REDIS_HOME/bin/redis-server $REDIS_HOME/65_6001/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/65_6002/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/65_6003/redis.conf
chmod +x /usr/local/redis-cluster/start-redis-cluster.sh
/usr/local/redis-cluster/start-redis-cluster.sh

#redis66 6001配置文件

[root@redis66 /]# cd /usr/local/redis-cluster
[root@redis66 redis-cluster]# cat >> 66_6001/redis.conf << EOF
bind 0.0.0.0
protected-mode no
port 6001
daemonize no
dir /usr/local/redis-cluster/66_6001
cluster-enabled yes
cluster-config-file /usr/local/redis-cluster/66_6001/nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/redis-cluster/66_6001/redis.pid
logfile /usr/local/redis-cluster/66_6001/redis.log
EOF

#redis66 6002配置文件

[root@redis66 redis-cluster]# sed 's/6001/6002/g' 66_6001/redis.conf > 66_6002/redis.conf

#redis66 6003配置文件

[root@redis66 redis-cluster]# sed 's/6001/6003/g' 66_6001/redis.conf > 66_6003/redis.conf
[root@redis66 /]#cat /usr/local/redis-cluster/start-redis-cluster.sh
#!/bin/sh
REDIS_HOME=/usr/local/redis-cluster
$REDIS_HOME/bin/redis-server $REDIS_HOME/66_6001/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/66_6002/redis.conf
$REDIS_HOME/bin/redis-server $REDIS_HOME/66_6003/redis.conf
chmod +x /usr/local/redis-cluster/start-redis-cluster.sh

#启动redis

/usr/local/redis-cluster/start-redis-cluster.sh

#查看redis进程启动状态

ps -ef | grep redis

#创建redis cluster,如果只是想快速创建和启动redis集群,可使用redis官方提供的脚本create-cluster,注意redis-5.0.0版本开始才支持“--cluster”

cd /usr/local/redis-cluster/bin
./redis-cli --cluster create 192.168.5.65:6001 192.168.5.65:6002 192.168.5.65:6003 192.168.5.66:6001 192.168.5.66:6002 192.168.5.66:6003 --cluster-replicas 1

如果配置项cluster-enabled的值不为yes,则执行时会报错“[ERR] Node 192.168.5.65:6001 is not configured as a cluster node.”。这个时候需要先将cluster-enabled的值改为yes,然后重启redis-server进程,之后才可以重新执行redis-cli创建集群。

redis-cli的参数说明:

1) create

表示创建一个redis集群。

2) --cluster-replicas 1

表示为集群中的每一个主节点指定一个从节点,即一比一的复制

#查看redis进程是否已切换为集群状态(cluster)

ps -ef|grep redis

#停止redis实例,直接使用kill命令即可

kill -9 15025

#命令行工具redis-cli

[root@redis65 /]# ln -s /usr/local/redis-cluster/bin/redis-cli /bin/redis-cli
[root@redis65 bin]# redis-cli -c -p 6001

#查看集群中的节点:

127.0.0.1:6001> cluster nodes

127.0.0.1:6002> set name 65-7001
-> Redirected to slot [5798] located at 192.168.5.66:6001
OK
192.168.5.66:6001> quit
[root@redis65 bin]# redis-cli -c -p 6003
127.0.0.1:6003> get name
-> Redirected to slot [5798] located at 192.168.5.66:6001
"65-7001"
[root@redis65 bin]# redis-cli -h 192.168.5.66 -p 6002

#检查节点状态

[root@redis65 bin]# redis-cli --cluster check 192.168.5.66:6001

#查看集群信息

[root@redis65 bin]# redis-cli -c -p 6003
127.0.0.1:6003> cluster info

#给redis cluster集群加上认证,登录到redis节点执行下面的操作

[root@redis65 /]# redis-cli -h 192.168.5.65 -p 6001 -c
> config set masterauth zxc789
> config set requirepass zxc789
> auth zxc789
> config rewrite

#各个节点都完成上面的3条config操作,重启redis各节点,看下各节点的redis.conf,可以发现最后多了3行内容

[root@redis65 /]# killall redis-server
[root@redis65 /]# /usr/local/redis-cluster/start-redis-cluster.sh
[root@redis66 ~]# cat /usr/local/redis-cluster/66_6001/redis.conf

#加了认证的redis登录

redis-cli -h 192.168.5.65 -p 6001 -c -a 'zxc789'

总结一下:

1)      以上是网上高手组建的,自己唯一不成功的是脚本启动redis不成功,只好手动各个重启了附以下命令:

1. cd  /usr/local/redis-cluster/bin

2. ./redis-server /usr/local/redis-cluster/65_6001/redis.conf

3. ./redis-server /usr/local/redis-cluster/65_6003/redis.conf

4. ./redis-server /usr/local/redis-cluster/65_6002/redis.conf

2)开放  16001,16002,16003 端口

redis 两台服务器组集群相关推荐

  1. redis5.0集群搭建(两台服务器)

    redis5.0集群搭建(两台服务器) 用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master.3 salve 环境. redis 采用 redis-5.0.2 版本. 两台虚拟机都是 C ...

  2. Redis基础与高可用集群架构进阶详解

    一.NoSQL简介 1.问题引入 每年到了过年期间,大家都会自觉自发的组织一场活动,叫做春运!以前我们买票都是到火车站排队,后来呢,有了 12306,有了它以后就更方便了,我们可以在网上买票,但是带来 ...

  3. SpringBoot使用Redis 数据访问(单点、集群、哨兵、连接池、Pipline、分布式框架Redisson、解决方案)

    目录 Redis 文献资料 用Redis编程 Redis模块API 教程和常见问题解答 管理 嵌入式和物联网 故障排除 Redis集群 其他基于Redis的分布式系统 在SSD和永久性存储器上进行Re ...

  4. Redis(3)-高可用与集群

    Redis 高可用与集群 虽然 Redis 可以实现单机的数据持久化,但无论是 RDB 也好或者 AOF 也好,都解决 不了单点宕机问题,即一旦单台 redis 服务器本身出现系统故障.硬件故障等问题 ...

  5. 两台服务器虚拟成一个ip,两台相同服务器ip怎么配置

    两台相同服务器ip怎么配置 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 排查 ...

  6. NoSQL(3) 之Redis主从复制、哨兵和集群介绍及详细搭建步骤

    文章目录 一.主从复制 1.1 主从复制的概念 1.2 主从复制的作用 1.3 主从复制的流程 1.4 部署Redis 主从复制步骤 1)首先要搭建redis,在之前的博客写过, 具体可参考:NoSQ ...

  7. Redis Cluster高可用(HA)集群环境搭建详细步骤

    1.为什么要有集群 由于Redis主从复制架构每个数据库都要保存整个集群中的所有数据,容易形成木桶效应,所以Redis3.0之后的版本添加特性就是集群(Cluster) 2.Redis集群架构说明 架 ...

  8. Redis系列教程(五):Redis哨兵、复制、集群的设计原理,以及区别

    前一篇文章高并发架构系列:Redis为什么是单线程.及高并发快的3大原因详解谈了Redis高并发快的3个原因,本篇主要谈Redis的高可用,两篇合起来就可以把redis的高并发和高可用搞清楚了. 谈到 ...

  9. Redis系列教程(二):详解Redis的存储类型、集群架构、以及应用场景

    高并发架构系列 高并发架构系列:数据库主从同步的3种一致性方案实现,及优劣比较 高并发架构系列:Spring Cloud的核心成员.以及架构实现详细介绍 高并发架构系列:服务注册与发现的实现原理.及实 ...

最新文章

  1. 轻松理解正向代理与反向代理
  2. selenium等待定位标签加载完再执行
  3. python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II
  4. 删除归档_备份与归档的“罗生门”
  5. Lasso回归算法: 坐标轴下降法与最小角回归法小结
  6. 蒙特利尔问题(三门问题)的解释
  7. Python3.8 安装gmpy2 教程, 无法安装gmpy2解决方案
  8. android studio没有logcat窗口_区块链研究实验室|从Android调用区块链智能合约
  9. C# 简单实现QQ截图功能
  10. oracle sqlldr命令6,oracle sqlldr命令
  11. thinkphp5微信公众号支付
  12. 冰山數據登榜《互联网周刊》2022数据标注公司排行
  13. 闲谈寻址-DNS的多级缓存系统
  14. hustoj安装16种判题语言
  15. PGP在加密技术中的应用
  16. 练习二:工作日天气预报
  17. Core Animation学习笔记—第二节Setting up Layer Objects
  18. 《HelloGitHub》第 79 期
  19. 数据结构大作业-DBLP科学文献管理系统(一) XML解析,文件哈希,C++线程
  20. linux类似vc的软件,linux下能否使用VC之类的软件?

热门文章

  1. sql语法基础,sql分组查询
  2. 【MATLAB】根据已有数据绘制Bode图、时域曲线等(进阶版)
  3. python文件去重算法_使用Python检测文章抄袭及去重算法原理解析
  4. p12..Matplotlib:Contours等高线图
  5. axios获取html页面,axios 获取后台数据
  6. python写网络爬虫编程环境设置
  7. 通信达股票交易接口-Java语言
  8. IE如何打开兼容模式
  9. 新媒体运营绩效考核标准
  10. 最省心的Python版本和第三方库管理——初探Anaconda