java redis 多节点,Redis单机多节点集群部署,超简单

1、在虚拟机中部署具有三个主节点,三个从节点的集群(注,必须要有从节点),虚拟机的IP地址为192.168.133.129,三个主节点的部口号分别为7001(从:7004)、7002(从:7005)、7003(从:7006)。

2、安装Redis,教程网上都有。这里我们已经准备好的Redis二进制安装文件,放在/opt/modules/redis/bin目录下。再在redis目录下新建data、log、conf三个目录。分别存放集群数据、日志和配置文件。

3、节点1的配置文件(conf/redis-7001.conf)如下:# 以守护进程方式启动

daemonize yes

# 指定进程文件路径,注意其它节点要有相应的变动,把7001变成对应的端口号

pidfile "/opt/modules/redis/run/redis-7001.pid"

# 指定节点的端口

port 7001

# 指定节点的日志文件

logfile "/opt/modules/redis/log/redis-7001.log"

# 指定节点的数据文件

dbfilename "dump-7001.rdb"

# 指定集群的数据目录

dir "/opt/modules/redis/data"

# 启用集群

cluster-enabled yes

# 集群文件名称,这个文件会有Redis自动生成并放在data目录下

cluster-config-file nodes-7001.conf

# 集群节点超时时间

cluster-node-timeout 10000

# 下面两行为了设置节点的密码,以便可以远程访问

masterauth 123456

requirepass 123456

# 绑定IP地址,如果不写黙认绑定127.0.0.1,远程就无法访问

bind 192.168.133.129

其它节点的配置文件直接复制7001节点的配置文件并将7001改成对应的值(7002-7006),配置文件名称也是redis-7002/7006.conf。放在conf目录下。

4、上面完成之后,这里我写了一个脚本,启动这6个节点,注意这个脚本要放在redis目录下,由于脚本中的命令写的是相对路径,所以放在redis目录下,也就是与bin目录同级。脚本文件内容如下:$>pwd

$>/opt/modules/redis

$>cat start.sh

bin/redis-server conf/redis-7001.conf

bin/redis-server conf/redis-7002.conf

bin/redis-server conf/redis-7003.conf

bin/redis-server conf/redis-7004.conf

bin/redis-server conf/redis-7005.conf

bin/redis-server conf/redis-7006.conf

$>sudo chmod +x start.sh

5、再写一个停止6个节点的脚本文件,也放在redis目录下。文件名称为stop.sh$> stop.sh

bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 shutdown

bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 shutdown

bin/redis-cli -h 192.168.133.129 -p 7003 -a 123456 shutdown

bin/redis-cli -h 192.168.133.129 -p 7004 -a 123456 shutdown

bin/redis-cli -h 192.168.133.129 -p 7005 -a 123456 shutdown

bin/redis-cli -h 192.168.133.129 -p 7006 -a 123456 shutdown

$> chmod +x stop.sh

6、运行start.sh启动6个节点:$> cd /opt/modules/redis

$> sudo ./start.sh

7、好了,现在每个节点都启动起来了,可以用以下命令查看集群状态:$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes

注意,这个命令只显示了7001节点是master节点,同样查看7002-7006,都是独立的master主节点。

8、上面的节点都是独立的,现在让它们组成集群,相互发现自己,注意这个操作只需要操作一遍,redis会自己保存集群的配置文件,也就是在节点配置文件中指定的集群配置文件的名称。集群发现脚本如下,文件名为meet.sh,也放在redis目录下:$> cat meet.sh

bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7002

bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7003

bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7004

bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7005

bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7006

解释:上面第一句命令让7001节点发现了7002节点,这样7001、7002就组成了一个集群,再让7001发现7003,由于7001已经在一个集群中了,所以7003就加入到集群中,这个过程,你也可以用7002节点去发现7003道理一样。

好了,现在再执行$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes

这条命令就会显示6个master节点。

8、为主节点分配slots,注意:现在主从节点还没有分别,我们只是人为定义7001、7002、7003这三个节点为主节点,分配槽的脚本如下:$> cat slot.sh

for i in {0..5400};do bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster addslots $i; done

for i in {5401..11000};do bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 cluster addslots $i; done

for i in {11001..16383};do bin/redis-cli -h 192.168.133.129 -p 7003 -a 123456 cluster addslots $i; done

注意:槽数量一定,一共有16384个槽,编号为0..16383,上述命令平均分配三个节点。

9、现在所有的节点都是主节点,现在要将7004、7005、7006这三个节点指定为7001、7002、7003的从节点。命令如下:$> cd /opt/modules/redis

$> bin/redis-cli -h 192.168.133.129 -p 7004 -a 123456 cluster replicate 89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2

$> bin/redis-cli -h 192.168.133.129 -p 7005 -a 123456 cluster replicate 08db1cecd4770dd1c086b3cf8c34acb457bb0ebc

$> bin/redis-cli -h 192.168.133.129 -p 7006 -a 123456 cluster replicate 7e618dc71117821d2cbfb908c7a07460a1a286fd

