5.搭建集群

1.配置机器1

  • 在演示中,192.168.12.107为当前ubuntu机器的ip
  • 在192.168.12.107上进入Desktop目录,创建redis目录
  • 在redis目录下创建文件7000.conf,编辑内容如下

port 7000
bind 192.168.12.107
daemonize yes
pidfile 7000.pid
cluster-enabled yes
cluster-config-file 7000_node.conf
cluster-node-timeout 15000
appendonly yes

  • 在redis目录下创建文件7001.conf,编辑内容如下

port 7001
bind 192.168.12.107
daemonize yes
pidfile 7001.pid
cluster-enabled yes
cluster-config-file 7001_node.conf
cluster-node-timeout 15000
appendonly yes

  • 在redis目录下创建文件7002.conf,编辑内容如下

port 7002
bind 192.168.12.107
daemonize yes
pidfile 7002.pid
cluster-enabled yes
cluster-config-file 7002_node.conf
cluster-node-timeout 15000
appendonly yes

  • 总结:三个文件的配置区别在port、pidfile、cluster-config-file三项
  • 使用配置文件启动redis服务

redis-server7000.conf
redis-server 7001.conf
redis-server 7002.conf

 

 

2.配置机器2

  • 在演示中,192.168.12.84为学生的一台ubuntu机器的ip,为了演示方便,使用ssh命令连接

ssh 192.168.12.84

  • 在192.168.12.84上进入Desktop目录,创建redis目录
  • 在redis目录下创建文件7003.conf,编辑内容如下

port 7003
bind 192.168.12.84
daemonize yes
pidfile 7003.pid
cluster-enabled yes
cluster-config-file 7003_node.conf
cluster-node-timeout 15000
appendonly yes

  • 在redis目录下创建文件7004.conf,编辑内容如下

port 7004
bind 192.168.12.84
daemonize yes
pidfile 7004.pid
cluster-enabled yes
cluster-config-file 7004_node.conf
cluster-node-timeout 15000
appendonly yes

  • 在redis目录下创建文件7005.conf,编辑内容如下

port 7005
bind 192.168.12.84
daemonize yes
pidfile 7005.pid
cluster-enabled yes
cluster-config-file 7005_node.conf
cluster-node-timeout 15000
appendonly yes

  • 总结:三个文件的配置区别在port、pidfile、cluster-config-file三项
  • 使用配置文件启动redis服务

redis-server7003.conf
redis-server 7004.conf
redis-server 7005.conf

 

 

3.创建集群

  • redis的安装包中包含了redis-trib.rb,用于创建集群
  • 接下来的操作在192.168.12.107机器上进行
  • 将命令复制,这样可以在任何目录下调用此命令

sudo cp/usr/share/doc/redis-tools/examples/redis-trib.rb /usr/local/bin/

  • 安装ruby环境,因为redis-trib.rb是用ruby开发的

sudo apt-get install ruby

  • 运行如下命令创建集群

redis-trib.rb create --replicas1 192.168.12.107:7000 192.168.12.107:7001 192.168.12.107:7002 192.168.12.84:7003 192.168.12.84:7004  192.168.12.84:7005

  • 执行上面这个指令在某些机器上可能会报错,主要原因是由于安装的 ruby 不是最新版本
  • 天朝的防火墙导致无法下载最新版本,所以需要设置 gem 的源
  • 解决办法如下:

-- 先查看自己的 gem 源是什么地址
gem source -l   --
如果是https://rubygems.org/  就需要更换
-- 更换指令为
gem sources --add
https://gems.ruby-china.org/ --remove https://rubygems.org/
-- 通过 gem 安装 redis 的相关依赖
sudo gem install redis
-- 然后重新执行指令
redis-trib.rb create --replicas 1 192.168.12.107:7000 192.168.12.107:7001  192.168.12.107:7002 192.168.12.84:7003  192.168.12.84:7004  192.168.12.84:7005

 

 

数据验证

  • 根据上图可以看出,当前搭建的主服务器为7000、7001、7003,对应的从服务器是7004、7005、7002
  • 在192.168.12.107机器上连接7002,加参数-c表示连接到集群

redis-cli -h 192.168.12.107 -c-p 7002

  • 写入数据

set hello world

 

在哪个服务器上写数据:CRC16

  • redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据
  • Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (hash slot)的方式来分配的。redis cluster 默认分配了 16384 个slot,当我们set一个key 时,会用CRC16算法来取模得到所属的slot,然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384。所以我们在测试的时候看到set 和 get 的时候,直接跳转到了7000端口的节点
  • Redis 集群会把数据存在一个 master 节点,然后在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master
  • 需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了

 

 

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

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

相关文章

知识管理系统

一 :概述知识管理中, 一般是设定学习目标, 有针对性的收集材料,然后学习更有效;另外如见到以前总结过的内容, 并对自己有启发的也可以保存, 以修改以前写过的文章;而学习目标是什么&…

LeetCode 第 36 场双周赛(304/2204,前13.8%)

文章目录1. 比赛结果2. 题目1. LeetCode 5515. 设计停车系统 easy2. LeetCode 5516. 警告一小时内使用相同员工卡大于等于三次的人 medium3. LeetCode 5518. 给定行和列的和求可行矩阵 medium4. LeetCode 5517. 找到处理最多请求的服务器 hard1. 比赛结果 做出来3题&#xff0…

