Linux学习之Redis集群部署

news2024/12/24 3:39:04

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:6379
   slots:[0-5460] (5461 slots) master
M: 88e66d4df0867bf76015e22cc480be85ed5eb5de 192.168.88.52:6379
   slots:[5461-10922] (5462 slots) master
M: b8968a8c613a389052a2978803dd7fd6d24ca076 192.168.88.53:6379
   slots:[10923-16383] (5461 slots) master
S: 07740e8a77b462dbbb4ab55cade01b102cb3a5d8 192.168.88.54:6379
   replicates 1cbc84ecf3dbde1c3a06d1d7cd8c527da6b7fe32
S: 8615847c6f9ce5c65f6017efcbc8f6e4072ae9d1 192.168.88.55:6379
   replicates 88e66d4df0867bf76015e22cc480be85ed5eb5de
S: 6f766d3638e6e66710743a88f684bac1d252bbef 192.168.88.56:6379
   replicates 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:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 07740e8a77b462dbbb4ab55cade01b102cb3a5d8 192.168.88.54:6379
   slots: (0 slots) slave
   replicates 1cbc84ecf3dbde1c3a06d1d7cd8c527da6b7fe32
S: 8615847c6f9ce5c65f6017efcbc8f6e4072ae9d1 192.168.88.55:6379
   slots: (0 slots) slave
   replicates 88e66d4df0867bf76015e22cc480be85ed5eb5de
S: 6f766d3638e6e66710743a88f684bac1d252bbef 192.168.88.56:6379
   slots: (0 slots) slave
   replicates b8968a8c613a389052a2978803dd7fd6d24ca076
M: 88e66d4df0867bf76015e22cc480be85ed5eb5de 192.168.88.52:6379
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: b8968a8c613a389052a2978803dd7fd6d24ca076 192.168.88.53:6379
   slots:[10923-16383] (5461 slots) master
   1 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.coloradmin.cn/o/1022088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java web基础知识

Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet &#xff0c;一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做&#xff0c;Servlet 初步…

成功的海外网红营销:文化和价值观冲突的应对策略

随着全球数字化和社交媒体的崛起&#xff0c;海外网红营销已经成为企业推广产品和服务的一种重要方式。然而&#xff0c;这种全球性的营销活动也伴随着文化和价值观的多样性&#xff0c;容易导致潜在的冲突和误解。为了取得成功并避免不必要的争议&#xff0c;企业需要深入了解…

从B-21轰炸机看美空军作战战略趋势

源自&#xff1a;北京蓝德信息科技有限公司 图注&#xff1a;The B-21 Raider was unveiled to the public at a ceremony Dec. 2, 2022, in Palmdale, Calif. (U.S. Air Force photo) (一)B-21开发进展 (二)B-21性能研判 声明:公众号转载的文章及图片出于非商业性的教育和科研…

2023 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开

安全之安全(security)博客目录导读 目录 一、幻灯片地址 二、演讲视频 一、幻灯片地址&#xff1a; GitHub - cnrv/RVSC2023: RISC-V Summit China 2023 二、演讲视频&#xff1a; RISCV国际基金会的个人空间-RISCV国际基金会个人主页-哔哩哔哩视频 参考&#xff1a;CNRV …

python+django社区医院诊所医疗管理系统_6t4o8

技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vueCSSpythonScriptjQueryelementui 开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCh…

计算机专业毕业设计项目推荐05-共享汽车管理系统(SpringBoot+Js+Mysql)

共享汽车管理系统&#xff08;SpringBootJsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计…

解码知识图谱:从核心概念到技术实战

目录 1. 概述什么是知识图谱知识图谱与自然语言处理的关系 2. 发展历程语义网络本体论大数据时代的知识图谱知识图谱与深度学习的融合 3. 研究内容知识图谱的建模与表示知识抽取知识图谱的融合与对齐知识图谱的推理知识图谱的评估与验证 4. 知识图谱表示与存储RDF&#xff1a;一…

基于java SpringBoot和HTML实验室预约管理系统设计

摘要 实验室信息管理系统是利用计算机网络技术、数据存储技术、快速数据处理技术对实验室进行全方位管理的计算机软件系统。实验室信息管理系统从最初仅完成数据存储和有限的网络功能&#xff0c;发展到现在可以处理海量数据&#xff0c;具备完善的管理职能&#xff0c;并且能够…

JavaScript中的浅拷贝与深拷贝

前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念&#xff0c;它们在处理对象和数组时具有不同的作用。在编程中&#xff0c;经常需要复制数据以便进行各种操作&#xff0c;但必须注意拷贝的方式&#xff0c;以确保得到预期的结果。 浅拷贝是创建一个新对象或数组&#xf…