上述命令中的89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2是7001节点的ID,08db1cecd4770dd1c086b3cf8c34acb457bb0ebc是7002节点的ID,7e618dc71117821d2cbfb908c7a07460a1a286fd是7003节点的ID。这个ID可以使用命令查看:$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes

7e618dc71117821d2cbfb908c7a07460a1a286fd 192.168.133.129:7003@17003 master - 0 1555847474000 5 connected 11001-16383

f3b669f5654eddb5b782bf72bf390dc702b9e201 192.168.133.129:7006@17006 slave 7e618dc71117821d2cbfb908c7a07460a1a286fd 0 1555847475087 5 connected

7196289749e68d25fe77f3e66c44becbe37cc791 192.168.133.129:7005@17005 slave 08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 0 1555847472037 4 connected

89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2 192.168.133.129:7001@17001 myself,master - 0 1555847471000 1 connected 0-5400

cb015faba5d1ead01787173998d56852935a19b2 192.168.133.129:7004@17004 slave 89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2 0 1555847473048 2 connected

08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 192.168.133.129:7002@17002 master - 0 1555847474077 3 connected 5401-11000

从节点分配好后,如以上命令所示。注意分配置从节点时,这个节点上必须没有被分配任何一个槽,并且节点中没有数据。

10、这个集群就分配好了,可以使用./stop.sh停止,这6个节点,再用./start.sh启动这6个节点,再用$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes

这个命令查看,集群状态是对的。redis会自动保存集群的状态。

11、你可以停止7001主节点,发现7004的状态由slave状态变成master状态。$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 shudown

$> bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 cluster nodes

89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2 192.168.133.129:7001@17001 master,fail - 1555848004665 1555848000000 1 disconnected

f3b669f5654eddb5b782bf72bf390dc702b9e201 192.168.133.129:7006@17006 slave 7e618dc71117821d2cbfb908c7a07460a1a286fd 0 1555848029000 5 connected

cb015faba5d1ead01787173998d56852935a19b2 192.168.133.129:7004@17004 master - 0 1555848031010 6 connected 0-5400

08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 192.168.133.129:7002@17002 myself,master - 0 1555848029000 3 connected 5401-11000

7196289749e68d25fe77f3e66c44becbe37cc791 192.168.133.129:7005@17005 slave 08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 0 1555848030000 4 connected

7e618dc71117821d2cbfb908c7a07460a1a286fd 192.168.133.129:7003@17003 master - 0 1555848030000 5 connected 11001-16383

现在可以看到7004已经成为主节点了,下次再将7001启动起来,7001会自动成为7004的从节点。

12、设置数据:$> bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 set foo 1

Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

(error) MOVED 12182 192.168.133.129:7003

在7002节点上将foo键设置为1时,报了一个错,(error) MOVED 12182 192.168.133.129:7003。注意,这是正常,Redis告诉你,这个foo键的hash槽在7003节点中,不在7002节点中,你应该在7003节点设置foo这个键的值。

如果使用redis desktop manager连接redis集群,如果连接了7002,再设置set foo 1时,会自动切换到7003节点的连接,将设置成功。

如果使用Java的Jedis连接集群也是有专门的配置方式,在设置一个键时,如果槽不在这个节点上,Redis会给出反馈,客户端会自动切换到对应节点上再设置。

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

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

相关文章

matlab检测串口数据帧头,MATLAB 串口读取姿态数据及GUI实时动态显示设计

上一篇实现了Matlab 对串口数据的读取,数据可以读取并且保存到本地。本文主要设计GUI并且动态的显示曲线。可以更直观的观察实时的姿态数据和传感器数据。GUI设计效果:姿态GUi.png分别设置三个区域,分别为数据接收显示区域,串口设…

[转]面向对象的六大原则

现在编程的主流语言基本上都是面向对象的。如C#,C,JAVA。我们在使用时,已经构造了一个个的类。但是往往由于我们在类内部或外部的设计上存在种种问题,导致尽管是面向对象的语言,却是面向过程的逻辑,甚至维护…

matlab中response函数,matlab函数的种类

突然发现matlab的函数还是很有讲究的,以前只是用,很少注意这个问题,现在看到了稍微总结一下吧。在matlab帮助中搜索Types of Functions,可以看到matlab常用的函数种类:Anonymous Functions --匿名函数Primary Function…

面向对象的十大原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton、Decorator、Observer这样的设计模式,而不重视面向对象的分析和设计。甚至还有经…

php返回支付状态,magento paypal返回支付状态

paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者来 说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续 费&am…

上下文管理、redis发布订阅、RabbitMQ发布订阅、SQLAlchemy