数据库实例:用户注册

1.根据结构创建表的脚本如下 createtable py_users( id int unsigned auto_increment not null primary key, uname varchar(20) not null, upwd char(40) not null, is_delete bit not null default 0 ); 如下流程图,接下来的代码就按照这个逻辑来写 2.创建user…

android 应用在启动后进行全局的的初始化操作

例如对于Volley的使用: 1:定义一个类使其继承Application package com.wzh.app;import com.wzh.volley.WzhVolley; import android.app.Application; import android.util.Log;public class WzhShshtApp extends Application{Overridepublic void onCrea…

HBase原理

目录 HBase原理 1 HBase架构 2 HBase中的核心概念 3 HBase的存储机制 4 HBase的寻址机制 5 HBase的读写流程 6 HBase的设计 7 HBase和Hive的整合 HBase原理 1 HBase架构 HBase的架构为主从架构,HMaster为主节点,HRegionServer为从节点 &#x…

数据库实例:用户登录

如下遍流程图,接下来的代码就按照这个逻辑来写 创建user_login.py文件,代码如下 #codingutf-8 from MySQLdb import* from hashlib importsha1 if __name____main__: try: #接收输入用户名、密码 unameraw_input(请输入用户名&…

javascript自定义startWith()和endWith()方法

一、采用正则表达式实现startWith、endWith效果函数 String.prototype.startWithfunction(str){ var regnew RegExp("^"str); return reg.test(this); } //测试ok,直接使用str.endWith("abc")方式调用即可String.prototyp…

数据库实例:mysql与mongo结合用户登录

加入mongodb后登录逻辑如下图,将图中nosql的位置换为mongodb即可 用户数据存储的集合名称为py_users,文档格式为{uname:用户名,upwd:密码} 将原来MySQL操作的代码封装到一个方法中,代码如下 def mysql_login(): #mongodb中没有则到mysql中…

LeetCode 1609. 奇偶树(层序遍历)

文章目录1. 题目2. 解题1. 题目 如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 : 二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都…

关于怀旧

每次换季都正好对个人资产进行更新换代的时候,上一年收拾东西的心情还依然记得,只是今年更加伤感。 上一年的我,爱情甜蜜,生活丰富,实验室项目也开展得十分顺利,整理东西时每打开一个箱子,就惊叹…

数据的特征工程

数据的特征工程 1 什么是数据的特征工程 特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性。 特征工程的意义:将直接影响模型的预测结果。 2 数据的来源与类型 2.1 数据的来源 企业日益积累…

数据库实例:mysql与redis结合用户登录

加入redis后登录逻辑如下图,将图中nosql的位置换为redis即可 用户数据存的键为用户名,值为密码 将原来MySQL操作的代码封装到一个方法中,代码如下 defmysql_login(): #redis中没有则到mysql中查询 sqlselect upwd from py_users wher…

LeetCode 1610. 可见点的最大数目(atan2函数求夹角)

文章目录1. 题目2. 解题1. 题目 给你一个点数组 points 和一个表示角度的整数 angle ,你的位置是 location ,其中 location [posx, posy] 且 points[i] [xi, yi] 都表示 X-Y 平面上的整数坐标。 最开始,你面向东方进行观测。你 不能 进行…

[翻译]API Guides - Bound Services

官方文档原文地址:http://developer.android.com/guide/components/bound-services.html 一个Bound Service是一个客户端-服务器接口的服务。一个Bound Service允许组件(像activity)绑定一个service,发送请求,接受结果…

sklearn数据集与估计器

sklearn数据集与估计器 1 sklearn数据集 (1)数据来源:大多数以文件的形式 (csv文件..), 因为mysql有性能瓶颈、读取速度遭到限制,数据大的时候很费时间 (2)读取数据的工具&#…

数据库练习题(一)创建表格并做相应的查询

#1. 在MySQL中分别创建表dept和employee,结构如下: dept -------------------------------------------------------------- | Field | Type | Null | Key | Default | Extra | --------------------------------------------…

LeetCode 935. 骑士拨号器(动态规划)

文章目录1. 题目2. 解题1. 题目 国际象棋中的骑士可以按下图所示进行移动: 这一次,我们将 “骑士” 放在电话拨号盘的任意数字键(如上图所示)上, 接下来,骑士将会跳 N-1 步。每一步必须是从一个数字键跳到…

iSCSI存储设备的udev绑定 以及iscsi重启卡住解决方法

iscsi重启卡住/etc/rc.d/rc0.d和/etc/rc.d/rc6.d里面的K90network删掉即可 iscsi绑定 iSCSI存储设备的udev绑定 2012-01-06 TsengYia#126.com http://tsengyia.blog.chinaunix.net/ 针对挂载多个iSCSI设备时其设备名称可能存在变动的情况,通过使用udev规则将…

k近邻算法(KNN)-分类算法

k近邻算法(KNN)-分类算法 1 概念 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 k-近邻算法采用测量不同特征值之间的距离来进行分类。 2 优缺点 优点:简单&a…

数据库练习(二)三个数据库根据指定id获取name和存储数据库名称

已知有三个数据库mysql,mongodb和redis,已经分别存储了不同的学生信息,数据全部采用字符串类型,只有id和name两个字段(在mongo和redis中键为id,值为name),现需编写代码实现需求:根据指定id获取对应的name和存储该条信息…