这次讲讲如何搭建redis集群,官方的介绍版本是三主三从的形式,这次就这样演示,并看看集群的一些特性。

(一)安装虚拟机

源码:https://github.com/limingios/netFuture/tree/master/redis-cluster-net ,可以查看,之前的文章,vagrant的介绍docker【中级】。

  • 环境

192.168.79.100
192.168.79.101
192.168.79.102
每台服务器1主1从,共3主3从
相关安装包存储路径:/root/soft/

系统类型 IP地址 节点角色 CPU Memory Hostname
Centos7 192.168.79.100 redis-master-1 2 2G redis-master-1
Centos7 192.168.79.101 redis-master-2 2 2G redis-master-2
Centos7 192.168.79.102 redis-master-3 2 2G redis-master-3

(二)部署

  • 准备工作

三台主机都在root 目录下创建soft

mkdir soft

  • 下载 79.100机器
cd soft
wget http://download.redis.io/releases/redis-3.2.9.tar.gz
tar xvf redis-3.2.9.tar.gz
cd redis-3.2.9

  • 79.100机器安装
make install PREFIX=/root/soft/redis-3.2.9
  • 79.100机器配置
cd /root/soft/redis-3.2.9
#创建集群配置文件夹
mkdir cluster-conf
cd cluster-conf
#创建集群端口文件夹
mkdir 7001
mkdir 7002
cd 7001
cp /root/soft/redis-3.2.9/redis.conf ./
cd ../7002
cp /root/soft/redis-3.2.9/redis.conf ./

79.100机器修改7001下的redis.conf,查找esc键,输入/名称

pwd
vi redis.conf
  1. bind 127.0.0.1 修改 bind 0.0.0.0
  2. port 6379 修改 port 7001
  3. logfile “” 修改 logfile “/root/soft/redis-3.2.9/cluster-conf/7001/redis.log”
  4. dir ./ 修改dir /root/soft/redis-3.2.9/cluster-conf/7001
  5. appendonly no修改appendonly yes
  6. 文件末尾添加
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000

79.100机器修改7002下的redis.conf,查找esc键,输入/名称

cd /root/soft/redis-3.2.9/cluster-conf/7002
pwd
vi redis.conf
  1. bind 127.0.0.1 修改 bind 0.0.0.0
  2. port 6379 修改 port 7002
  3. logfile “” 修改 logfile “/root/soft/redis-3.2.9/cluster-conf/7002/redis.log”
  4. dir ./ 修改dir /root/soft/redis-3.2.9/cluster-conf/7002
  5. appendonly no修改appendonly yes
  6. 文件末尾添加
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000

  • 配置说明
    1.端口号。

port

2.指定了记录日志的文件。

logfile

3.数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录。

dir

4.是否开启集群

cluster-enabled

5.集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突

cluster-config-file nodes.conf

6.节点互连超时的阀值。集群节点超时毫秒数

cluster-node-timeout

7.默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

appendonly

  • scp拷贝到101,102主机
cd /root/soft
scp -r redis-3.2.9/ root@192.168.79.101:/root/soft/
scp -r redis-3.2.9/ root@192.168.79.102:/root/soft/

  • 启动100,101,102
#100 主机
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7002/redis.conf &
#101 主机
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7002/redis.conf &
#102 主机
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7001/redis.conf &
/root/soft/redis-3.2.9/bin/redis-server /root/soft/redis-3.2.9/cluster-conf/7002/redis.conf &

  • 创建集群

100,101,102机器执行,安装ruby 2.4.1

yum -y install curlgpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB curl -sSL https://get.rvm.io | bash -s stablefind / -name rvm -printsource /usr/local/rvm/scripts/rvmrvm install 2.4.1rvm use 2.4.1 --defaultgem install redis

100机器执行

cd /root/soft/redis-3.2.9/src
./redis-trib.rb create --replicas 1 192.168.79.100:7001 192.168.79.101:7001 192.168.79.102:7001 192.168.79.100:7002 192.168.79.101:7002 192.168.79.102:7002
#输入yes

redis-trib.rb是redis作者用ruby完成的是对redis cluster管理工具,
集成在redis的源码src目录下。

名称 作用
call 在集群全部节点上执行命令
set-timeout 设置集群节点间心跳连接的超时时间
del-node 从集群中删除节点
reshard 在线迁移slot
check 检查集群
import 将外部redis数据导入集群
add-node 将新节点加入集群
create 创建集群
info 查看集群信息
fix 修复集群
rebalance 平衡集群节点slot数量
  • 查看连接效果

里面三个master,三个slave。

cd /root/soft/redis-3.2.9/src./redis-cli -c -p 7001

  • 查看集群
cd /root/soft/redis-3.2.9/src./redis-cli -c -p 7001cluster nodes
  • 宕机重启集群
cd /root/soft/redis-3.2.9/src
./redis-trib.rb fix 192.168.79.100:7001

分片的方式,一个集群有16383的槽,根据主相对平均的方式来分配的。

(三)集群管理

增加节点:./redis-trib.rb add-node ip:port ip:port
第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口.
移除节点:redis-trib del-node ip:port <node-id>
第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址
改变一个从节点的主节点cluster replicate master-node-id

