centos 7下搭建Redis5.x版集群

一、开始集群搭建

redis集群需要至少要三个master节点,我们这里搭建三个master节点,并且给每个master再搭建一个slave节点,总共6个redis节点,这里用一台机器(可以多台机器部署,修改一下ip地址就可以了)部署6个redis实例,三主三从,搭建集群的步骤如下:

第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面创建6个文件夾如下:

mkdir /usr/local/redis-clustercd /usr/local/redis-clustermkdir 8001 8002 8003 8004 8005 8006

第二步:把之前的redis.conf配置文件copy到8001下,修改如下内容:

1)daemonize yes

2)port 8001(分别对每个机器的端口号进行设置)

3)dir /usr/local/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)

4)cluster-enabled yes(启动集群模式)

5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)

6)cluster-node-timeout 5000

####1. bind 127.0.0.1(去掉bind绑定访问ip信息)

2. protected-mode no (关闭保护模式)

9)appendonly yes

10)设置pidfile存放在 run目录下的文件名 pidfile /var/run/redis_8001.pid

11)dbfilename dump_8001.rdb

如果要设置密码需要增加如下配置:

12)requirepass xxx (设置redis访问密码)

13)masterauth xxx (设置集群节点间访问密码,跟上面一致)

14)修改日志路径

第三步:把修改后的配置文件,

copy到8001-8006,修改第2、3、5项里的端口号,可以用

echo 8001 8002 8003 8004 8005 8006 | xargs -n 1 cp -v /usr/local/redis-cluster/redis.conf

上面的意思是将/usr/local/redis-cluster/redis.conf文件同时复制到8001-8006 二个文件夹。

-n 1 告诉 xargs 命令每个命令行最多使用一个参数,并发送到 cp 命令中。
cp 用于复制文件。
-v 启用详细模式来显示更多复制细节。

如果是将指定文件复制到当前路径下的所有文件夹:

echo ./* |xargs -n 1 cp -v d
注意千万不能漏写.另外当前路径下有其他文件会被d文件覆盖  此命令慎用 如果文件不是特别多建议使用上面的命令。

批量替换[在vi编辑状态下使用]:

%s/源字符串/目的字符串/g 

批量替换多个文件的内容

格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`example:
sed -i "s/8001/8002/g" `grep 8001 -rl /usr/local/redis-cluster/8002/redis.conf`

第四步:分别启动6个redis实例,然后检查是否启动成功

在redis-cluster目录下,编写redis_cluster_start_all.sh启动脚本,启动六个redis实例

/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8001/redis.conf/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8002/redis.conf/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8003/redis.conf/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8004/redis.conf/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8005/redis.conf/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8006/redis.conf

由于刚创建好的redis_cluster_start_all.sh脚本是没有执行权限的,所以需要给脚本添加可执行权限

8001  8002  8003  8004  8005  8006  redis_cluster_start_all.sh  redis.conf
[root@localhost redis-cluster]# ll | grep redis_cluster_start_all.sh
-rw-r--r--. 1 root root   473 3月   1 19:05 redis_cluster_start_all.sh
[root@localhost redis-cluster]# chmod +x redis_cluster_start_all.sh
[root@localhost redis-cluster]# ll | grep redis_cluster_start_all.sh
-rwxr-xr-x. 1 root root   473 3月   1 19:05 redis_cluster_start_all.sh

启动六个redis实例

./redis_cluster_start_all.sh

查看是否启动成功

ps -ef | grep redis 

第五步:用redis-cli创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)

/usr/local/redis507/bin/redis-cli -a root --cluster create --cluster-replicas 1 192.168.44.3:8001 192.168.44.3:8002 192.168.44.3:8003 192.168.44.3:8004 192.168.44.3:8005 192.168.44.3:8006

代表为每个创建的主服务器节点创建一个从服务器节点

第七步:验证集群:

1)连接任意一个客户端即可:

./redis-cli -c -a root -h 192.168.44.3 -p 8001

提示:-a访问服务端密码,-c表示集群模式,指定ip地址和端口号

例如:

/usr/local/redis507/bin/redis-cli -a root -c -h 192.168.44.3 -p 8001

注意这里进入到8002了,redirected。

2)进行验证: cluster info(查看集群信息)、cluster nodes(查看节点列表)

3)进行数据操作验证

4)关闭集群则需要逐个进行关闭,使用命令:

/usr/local/redis507/bin/redis-cli -c -a root -h 192.168.44.3 -p 8001 shutdown

  1. 重启关闭的8001服务
/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8001/redis.conf

6)在redis-cluster目录下,编写redis_cluster_stop_all.sh关闭脚本

vim redis_cluster_stop_all.sh

/usr/local/redis507/bin/redis-cli  -c -a root -h 192.168.44.3 -p 8001  shutdown save/usr/local/redis507/bin/redis-cli  -c -a root -h 192.168.44.3 -p 8002  shutdown save/usr/local/redis507/bin/redis-cli  -c -a root -h 192.168.44.3 -p 8003  shutdown save/usr/local/redis507/bin/redis-cli  -c -a root -h 192.168.44.3 -p 8004  shutdown save/usr/local/redis507/bin/redis-cli  -c -a root -h 192.168.44.3 -p 8005  shutdown save/usr/local/redis507/bin/redis-cli  -c -a root -h 192.168.44.3 -p 8006  shutdown save

由于刚创建好的redis_cluster_stop_all.sh脚本是没有执行权限的,所以需要给脚本添加可执行权限

[root@localhost redis-cluster]# ll | grep redis_cluster_stop_all.sh
-rw-r--r--. 1 root root   515 3月   1 21:45 redis_cluster_stop_all.sh
[root@localhost redis-cluster]# chmod +x redis_cluster_stop_all.sh
[root@localhost redis-cluster]# ll | grep redis_cluster_stop_all.sh
-rwxr-xr-x. 1 root root   515 3月   1 21:45 redis_cluster_stop_all.sh

二、Jedis连接Redis集群

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;/**访问redis集群@author GERRY
*/
public class RedisCluster
{
public static void main(String[] args) throws IOException
{Set jedisClusterNode = new HashSet();jedisClusterNode.add(new HostAndPort(192.168.44.3, 8001));jedisClusterNode.add(new HostAndPort(192.168.44.3, 8002));jedisClusterNode.add(new HostAndPort(192.168.44.3, 8003));jedisClusterNode.add(new HostAndPort(192.168.44.3, 8004));jedisClusterNode.add(new HostAndPort(192.168.44.3, 8005));jedisClusterNode.add(new HostAndPort(192.168.44.3, 8006));JedisPoolConfig config = new JedisPoolConfig();config.setMaxTotal(100);config.setMaxIdle(10);config.setTestOnBorrow(true);//connectionTimeout:指的是连接一个url的连接等待时间//soTimeout:指的是连接上一个url,获取response的返回等待时间JedisCluster jedisCluster = new JedisCluster(jedisClusterNode, 6000, 5000, 10, "root", config);System.out.println(jedisCluster.set("student", "GERRY"));System.out.println(jedisCluster.set("age", "19"));System.out.println(jedisCluster.get("student"));System.out.println(jedisCluster.get("age"));jedisCluster.close();
}

三、Redis基础运维操作

修改了一下上边的脚本:

  • 创建启动redis节点脚本/启动集群脚本

    #!/bin/sh
    REDIS_ROOT=/usr/local/redis507/
    PORT=8001
    for i in {1..6}
    doPORT=$((PORT++))$REDIS_ROOT/bin/redis-server ./$PORT/redis.conf
    done
    
  • 创建Redis集群脚本

    #!/bin/sh
    PORT=8001
    /usr/local/redis507/bin/redis-cli -a root --cluster create --cluster-replicas 1 192.168.44.3:$((PORT++)) 192.168.44.3:$((PORT++)) 192.168.44.3:$((PORT++)) 192.168.44.3:$((PORT++)) 192.168.44.3:$((PORT++)) 192.168.44.3:$((PORT++))
    
  • 编写关闭集群脚本