D*算法图文详解

前面学习了Dijkstra以及A* 算法的基本原理&#xff0c;对于这两种算法而言&#xff0c;我们都能在有解的情况下找到一条沿着起点到达终点的路径。然而&#xff0c;这两个算法本身都是基于静态地图的&#xff0c;也就是说&#xff1a;当机器人找到路径后开始沿着起点向终点运动的…

不断探索创新 促进中国信息技术发展——南京宏控科技有限公司董事长应富忠

应富忠&#xff0c;男&#xff0c;现任南京宏控科技有限公司董事长、电子系统工程高级工程师&#xff08;技术五级&#xff09;、自动化系统注册工程师&#xff0c;先后被评为“研究所级青年突击手”、“研究所级先进工作者”、“研究所级优秀共产党员”、“南京市级考级优秀”…

微服务保护-授权规则/规则持久化

授权规则 基本规则 授权规则可以对调用方的来源做控制&#xff0c;有白名单和黑名单两种方式。 白名单&#xff1a;来源&#xff08;origin&#xff09;在白名单内的调用者允许访问 黑名单&#xff1a;来源&#xff08;origin&#xff09;在黑名单内的调用者不允许访问 点…

未解之迷——晶振问题导致SWD烧录时芯片no target connected,切换内部晶振后解决了

我所讲的情况是网上总结之外的另一种情况。不是Reset 后卡时间烧录&#xff0c;也不是烧录器问题&#xff0c;引脚问题等。而是STM32CubeMX软件生成问题。 芯片&#xff1a;STM32F103C8T6 某天我做了一块板子&#xff0c;按正常流程烧录&#xff0c;第一次可以烧录&#xff0c…

让Pegasus天马座开发板吃上STM8S标准库

WeCanStudio官方仓库的示例工程,只提供基于STM8S003寄存器方式来开发Pegasus天马座开发板。在此,我将基于官方的工程示例&#xff0c;将STM8S标准库移植到工程中。 先上图&#xff0c;看运行结果: main.c文件 #include "config.h" #include "delay.h"#de…

灯具欧盟CE认证,EMC/LVD/MD等欧盟指令介绍

CE认证产品范围 ​1.灯具类产品; ​2.家用电器设备、电动工具; ​3.个人电脑及其周边设备; ​4.音视频产品; ​5.无线产品; ​6.通讯类类产品; ​7.玩具类产品; ​8.安防产品; ​9.工业机械。 CE认证所需资料 ​1.一般2-3个测试样品; ​2.电路原理图; ​3.产品说明…

基于哈希表对unordered_map和unordered_set的封装

本章完整代码gitee仓库&#xff1a;对unordered_map和unordered_set的封装、unordered_map和unordered_set源码 文章目录 &#x1f36d;1. 哈希表的改造&#x1f36c;1.1 模板参数的改造&#x1f36c;1.2 增加迭代器&#x1f36c;1.3 返回值的修改 &#x1f37c;2. 对unordered…

[计算机入门] 电源选项设置

3.10 电源选项设置 有时候我们的电脑一段时间没有用&#xff0c;会自己关掉屏幕或者直接睡眠&#xff0c;这是电源选项没有设置好导致的。 1、打开控制面板&#xff0c;打开其中的电源选项 2、点击左侧上方的选择关闭显示器的时间 3、进入到编辑计划设置界面&#xff0c;在…

听GPT 讲Istio源代码--pilot(6)

在 Istio 中&#xff0c;Pilot 是 Istio 控制平面的一个重要组件&#xff0c;它具有以下作用&#xff1a; 流量管理: Pilot 负责管理和配置服务之间的网络流量。它通过与底层的服务发现机制&#xff08;如 Kubernetes 或 Consul&#xff09;集成&#xff0c;监测服务注册和注销…

C数据结构二.练习题

一.求级数和 2.求最大子序列问题:设给定一个整数序列 ai.az..,a,(可能有负数).设计一个穷举算法,求a 的最大值。例如,对于序列 A {1,-1,1,-1,-1,1,1,1,1.1,-1,-1.1,-1,1,-1},子序列 A[5..9](1,1,1,1,1)具有最大值5 3.设有两个正整数 m 和n,编写一个算法 gcd(m,n),求它们的最大公…

WhatsApp无法收到验证码怎么办?别急,我来教你

最近收到好多小伙伴的问题咨询&#xff0c;而且大多是同一个问题&#xff1a;“WhatsApp无法验证手机号&#xff0c;也就是手机接收不到6位数字的短信验证码&#xff0c;这可如何是好&#xff1f;” 短信验证码收不到&#xff0c;连点几次重复短信后等待时间越来越久点击致电给…