Redis从单机到集群,一步步教你环境部署以及使用
mhr18 2024-10-23 11:32 63 浏览 0 评论
Redis作为缓存系统来说还是很有价值的,在大数据方向里,也是需要有缓存系统的。一般可以考虑tachyon或者redis,由于redis安装以及使用更简单,所以还是优先考虑了它。那么在一些场景下为了保证数据的可靠性,就需要采用集群的模式部署,因此本篇文章就基于Redis Cluster的背景讲解下部署以及后期的使用。
大致会包括下面的内容:
- Redis单机版的安装以及验证
- Redis集群版的安装以及验证
- 使用图形化工具访问Redis
- 使用Jedis访问Redis
- 使用JedisCluster访问Redis Cluster
之后会介绍一下,如何在Spark中使用redis,敬请期待。
Redis单机版安装
1.1 下载
首先去官网下载想要的版本:
https://redis.io/download
我这里选了一个版本没那么高的,省的变化太大,各种软件兼容不了。于是挑个之前的稳定版本下载,下载redis-3.2.10.tar.gz拷贝到目标机器。
1.2 安装
把压缩文件拷贝到指定的服务器上,执行解压命令:
tar -zxvf redis-3.2.10.tar.gz
安装前需要先安装必要的包,yum -y install gcc gcc-c++ tcl,这里安装的都是一般遇到的错误所需要安装的库。
安装完后,进入redis-3.2.10目录,执行编译命令:make MALLOC=libc,这样就安装完了
1.3 测试
安装完可以直接启动测试一下:
- 启动服务器,执行下面的命令:./src/redis-server redis.conf
- 启动客户端,执行下面的命令:./src/redis-cli
在控制台中,输入下面命令:
set foo bar get foo
看看是否正常
redis集群安装
按照上面的方式,在每台机器上面都装一下redis。由于redis cluster集群必须要三个master,如果做一个备份的话,就需要6个节点。所以我这里在三台机器上,安装redis,然后每台机器上启动两个redis即可。一会会说一下,如何在一台机器上,启动两个redis。
2.1 安装
首先安装一下ruby,因为集群的脚本是ruby版的
yum -y install ruby ruby-devel rubygems rpm-build
然后执行:
gem install redis
然后把redis-trip.rb拷贝到/usr/local/bin下,这样就可以在任何目录执行redis-trip命令了。
cp src/redis-trip.rb /usr/local/bin
2.2 修改配置
接下来需要根据集群的情况,创建server启动的配置了,先创建redis_cluster目录,拷贝redis.conf:
[root@localnode7 redis-3.2.10]# mkdir redis_cluster [root@localnode7 redis-3.2.10]# cp redis.conf ./redis_cluster/redis.conf
然后修改redis.conf
[root@localnode7 redis-3.2.10]# vi ./redis_cluster/redis.conf
修改的内容有:
bind 0.0.0.0 //为了别人能访问,这里暴力的监听了所有的地址 port 6379 daemonize yes //redis后台运行 cluster-enabled yes //开启集群 把注释#去掉 cluster-config-file nodes_6379.conf //集群的配置 配置文件首次启动自动生成 cluster-node-timeout 15000 //请求超时 默认15秒,可自行设置 appendonly yes //这里跟redis持久化的机制有关系,有兴趣可以多关注一下redis的日志记录机制
PS:因为redis.conf配置文件比较大,内容很多。因此大家在修改配置的时候可以使用vi的快捷键/想要搜索的内容,然后按enter,可以快速定位到想要修改的配置上,如果有多个,可以再用n键跳转到下一个匹配结果。
2.3 启动服务器
接下来就可以启动redis服务器
[root@localnode7 redis-3.2.10]# ./src/redis-server redis_cluster/redis.conf [root@localnode7 redis-3.2.10]# ps -aux | grep redis Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 29361 0.0 0.0 130436 2452 ? Ssl 13:21 0:00 ./src/redis-server 127.0.0.1:6379 [cluster] root 29381 0.0 0.0 103464 1080 pts/0 R+ 13:21 0:00 grep redis [root@localnode7 redis-3.2.10]#
2.4 单个机器启动多个server
如果想要在一台机器上同时启动多个redis,可以直接再拷贝一份redis.conf,命名成redis2.conf,修改里面的port参数和cluster-config-file参数即可。
比如上面的配置修改成:
bind 0.0.0.0 port 6380 // <----只有这里发生变化 daemonize yes cluster-enabled yes cluster-config-file nodes_6380.conf // <--只有这里发生变化 cluster-node-timeout 15000 appendonly yes
然后启动的时候,指定为这个conf即可:
./src/redis-server redis_cluster/redis2.conf
再次查询启动进程:
[root@localnode4 redis-3.2.10]# ps -aux | grep redis Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ root 7452 0.0 0.0 131892 2984 ? Ssl 15:59 0:08 ./src/redis-server 0.0.0.0:6379 [cluster] root 9337 0.0 0.0 130564 2744 ? Ssl 16:00 0:08 ./src/redis-server 0.0.0.0:6380 [cluster] root 32298 0.0 0.0 103464 1084 pts/0 S+ 19:27 0:00 grep redis [root@localnode4 redis-3.2.10]#
2.5 创建集群
注意:
- 想要搭建集群,至少6个节点,不然执行下面的命令会报错的
- 在创建集群时,只能用ip地址,不能用主机名,不然会连接不上...不知道为啥...
执行下面的命令启动集群创建:
[root@localnode6 redis-3.2.10]# redis-trib.rb create --replicas 1 10.10.10.104:6379 10.10.10.106:6379 10.10.10.107:6379 10.10.10.104:6380 10. 10.10.106:6380 10.10.10.107:6380 >>> Creating cluster >>> Performing hash slots allocation on 6 nodes... Using 3 masters: 10.10.10.107:6379 10.10.10.106:6379 10.10.10.104:6379 Adding replica 10.10.10.106:6380 to 10.10.10.107:6379 Adding replica 10.10.10.107:6380 to 10.10.10.106:6379 Adding replica 10.10.10.104:6380 to 10.10.10.104:6379 M: e59449112f33dcb2dfad7a1ec32920470f589c32 10.10.10.104:6379 slots:10923-16383 (5461 slots) master M: 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 10.10.10.106:6379 slots:5461-10922 (5462 slots) master M: 8984e7d3e53ddcec5dd59684f69a1976a4db33ef 10.10.10.107:6379 slots:0-5460 (5461 slots) master S: 8e222ceb6ad4a9ca48566bd467b0e1b6573c2fc0 10.10.10.104:6380 replicates e59449112f33dcb2dfad7a1ec32920470f589c32 S: 0c9e17b5955be559a7edf2853bff02d7415ea72f 10.10.10.106:6380 replicates 8984e7d3e53ddcec5dd59684f69a1976a4db33ef S: a8e54df5776b412de65b904ac3928d0d308fdc15 10.10.10.107:6380 replicates 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 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 10.10.10.104:6379) M: e59449112f33dcb2dfad7a1ec32920470f589c32 10.10.10.104:6379 slots:10923-16383 (5461 slots) master 1 additional replica(s) M: 8984e7d3e53ddcec5dd59684f69a1976a4db33ef 10.10.10.107:6379 slots:0-5460 (5461 slots) master 1 additional replica(s) S: a8e54df5776b412de65b904ac3928d0d308fdc15 10.10.10.107:6380 slots: (0 slots) slave replicates 566762510d6b7b2e1b361a8a8d44e4a9d788a92f M: 566762510d6b7b2e1b361a8a8d44e4a9d788a92f 10.10.10.106:6379 slots:5461-10922 (5462 slots) master 1 additional replica(s) S: 0c9e17b5955be559a7edf2853bff02d7415ea72f 10.10.10.106:6380 slots: (0 slots) slave replicates 8984e7d3e53ddcec5dd59684f69a1976a4db33ef S: 8e222ceb6ad4a9ca48566bd467b0e1b6573c2fc0 10.10.10.104:6380 slots: (0 slots) slave replicates e59449112f33dcb2dfad7a1ec32920470f589c32 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
中间需要我们输入一个yes确定主从的分配。通过日志就可以看到master和slave的一个分配情况,以及slot的分配。那个slots是跟存储的时候hash有关的,即一个字符串先要经过哈希,知道他应该存储到那个节点上,然后才会存储到对应的server中。当我们用普通的api去查询的时候,需要查那个真正存储的机器,才能读取到数据。当然使用cluster api就不会有这个问题了。
2.6 集群环境验证
下面我们验证下集群的效果:
首先查看一下集群的状态,然后创建一个key,再换另一个节点登录,看看能否查询到。
[root@localnode6 redis-3.2.10]# ./src/redis-cli -h 10.10.10.104 -c -p 6379 10.10.10.104:6379> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_sent:86 cluster_stats_messages_received:86 10.10.10.104:6379> get foo (nil) 10.10.10.104:6379> set foo bar OK 10.10.10.104:6379> get foo "bar" 10.10.10.104:6379> [root@localnode6 redis-3.2.10]# ./src/redis-cli -h 10.10.10.106 -c -p 6379 10.10.10.106:6379> get foo -> Redirected to slot [12182] located at 10.10.10.104:6379 "bar" 10.10.10.104:6379>
这样我们的集群环境就搭建完了。
万里长征又多走了一步~
安装监控软件
如果用windows办公,还是有不少图形化的工具,可以连接redis的,比如redis desktop:
首先可以去下面网址去下载对应的版本:
https://redisdesktop.com/download
然后就是无脑安装了,安装完登录到对应的机器上即可。不过貌似是单节点登录,即你看不到集群的数据。可能是我不会用 :-(
使用Jedis API访问Redis Cluster
首先在pom.xml中引入Jedis的jar包:
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>
然后测试一下:
public class JedisTest { public static void main(String[] args) { Jedis redis = new Jedis("10.10.10.104",6379); String foo = redis.get("foo"); System.out.println(foo); } }
使用JedisCluster访问Redis Cluster
参考下这片文章就行,试验过了可用的:
http://www.cnblogs.com/shihaiming/p/5953956.html
参考
1 安装redis经常遇到的问题:http://www.cnblogs.com/HKUI/p/4439575.html
2 make的时候error: jemalloc/jemalloc.h报错:http://openskill.cn/article/151
3 linux常用目录介绍:http://www.linuxidc.com/Linux/2016-08/134701.htm
4 redis集群环境搭建:http://www.cnblogs.com/wuxl360/p/5920330.html
5 redis安装:http://www.runoob.com/redis/redis-install.html
6 redis官方文档:https://redis.io/download
7 redis client官方文档:https://github.com/uglide/RedisDesktopManager
8 redis desktop windows下载:https://redisdesktop.com/download
相关推荐
- Java培训机构,你选对了吗?(java培训机构官网)
-
如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...
- 产品经理MacBook软件清单-20个实用软件
-
三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...
- RAD Studio(Delphi) 本月隆重推出新的版本12.3
-
#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...
- 图解Java垃圾回收机制,写得非常好
-
什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...
- Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷
-
1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...
- 半虚拟化如何提高服务器性能(虚拟化 半虚拟化)
-
半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...
- HashMap底层实现原理以及线程安全实现
-
HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...
- long和double类型操作的非原子性探究
-
前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...
- 数据库DELETE 语句,还保存原有的磁盘空间
-
MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...
- 线程池—ThreadPoolExecutor详解(线程池实战)
-
一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...
- navicat如何使用orcale(详细步骤)
-
前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...
- 你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开
-
各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...
- 大数据正当时,理解这几个术语很重要
-
目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...
- 秒懂列式数据库和行式数据库(列式数据库的特点)
-
行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...
- AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4
-
AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (56)
- oracle 乐观锁 (53)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)