Linux学习之Redis集群部署

Redis集群部署

准备集群环境

在这里插入图片描述

创建集群

# 准备集群环境--配置192.168.88.51(host51)
[root@localhost ~]# yum install -y redis
[root@host51 ~]# vim /etc/redis.conf
bind 192.168.88.51
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 5000
[root@host51 ~]# ss -tnlp
State      Recv-Q     Send-Q         Local Address:Port          Peer Address:Port    Process                                                                               
LISTEN     0          128                  0.0.0.0:22                 0.0.0.0:*        users:(("sshd",pid=548,fd=3))                                                        
LISTEN     0          128            192.168.88.51:16379              0.0.0.0:*        users:(("redis-server",pid=1080,fd=8))                                               
LISTEN     0          128            192.168.88.51:6379               0.0.0.0:*        users:(("redis-server",pid=1080,fd=6))    
# 查看集群状态
[root@host51 ~]# redis-cli -h 192.168.88.51
192.168.88.51:6379> cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:1
cluster_size:0
cluster_current_epoch:0
cluster_my_epoch:0
cluster_stats_messages_sent:0
cluster_stats_messages_received:0# 注:其它5台机器配置同上,只需修改redis.conf中bind的值为本机的ip,配置完成后,启动redis服务#创建集群
1、在任意一台redis服务器上都可以执行创建集群的命令。
2--cluster-replicas 1 给每个master服务器分配一台slave服务器,每个主至少要分配1台slave服务器,不然无法实现redis服务的高可用。
3、创建集群时,会自动创建主从角色,默认把主机列表中的前3台服务器创建为Master角色的redis服务器,剩下的均配置为slave角色服务器。
4、创建集群时,会自动给master角色的主机分配hash槽 ,通过hash槽实现数据的分布式存储。
[root@host51 ~]# redis-cli --cluster create 192.168.88.51:6379  192.168.88.52:6379  192.168.88.53:6379  192.168.88.54:6379 192.168.88.55:6379 192.168.88.56:6379 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 192.168.88.54:6379 to 192.168.88.51:6379
Adding replica 192.168.88.55:6379 to 192.168.88.52:6379
Adding replica 192.168.88.56:6379 to 192.168.88.53:6379
M: 1cbc84ecf3dbde1c3a06d1d7cd8c527da6b7fe32 192.168.88.51:6379slots:[0-5460] (5461 slots) master
M: 88e66d4df0867bf76015e22cc480be85ed5eb5de 192.168.88.52:6379slots:[5461-10922] (5462 slots) master
M: b8968a8c613a389052a2978803dd7fd6d24ca076 192.168.88.53:6379slots:[10923-16383] (5461 slots) master
S: 07740e8a77b462dbbb4ab55cade01b102cb3a5d8 192.168.88.54:6379replicates 1cbc84ecf3dbde1c3a06d1d7cd8c527da6b7fe32
S: 8615847c6f9ce5c65f6017efcbc8f6e4072ae9d1 192.168.88.55:6379replicates 88e66d4df0867bf76015e22cc480be85ed5eb5de
S: 6f766d3638e6e66710743a88f684bac1d252bbef 192.168.88.56:6379replicates b8968a8c613a389052a2978803dd7fd6d24ca076
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 192.168.88.51:6379)
M: 1cbc84ecf3dbde1c3a06d1d7cd8c527da6b7fe32 192.168.88.51:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 07740e8a77b462dbbb4ab55cade01b102cb3a5d8 192.168.88.54:6379slots: (0 slots) slavereplicates 1cbc84ecf3dbde1c3a06d1d7cd8c527da6b7fe32
S: 8615847c6f9ce5c65f6017efcbc8f6e4072ae9d1 192.168.88.55:6379slots: (0 slots) slavereplicates 88e66d4df0867bf76015e22cc480be85ed5eb5de
S: 6f766d3638e6e66710743a88f684bac1d252bbef 192.168.88.56:6379slots: (0 slots) slavereplicates b8968a8c613a389052a2978803dd7fd6d24ca076
M: 88e66d4df0867bf76015e22cc480be85ed5eb5de 192.168.88.52:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
M: b8968a8c613a389052a2978803dd7fd6d24ca076 192.168.88.53:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# 查看集群信息
第一列:主服务器ip地址
第二列:主服务器ID
第三列:存储变量个数
第四列:hash槽个数 (hash槽的作用在集群存储工程过程里讲)
第五列:从服务器数量
[root@host51 ~]# redis-cli --cluster info 192.168.88.51:6379
192.168.88.51:6379 (1cbc84ec...) -> 0 keys | 5461 slots | 1 slaves.
192.168.88.52:6379 (88e66d4d...) -> 0 keys | 5462 slots | 1 slaves.
192.168.88.53:6379 (b8968a8c...) -> 0 keys | 5461 slots | 1 slaves.
[OK] 0 keys in 3 masters.
0.00 keys per slot on average.
# 访问集群
[root@host51 ~]# redis-cli -c -h 192.168.88.51 -p 6379
192.168.88.51:6379> set school nsd2306
-> Redirected to slot [8455] located at 192.168.88.52:6379
OK
192.168.88.52:6379> set teacher laoyang
-> Redirected to slot [12541] located at 192.168.88.53:6379
OK
192.168.88.53:6379> set class NSD
-> Redirected to slot [7755] located at 192.168.88.52:6379
OK
#会发现3个变量被分别存储到集群中的master服务器上,实现了数据的分布式存储。当连接集群中的任意一台redis服务器存储数据时,会调用集群CRC16算法 得出此次存储变量使用的hash 槽,然后连接hash 槽 所在的master服务器存储变量。
#在创建集群时会把默认的16384个槽平均的分配给集群中的3个master服务器。可以通过查看集群信息查看每个master服务器占用hash槽的个数。
[root@host51 ~]# redis-cli  --cluster  info  192.168.88.51:6379
192.168.88.51:6379 (1cbc84ec...) -> 0 keys | 5461 slots | 1 slaves.
192.168.88.52:6379 (88e66d4d...) -> 2 keys | 5462 slots | 1 slaves.
192.168.88.53:6379 (b8968a8c...) -> 1 keys | 5461 slots | 1 slaves.
[OK] 3 keys in 3 masters.
0.00 keys per slot on average.
# 集群中slave角色的主机会自动同步master角色主机的数据,实现数据的自动备份,
# 分别连接集群中的3台slave服务器查看变量
[root@host51 ~]# redis-cli -c -h 192.168.88.54 -p 6379
192.168.88.54:6379> keys *
(empty list or set)
192.168.88.54:6379> exit
[root@host51 ~]# redis-cli -c -h 192.168.88.55 -p 6379
192.168.88.55:6379> keys *
1) "class"
2) "school"
192.168.88.55:6379> exit
[root@host51 ~]# redis-cli -c -h 192.168.88.56 -p 6379
192.168.88.56:6379> keys *
1) "teacher"
# 当master角色的服务器宕机时,对应的slave服务器会升级为master 并接手对应的hash槽,实现redis服务的高可用,例如停止host53主机的redis服务,对应的从会升级为master 。(当宕机的master恢复后 自动做当前主的从服务器)
# 停止53的redis服务
[root@host53 ~]# systemctl stop redis
# 查看集群信息
[root@host51 ~]# redis-cli --cluster info 192.168.88.51:6379
Could not connect to Redis at 192.168.88.53:6379: Connection refused
192.168.88.51:6379 (1cbc84ec...) -> 1 keys | 5461 slots | 1 slaves.
192.168.88.56:6379 (6f766d36...) -> 2 keys | 5461 slots | 0 slaves.
192.168.88.52:6379 (88e66d4d...) -> 3 keys | 5462 slots | 1 slaves.
[OK] 6 keys in 3 masters.
0.00 keys per slot on average.
# 53上启动redis服务
[root@host51 ~]# redis-cli --cluster info 192.168.88.51:6379
192.168.88.51:6379 (1cbc84ec...) -> 1 keys | 5461 slots | 1 slaves.
192.168.88.56:6379 (6f766d36...) -> 2 keys | 5461 slots | 1 slaves.
192.168.88.52:6379 (88e66d4d...) -> 3 keys | 5462 slots | 1 slaves.
[OK] 6 keys in 3 masters.
0.00 keys per slot on average.
# 存储数据脚本
[root@redis64 ~]# vim /usr/local/nginx/html/set.php
<?php
$redis_list = ['192.168.88.51:6379','192.168.88.52:6379','192.168.88.53:6379','192.168.88.54:6379','192.168.88.55:6379','192.168.88.56:6379'];
$client = new RedisCluster(NUll,$redis_list);
$client->set("i","tarenaA ");
$client->set("j","tarenaB ");
$client->set("k","tarenaC ");
echo "save ok\n";
?>[root@host51 ~]# redis-cli -c -h 192.168.88.51 -p 6379
192.168.88.51:6379> keys *
1) "j"
192.168.88.51:6379> exit
[root@host51 ~]# redis-cli -c -h 192.168.88.52 -p 6379
192.168.88.52:6379> keys *
1) "class"
2) "k"
3) "school"
192.168.88.52:6379> exit
[root@host51 ~]# redis-cli -c -h 192.168.88.53 -p 6379
192.168.88.53:6379> keys *
1) "teacher"
2) "i"
# 查看数据脚本
<?php
$redis_list = ['192.168.88.51:6379','192.168.88.52:6379','192.168.88.53:6379','192.168.88.54:6379','192.168.88.55:6379','192.168.88.56:6379'];  //定义redis服务器列表
$client = new RedisCluster(NUll,$redis_list); //定义连接redis服务命令
echo $client->get("i");  //获取变量i 的数据
echo $client->get("j");  //获取变量j 的数据
echo $client->get("k");  //获取变量k 的数据
?>
# 访问脚本,查看数据
[root@redis64 ~]# curl localhost/get_data.php
tarenaA tarenaB tarenaC
# 命令行连接redis集群主机查看数据
[root@host51 ~]# redis-cli -c -h 192.168.88.51 -p 6379
192.168.88.51:6379> keys *
1) "j"
192.168.88.51:6379> exit
[root@host51 ~]# redis-cli -c -h 192.168.88.52 -p 6379
192.168.88.52:6379> keys *
1) "class"
2) "k"
3) "school"
192.168.88.52:6379> exit
[root@host51 ~]# redis-cli -c -h 192.168.88.53 -p 6379
192.168.88.53:6379> keys *
1) "teacher"
2) "i"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/136044.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