    #!/bin/sh
    REDIS_ROOT=/usr/local/redis507/
    PORT=8001
    for i in {1..6}
    do$REDIS_ROOT/bin/redis-cli -a root -c -h 192.168.44.3 -p $((PORT++)) shutdown
    done
    

四、Redis水平扩展容

增加redis实例
在/usr/local/redis-cluster下创建8007和8008文件夹,并拷贝8001文件夹下的redis.conf文件到8007和8008这两个文件夹下

按之前的方法修改8007、8008中redis.conf参数,修改完成后进行启动

/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8007/redis.conf
/usr/local/redis507/bin/redis-server /usr/local/redis-cluster/8008/redis.conf

查询启动情况:

这时候客户端连接8001端口的redis实例,查看节点信息,会发现并无8007、8008节点信息

那么开始配置8007为集群主节点
使用add-node命令新增一个主节点8007(master),8007为新增节点,8001为已知存在节点,看到日志最后有"[OK] New node added correctly"提示代表新节点加入成功

/usr/local/redis507/bin/redis-cli -a root --cluster add-node 192.168.44.3:8007 192.168.44.3:8003

我们为新节点手工分配hash槽
使用redis-cli命令为8007分配hash槽,找到集群中的任意一个主节点(8003),对其进行重新分片工作。

/usr/local/redis507/bin/redis-cli --cluster reshard 192.168.44.3:8003 -a root

可以看到10923-11922已经分给8007了,而8001则从11923-16383

这时候我们配置8008为8007的从节点

添加从节点8008到集群中去并查看集群状态

/usr/local/redis507/bin/redis-cli --cluster add-node 192.168.44.3:8008 192.168.44.3:8003 -a root

可以看到8008是一个master节点,没有被分配任何的hash槽。
我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的8008节点的客户端,然后使用集群命令进行操作,把当前的8008(slave)节点指定到一个主节点下

/usr/local/redis507/bin/redis-cli -c -h 192.168.44.3 -p 8008 -a root CLUSTER REPLICATE ffa6301edd725c2d42835f0ac34b6e02273f128e (master节点)

扩展redis集群已经实现,下面进行删除节点

删除8008从节点
用del-node删除从节点8008,指定删除节点ip和端口,以及节点id

/usr/local/redis507/bin/redis-cli --cluster del-node 192.168.44.3:8008  8008ID -a root
例如:
/usr/local/redis507/bin/redis-cli --cluster del-node 192.168.44.3:8008  4e9b01db3602eaef5f08bc3077a392b5b5b7960b -a root

删除8007主节点有点复杂,因为有数据,必须把数据迁移好了才能删除

// 先把slot数据迁移到一个master节点上面
/usr/local/redis507/bin/redis-cli --cluster reshard 192.168.44.3:8007 -a root
=> 选择一个master节点ID
=> 输入8007的IDdone
// 删除8007节点
/usr/local/redis507/bin/redis-cli --cluster del-node 192.168.44.3:8007  8007ID -a root
例如:
/usr/local/redis507/bin/redis-cli --cluster del-node 192.168.44.3:8007  ffa6301edd725c2d42835f0ac34b6e02273f128e -a root

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

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

相关文章

matlab amd负优化,AMD 篇三:AMD真的翻身了?—— AMDINTEL CPU 计算性能测试

AMD 篇三:AMD真的翻身了?—— AMD&INTEL CPU 计算性能测试 2020-02-25 15:13:05 12点赞 18收藏 14评论 前言 这次主要讲一下AMD和INTEL CPU的mkl库测试,以及10980XE不降价原因的猜测。 2019年,AMD发布ZEN2以后,很多人 大呼AMD翻身了!!!每款CPU发布时,都会有专业的…

AD7960FMC子卡设计资料第750篇:基于AD7960的 5Msps 18bit AD FMC子卡

基于AD7960的 5Msps 18bit AD FMC子卡 一、套件概述 EVAL-AD7960FMCZ是一款全功能评估套件,用于演示低功耗、18位、5 MSPS PulSAR差分ADC AD7960的性能。该评估板可与EVAL-SDP-CH1Z系统演示平台(SDP)板配合使用。用户通过随附的评估软件可以对AD7960的性能执行详…

P7960 [NOIP2021] 报数 埃氏筛法

在世界杯小组赛的前2分钟AC了了这题,然后赶紧趁热写了篇题解 直接上题目 等会儿 这篇文章写了2678字 先赞后看好习惯 题目描述 报数游戏是一个广为流传的休闲小游戏。参加游戏的每个人要按一定顺序轮流报数,但如果下一个报的数是 7的倍数,或…

ARM与射频芯片TRF796x的SPI通信研究

针对TRF7960 SPI 接口缺乏标准协议的特点,提出了SPI器件之间通信的一般方法。论文阐述了ARM 芯片内置SPI硬件控制器的工作原理和时序,并对射频芯片 TRF7960x的工作模式与读写要求进行了分析。在此基础上,根据TRF796x的时序特性和访问要求&…

Baumer工业相机堡盟工业相机如何使用CameraExplorer软件设置MultiROI模式以及该模式的优势以及行业应用

Baumer工业相机堡盟工业相机如何使用MultiROI模式以及该模式的优势以及行业应用 Baumer工业相机Baumer工业相机的MultiROI模式的技术背景Baumer工业相机使用CameraExplorer软件设置MultiROI模式1.开启Baumer工业相机MultiROI模式2.关闭Baumer工业相机MultiROI模式3.测试使用Bau…

SpringBoot统一功能处理(统一处理用户登陆权限验证、统一异常处理以及统一数据返回格式)

目录 1. SpringBoot统一功能处理简介 2. 统一处理用户登陆验证 2.1 原生SpringAOP实现统一登陆验证的问题 2.2 Spring拦截器实现用户统一登陆验证 2.3 扩展: 统一访问前缀添加 3. 统一异常处理 4. 统一数据返回格式 4.1 统一数据返回格式的必要性 4.2 实现统一数据返…

使用pscc抠人物图像头发

素材选自:https://www.bilibili.com/video/BV1A4411M729?p8 方法参考:https://www.bilibili.com/video/BV1A4411M729?p8 和 https://jingyan.baidu.com/article/647f0115a8e6f07f2148a831.html 有这样一张图片,尝试着把人物抠出来&#x…

Linux之模拟shell命令行解释器

文章目录 前言一、输出提示符1.实际2.模拟 二、输入指令、获取指令1.实际2.模拟 三、fork创建子进程四、内建命令五、代码实现总结 前言 本文是基于前面介绍过的关于进程创建、进程终止、进程等待、进程替换等知识,尝试做的一个简单的shell命令解释器。 一、输出提…

360兼容模式、ie浏览器加载不出项目数据

打开页面按钮显示异常: 页面显示多个按钮 原因是: 360兼容模式、ie浏览器不兼容console.log(),从而导致了页面没有走下去,数据没有加载出来。 删除或者注释掉就能正常显示了。

解决vue项目在ie和360兼容模式下显示空白页问题

艰难路程 记一次bug解决,项目不复杂,是一个基于vue-cli3搭建的pc端项目,之前开发都是在谷歌浏览器上运行的,但在开发进入到后半段,经理说,项目需要在360兼容模式下展示,这时候发现项目在360兼容…

html 让360浏览器兼容模式,360浏览器兼容模式的设置方法

我们在使用360win7w.com/jiaocheng/3735.html target=_blank class=infotextkey>浏览器的时候,有的小伙伴可能就想要打开浏览器的兼容模式。那么对于360浏览器兼容模式设置方法,小编觉得我们可以在浏览器的有上角找到闪电标志点开切换即可,也可以在设置中进行调整即可。详…

SAP 主索引和二级索引

透明表索引有两种:分别是主索引和二级索引。 主索引是在我们创建表激活后由系统自动创建的,这个我们不能修改;二级索引可以我们自己创建。 主索引是表的主键,二级索引可以根据你自己需要用到表的任何字段的组合来创建。 在使用二级…

pandas索引和复合索引

一、获取索引 index import pandas as ps import numpy as npa1 ps.DataFrame(np.arange(8).reshape((2,4)),columns["A","B","C","D"],index["a","b"]) print(a1,"\n","#"*50)# A B …

索引格式的图片在PS软件中无法操作,怎么解决?

在计算机上打开photoshop,发现是索引模式,无法进行操作。应该修改为RGB模式即可。 索引模式图像,索引模式主要用于网络上以及某些对图像像素有严格要求的地方等的图像传输。Photoshop中的索引模式图像无法修改,必须更改为背景或图…

索引的概念和创建索引例子

1 索引的概念 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。表的存储由两部分组成,一部分用来存放数据页面,另一部分存放索引页面。通常,索引页面…

主索引和二级索引区别,并创建一个二级索引

透明表索引有两种:分别是主索引和二级索引。 主索引是在我们创建表激活后由系统自动创建的,这个我们不能修改;二级索引可以我们自己创建。主索引是表的主键,二级索引可以根据你自己需要用到表的任何字段的组合来创建。在使用二级索…

【个人笔记】Photoshop打开图片为”索引颜色“模式

如下图: 遇到这种问题无法编辑,”图像“——”模式“——将”索引颜色“改为”RGB颜色“ 然后就可以编辑了。

Axure9汉化

Axure9汉化 Axure下载安装后是英文版本,使用的时候会有点别扭,看一个单词需要反应一段时间,影响工作效率。 下面就是如何汉化的步骤:1-5 1、首先我们需要根据你的版本下载汉化包,打开axure ,点击help--About Axure …

若干tif文件转换成pdf

方案1: (1)用imageJ把多个tif文件弄成一个整合的tif文件; (2)然后用smaurt打开,另存为pdf 失败告终。 方案二:留个坑,没找到合适的解决方案。

华为OD机试真题B卷 Java 实现【寻找关键钥匙】,附详细解题思路

一、题目描述 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为1~N。 每个箱子中都有一个字符串s,字符串由大写字母&#xff0…