1.主节点挂了,是没有问题的正常。
2.从节点挂了,肯定是可以正常访问的。
3.两个都挂了(一主一从),不能用了

集群的方式不能使用select 1 直接选择数据库。但是它有槽的概念,cluster keyslot wst。可以看到这个key在那个槽位。

理论:redis最大的集群节点数16384,最大槽点数16384。一个集群16384个槽点。像微博,淘宝,他们的集群有个共性:N个集群,集群不在同一个机房中。

PS:redis的集群搭建基本就这样完毕了,写文章用了1个小时,但是搭建环境搞了我2个小时,家里的网速太不稳定了。就像咱们正常的情况可能应用都能承受的住,一旦突然情况量上去可能就无法承受,通过集群的很大好处,分担压力,容灾,众人拾柴火焰高。

软件架构-redis特性和集群特性(下)相关推荐

  1. 软件架构-redis特性和集群特性(上)

    上次已经说到了redis其实就是nosql,这次具体redis是个什么样的东西. (一)Redis安装 通过虚拟机的方式在centos7下面安装下,这次我不通过docker的方式了,按照正常的方式,让 ...

  2. CentOS7下安装Redis伪集群(基于Redis官方Cluster集群模式版本redis-5.0.10)

    文章目录 Redis简介 什么是redis redis的优点 Redis集群都有哪些模式 主从复制(Master-Slave Replication) 哨兵模式(Sentinel) Redis官方 C ...

  3. Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)

    文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...

  4. zookeeper客户端使用与集群特性

    zookeeper客户端使用与集群特性 zookeeper Java客户端 项目构建 创建客户端实例 测试结果 创建zookeeper实例参数说明 演示java客户端增删查改zookeeper节点 A ...

  5. 云计算考证笔记、集群特性、HA

    目录 集群特性: 内存复用技术: 内存共享,写时复制: 内存置换: 内存气泡: NUMA: 虚拟化NUMA: 物理机NUMA: HA (High Available): 热迁移: 手工热迁移: 动态资 ...

  6. 集群空间服务器接收不到消息,解决Redis集群条件下键空间通知服务器接收不到消息的问题...

    解决Redis集群条件下键空间通知服务器接收不到消息的问题 键空间通知介绍 键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件. 可以通过对redis的 ...

  7. Redis Cluster(集群)模式下批量删除key

    1 背景 SpringSecurity版本升级后,发现会有反序列化失败问题. 所以需要将Redis中存储token相关key批量删除掉: access:* auth_to_access:* auth: ...

  8. Redis学习笔记(十八) 集群(下)

    复制和故障转移 Redis集群中的节点分为主节点(master)和从节点(slave),其中主节点用于处理槽,而从节点则用于复制某个主节点,并在被复制 的主节点下线时,代替下线主节点继续处理命令请求. ...

  9. 关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案

    关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案 今天在做项目的时候,需要使用到mget命令,通过一个批量的key去获取对应的value集合,但是取值的时候,报了这个错 ...

  10. 2.zookeeper客户端使用与集群特性

    主要内容: 客户端 zookeeper客户端简介,C客户端 客户端连接参数说明 客户端CRUD 客户端监听 集群 集群架构说明 集群配置及参数说明 选举投票机制 主从复制机制 一.客户端API常规应用 ...

最新文章

  1. 田志刚:企业知识库如何跟Google、百度竞争?
  2. IOS App 后台运行
  3. win 安装Polygon
  4. 类对接口的实现不叫继承_Java多态的实现机制是什么,看完你就知道(值得收藏)...
  5. 【学习笔记】月末操作-自动清账
  6. jsp通过include指令引入html乱码的解决方法
  7. var与dynamic区别
  8. 在CentOS7下安装MySQL8数据库
  9. MySql表大小、行大小和列大小的限制
  10. 巧用「打印」功能实现PDF单页提取
  11. 【java】超市购物小程序
  12. JavaBean对象转Map对象
  13. 怎么把word目录里面的“目录”两个字去掉
  14. SVN修改文件夹名称
  15. 表单checkbook获取已选择的值
  16. oracle19c特性以及CDB环境搭建
  17. 【Jon】连接Mysql数据库出现1046错误
  18. 虚拟机与Linu系统安装与配置详细教程
  19. arduino 矩阵肩膀_表情矩阵——卖萌无需多言(arduino)
  20. python浮点数加整数_Python中整数和浮点数运算

热门文章

  1. 数据驱动进化优化(data-driven evolutionary optimization)
  2. 阿里云服务器安装MySql8.0.26
  3. 慕尼黑大学计算机研究生申请,慕尼黑大学读研
  4. 微信小游戏马甲包过审策略
  5. Excel 2010 VBA 入门 109 获取某列最后非空单元格行号
  6. 装机摸鱼日记01--DDR3AMD专用内存+QHQF(6400T)试水
  7. IMU与Gyro及其它相关
  8. 在HTML中什么表示水平线,HTML中加入水平线的标签是( )
  9. Python翻译库 pygtrans 谷歌翻译
  10. 信息泄露事件频发 快递行业的隐私面单之战