malloc是如何实现内存分配的?

文章目录 前言一、malloc实现原理概括&#xff1f;二、brk() 函数与mmap()函数三、mmap实现原理普通读写与mmap对比mmap内存映射实现过程mmap 的适用场景 前言 在C和C中&#xff0c;malloc函数是用于动态分配内存的常用函数。本文将深入探究malloc函数的内存分配实现机制&…

【Vue入门】语法 —— 插值、指令、过滤器、计算属性、监听器

目录 一、模版语法 1.1 插值 1.1.1 文本 1.1.2 html解析 1.1.3 属性 1.1.4 表达式 1.2 指令 1.2.1 核心指令 1.2.3 动态参数 二、过滤器 2.1 局部过滤器 2.2 全局过滤器 三、计算属性 四、监听器 五、排座案例 小结&#xff1a;计算属性和监听属性的区别 一、模…

怎么防止360安全卫士修改默认浏览器?

默认的浏览器 原先选项是360极速浏览器&#xff08;如果有安装的话&#xff09;&#xff0c;我这里改成了Chrome。 先解锁 才能修改。

今年嵌入式行情怎么样?

今年嵌入式行情怎么样&#xff1f; 嵌入式技术今年可以说是IT领域中最炙手可热的之一。随着中年危机和内卷问题的出现&#xff0c;越来越多的互联网从业者将目光投向了嵌入式领域。国内的嵌入式市场一直受终端需求变化的影响而波动&#xff0c;但随着国内产业自主化的发展趋势…