一、上下文管理 import contextlib contextlib.contextmanager def work_state(state_list,worker_thread):state_list.append(worker_thread)try:yieldfinally:state_list.remove(worker_thread) free_list[] current_thread"alex" with work_state(free_list,curr…

php symbol table,gdb方式遍历EG(symbol_table) 哈希表的key_PHP教程

Sara Golemon写过一篇文章,里面提到:“是否存在特别的地方可以找到GLOBALS数组?”答案是“存在”,就是EG(symbol_table)-Executor Globals结构,她也给出了找的具体实例,如下PHP_FUNCTION(confir…

常用快捷键归纳

CtrlX     剪贴 CtrlC    复制 CtrlV    粘贴 CtrlD    删除对应行 CtrlA    全选 CtrlZ    撤销 Alt↑    两行代码互换 CtrlAltX J 运行代码 CtrlshiftO 添加缺少的包, Ctrlshift↓  向下复制本行代码转载于:https://www.cnblogs.c…

php edm 系统,edm.php

// ----------------------------------------------------------------------// | 科创众达// ----------------------------------------------------------------------// | Copyright (c) 2011 http://ctrlcoo.com All rights reserved.// -------------------------------…

jQuery选择id属性带有.点符号元素的方法

如果jquery要选择的元素id中带有点符号&#xff0c;在选择时需要在点前面加上两个反斜杠&#xff0c;如&#xff1a;$("#address\\.street").text("Enter this field");<div id"address.street"> http://www.jb51.net </div> 转载于…

单账户登录踢人 php,踢人下线

前言 在java的世界里&#xff0c;有很多优秀的权限认证框架&#xff0c;如Apache Shiro、Spring Security 等等。这些框架背景强大&#xff0c;历史悠久&#xff0c;其生态也比较齐全。 但同时这些框架也并非十分完美&#xff0c;在前后台分离已成标配的互联网时代&#xff0c;…

python 基础,包括列表,元组,字典,字符串,set集合,while循环,for循环,运算符。...

1.continue 的作用&#xff1a;跳出一次循环&#xff0c;进行下一次循环2.break 跳出不再循环3.常量 &#xff08;全是大写&#xff09;NAME cjk 一般改了会出错4.python的第三方库&#xff0c;先安装再导入。装模块&#xff1a;pip 命令例如&#xff1a;pip install pandas5…

10054 java,为什么Socket.Receive在远程主机断开连接时抛出SocketException(10054)?

我以前用C编写套接字程序&#xff0c;无法理解为什么会发生这种情况 .我的服务器在接收调用时阻塞&#xff0c;当它返回0时&#xff0c;我打破了while循环并关闭了线程 .public class MyServer {public MyServer() {}public void Init() {ThreadPool.QueueUserWorkItem(StartLi…

SQL 截取字符

select SUBSTRING(123,abcdefg,charindex(,,123,abcdefg,0)1,LEN(123,abcdefg)-charindex(,,123,abcdefg,0)) select SUBSTRING(123,abcdefg,0,charindex(,,123,abcdefg,0))转载于:https://www.cnblogs.com/kunEssay/p/5726672.html

hdoj 1004 学习思路

hdoj 1004题目大概讲的是&#xff0c;将输入的字符串根据输入次数多少&#xff0c;输出出现次数最多的字符串。 题目逻辑很简单&#xff0c;就是需要选择相应的数据结构&#xff0c;看了别人提交的discuss&#xff0c;明显发现可以使用多种数据结构解这道题。 其实我本是打算用…

oracle 关闭数据库实列,Oracle 11g 数据库启动和关闭

Oracles11数据库的启动状态Oracle11g在启动的时候必须经过三个状态&#xff1a;NOMOUNT,MOUNT,OPEN。NOMOUNT: 此状态下只打开数据库实例&#xff0c;读取参数文件。MOUNT: 根据参数文件信息&#xff0c;打开控制文件。读取控制文件中的各种信息&#xff0c;如数据文件位置&…

JavaScript进阶(下)

指定分隔符连接数组元素join() join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。 语法&#xff1a; arrayObject.join(分隔符) 参数说明: 注意&#xff1a;返回一个字符串&#xff0c;该字符串把数组中的各个元素串起来&#xff0c;用<…

oracle报无效月份 注册表,在oracle中插入时间时出现“无效的月份”解决方法

这个问题是我曾经在使用中遇到的&#xff0c;在网上搜了一下&#xff0c;发现很多人都遇到过&#xff0c;并且也说明了很多解决方法。引起这个问题是有很多种可能的&#xff0c;现在我将在网上收集的资料结合我自己的解决经验总结一下&#xff0c;希望对大家有帮助。我用的是or…

oracle 用户禁止登录,[转] oracle限制用户在某个时间段内禁止登录数据库

原文: http://blog.itpub.net/29371470/viewspace-1081319/ [oraclerhel ~]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on Sat Feb 8 12:51:15 2014 Copyright (c) 1982, 2010, Oracle. All Rights Reserved. Connected to: Oracle Database 10g Enter…

ongl 表达式

struts.xml简单配置 <!-- &#xff08;默认false&#xff09;设置ognl表达式是否支持静态方法 --><constant name"struts.ognl.allowStaticMethodAccess" value"true"></constant><package name"ognl" namespace"/ogn…