Redis-集群 - 三台服务器
Redis 集群服务信息与性能指标详解
Redis 集群服务信息与性能指标详解在发现redis集群性能问题的时候,我们⾸首先需要考虑的是整个集群的各项指标数据,然后根据这些指标数据判断具体的问题所在,redis本来就提供了了⼀一套⽐比较完善的性能指标,具体如下:⼀一般情况下, used_memory_rss 的值应该只⽐比 used_memory 稍微⾼高⼀一些。
1、当 rss > used ,且两者的值相差较⼤大时,表示存在(内部或外部的)内存碎⽚片。
内存碎⽚片的⽐比率可以通过查看mem_fragmentation_ratio 得知。
2、当 used > rss 时,表示 Redis 的部分内存被操作系统换出到交换空间了了,在这种情况下,操作可能会产⽣生明显的延迟。
3、当 Redis 释放内存时,分配器器可能会,也可能不不会,将内存返还给操作系统。
如果 Redis 释放了了内存,却没有将内存返还给操作系统,那么used_memory 的值可能和操作系统显示的 Redis 内存占⽤用并不不⼀一致。
查看 used_memory_peak 的值可以验证这种情况是否发⽣生。
Redis Info信息包括:Server,Clients,Memory,Persistence,Stats,Replication,CPU,Commandstats,Cluster,Keyspace# Server(服务器器信息)redis_version:4.0.10 #redis服务器器版本redis_git_sha1I00000000 #Git SHA1redis_git_dirty:0 #Git dirty flagredis_build_id:6c2c390b97607ff0 #redis build idredis_mode:cluster #运⾏行行模式,单机或者集群os:Linux 2.6.32-358.2.1.el6.x86_64 x86_64 #redis服务器器的宿主操作系统arch_bits:64 #架构(32或64位)multiplexing_api:epoll #redis所使⽤用的事件处理理机制gcc_version:4.4.7 #编译redis时所使⽤用的gcc版本process_id:12099 #redis服务器器进程的pidrun_id:63bcd0e57adb695ff0bf873cf42d403ddbac1565 #redis服务器器的随机标识符(⽤用于sentinel和集群)tcp_port:9021 #redis服务器器监听端⼝口uptime_in_seconds:26157730 #redis服务器器启动总时间,单位是秒uptime_in_days:302 #redis服务器器启动总时间,单位是天hz:10 #redis内部调度(进⾏行行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运⾏行行10次。
Redis集群Redis-cluster搭建及故障、性能测试
Redis集群Redis-cluster搭建及故障、性能测试⼀、Redis集群部署三台物理机:172.20.0.17、172.20.0.18、172.20.0.19⼆、安装Redis下载安装redis压缩包解压压缩包,进⼊redis-5.0.2⽂件夹,运⾏命令./make install安装redismv redis-5.0.2 /usr/local/redis/三、修改配置⽂件node1--17服务器:1、创建redis_cluster/700X的⽬录mkdir -p /usr/local/redis/redis_cluster/7001mkdir -p /usr/local/redis/redis_cluster/70022、修改Redis.conf的端⼝cp redis.conf /usr/local/redis/redis_cluster/7001修改端⼝为7001cp redis.conf /usr/local/redis/redis_cluster/7002修改端⼝为70023、同时将修改后的Redis.conf复制到另外两个节点(18、19)4、将redis-server复制到节点⽬录下,⽅便操作cp /usr/local/bin/redis-server /usr/local/redis/redis-5.0.2/redis_cluster/7001/5、开启redis-cluster配置,配置做以下改造#配置yes开启redis-clustercluster-enabled yes#配置节点之间超时时间cluster-node-timeout 15000#这个配置很重要,cluster开启必须重命名指定cluster-config-file,不能与别的节点相同,否则会启动失败,最好按主机+端⼝命名cluster-config-file nodes-17-7001.conf四、启动各节点17、18、19Rediscd /usr/local/redis/redis-5.0.2/redis_cluster/7001./redis-server redis.confcd /usr/local/redis/redis-5.0.2/redis_cluster/7002./redis-server redis.conf五、创建集群命令cd /usr/local/bin./redis-cli --cluster create 172.20.0.17:7001 172.20.0.18:7001 172.20.0.19:7001 172.20.0.17:7002 172.20.0.18:7002 172.20.0.19:7002 --cluster-replicas 1(replicas1 表⽰我们希望为集群中的每个主节点创建⼀个从节点。
Redis缓存多机房部署策略
Redis缓存多机房部署策略Redis是一种开源的内存数据存储系统,被广泛用于缓存、消息传递、实时分析等应用场景。
在多机房环境下,如何合理地部署Redis缓存,成为了一个重要的问题。
本文将探讨Redis缓存多机房部署的策略。
在多机房环境下,为了保证用户访问速度和服务的高可用性,需要将Redis缓存部署在各个机房分布式节点上。
常见的部署策略有以下几种:1. 主从复制策略主从复制是Redis的默认配置,适用于小规模的多机房部署。
该策略将一个Redis实例配置为主节点,其他实例配置为从节点。
主节点负责接收写请求并同步到从节点,从节点则用于读请求的负载均衡。
通过设置适当数量的从节点,可以提高读取的吞吐量和服务的可用性。
2. 哨兵模式策略哨兵模式是Redis提供的一种高可用解决方案。
该策略在主从复制的基础上,引入了哨兵节点。
哨兵节点通过监控主节点的状态,当主节点故障时,自动将一个从节点升级为新的主节点,并通知其他从节点更新配置。
这样可以实现自动故障转移,保证服务的高可用性。
在多机房环境下,可以在每个机房都配置一组主从节点和哨兵节点,来实现跨机房的故障转移。
3. 集群模式策略Redis的集群模式是一种分布式解决方案,适用于大规模的多机房部署。
集群模式将多个Redis实例组成一个分布式集群,每个实例负责管理一部分数据。
客户端使用Hash槽对数据进行分片,将数据分散存储在不同的实例上。
这样可以提高整个系统的读写吞吐量和扩展性。
在多机房环境下,可以将不同机房的实例组成多个分布式子集群,通过跨机房的网络来访问和操作数据。
除了以上策略外,还可以结合使用代理、负载均衡和分布式锁等技术,来进一步提高多机房的Redis部署效果。
例如,可以在每个机房设置一个代理节点,用于将请求路由到对应机房的Redis实例。
同时,可以使用负载均衡策略来均衡各个机房之间的请求流量,避免某个机房负载过高或过低。
在并发访问较高的情况下,可以使用分布式锁来保证对数据的互斥访问,避免并发冲突和数据不一致的问题。
redis集群搭建及配置
redis主从服务器搭建修改记录目录redis主从服务器搭建 (1)一.redis主从服务器搭建 (2)第一步:下载redis (2)第二步:解压redis tar包 (2)第三步:进入reidis目录 (2)第四步:make (2)第五步:make install (3)第六步:修改redis.conf 操作 (3)第七步:redis从服务器配置 (4)第八步:修改从服务redis.conf (4)二.redis测试 (4)第一步:编写redis客户端启动shell (4)第二步:启动客户端 (5)第三步:操作 (5)第四步:set name test (5)第五步:get name (5)第六步:从服务器端启动客户端 (5)第七步:从服务器端(10.105.76.100) get name (5)三.sentinel配置及启动 (5)第一步:修改sentinel.conf (6)第二步启动sentinel (6)第三步:启动sentinel (6)一.redis主从服务器搭建第一步:下载redis在redis官网下载redis2.8.17版本第二步:解压redis tar包将下载的redis-2.8.17.tar.gz放在10.105.76.99(主服务器)上/usr/local下然后解压tar包命令:tar -zxvf redis-2.8.17.tar.gz第三步:进入reidis目录进入redis-2.8.17目录命令: cd redis-2.8.17第四步:makemake 或者make MALLOC=libc 如果使用make时报错(zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory)此时可使用make MALLOC=libc出现下图说明make完成第五步:make install第六步:修改redis.conf 操作进入redis安装目录cd /usr/local/redis-2.8.17,vi redis.conf将daemonize no改为yes ,意思是在后台运行logfile改为log的存放路径requirepass 前面的#去掉后面改为itmiredis此处为密码前六步已经完成了redis主端的安装及配置,如果需要可以写一个启动redis的shell脚本,touch start.sh,vi start.sh 里面的内容为src/redis-server redis.conf第七步:redis从服务器配置将安装好的redis拷贝到从服务器(10.105.76.100) 命令scp -r /usr/local/redis-2.8.17root@10.105.76.100:/usr/local第八步:修改从服务redis.conf拷贝完成后进入从服务器(10.105.76.100) ,cd /usr/local/redis-2.8.17,修改redis.confslaveof ip(10.105.76.99) 端口(6379) 此处为主服务的ip和端口因为主服务上设置了密码所以需要修改masterauth ,并将requirepass注释掉此时redis主从应配置完成通过start.sh分别启动redis(10.105.76.99)和(10.10.576.100) 通过ps -ef|grep redis查看进程,出现如下图说明redis启动完成二.redis测试第一步:编写redis客户端启动shell可以写一个shell脚本启动redis客户端cd /usr/local/redis-2.8.17/,touch startcli.sh,vi startcli.sh startcli.sh内容为src/redis-cli,并将此文件拷贝到从服务器10.105.76.100第二步:启动客户端在主服务器端(10.105.76.99) 命令:sh startcli.sh第三步:操作输入密码auth itmiredis第四步:set name test第五步:get name第六步:从服务器端启动客户端从服务器端启动客户端(10.105.76.100),sh startcli.sh第七步:从服务器端(10.105.76.100) get name此时说明主从服务已经搭建完成。
redis cluster--redis集群模式原理
redis cluster--redis集群模式原理Redis Cluster是Redis官方推出的分布式架构,它可以将多台Redis服务器看作是一个整体来使用,提供了高可用性、高扩展性等优点。
Redis Cluster基于分区的思想,将key映射到集群中的某一个节点上,每个节点负责一部分key。
通过互相通信来维护全局一致性和去重。
Redis Cluster集群模式分为以下几个部分:1、集群的节点数量不同,可以由多个Master节点和多个Slave节点组成。
2、每个节点都有一个唯一的名称(注意是名称不是IP地址),通过名称进行通信。
3、Redis Cluster将整个数据集分成16384个hash slot,每个节点可以处理其中一部分,节点之间通过Gossip协议交换信息,保持整个集群信息的一致性。
4、一个Redis节点可以既是Master,也可以是Slave。
Master节点负责处理客户端请求,而Slave节点则仅用于备份和读取数据,Master节点操作的数据会被同步到Slave节点。
5、在Redis Cluster中,如果一个Master节点宕机,它上面的所有Slave节点都不能升级为Master节点。
而是会自动进行故障转移,将失效的Master节点的Slot分配给其他运行正常的Master节点,并将其对应的Slave节点降级为Master节点,从而保证整个集群的可用性。
6、对于新加入的节点,可以使用resharding命令进行Slot的再分配。
重新分配Slot会导致数据迁移,因此需要慎重考虑。
总之,Redis Cluster集群模式的优点在于它能够提供高可用性、高扩展性、自动故障转移等特性。
但同时也需要注意一些坑点,如节点名称不能重复、节点之间的网络延迟等问题。
Redis集群使用指南
Redis集群使用指南一、Redis集群简介Redis(Remote Dictionary Server)是一个开源的基于内存的键值对存储系统,经常用来作为缓存、消息队列和数据库。
在实际使用过程中,Redis可能会出现性能瓶颈和单点故障。
为了解决这些问题,Redis提供了集群模式。
Redis集群是对多个Redis节点进行逻辑分区和复制,从而实现高可用、高性能和可伸缩性。
Redis集群能够自动进行故障转移和重新分配,可以提供更好的可靠性和吞吐量。
二、Redis集群的工作原理Redis集群采用哈希槽(Hash Slot)的方式来实现数据的分片和复制。
一个Redis集群可以包含多个Redis节点,每个节点管理一部分哈希槽。
当客户端需要对某个键进行操作时,Redis首先计算该键对应的哈希值,然后将其分配到某个哈希槽中。
Redis集群根据哈希槽的分配情况,将该键的操作转发给相应的Redis节点进行处理。
如果某个节点出现故障,Redis集群会自动将该节点管理的哈希槽重新分配给其他节点。
Redis集群采用主从复制的方式来实现数据的持久化和高可用。
每个主节点可以有多个从节点,主节点负责处理读写请求,同时将数据复制到从节点。
如果主节点出现故障,其中的一个从节点会被自动选举为新的主节点,继续处理客户端请求。
三、搭建Redis集群的步骤1、安装Redis节点在Linux系统上安装Redis比较简单,可以使用以下命令:sudo apt-get updatesudo apt-get install redis-server安装完毕后,可以通过以下命令启动Redis服务:sudo service redis-server start2、配置Redis节点每个Redis节点都需要进行一些配置,以便加入到Redis集群中。
可以通过以下命令进入Redis配置文件:sudo vim /etc/redis/redis.conf需要修改的配置项有以下几个:cluster-enabled yes:启用Redis集群模式。
面试题详解:如何用Redis实现分布式锁?
⾯试题详解:如何⽤Redis实现分布式锁?说⼀道常见⾯试题:使⽤Redis分布式锁的详细⽅案是什么?⼀个很简单的答案就是去使⽤ Redission 客户端。
Redission 中的锁⽅案就是 Redis 分布式锁的⽐较完美的详细⽅案。
那么,Redission 中的锁⽅案为什么会⽐较完美呢?正好,我⽤ Redis 做分布式锁经验⼗分丰富,在实际⼯作中,也探索过许多种使⽤ Redis 做分布式锁的⽅案,经过了⽆数⾎泪教训。
所以,在谈及 Redission 锁为什么⽐较完美之前,先给⼤家看看我曾经使⽤ Redis 做分布式锁遇到过的问题。
我曾经⽤ Redis 做分布式锁想去解决⼀个⽤户抢优惠券的问题。
这个业务需求是这样的:当⽤户领完⼀张优惠券后,优惠券的数量必须相应减⼀,如果优惠券抢光了,就不允许⽤户再抢了。
在实现时,先从数据库中先读出优惠券的数量进⾏判断,当优惠券⼤于 0,就进⾏允许领取优惠券,然后,再将优惠券数量减⼀后,写回数据库。
当时由于请求数量⽐较多,所以,我们使⽤了三台服务器去做分流。
这时候会出现⼀个问题:如果其中⼀台服务器上的 A 应⽤获取到了优惠券的数量之后,由于处理相关业务逻辑,未及时更新数据库的优惠券数量;在 A 应⽤处理业务逻辑的时候,另⼀台服务器上的 B 应⽤更新了优惠券数量。
那么,等 A 应⽤去更新数据库中优惠券数量时,就会把 B 应⽤更新的优惠券数量覆盖掉。
看到这⾥,可能有⼈⽐较奇怪,为什么这⾥不直接使⽤ SQL:update 优惠券表 set 优惠券数量 = 优惠券数量 - 1 where 优惠券id = xxx原因是这样做,在没有分布式锁协调下,优惠券数量可能直接会出现负数。
因为当优惠券数量为 1 的时候,如果两个⽤户通过两台服务器同时发起抢优惠券的请求,都满⾜优惠券⼤于 0 的条件,然后都执⾏这条 SQL 语句,结果优惠券数量直接变成 -1 了。
还有⼈说可以⽤乐观锁,⽐如使⽤如下 SQL:update 优惠券表 set 优惠券数量 = 优惠券数量 - 1 where 优惠券id = xxx and version = xx这种⽅式就在⼀定⼏率下,很可能出现数据⼀直更新不上,导致长时间重试的情况。
Redis-集群 - 三台服务器
Redis-集群安装详细步骤一、Redis集群部署文档(centos6系统)现有三台物理机10.18.154.2 10.18.154.3 10.18.154.4(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)10.18.154.2:700010.18.154.2:700110.18.154.3:700010.18.154.3:700110.18.154.4:700010.18.154.4:7001二、安装Redis(10.18.154.2、10.18.154.3、10.18.154.4)下载redis-3.2.1.tar.gz[root@localhost ~]# tar zxvf redis-3.2.1.tar.gz[root@localhost ~]# cd redis-3.2.1[root@localhost redis-3.2.1]# make[root@localhost redis-3.2.1]# make install[root@localhost ~]# mv redis-3.2.1 /usr/local/redis[root@localhost ~]# cd /usr/local/redis/[root@localhost ~]# mkdir /usr/local/cluster[root@localhost ~]# cp /usr/local/redis/redis.conf /usr/local/cluster/[root@localhost ~]# vi /usr/local/cluster/redis.conf##修改配置文件中的下面选项port 7000bind 10.18.154.2 127.0.0.1daemonize yes#如果你想让它在后台运行,你就把它改成yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes[root@localhost ~]# mkdir /usr/local/cluster/7000[root@localhost ~]# mkdir /usr/local/cluster/7001[root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7000[root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7001[root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7002[root@localhost 7000]# redis-server redis.conf ---启动redis服务##注意:拷贝完成之后要修改7001目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称##启动之后使用命令查看redis的启动情况ps -ef|grep redis三、执行redis的创建集群命令创建集群[root@localhost src]# cd /usr/local/redis/src/[root@localhost src]#./redis-trib.rb create --replicas 1 10.18.154.2:700010.18.154.2:7001 10.18.154.3:7000 10.18.154.3:7001 10.18.154.4:700010.18.154.4:7001执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境错误内容:/usr/bin/env: ruby: No such file or directory所以需要安装ruby的环境,这里推荐使用yum install ruby安装yum install ruby然后再执行创建集群命令,报错,提示缺少rubygems组件,使用yum安装错误内容:./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)from ./redis-trib.rb:24yum install rubygems再次执行创建集群命令,报错提示不能加载redis,是缺少redis、ruby接口,gem 安装错误内容:/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'gem install redis这里可能无法安装,因为无法连接gem服务器:[root@localhost ~]# gem install redis --version 3.0.0ERROR: Could not find a valid gem 'redis' (= 3.0.0) in any repository#需要手工下载并安装:wget https:///gems/redis-3.2.1.gemgem install -l ./redis-3.2.1.gem输入yes,然后配置完成。
redis集群同步规则
redis集群同步规则Redis集群同步规则随着互联网应用的快速发展,数据存储和同步成为了一个重要的问题。
为了保证数据的高可用性和一致性,Redis引入了集群同步规则。
本文将详细介绍Redis集群同步规则的原理和实现方式。
一、Redis集群概述Redis是一个开源的高性能键值对存储系统,广泛应用于缓存、消息队列、实时统计等场景。
为了提高Redis的可用性和容量,Redis 引入了集群模式。
Redis集群由多个节点组成,每个节点都可以存储数据,并且节点之间可以相互同步数据,实现高可用性和负载均衡。
二、Redis集群同步规则的原理Redis集群同步规则的核心思想是主从同步。
每个Redis集群节点都有一个主节点和多个从节点。
主节点负责接收客户端请求,并将数据同步到从节点。
从节点负责接收主节点的数据同步,并提供读取服务。
当主节点出现故障时,从节点可以自动选举出一个新的主节点,保证系统的可用性。
Redis集群同步规则主要包括以下几个方面:1. 数据同步策略Redis集群使用的是异步复制方式进行数据同步。
当主节点收到写入请求时,会先将数据写入到本地内存中,然后再将数据异步地发送给从节点进行复制。
这种方式可以保证主节点的写入性能,并且不会阻塞客户端请求。
2. 数据同步延迟由于数据同步是异步进行的,所以从节点的数据可能会有一定的延迟。
Redis集群通过心跳机制来检测从节点的状态,当发现从节点延迟过高或者无法连接时,会自动将其标记为下线状态,并从其他从节点中选举一个新的主节点。
3. 数据一致性Redis集群通过复制日志来保证数据一致性。
主节点将每次写操作记录到复制日志中,并发送给从节点进行复制。
从节点在接收到复制日志后,会按照顺序执行其中的写操作,从而保证数据的一致性。
4. 主节点选举当主节点出现故障时,Redis集群会自动进行主节点选举。
选举过程中,会根据节点的复制偏移量和复制偏移量积压情况来选择新的主节点。
选举完成后,集群中的其他节点会自动将新的主节点设置为自己的从节点。
redis集群模式原理
Redis集群模式是一种在多个Redis实例之间分布数据和负载的解决方案,它提供了高可用性和可伸缩性。
以下是Redis集群模式的基本原理:
数据分片(Sharding):
Redis集群将数据分散存储在多个Redis节点上。
采用哈希算法(如CRC16)对键进行分片,根据键的哈希值将数据分配到不同的节点上。
每个节点负责一部分数据。
节点间通信:
Redis集群使用Gossip协议实现节点间的信息交换和发现。
每个节点通过集群总线(cluster bus)广播自己的状态信息和集群拓扑结构。
通过交换信息,节点能够了解其他节点的状态、可用性和负载情况。
主从复制:
Redis集群中的每个节点都可以配置为主节点或从节点。
主节点负责接收写入请求,并将数据复制到从节点。
从节点负责处理读取请求,并复制主节点的数据。
主从复制提供了数据的冗余和高可用性。
故障检测和故障转移:
Redis集群会监控节点的可用性。
如果某个主节点出现故障,集群会自动将从节点升级为新的主节点,并将数据迁移到新的主节点上。
故障转移过程中,集群会通过选举机制选择新的主节点,并更新集群的拓扑结构。
客户端路由:
客户端通过与集群中的任一节点通信来访问Redis集群。
客户端会根据键的哈希值将请求路由到相应的节点上。
节点会返回请求的数据或将请求转发给适当的节点。
通过以上机制,Redis集群实现了数据的分布存储、负载均衡和高可用性。
它允许在需要大规模数据处理和高并发访问的场景下,提供稳定可靠的性能和服务。
redis cluster 操作命令
redis cluster 操作命令Redis Cluster 是 Redis 的分布式解决方案,它可以将数据分散存储在多个节点上,提供更高的性能和可靠性。
在使用Redis Cluster 进行操作时,可以使用以下命令来管理和操作集群。
1. CLUSTER MEET:用于将多个 Redis 节点连接成一个集群。
可以使用该命令将新的节点添加到集群中,以扩展集群的容量。
2. CLUSTER ADDSLOTS:用于将槽位分配给节点。
Redis Cluster 将数据分为 16384 个槽位,每个槽位可以存储一个键值对。
使用该命令可以将槽位分配给节点,以便节点可以接收和处理相应的数据。
3. CLUSTER SETSLOT:用于手动将槽位分配给指定的节点。
可以使用该命令来重新分配槽位,以便在节点故障或扩展时重新平衡数据。
4. CLUSTER FORGET:用于从集群中删除指定的节点。
如果某个节点发生故障或需要从集群中移除,可以使用该命令将其从集群中删除。
5. CLUSTER REPLICATE:用于设置节点的复制关系。
在Redis Cluster 中,每个主节点都有一个或多个从节点,用于实现数据的备份和故障恢复。
可以使用该命令将一个节点设置为另一个节点的从节点。
6. CLUSTER INFO:用于获取集群的信息。
该命令可以提供有关集群拓扑、节点状态和槽位分配等信息,以便进行集群的监控和管理。
7. CLUSTER KEYSLOT:用于计算给定键的槽位。
在 Redis Cluster 中,每个键都被映射到一个槽位,该命令可以根据键的哈希值计算出对应的槽位。
8. CLUSTER SLOTS:用于获取集群中所有槽位的分配情况。
该命令返回一个包含槽位分配信息的列表,可以了解到每个槽位所属的节点和复制关系。
9. CLUSTER COUNTKEYSINSLOT:用于获取指定槽位中的键数量。
可以使用该命令来统计指定槽位中的键数量,以便进行负载均衡和容量规划。
redis安装及一主两从三sentinel配置
Redis安装及一主两从三sentinel配置一.安装Redis(1)cd /usr/src进入下载目录(2) yum install -y wgetgcc make tcl安装依赖(3)tar -zxvf redis-3.2.7.tar.gz 解压(4)cd redis-3.2.7 进入redis目录(5)make 编辑(6)make test 测试对编译不理解的同学可以看看这个 /secondjanuary/article/details/8985795测试过程报错[exception]: Executing test client: NOREPLICAS Not enough good slaves to write.. NOREPLICAS Not enough good slaves to write.while executing这种情况下,可以修改当前目录文件tests/integration/replication-2.tcl,将after 1000改为after 10000以延长等待时间重新测试(7)make install PREFIX=/usr/local/redis PREFIX安装指定目录否则安装到/usr/local/bin里面了(8)启动redis服务 ./redis-server ./redis-conf发现很多错误:1.WARNING: The TCP backlog setting of 511 cannot be enforced because/proc/sys/net/core/somaxconn is set to the lower value of 128echo 511 > /proc/sys/net/core/somaxconn写到/etc/rc.local里面 rc.local是开机启动程序是一个软连接(确定两者都有执行权限)lrwxrwxrwx. 1 root root 13 Aug 2 07:50 /etc/rc.local ->rc.d/rc.local2.WARNINGovercommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to/etc/sysctl.conf and then reboot or run the command'sysctlvm.overcommit_memory=1' for this to take effect.往/etc/sysctl.conf中添加vm.overcommit_memory = 1/sbin/sysctl –p使文件立即生效3.WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issuerun the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis mustbe restarted after THP is disabled.echo never > /sys/kernel/mm/transparent_hugepage/enabled写到/etc/rc.local里面在后台运行的话修改配置redis.conf daemonizeyes 就可以了(9)运行./redis-cli二.Redis配置文件说明(/usr/local/redis/bin)1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程daemonizeyes2. 绑定的主机地址修改主机172.16.0.52配置文件去掉bind注释符#,bind设置成主机ipbind172.16.0.52 127.0.0.1修改主机172.16.0.53配置文件去掉bind注释符#,bind设置成主机ipbind172.16.0.53127.0.0.13修改172.16.0.53机器的配置文件,使53变成52从机器slaveof 172.16.0.52 6379 (172.16.0.52机器不需要操作)4. 指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。
redis集群读写原理
redis集群读写原理Redis是一种基于内存的高性能键值存储系统,其集群模式可以提供更高的可用性和扩展性。
本文将介绍Redis集群的读写原理。
一、Redis集群简介Redis集群是由多个Redis节点组成的分布式系统。
每个节点都是一个独立的Redis实例,它们之间通过节点间通信协议进行数据同步和通信。
Redis集群采用数据分片的方式将数据分散存储在不同的节点上,实现数据的高可用性和负载均衡。
二、Redis集群的读写流程1. 写入数据流程当客户端发送写入请求时,首先会将请求发送到Redis集群中的任意一个节点,该节点被称为主节点。
主节点接收到写入请求后,将数据写入自己的内存中,并将写入请求广播给其他节点,这些节点被称为从节点。
从节点接收到写入请求后,也会将数据写入自己的内存中。
2. 读取数据流程当客户端发送读取请求时,请求会发送到任意一个节点。
该节点根据数据的哈希值确定数据所在的节点,并将读取请求转发给对应的节点。
被请求的节点会将数据返回给发起请求的节点,最终返回给客户端。
三、Redis集群的数据分片策略Redis集群采用哈希槽的方式进行数据分片,将数据分散存储在多个节点上。
具体的数据分片流程如下:1. 将整个数据空间分成固定数量的哈希槽,每个槽对应一个节点。
2. 当有新的节点加入集群或节点离开集群时,集群会自动进行数据的重新分片,保证数据的平衡性。
3. 客户端发送写入请求时,集群根据数据的哈希值确定数据所在的槽,并将写入请求发送到对应的节点。
4. 客户端发送读取请求时,集群也会根据数据的哈希值确定数据所在的槽,并将读取请求发送到对应的节点。
四、Redis集群的故障转移Redis集群通过监控节点的状态来实现故障转移。
当主节点出现故障时,集群会自动选举从节点中的一个节点作为新的主节点。
故障转移的流程如下:1. 当主节点出现故障时,集群会将该节点标记为下线状态。
2. 集群中的其他节点会进行选举,选出一个从节点作为新的主节点。
redis 集群原理
redis 集群原理Redis集群是通过分片技术实现数据的水平拆分和分布存储的一种方案。
它将数据分散存储在多个节点上,实现了横向扩展和负载均衡。
Redis集群的原理如下:1. 分片:Redis集群使用哈希槽(hash slot)来划分数据分片。
Redis Cluster 将整个数据分成16384个哈希槽,每个节点负责一部分槽的数据。
分片算法是将key通过CRC16计算出一个16位的哈希值,再对16384取模,将其分配到对应的槽中。
2. 槽迁移:当一个节点加入或离开集群时,槽的分配和迁移将自动进行。
当新节点加入集群时,集群会将一部分槽从现有节点中迁移到新节点上,实现负载均衡。
当节点离开或宕机时,集群会将该节点负责的槽迁移到其他节点上,保证数据的可用性。
3. 槽复制:Redis集群通过主从复制实现数据的高可用。
每个主节点都可以有一个或多个从节点。
主节点负责处理客户端请求和写操作,从节点则负责复制主节点的数据,实现读操作和故障转移。
4. 节点间通信:节点间通过Gossip协议进行通信,Gossip协议是一种去中心化的协议,节点之间相互交换集群信息,包括节点状态、槽分配和迁移等。
节点通过互相通信来保持集群的一致性。
5. 客户端路由:Redis集群的客户端会根据key的哈希值和槽的分布情况来决定将请求发送到哪个节点上。
客户端通过查询集群的槽分配表来确定数据所在的节点,并将请求直接发送到目标节点。
总体来说,Redis集群通过数据分片、槽迁移、槽复制和节点通信等技术来实现数据的分布存储和高可用性,提供了可扩展性和容错能力。
这些机制保证了Redis集群的性能和可靠性。
redis三主三从配置
redis三主三从配置系统版本:centos 7.2redis版本:5.0.5server.1:192.168.0.1server.2:192.168.0.2server.3:192.168.0.3部署说明:redis三主三从集群,使⽤三台虚拟机,每台服务器各起两个redis服务,分别做master、slave-----------------------------------------------------------------------------------------------1、安装基本环境依赖,命令如下: yum -y install gcc2、将redis-5.0.5.tar.gz分别上传到server1、server2、server3并解压,命令如下: tar -zxf redis-5.0.5.tar.gz cd redis-5.0.5 make3、在src⽬录中提供了已编译的⼆进制⽂件,使⽤以下命令运⾏Redis: src/redis-server4、创建cluster⽬录存放redis.conf⽂件,命令如下: mkidr cluster cp redis.conf cluster/redis_6379.conf cp redis.conf cluster/redis_6380.conf5、修改redis.conf⽂件,内容如下:bind 10.246.186.143#本机IPport 6379 #⾃定义端⼝,避免端⼝冲突daemonize yes #后台运⾏pidfile /sdb/redis/redis_6379.pid #pid存放路径,6379与端⼝号同步logfile /sdb/redis/redis_6379.log #log存放路径,6379与端⼝号同步cluster-enabled yes #开启集群cluster-node-timeout 5000 #默认15秒,改成5秒6、启动redis,命令如下: cd /usr/local/redis/redis-5.0.5/src/ ./redis-server /usr/local/redis/redis-5.0.5/cluster/redis_6380.conf ./redis-server /usr/local/redis/redis-5.0.5/cluster/redis_6379.conf 检查服务是否已启动,ps -ef| grep redis7、服务启动后,是六个单点进程,需要创建集群,在其中⼀台执⾏如下命令:./redis-cli --cluster create 192.168.0.1:6379192.168.0.1:6379192.168.0.2:6379192.168.0.2:6380192.168.0.3:6380192.168.0.3:6380 --cluster-replicas 1 执⾏如上命令后,会弹出下边提⽰,输⼊yes回车即可: Can I set the above configuration? (type 'yes' to accept):8、如上操作执⾏完毕后,redis三主三从已配置完毕,连接任意redis查看集群状态,命令如下: ./redis-cli -h 192.168.0.1 -p 6379 cluster info 查看集群信息,cluster_know_nodes 应显⽰6 cluster nodes 查看节点状态,应显⽰三个master、三个slave。
redis集群三主三从原理
redis集群三主三从原理
Redis集群三主三从原理:
1、角色及关系:
(1)集群的三个主节点:主节点负责数据的写入,能够自动同步数据。
(2)三个从节点:从节点负责写入数据的复制,以实现高可用。
2、 Master-Slave关系:
(1)主节点之间的数据同步:两个主节点之间以双向复制的方式进行数据同步。
(2)从节点跟主节点的关系:从节点通过单向复制的方式从主节点上获取数据。
3、释放双写死锁问题:
(1)两个主节点之间的双写死锁:两个主节点之间的双写死锁,即一个主节点更新一个数据,另一个主节点也有相同的更新,以致无法在集群中达成一致。
(2)解决办法:使用CTOP协议,将两个主节点之间的更新操作合并,如果有冲突,以后者为准。
4、读写操作:
(1)写操作:请求将会发送给一个主节点,该主节点会将数据写入并
复制到其它两个主节点,而其它两个主节点会将数据复制到可用的从节点上。
(2)读操作:请求可能会发送给主节点或者从节点,如果请求发送给主节点,主节点将会处理该请求,如果请求发送给从节点,从节点会将请求转发给随机的主节点在进行处理。
5、高可用方案:
(1)增加节点:可以在原有三个主节点基础上,添加一个节点,并将该节点配置为主节点,以实现高可用。
(2)容灾方案:当一个节点出现故障,可以将其它从节点提升为主节点,实现服务的持续运行。
redis三主三从原理
redis三主三从原理
Redis是一款非常流行的键值对存储系统,可以提供高性能的存储和访问。
Redis三主三从,是一种分布式存储架构,通过把Redis服务器分成主服务器和从服务器,来实现服务器之间的数据同步。
可以极大地提高Redis的存储性能和可用性。
首先,三主三从是一种以节点为单位的Redis集群结构。
简单的说,就是将Redis服务器分为主服务器和从服务器,其中主服务器用于接受客户端请求和提供服务,而从服务器用于主服务器的数据同步任务。
每个Redis集群可以有3个主服务器和3个从服务器,这样能够更加有效地提供可靠的Redis服务。
当主服务器接收到客户端请求时,它会先检查自身的缓存状态,如果数据正确,则会直接返回结果。
如果缓存中没有数据,则主服务器会从从服务器中拉取最新的数据,然后进行操作后返回结果给客户端。
同时,主服务器还会把操作后的结果同步到从服务器。
另外,主服务器也会不断地从从服务器中拉取最新的数据,以保证缓存中的数据总是最新的。
当主服务器出现故障时,从服务器则会自动升级为主服务器,继续提供服务,来保证系统的可用性。
由于Redis三主三从架构是一种分布式存储结构,从而实现了服务器之间的热备份。
这样可以有效的减少数据存储的延时,提高存储性能,也方便了服务器的故障恢复和负载均衡。
总的来说,Redis的三主三从架构是一种非常有效的分布式存
储架构,有助于提高Redis的性能和可用性。
它可以实现高性能存储,使用也十分简单,值得大家尝试。
在三台服务器,搭建redis三主三从集群
在三台服务器,搭建redis三主三从集群⼀、资源准备1、准备三台服务器H1、H2、H3172.26.237.83 H1172.26.237.84 H2172.26.237.85 H3⼆、配置服务器1、在H1服务器设置SSH免密登录;在H1⽣成RSA公钥和私钥(在H1操作)(1)执⾏ssh-keygen -t rsa命令(2)进⼊⽣成密钥所在的⽂件⽬录cd /root/.ssh/(3)将公钥(名为id_rsa.pub⽂件)追加到认证⽂件(名为authorized_keys⽂件),先后执⾏以下指令:ssh-copy-id172.26.237.83ssh-copy-id172.26.237.84ssh-copy-id172.26.237.85(注意:这⾥的IP是H1、H2、H3内⽹IP,执⾏后需要输⼊yes和服务器密码)2、配置域名解析⽂件(负责将主机名称映射到相应的IP地址)(1)在root⽬录创建env⽬录,并进⼊env⽬录下执⾏以下命令cat > /root/env/hosts.txt <<EOF172.26.237.83 H1172.26.237.84 H2172.26.237.85 H3EOFcat /root/env/hosts.txtcat /root/env/hosts.txt >> /etc/hosts(2)在每个节点进⼊env创建redis源配置⽂件,命名为redis-env.confecho -e "port 7001\ncluster-enabled yes\ndaemonize yes\ndir /root/soft/7001\ncluster-config-file nodes-7001.conf\npidfile "/root/soft/7001/redis-7001.pid"\nlogfile "/root/soft/7001/redis-7001.log"\nappendonly yes" > "redis-env.conf"配置⽂件说明:port 7000cluster-enabled yesdir /root/soft/7000cluster-config-file nodes-7000.confpidfile /root/soft/7000/redis-7000.pidlogfile /root/soft/7000/redis-7000.logappendonly yesdaemonize yesprotected-mode no3、在各个节点下载安装redis安装包(1)创建/root/soft⽬录mkdir -p /root/soft(2)下载安装包、解压、并进⾏编译cd /root/soft# 下载wget http://download.redis.io/releases/redis-5.0.5.tar.gz# 解压tar -zxvf redis-5.0.5.tar.gz# cd redis-5.0.5 进⾏编译make4、指定配置⽂件(1)创建/root/soft/7000⽬录与/root/soft/7001⽬录cd /root/soft/mkdir7000cd /root/soft/mkdir7001(2)将之前创建的源配置⽂件拷贝到7000和7001⽬录下cd /root/envcp -R redis-env.conf /root/soft/7000/redis.confcp -R redis-env.conf /root/soft/7001/redis.conf(3)分别进⼊7000和7001⽬录,修改redis.conf配置(修改成对应的端⼝),并检查⽂件路径是否正确(4)启动redis-server服务cd redis-5.0.5./src/redis-server ../7000/redis.conf./src/redis-server ../70001/redis.conf启动redis-server需要注意,守护进程需要打开,不然启动的时候是不成功的(5)检查是否启动成功ps -ef |grep redis5、创建集群(在H1操作)三主三从架构说明三台服务器,启动6个实例,形成三主三从,其中存储相同数据的主从节点不能落在同⼀台机器上,⽬的是防⽌部署redis的虚拟机宕机从⽽造成主从节点全部失效。
多集群的项目部署(若依)
多集群的项⽬部署(若依)并不是说⼀定要买阿⾥的或者其他的服务器,⾃⼰也可以在本机上创建⼏个虚拟机。
⼀、部署准备:三台服务器192.168.206.173、192.168.206.183、192.168.206.193(下⽂简称173、183、193)软件:(仅供参考,这是本⼈⽤的)173:MySQL、Nginx、Redis、Node、JDK1.8、Maven 3.8.1183:JDK1.8、Maven 3.8.1193:JDK1.8、Maven 3.8.1⼆、在windows上⾯克隆下来若依的项⽬(前后端分离版)然后将其中的sql⽂件运⾏在173的数据库中如图修改修改完之后,运⾏项⽬,没什么问题就继续。
三、在三个服务器的根⽬录下创建workspaces⽂件夹然后将前端的项⽬打包打开控制台运⾏npm install 下载依赖随后运⾏ npm run build:prod 打包⽣产环境的包,这⾥会⽣成⼀个dist⽂件夹将dist⽂件上传到173的workspaces中四、将整个项⽬上传到183和193的workspaces中并打包cd /workspaces/RuoYi-Vue/mvn package在打包完成之后,进⼊target⽬录下,会看见ruoyi-admin的jar包cd /workspaces/RuoYi-Vue/ruoyi-admin/target/复制这份jar包到/workspaces/RuoYi-Vue下⾯cp ruoyi-admin.jar /workspaces/RuoYi-Vuecd /workspaces/RuoYi-Vuew五、在173的workspaces下创建⼀个ruoyi-ui⽂件夹,然后将dist⽂件夹移动到ruoyi-ui⽂件夹中cd /workspacesmkdir ruoyi-uimv dist ruoyi-ui/六、配置173的nginx.conf⽂件vi /usr/local/nginx/conf/nginx.conf在重启nginx之前可以检查⼀下有没有问题./usr/local/nginx/sbin/nginx -t# 没有问题的话,启动nginx./usr/local/nginx/sbin/nginx七、启动后台jar包(183、193)cd /workspaces/RuoYi-Vue/nohup java -jar ruoyi-admin.jar -Xms64m -Xmx128m -XX:PermSize=64m -XX:MaxPermSize=128m > error.log 2>&1 &⼋、访问⽹址http://192.168.206.173/ 并实时查看183和193上⾯的⽇志。
redis主从架构,分片集群详解
redis主从架构,分⽚集群详解写在前⾯这边⽂章的排版时后⾯补的,所以看起来不太光鲜亮丽,忘周知。
:这篇笔记有点长,如果你认真看完,收获会不少,如果你只是忘记了相关命令,请翻到末尾。
redis的简单介绍: ⼀个提供多种数据类类型储存,整个系统都在内存中运⾏的, 定期通过异步的⽅式把数据刷到磁盘进⾏保存的⼀个内存数据库 因为实在内存中操作数据,所以效率⾮常⾼,但受制于物理内存的限制,⼀般⽤作处理少量数据的⾼性能操作;Redis的单机搭建 ⾸先安装依赖:yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl 创建⽂件夹,将rediss上传到该⽂件夹内,并进⾏解压:tar -xvf redis-3.0.2.tar.gz 获得解压⽂件 进⼊到解压⽂件进⾏先编译,然后安装:make (编译) , make install (安装) 把配置⽂件复制⼀份到上⼀级⽬录(以配置⽂件驱动redis,完成多个redis服务的启动): 感觉那个压缩包有点扎眼睛,⼼狠⼿辣的删掉它,现在编程这样 准备后台启动redis,修改配置⽂件 redis .conf如下所⽰,保存后退出: 启动redis,因为是后台启动,所以没什么反应,我们查询进程看看是否启动: 我们运⾏客户端测试⼀把,是否 ping 通: redis-cli好!上⾯已经将 redis 安装到了我们的服务器,下⾯开始搭建 redis的主从复制(读写分离):Redis的主从复制搭建⾸先说说主从复制的好处是什么:避免单点故障,预防⼀个redis挂掉后,redis插槽有空挡,导致集群不可⽤构建读写分离架构,满⾜读多写少的的场景(数据库80%的操作都是在读取,这句话是谁说的?)Redis主从环境搭建开始操作,我们需要启动三台 redis 服务,完成主从架构: redis 默认的端⼝为6379 ,我们创建三个⽬录,放着三个配置⽂件,分别代表不同的端⼝: 并把配置⽂件分别复制进这三个端⼝所代表的⽬录: 然后分别修改三个⽂件夹中的配置⽂件,我们把6379端⼝的 redis 服务设为主,其他两个为从 然后以配置⽂件⽅式依次启动三个 redis 服务: 启动客户端分别对三个服务进⾏测试: 设置主从关系⼀共有两种⽅式,:第⼀种为在 redis.conf 中配置,永久⽣效 slaveof <主ip> <主端⼝>第⼆种为在redis-cli 中键⼊,重启服务失效 slaveof <主ip> <主端⼝> 今天我们测试采⽤第⼆种,因为后⾯还有其他的演⽰,⽣产环境下应该使⽤第⼀种永久性配置 我们以6379 做为主其他两个作为从,完成⼀下操作 登录 6379 的客户端查看主从信息: 在主库写⼊和读取数据测试: 我们把数据存放到了端⼝为6379 的主库,做了主从,我们就能在从库中把数据拿出来 上⾯我们演⽰了主从架构,下⾯我们演⽰,主从从架构(链式主从) 使⽤ kill -9 命令杀死刚刚我启动的三个 redis 服务,取消刚刚建⽴的暂时的主从关系: 下⾯我们建⽴ 6381以 6380 为主,6380 以 6379 为主的链式主从从架构 6381 ——> 6780 ——> 6379 重启服务后,开始搭建我们的主从从架构: 还记得我们刚刚搭建主从的命令吗? slaveof <主ip> <主端⼝> 6381 以6380 为主: 6380 以 6379 为主: 我们来到 6379 主库查看主从信息 随后我们再来到6380,看看主从情况: 最后⼀个6381,作为从库,我们就不看了,下⾯我们再6379 中存取的读取数据测试 (没⽑病) 默认情况下从库是不能写⼊输⼊的,如要要开启需要配置⽂件中开启,⾮只读: slave-read-only noRedis主从复制,数据⼀致性原理说说原理:为什么我们建⽴主从架构后,在主库中的数据可以在从库中获取呢? 当从库和主库建⽴MS关系后,从库会向主数据库发送PSYNC命令;主库接收到PSYNC命令后会开始在后台保存快照(RDB),并缓存该期间的命令;当快照完成后,主Redis会将快照⽂件和所有缓存的写命令发送给从Redis;从Redis接收到后,会载⼊快照⽂件并且执⾏收到的缓存的命令;之后,主Redis每当接收到写命令时就会将命令发送从Redis,从⽽保证数据的⼀致;注意:数据是持久化到磁盘,从库redis 加载数据,完成数据同步,中间涉及到磁盘IO现在可以通过开启⽆磁盘复制完成数据同步: repl-diskless-sync yes原理是不持久化数据到磁盘,直接通过⽹络发送给从redis,避免IO性能差(还在测试阶段,不稳定) 常见问题:服务宕机处理⼿段:如果是从库redis 宕机,直接重启,会⾃动加⼊主从架构,并⾃动通过增量复制完成数据同步如果是主库宕机:选择⼀个从库断掉主从关系,并将⾃⾝提升为主库提供服务: SLAVEOF NO ONE重启挂掉的服务,通过 SLAVEOF ip port 将其设置为其他从库的从库,保持主从架构哨兵机制在上⾯的主从架构中,主服务宕机没我们得⼿动重启并加⼊,这就显得很⿇烦,redis有个哨兵机制,可以⾃动应对上述情况: 哨兵的主要作⽤:监控redis服务是否正常运⾏,如果主reids 宕机,在从库中选取 leader 当新的主库: 单个哨兵的监控:只监控 master ,⾃动发现master 下的 slave 多个哨兵的监控:在监控master时,还会互相监督; 下⾯来看看⼀主多从下哨兵的表现: 以 6379 为主 6380 6381 均为 6379 的从,在刚刚的环境下只需修改6381 重新绑定6379 为主即可: 进⼊redis 的解压⽬录编辑 sentinel.conf 配置⽂件,追加⼀个配置:sentinel monitor MyMaster 127.0.0.1 6379 1 解释: MyMster : ⾃定义监听主数据的名称 127.0.0.1:监控主数据的 IP 6379 :监控主数据的 port 1 : 最低通过票数 配置完成后,启动哨兵: redis-sentinel ./sentinel.conf 接下来,我们先让从库 6381 宕机,观察哨兵反应如何 我估计 +sdown 为shutdown的意思关闭 我们重启 6381 ,看哨兵反应: reboot : 重新启动 | conver -to slave :使其转变为从库 从库已经试过了,我们再来试试主库宕机会怎么样: 然后我们重启 6379,看看反应: 可以看到 6379 和 6381 都已经成为了 6380 的从库,⾃动完成主从架构好了,哨兵也就讲到这⼉了,下⾯来架设redis3.0 的⾃带的分⽚集群。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Redis-集群安装详细步骤一、Redis集群部署文档(centos6系统)现有三台物理机10.18.154.2 10.18.154.3 10.18.154.4(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)10.18.154.2:700010.18.154.2:700110.18.154.3:700010.18.154.3:700110.18.154.4:700010.18.154.4:7001二、安装Redis(10.18.154.2、10.18.154.3、10.18.154.4)下载redis-3.2.1.tar.gz[root@localhost ~]# tar zxvf redis-3.2.1.tar.gz[root@localhost ~]# cd redis-3.2.1[root@localhost redis-3.2.1]# make[root@localhost redis-3.2.1]# make install[root@localhost ~]# mv redis-3.2.1 /usr/local/redis[root@localhost ~]# cd /usr/local/redis/[root@localhost ~]# mkdir /usr/local/cluster[root@localhost ~]# cp /usr/local/redis/redis.conf /usr/local/cluster/[root@localhost ~]# vi /usr/local/cluster/redis.conf##修改配置文件中的下面选项port 7000bind 10.18.154.2 127.0.0.1daemonize yes#如果你想让它在后台运行,你就把它改成yescluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yes[root@localhost ~]# mkdir /usr/local/cluster/7000[root@localhost ~]# mkdir /usr/local/cluster/7001[root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7000[root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7001[root@localhost ~]# cp /usr/local/cluster/redis.conf /usr/local/cluster/7002[root@localhost 7000]# redis-server redis.conf ---启动redis服务##注意:拷贝完成之后要修改7001目录下面redis.conf文件中的port参数,分别改为对应的文件夹的名称##启动之后使用命令查看redis的启动情况ps -ef|grep redis三、执行redis的创建集群命令创建集群[root@localhost src]# cd /usr/local/redis/src/[root@localhost src]#./redis-trib.rb create --replicas 1 10.18.154.2:700010.18.154.2:7001 10.18.154.3:7000 10.18.154.3:7001 10.18.154.4:700010.18.154.4:7001执行上面的命令的时候会报错,因为是执行的ruby的脚本,需要ruby的环境错误内容:/usr/bin/env: ruby: No such file or directory所以需要安装ruby的环境,这里推荐使用yum install ruby安装yum install ruby然后再执行创建集群命令,报错,提示缺少rubygems组件,使用yum安装错误内容:./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)from ./redis-trib.rb:24yum install rubygems再次执行创建集群命令,报错提示不能加载redis,是缺少redis、ruby接口,gem 安装错误内容:/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'gem install redis这里可能无法安装,因为无法连接gem服务器:[root@localhost ~]# gem install redis --version 3.0.0ERROR: Could not find a valid gem 'redis' (= 3.0.0) in any repository#需要手工下载并安装:wget https:///gems/redis-3.2.1.gemgem install -l ./redis-3.2.1.gem输入yes,然后配置完成。
#执行redis的创建集群命令创建集群[root@localhost src]#./redis-trib.rb create --replicas 1 10.18.154.2:700010.18.154.2:7001 10.18.154.3:7000 10.18.154.3:7001 10.18.154.4:700010.18.154.4:7001至此redis集群即搭建成功!使用redis-cli命令进入集群环境redis-cli -c–h 10.18.154.2 –p 7000四、测试先把10.18.154.2或10.18.154.3服务Down掉,CLUSTER INFO集群没有没有影响。
把10.18.154.4服务Down掉,CLUSTER INFO集群不可用。
Redis服务一、复制脚本到/etc/rc.d/init.d目录ps: /etc/rc.d/init.d/目录下的脚本就类似与windows中的注册表,在系统启动的时候某些指定脚本将被执行按以上步骤安装Redis时,其服务脚本位于:/usr/local/src/redis/utils/redis_init_script必须将其复制到/etc/rc.d/init.d的目录下:cp /usr/local/redis/utils/redis_init_script/etc/rc.d/init.d/7000将redis_init_script复制到/etc/rc.d/init.d/,同时易名为7000。
chkconfig --add redis将报以下错误:service redis does not support chkconfigredis服务不支持chkconfig为此,我们需要更改redis脚本。
二、更改redis脚本打开使用vi打开脚本,查看脚本信息:vi /etc/rc.d/init.d/7000看到的内容如下(下内容是更改好的信息):#!/bin/sh#chkconfig: 2345 80 90# Simple Redis init.d script conceived to work on Linux systems# as it does use of the /proc filesystem.REDISPORT=7000EXEC=/usr/local/bin/redis-serverCLIEXEC=/usr/local/bin/redis-cliPIDFILE=/var/run/redis_${REDISPORT}.pidCONF="/usr/local/cluster/ ${REDISPORT}.conf"case "$1" instart)if [ -f $PIDFILE ]thenecho "$PIDFILE exists, process is already running or crashed"elseecho "Starting Redis server..."$EXEC $CONF &fi;;stop)if [ ! -f $PIDFILE ]thenecho "$PIDFILE does not exist, process is not running"elsePID=$(cat $PIDFILE)echo "Stopping ..."$CLIEXEC -p $REDISPORT shutdownwhile [ -x /proc/${PID} ]doecho "Waiting for Redis to shutdown ..."sleep 1doneecho "Redis stopped"fi;;*)echo "Please use start or stop as first argument";;esac和原配置文件相比:1.原文件是没有以下第2行的内容的,#chkconfig: 2345 80 902.原文件EXEC、CLIEXEC参数,也是有所更改。
EXEC=/usr/local/bin/redis-serverCLIEXEC=/usr/local/bin/redis-cliCONF="/usr/local/cluster/ ${REDISPORT}.conf"3.redis开启的命令,以后台运行的方式执行。
$EXEC $CONF &ps:注意后面的那个“&”,即是将服务转到后面运行的意思,否则启动服务时,Redis 服务将占据在前台,占用了主用户界面,造成其它的命令执行不了。