uniapp 小程序 父组件调用子组件方法

答案&#xff1a;配合小程序API > this.selectComponent("")&#xff0c;来选择组件&#xff0c;再使用$vm选择组件实例&#xff0c;再调用方法&#xff0c;或者data 1 设置组件的id,如果你的多端&#xff0c;请跟据情况设置ref,class,id&#xff0c;以便通过小…

9.18号作业

完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两个按钮…

如何将 JavaScript Excel XLSX 查看器添加到Web应用程序

在 JavaScript 中创建 Excel 查看器可能是一项艰巨的任务&#xff0c;但使用 SpreadJS JavaScript 电子表格&#xff0c;创建过程要简单得多。在本教程博客中&#xff0c;我们将向您展示如何使用 SpreadJS 的强大功能来创建一个查看器&#xff0c;该查看器允许您在 Web 浏览器中…

with ldid... /opt/MonkeyDev/bin/md: line 326: ldid: command not found

吐槽傻逼xcode 根据提示 执行了这个脚本/opt/MonkeyDev/bin/md 往这里面添加你brew install 安装文件的目录即可

【实验】H3C校园双出口配置案例,可跟做!

【微|信|公|众|号&#xff1a;厦门微思网络】 1.案例拓补 该拓扑图中的校园网内部分为两个网段&#xff1a;一个为学生校舍网段&#xff08;192.168.2.0&#xff09;&#xff0c;主要访问电信提供的internet服务器&#xff1b;另外一个网段为校园办公和教学用网段&#xff08;…

操作系统的体系结构

一、内核结构 操作系统内核也有两种类别&#xff1a;大内核结构、微内核结构 大内核结构&#xff1a;也叫宏内核/单内核。将操作系统的主要功能模块都作为操作系统内核。大内核结构包括进程管理、存储器管理、设备管理等功能&#xff08;第四层&#xff09;和时钟管理、中断处理…

爬虫工作者必备:使用爬虫ip轻松获得最强辅助

在进行网络数据爬取时&#xff0c;爬虫ip成为了爬虫工作者们的得力辅助。通过使用爬虫ip&#xff0c;可以实现IP地址的伪装和分布式请求&#xff0c;有效规避访问限制和提高爬取效率。本文将为爬虫工作者们分享关于使用爬虫ip的知识&#xff0c;帮助您轻松获取最强辅助&#xf…

【SpringMVC】基于 Spring 的 Web 层MVC 框架

&#x1f384;欢迎来到边境矢梦的csdn博文&#x1f384; &#x1f384;本文主要梳理SpringMVC : 基于 Spring 的 Web 层MVC 框架 &#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下…

VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网

1、首先打开我们的虚拟网络编辑器 2、查看我们的网关 3、查看IP池&#xff0c;根据需求自己设置 4、打开centos7虚拟机 编辑网卡配置 vim /etc/sysconfig/network-scripts/ifcfg-ens160####我的网卡是ens160TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic …

「聊设计模式」之原型模式(Prototype)

&#x1f3c6;本文收录于《聊设计模式》专栏&#xff0c;专门攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎持续关注&&收藏&&订阅&#xff01; 前言 设计模式是软件开发中经过长期实践总结的经验和规范&#…

git 查看当前版本号

你看&#xff0c;那个人好像一条狗哎。 ——周星驰 《大话西游》 要查看当前 Git 仓库的版本号&#xff0c;您可以使用以下命令&#xff1a; git log --oneline -n 1 这会显示最近一次的提交信息&#xff0c;包括提交的哈希值&#xff08;版本号&#xff09;和提交的摘要信息…

微服务保护-流量控制

流量控制 雪崩问题虽然有四种方案&#xff0c;但是限流是避免服务因突发的流量而发生故障&#xff0c;是对微服务雪崩问题的预防。我们先学习这种模式 簇点链路 当请求进入微服务时&#xff0c;首先会访问DispatcherServlet&#xff0c;然后进入Controller、Service、Mapper&…

vue基础知识十三:Vue中的$nextTick有什么作用?

一、NextTick是什么 官方对其的定义 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM 什么意思呢&#xff1f; 我们可以理解成&#xff0c;Vue 在更新 DOM 时是异步执行的。当数据发生变化&#xff0c;Vue将开启一个异…

神经网络 01(介绍)

一、神经网络 人工神经网络 (Artificial Neural Network&#xff0c;简写为ANN)也简称为神经网络 (NN)&#xff0c;是一种模仿生物神经网络结构和功能的 计算模型。人脑可以看做是一个生物神经网络&#xff0c;由众多的神经元连接而成。各个神经元传递复杂的电信号&#xff0c…

HTTP代理与VPN:网络代理技术的比较

HTTP代理和VPN是两种常见的网络代理技术&#xff0c;它们可以帮助用户隐藏自己的IP地址、保护网络隐私、绕过网络限制等。本文将介绍HTTP代理和VPN的定义、工作原理、优缺点以及使用场景。 一、HTTP代理 HTTP代理是一种通过代理服务器转发网络请求的技术。当用户发起网络请求时…

C++ - map 和 set的 例题

前言 本博客在 一下文章关于 map 和 set 讲解之下&#xff0c;对 map 当中的 operator[] &#xff08;&#xff09;函数的功能运用&#xff0c;感受 map 功能强大。 349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回…