redis集群搭建
redis3.0.2 分布式集群安装详细步骤
redis3.0.2 分布式集群安装详细步骤--(centos5.8 X64系统)版本历史一: redis cluster介绍篇1:redis cluster的现状目前redis支持的cluster特性(已亲测):1):节点自动发现2):slave->master 选举,集群容错3):Hot resharding:在线分片4):进群管理:cluster xxx5):基于配置(nodes-port.conf)的集群管理6):ASK 转向/MOVED 转向机制.2:redis cluster 架构1)redis-cluster架构图架构细节:(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value2) redis-cluster选举:容错(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master 节点通信超过(cluster-node-timeout),认为当前master节点挂掉.(2):什么时候整个集群不可用(cluster_state:fail),当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成进群的slot映射[0-16383]不完成时进入fail状态.b:如果进群超过半数以上master挂掉,无论是否有slave集群进入fail状态.二.Redis集群安装篇(centos5.8 X64系统)(要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下)127.0.0.1:7000127.0.0.1:7001127.0.0.1:7002127.0.0.1:7003127.0.0.1:7004127.0.0.1:70051:下载redis。
rediscluster节点挂掉后_Redis的集群搭建
rediscluster节点挂掉后_Redis的集群搭建redis-cluster架构图(1)所有的redis节点彼此互联(PING-PONG机制),内部使⽤⼆进制协议优化传输速度和带宽.(2)节点的fail是通过集群中超过半数的节点检测失效时才⽣效.(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何⼀个可⽤节点即可(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->valueRedis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置⼀个 key-value 时,redis 先对 key 使⽤ crc16 算法算出⼀个结果,然后把结果对 16384 求余数,这样每个 key 都会对应⼀个编号在 0-16383 之间的哈希槽,redis 会根据节点数量⼤致均等的将哈希槽映射到不同的节点⽰例如下redis-cluster投票容错⾸先你需要连接上redis[root@localhost src]# ./redis-cli -p 6384 --第⼀步从客户端命令⼯具连接redis127.0.0.1:6384> auth 123456 --输⼊登录密码,登录 [root@localhost src]# info replication --使⽤命令 info replication查看状态信息⽰例图⽚(1)集群中所有master参与投票,如果半数以上master节点与其中⼀个master节点通信超过(cluster-node-timeout),认为该master节点挂掉.(2):什么时候整个集群不可⽤(cluster_state:fail)?如果集群任意master挂掉,且当前master没有slave,则集群进⼊fail状态。
【搭建rediscluster集群,JedisCluster带密码访问解决当中各种坑!】
【搭建rediscluster集群,JedisCluster带密码访问解决当中各种坑!】⼀.搭建redis单机本⽂搭建redis3.0版本,3.0主要增加了redis cluster集群功能。
2.解压源码:tar -zxvf redis-3.0.0.tar.gz3.编译源码:cd /usr/local/redis-3.0.0make4.安装到指定⽬录: cd /usr/local/redis-3.0.0make PREFIX=/usr/local/redis install5.进⼊源码⽬录,将redis.conf拷贝到安装路径:cd /usr/local/redismkdir confcp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin6.修改redis.conf配置⽂件,以后端模式启动:daemonize yes7.启动redis:cd /usr/local/redis ./bin/redis-server ./redis.conf //在何处启动的server,⼀些配置⽂件就默认在该处⽣成(如果配置的相对路径)8.redis.conf配置⽂件主要配置:port 7001 //监听的端⼝# bind 127.0.0.1 //绑定ip,只允许该ip访问,不填默认为*,表⽰允许所有ip访问requirepass "你的密码" //开启密码loglevel debug //⽇志级别,开发模式尽量选⽤debuglogfile "redis.log" //⽇志⽂件路径,此处使⽤相对路径,将⽣成到/usr/local/redis下maxmemory 100000000 //允许最⼤内存占⽤100mappendonly yes //启⽤aofauto-aof-rewrite-percentage 80 //部署在同⼀机器的多个redis实例,建议把auto-aof-rewrite错开(可分别写80-100不等),防⽌瞬间fork,所有redis进程做rewrite,占⽤⼤量内存9.jedis连接redis单机:1<dependency>2<groupId>redis.clients</groupId>3<artifactId>jedis</artifactId>4<version>2.7.0</version>5</dependency>连接池整合spring:<!-- redis连接池(单例) --><bean id="jedisPool" class="redis.clients.jedis.JedisPool" destroy-method="close"><constructor-arg name="poolConfig" ref="jedisPoolConfig"/><constructor-arg name="host" value="${redis.host}"/><constructor-arg name="port" value="${redis.port}"/><constructor-arg name="timeout" value="${redis.timeout}"/><constructor-arg name="password" value="${redis.pass}"/></bean><!-- 连接池配置 --><bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"><!-- 最⼤连接数 --><property name="maxTotal" value="150"/><!-- 最⼤空闲连接数 --><property name="maxIdle" value="30"/><!-- 最⼩空闲连接数 --><property name="minIdle" value="10"/><!-- 获取连接时的最⼤等待毫秒数,⼩于零:阻塞不确定的时间,默认-1 --><property name="maxWaitMillis" value="3000"/><!-- 每次释放连接的最⼤数⽬ --><property name="numTestsPerEvictionRun" value="100"/><!-- 释放连接的扫描间隔(毫秒) --><property name="timeBetweenEvictionRunsMillis" value="3000"/><!-- 连接最⼩空闲时间 --><property name="minEvictableIdleTimeMillis" value="1800000"/><!-- 连接空闲多久后释放, 当空闲时间>该值且空闲连接>最⼤空闲连接数时直接释放 --><property name="softMinEvictableIdleTimeMillis" value="10000"/><!-- 在获取连接的时候检查有效性, 默认false --><property name="testOnBorrow" value="true"/><!-- 在空闲时检查有效性, 默认false --><property name="testWhileIdle" value="true"/><!-- 在归还给pool时,是否提前进⾏validate操作 --><property name="testOnReturn" value="true"/><!-- 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true --><property name="blockWhenExhausted" value="false"/></bean>1 @RunWith(SpringJUnit4ClassRunner.class) // 指定测试⽤例的运⾏器这⾥是指定了Junit42 @ContextConfiguration("classpath:spring/application*.xml")3public class RedisTest {4 @Autowired5private JedisPool pool;6 @Test7public void testJedisPool() {8 Jedis jedis = null;9 String name = null;10try {11 jedis = pool.getResource();12 jedis.set("testName", "RCL");13 name = jedis.get("testName");14 } catch (Exception ex) {15 ex.printStackTrace();16 } finally {17if (jedis != null) {18// 返回给池19 jedis.close();20 }21 Assert.assertEquals("RCL", name);22 }23 }10.如果连接不上,可查看是否防⽕墙没有将redis端⼝开放:/etc/sysconfig/iptables添加:-A INPUT -p tcp -m state --state NEW -m tcp --dport 7001 -j ACCEPT //7001即redis端⼝重启防⽕墙⼆、搭建redis集群1.安装ruby环境集群管理⼯具redis-trib.rb依赖ruby环境(1)安装ruby:yum install ruby yum install rubygems(2)安装ruby和redis的接⼝程序:拷贝redis-3.0.0.gem⾄/usr/local。
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主从服务器搭建 (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 集群安装(redis-trib.rb)
redisredis-trib.rb安装集群一、redis安装1.下载地址:$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz 2.解压缩$ tar xzf redis-3.2.8.tar.gz3.编译$ln -s redis-3.2.8 redis建立软链接,有利于未来升级,是一个比较好的做法$ cd redis$ make编译,有的时候会报错a、确保安装gccb、fatal error: jemalloc/jemalloc.h: No such file or directory 解决办法:make MALLOC=libc$make install安装放入到/usr/local/bin$redis-cli -v查看redis版本redis集群一般由多个节点组成,节点数量至少6个才能保证组成完整高可用的集群。
操作系统centos7.2-mini版一、redis安装略二、使用redis-trib.rb 安装工具1、安装rubyyum install ruby -y2、安装rubygemredis依赖wget /downloads/redis-3.3.0.gemgem install -l redis-3.3.0 gemcp /{redishome}/scr/redis-trib.rb /usr/local/bin3、测试redis-trib.rb二、准备节点1、创建文件夹mkdir /redis-cluster-tribcd /redis-cluster-tribmkdir 6379 6380 6381 6382 6383 63842、创建并配置redis.conf分别在6379-6384六个文件夹中创建redis-node.conf文件,并添加配置,配置内容如下redis-6379.conf,每个文件根据对应名修改一下vim redis-6379.confport 6379daemonize yeslogfile "6379.log"dbfilename "dump-6379.rdb"dir "/redis-cluster-trib/6379/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6379.conf"vim redis-6380.confport 6380daemonize yeslogfile "6380.log"dbfilename "dump-6380.rdb"dir "/redis-cluster-trib/6380/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6380.conf"vim redis-6381.confport 6381daemonize yeslogfile "6381.log"dbfilename "dump-6381.rdb"dir "/redis-cluster-trib/6381/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6381.conf"vim redis-6382.confport 6382daemonize yeslogfile "6382.log"dbfilename "dump-6382.rdb"dir "/redis-cluster-trib/6382/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6382.conf"vim redis-6383.confport 6383daemonize yeslogfile "6383.log"dbfilename "dump-6383.rdb"dir "/redis-cluster-trib/6383/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6383.conf"vim redis-6384.confport 6384daemonize yeslogfile "6384.log"dbfilename "dump-6384.rdb"dir "/redis-cluster-trib/6384/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6384.conf"3、启动各个节点redis-server redis-6379.confredis-server redis-6380.confredis-server redis-6381.confredis-server redis-6382.confredis-server redis-6383.confredis-server redis-6384.conf4、检查启动情况cat 6379/6379.logcat 6380/6380.logcat 6381/6381.logcat 6382/6382.logcat 6383/6383.logcat 6384/6384.logps -ef |grep redis四、创建集群1、创建集群redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384replicas 表示为每个主节点设置多少个从节点,如果部署节点使用不同的ip,会尽可能保证主从不在一个节点上2、健康性检查redis-trib.rb check 127.0.0.1:6380四、扩容集群1、添加2个节点mkdir 6385 6386vim redis-6385.confport 6385daemonize yeslogfile "6385.log"dbfilename "dump-6385.rdb"dir "/redis-cluster-trib/6385/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6385.conf"vim redis-6386.confport 6386daemonize yeslogfile "6386.log"dbfilename "dump-6386.rdb"dir "/redis-cluster-trib/6386/"cluster-enabled yescluster-node-timeout 15000cluster-config-file "nodes-6386.conf"2、启动节点redis-server redis-6385.confredis-server redis-6386.conf3、添加入集群redis-trib.rb add-node 127.0.0.1:6385 127.0.0.1:6379redis-trib.rb add-node 127.0.0.1:6386 127.0.0.1:6379注意这里还是显示为主节点,要设置它为从节点要redis-trib.rb add-node 127.0.0.1:6386 127.0.0.1:6379 --slave --master-id<arg> 或者看后面变化(在缩减章节)4、迁移槽redis-trib.rb info127.0.0.1:6379可以看到各个主节点槽情况5、批量迁移redis-trib.rbreshard 127.0.0.1:6379数据迁移之前会打印迁移计划,确认后进行迁移四、收缩集群跟上面一样,将要清空节点移至其他节点上。
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介绍 Redis是⼀个分布式缓存数据库服务器,提供基于内存访问的缓存服务,并且⽆论是在单服务器还是服务器集群上都有着较为灵活⽅便的扩展能⼒。
单个的Redis实例是单进程单线程的,由于这个原因,Redis对于实例本⾝不需要考虑种种访问线程共享资源所带来的并发性问题,因为所有的线程访问都是队列顺序执⾏的。
如果需要扩容,需要配置多实例。
单机多实例配置 Redis实例是基于配置⽂件的,redis-server根据conf⽣成并运⾏实例,因此需要多实例的话需要配置对应数⽬的Conf,bind 127.0.0.1 # 绑定主机ipport 7001 # 开启的端⼝daemonize yes # 是否后台运⾏pidfile /var/run/redis_7001.pid # pid⽂件名称cluster-enabled yes # 开启集群cluster-config-file nodes-7001.conf # 集群节点⽂件dbfilename dump-7001.rdb # 数据备份名称 单机情况下通过监听多端⼝的⽅式实现多实例,建⽴集群时只需要复制多份conf,并根据上⾯的conf修改对应的端⼝号即可。
在开启实例后(7001,7002),进⼊到redis-cli之中127.0.0.1:7001> cluster help1) CLUSTER <subcommand> arg arg ... arg. Subcommands are:2) ADDSLOTS <slot> [slot ...] -- Assign slots to current node.3) BUMPEPOCH -- Advance the cluster config epoch.4) COUNT-failure-reports <node-id> -- Return number of failure reports for <node-id>.5) COUNTKEYSINSLOT <slot> - Return the number of keys in <slot>.6) DELSLOTS <slot> [slot ...] -- Delete slots information from current node.7) FAILOVER [force|takeover] -- Promote current replica node to being a master.8) FORGET <node-id> -- Remove a node from the cluster.9) GETKEYSINSLOT <slot> <count> -- Return key names stored by current node in a slot.10) FLUSHSLOTS -- Delete current node own slots information.11) INFO - Return onformation about the cluster.12) KEYSLOT <key> -- Return the hash slot for <key>.13) MEET <ip> <port> [bus-port] -- Connect nodes into a working cluster.14) MYID -- Return the node id.15) NODES -- Return cluster configuration seen by node. Output format:16) <id> <ip:port> <flags> <master> <pings> <pongs> <epoch> <link> <slot> ... <slot>17) REPLICATE <node-id> -- Configure current node as replica to <node-id>.18) RESET [hard|soft] -- Reset current node (default: soft).19) SET-config-epoch <epoch> - Set config epoch of current node.20) SETSLOT <slot> (importing|migrating|stable|node <node-id>) -- Set slot state.21) REPLICAS <node-id> -- Return <node-id> replicas.22) SLOTS -- Return information about slots range mappings. Each range is made of:23) start, end, master and replicas IP addresses, ports and ids 使⽤cluster meet 127.0.0.1 7002与7002实例建⽴握⼿连接: 使⽤cluster nodes查看节点信息:Redis 5.0以上版本不再使⽤redis-trib.rb Redis 5.0以上版本不再使⽤redis-trib.rb,⽽是统⼀使⽤Cli进⾏集群创建和配置![](https:///blog/915947/201903/915947-20190325113611458-1397645995.png)总结 上⾯是⼀个最简单的单机多实例集群搭建过程,事实上Redis还提供了⼀个很⽅便的集群搭建脚本redis-trib.rb,利⽤这个脚本能更轻松地搭建多机器多实例集群。
redis 集群方案
redis 集群方案Redis 集群方案。
Redis 是一个开源的内存数据库,被广泛应用于缓存、会话存储、消息队列等场景。
随着业务的不断扩大,单机 Redis 已经无法满足高可用、高并发的需求,因此需要搭建 Redis 集群来解决这些问题。
本文将介绍几种常见的 Redis 集群方案,帮助您选择适合自己业务的方案。
一、Redis Sentinel 方案。
Redis Sentinel 是 Redis 官方推荐的高可用解决方案,它通过监控 Redis 实例的健康状态,实现了自动故障转移和故障恢复。
在 Sentinel 方案中,可以有多个Sentinel 运行,它们之间通过消息通信来完成监控和决策。
当主节点出现故障时,Sentinel 会选举出一个新的主节点,从而实现自动故障转移。
二、Redis Cluster 方案。
Redis Cluster 是 Redis 官方提供的分布式方案,它将数据分片存储在多个节点上,实现了数据的自动分布和负载均衡。
在 Redis Cluster 中,每个节点都会与其他节点进行通信,通过 Gossip 协议来维护集群的状态信息。
当有节点宕机时,集群会自动进行故障转移,保证数据的可用性和一致性。
三、Twemproxy + Redis 方案。
Twemproxy 是一个代理服务,可以将多个 Redis 实例组合成一个逻辑集群,对外提供统一的访问接口。
在 Twemproxy + Redis 方案中,Twemproxy 负责将请求路由到后端的 Redis 实例上,从而实现了负载均衡和故障转移。
这种方案可以在不改动业务代码的情况下,实现 Redis 集群的搭建和管理。
四、Codis 方案。
Codis 是一个分布式 Redis 解决方案,它在 Redis Cluster 的基础上,提供了更多的管理和监控功能。
Codis 可以将多个Redis 实例组合成一个逻辑的Codis 集群,对外提供统一的访问接口。
redis集群搭建+lua脚本的使用
redis集群搭建+lua脚本的使⽤详细参考这篇⽂章(windows)⼀、使⽤JAVA代码操作redis集群public static void main(String[] args) throws Exception {JedisPoolConfig poolConfig = new JedisPoolConfig();// 最⼤连接数poolConfig.setMaxTotal(1);// 最⼤空闲数poolConfig.setMaxIdle(1);// 最⼤允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:// Could not get a resource from the poolpoolConfig.setMaxWaitMillis(1000);Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();nodes.add(new HostAndPort("127.0.0.1", 6379));nodes.add(new HostAndPort("127.0.0.1", 6380));nodes.add(new HostAndPort("127.0.0.1", 6381));nodes.add(new HostAndPort("127.0.0.1", 6382));nodes.add(new HostAndPort("127.0.0.1", 6383));nodes.add(new HostAndPort("127.0.0.1", 6384));JedisCluster cluster = new JedisCluster(nodes, poolConfig);String name = cluster.get("name");System.out.println(name);cluster.set("age", "18");System.out.println(cluster.get("age"));try {cluster.close();} catch (IOException e) {e.printStackTrace();}}⼆、使⽤JAVA代码操作lua脚本 1、编写lua脚本redis.call(\"SET\",KEYS[1],ARGV[1]);\n"+ "redis.call(\"SET\",KEYS[2],ARGV[2]); 2、java代码public static void main(String[] args) throws Exception {JedisPoolConfig poolConfig = new JedisPoolConfig();// 最⼤连接数poolConfig.setMaxTotal(1);// 最⼤空闲数poolConfig.setMaxIdle(1);// 最⼤允许等待时间,如果超过这个时间还未获取到连接,则会报JedisException异常:// Could not get a resource from the poolpoolConfig.setMaxWaitMillis(1000);Set<HostAndPort> nodes = new LinkedHashSet<HostAndPort>();nodes.add(new HostAndPort("127.0.0.1", 6379));nodes.add(new HostAndPort("127.0.0.1", 6380));nodes.add(new HostAndPort("127.0.0.1", 6381));nodes.add(new HostAndPort("127.0.0.1", 6382));nodes.add(new HostAndPort("127.0.0.1", 6383));nodes.add(new HostAndPort("127.0.0.1", 6384));JedisCluster cluster = new JedisCluster(nodes, poolConfig);String lua = "redis.call(\"SET\",KEYS[1],ARGV[1]);\n"+ "redis.call(\"SET\",KEYS[2],ARGV[2]);";String[] p = {"{a}a1","{a}a2","a","b"};Object eval = cluster.eval(lua, 2, p);try {cluster.close();} catch (IOException e) {e.printStackTrace();}需要注意的时,redis集群执⾏lua操作的时候,要求key值必须要在同⼀个solt上⾯,为了达到这个⽬的,可以在key值中增加“{xx}”内容,这样redis在计算hash槽的时候会按{}内的内容计算hash值;。
redis集群方案
redis集群方案目录1. Redis集群方案概述1.1 Redis集群介绍1.2 Redis集群优势2. Redis集群方案实施2.1 配置Redis集群2.2 数据分片策略2.3 节点故障处理3. Redis集群方案应用3.1 高并发场景下的应用3.2 分布式系统中的应用案例4. Redis集群方案总结4.1 总体效果评估4.2 未来发展趋势---Redis集群方案概述Redis集群是用来解决Redis单机无法满足高并发场景需求的解决方案,通过多个Redis节点组成集群,共同负责存储和处理大量数据请求。
Redis集群的优势在于可以提高系统性能和可靠性,同时支持水平扩展,使系统更具弹性和可扩展性。
---Redis集群方案实施配置Redis集群需要考虑节点数量、主从复制关系、数据分片等因素,通过正确的配置可以实现集群间数据同步和负载均衡。
数据分片策略可以根据业务需要选择合适的分片方式,如哈希分片、范围分片等。
节点故障处理是保障集群高可用性的关键,需要及时发现和处理故障节点,保证集群的正常运行。
---Redis集群方案应用在高并发场景下,Redis集群可以有效地缓解单点故障的压力,提升系统的稳定性和性能。
在分布式系统中,Redis集群可以作为数据存储层,提供快速的数据访问和操作,支持对数据的高效处理和管理。
---Redis集群方案总结通过对Redis集群方案的实施和应用,可以有效提高系统的性能和扩展性,为业务发展提供更强大的支持。
未来,随着大数据和云计算技术的发展,Redis集群方案将会更加普遍地应用于各种场景中,成为构建分布式系统的理想选择。
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三主三从集群⼀、资源准备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的虚拟机宕机从⽽造成主从节点全部失效。
Redis缓存的集群部署与容灾方案
Redis缓存的集群部署与容灾方案随着互联网应用的普及和数据量的不断增加,对于高性能缓存的需求也越来越迫切。
Redis作为一种基于内存的高性能键值缓存数据库,被广泛应用于各种大规模系统中。
为了保证Redis缓存的高可用性和容灾能力,合理的集群部署和容灾方案是必要的。
一、Redis集群部署方案1. 主从复制模式主从复制模式是Redis集群中最常见也是最简单的部署方案。
在这种模式下,通过一个或多个主节点与多个从节点相连,主节点负责处理写操作,从节点负责处理读操作。
主从复制模式的部署步骤如下:(1)配置主节点:在主节点的配置文件中,设置"slaveof no one",并配置适当的密码验证和数据持久化选项。
(2)配置从节点:在从节点的配置文件中,设置"slaveof 主节点IP 主节点端口",并配置适当的密码验证和数据持久化选项。
(3)启动Redis实例:分别启动主节点和从节点的Redis实例。
(4)验证复制状态:通过命令"info replication"来查看主从节点的连接状态和复制效果。
2. 哨兵模式在主从复制模式下,当主节点发生故障时,需要手动将某个从节点提升为新的主节点。
为了解决这一问题,Redis提供了哨兵模式,通过哨兵节点监控主从节点的状态,实现自动故障切换。
哨兵模式的部署步骤如下:(1)配置哨兵节点:在每个哨兵节点的配置文件中,设置"sentinel monitor name 主节点IP 主节点端口 quorum",其中name为主节点的名称,quorum是多数节点的意思。
(2)启动哨兵实例:分别启动哨兵实例。
(3)验证故障切换:通过故障模拟或手动关闭主节点的方式,验证哨兵节点是否能够自动切换主节点。
二、Redis容灾方案1. 数据持久化Redis提供了两种数据持久化的方式,即RDB快照和AOF日志。
RDB快照是将Redis内存中的数据以快照的方式保存到磁盘上,而AOF日志是将每个写操作追加到日志文件中。
spring使用redis集群配置
spring使⽤redis集群配置上⾯两篇介绍了redis集群的配置合⼀些基本的概念,所以接下来当然是要在项⽬中使⽤咯,redis的java⽀持已经做的⾮常好了,所以我们来试着使⽤这些api来进⾏redis的操作,⾸先我们需要操作redis的架包:<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.7.3</version></dependency>我们需要做的仅仅是在spring配置⽂件中注⼊这些基本类,然后⾃⼰实现dao,下⾯是配置⽂件:<context:property-placeholder ignore-unresolvable="true" location="classpath:yonyou.properties" /><bean id="jedisPoolConfig"class="redis.clients.jedis.JedisPoolConfig"><property name="maxTotal" value="1000"/><property name="maxIdle" value="10"/><property name="minIdle" value="1"/><property name="maxWaitMillis" value="30000"/><property name="testOnBorrow" value="true"/><property name="testOnReturn" value="true"/><property name="testWhileIdle" value="true"/><!-- <property name="testWhileIdle" value="true"/> --></bean><bean id="shardedJedisPool"class="redis.clients.jedis.ShardedJedisPool" destroy-method="destroy"><constructor-arg ref="jedisPoolConfig"/><constructor-arg> <!--如果以后需要扩展集群,只需要复制⼀份redis,修改端⼝,然后在这⾥配置即可--><list><bean class="redis.clients.jedis.JedisShardInfo"><constructor-arg index="0" value="127.0.0.1"/><constructor-arg index="1" value="6379"/><constructor-arg index="2" value="instance:01"/></bean><bean class="redis.clients.jedis.JedisShardInfo"><constructor-arg index="0" value="127.0.0.1"/><constructor-arg index="1" value="6380"/><constructor-arg index="2" value="instance:02"/></bean><bean class="redis.clients.jedis.JedisShardInfo"><constructor-arg index="0" value="127.0.0.1"/><constructor-arg index="1" value="6381"/><constructor-arg index="2" value="instance:03"/></bean></list></constructor-arg></bean><!--java帮我们同步sentinel的信息,将主从信息同步到客户端来--><bean class="redis.clients.jedis.JedisSentinelPool"><constructor-arg index="0" value="mymaster"/><constructor-arg index="1"><set><value>127.0.0.1:26379</value></set></constructor-arg><constructor-arg index="2"ref="jedisPoolConfig"/></bean>上⾯配置好了以后,我们就相当于将redis集群给映射过来了,下来我们只需要做⼀些操作,涉及到数据的CRUD.package com.yonyou.hotusm.module.nosql.redis;import redis.clients.jedis.ShardedJedis;//这个接⼝是操作sharedJedispublic interface RedisDataSource {public abstract ShardedJedis getRedisClient();public void returnResource(ShardedJedis shardedJedis);public void returnResource(ShardedJedis shardedJedis,boolean broken);}实现:package com.yonyou.hotusm.module.nosql.redis;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Repository;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPool;@Repository("redisDataSource")public class RedisDataSourceImpl implements RedisDataSource {private static final Logger log = LoggerFactory.getLogger(RedisDataSourceImpl.class); @Autowiredprivate ShardedJedisPool shardedJedisPool;public ShardedJedis getRedisClient() {try {ShardedJedis shardJedis = shardedJedisPool.getResource();return shardJedis;} catch (Exception e) {log.error("getRedisClent error", e);}return null;}public void returnResource(ShardedJedis shardedJedis) {shardedJedisPool.close();//shardedJedisPool.returnResource(shardedJedis);}public void returnResource(ShardedJedis shardedJedis, boolean broken) {if (broken) {shardedJedisPool.close();//shardedJedisPool.returnBrokenResource(shardedJedis);} else {shardedJedisPool.close();//shardedJedisPool.returnResource(shardedJedis);}}}下⾯就是操作jedis的具体类了:@Repository("jedisTemplate")public class JedisTemplate {private static final Logger log = LoggerFactory.getLogger(JedisTemplate.class);@Autowiredprivate RedisDataSource redisDataSource;public void disconnect() {ShardedJedis shardedJedis = redisDataSource.getRedisClient();shardedJedis.disconnect();}/*** 设置单个值** @param key* @param value* @return*/public String set(String key, String value) {String result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.set(key, value);} catch (Exception e) {e.printStackTrace();log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}/*** 获取单个值** @param key* @return*/public String get(String key) {String result = null;ShardedJedis shardedJedis = redisDataSource.getRedisClient();if (shardedJedis == null) {return result;}boolean broken = false;try {result = shardedJedis.get(key);} catch (Exception e) {log.error(e.getMessage(), e);broken = true;} finally {redisDataSource.returnResource(shardedJedis, broken);}return result;}真正的还有很多操作,list,set,哈希什么的,我就不把代码贴出来了,看看api就知道了。
从0到1在Linux上搭建Redis6.0的Cluster集群教程
从0到1在Linux上搭建Redis6.0的Cluster集群教程Redis集群模式分三种⽅式:1、主从模式,这⾥通常指的是,主down后,需要⼿动升级从库为主库。
主库⽀持读写,从库只读。
⾄少两个redis实例2、哨兵模式,是1模式的加强,由哨兵模式⾃动选举从库中的某⼀个为主库。
解决⾼可⽤问题。
⾄少三个redis实例3、Cluster集群模式,除了解决⾼可⽤问题外,还解决⼤量数据存储问题,通过slot⽅式路由到不同的服务器组中。
⾄少3台服务器,六个redis实例。
详细的介绍请参阅:https:///miss1181248983/article/details/90056960下⾯介绍如何搭建Cluster集群模式。
1、⾸选准备三台阿⾥云机器,ip分别如下s1:172.16.213.251s2:172.16.213.250s3:172.16.213.246注意:建议尽量不要选择Aliyun Linux操作系统,会遇到各种奇怪奇葩的问题,笔者⽤Aliyun linux花费⼤量时间,并未安装成功,客服也仅仅只给建议,⽆奈换回主流的CenterOS,下⾯是三台服务器的版本情况lsb_release -a2、安装Redis 6.0.10版本的,检查服务器环境是否满⾜gcc -v #检查gcc版本,需要是8.3+的3、安装tcl,否则编译redis的时候不通过,这⾥安装的时候直接使⽤rpm编译好的包执⾏安装即可。
⼩tips:国内有很多linux软件镜像,这⾥采⽤阿⾥云的镜像⽹站https:///packageSearch?word=tcl,点开后直接搜索即可,注意使⽤⾃⼰需要的版本rpm -ivh https:///centos/8.3.2011/BaseOS/x86_64/os/Packages/tcl-8.6.8-2.el8.x86_ 64.rpm?spm=a2c6h.13651111.0.0.70662f7099C6CD&file=tcl-8.6.8-2.el8.x86_64.rpm#使⽤上⾯命令进⾏安装,注意安装的时候要重新获取⼀次rpm安装包地址,输⼊命令回车,⼀会之后再回车⼀次,即可以看到Done安装完成!4、下载Redis,我们默认放到/usr/local/redis-6.0.10⽂件夹cd /usr/localwget https://download.redis.io/releases/redis-6.0.10.tar.gztar -zvxf redis-6.0.10.tar.gzcd redis-6.0.10/make && make test && make install #也可以分步执⾏,看到下⾯截图的命令基本代表已经安装成功了。
Linux下Redis集群安装部署及使用详解(在线和离线两种安装+相关错误解决方案)
Linux下Redis集群安装部署及使⽤详解(在线和离线两种安装+相关错误解决⽅案)⼀、应⽤场景介绍 本⽂主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联⽹的Linux环境和脱机的Linux环境下是如何安装的。
因为⼤多数时候,公司的⽣产环境是在内⽹环境下,⽆外⽹,服务器处于脱机状态(最近公司要上线项⽬,就是⽆外⽹环境的Linux,被离线安装坑惨了,⾛了很多弯路,说多了都是⾎泪史啊%>_<%)。
这也是笔者写本⽂的初衷,希望其他⼈少⾛弯路,下⾯就介绍如何在Linux安装部署Redis集群。
⼆、安装环境及⼯具 系统:Red Hat Enterprise Linux Server release 6.6 ⼯具:XShell5及Xftp5 安装包:GCC-7.1.0 Ruby-2.4.1 Rubygems-2.6.12 Redis-3.2.9(3.x版本才开始⽀持集群功能)三、安装步骤 要搭建⼀个最简单的Redis集群,我们⾄少需要6个节点:3个Master和3个Slave。
那为什么需要3个Master呢?其实就是⼀个“铁三⾓”的关系,当1个Master下线的时候,其他2个Master 和对应的Salve⽴马就能顶替上去,确保集群能够正常使⽤,如果你之前了解Mongodb/Hadoop/Strom这些的话,你就很容易⽬标⼀般分布式的最低要求基数个数节点,这样便于选举(少数服从多数的原则)。
本⽂当中,我们就偷下懒,在⼀台Linux虚拟机上搭建6个节点的Redis集群(实际真正⽣产环境,需要3台Linux服务器分布存放3个Master)1、安装GCC环境安装Redis需要依托GCC环境,先检查Linux是否已经安装了GCC,如果没有安装,则需要进⾏安装检查GCC是否安装,可以看看版本号$ gcc -v如果已经安装了GCC,则会显⽰以下信息如果没有任何信息,则我们可以通过命令yum install gcc-c++进⾏在线安装$ yum install gcc-c++如果没有⽹络的时候,我们就需要下载GCC的安装包进⾏⼿动安装了,具体⽅法还是⽐较复杂的,具体离线安装GCC的⽅法,请参考我的另外⼀篇⽂章《》2、安装Ruby和Rubygems如果有⽹的话,则通过yum命令进⾏安装,⾃动将关联的依赖包全部安装$ yum install ruby$ yum install rubygems如果是离线的状态,我们则可以选择下载Ruby和Rubygems,解压⼿动进⾏安装,具体的⽅法请参考我的另外两篇⽂件《》和《》,这⾥我们不做多讲解。
redis单机安装以及集群搭建(redis-6.2.6)
redis单机安装以及集群搭建(redis-6.2.6)之前写过⼀篇基于redis-3.2.4版本的安装⽇记,这篇是基于redis-6.2.6改动不少,故再次记录⼀下两台电脑10.2.5.147,10.2.5.148,都是centos7.5本次搭建4主4从集群1.单机安装1.1.下载安装包直接从redis官⽹下载安装包,官⽹地址:https://redis.io/download直接使⽤命令下载:wget http://download.redis.io/releases/redis-6.2.6.tar.gz1.2.安装编译将安装包直接上传到了/opt⽬录解压 tar -zxvf redis-6.2.6.tar.gz 之后,得到⼀个redis-6.2.6的⽂件夹个⼈⽐较喜欢将⽂件信息放在/usr/local/redis⽬录下,所以cp /opt/redis-6.2.6/* /usr/local/redis接下来就是编译了进⼊到/usr/local/redis⽬录,执⾏make命令make编译报错make[3]: 进⼊⽬录“/usr/local/redis/deps/hiredis”cc -std=c99 -pedantic -c -O3 -fPIC -Wall -W -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers -g -ggdb alloc.cmake[3]: cc:命令未找到make[3]: *** [alloc.o] 错误 127make[3]: 离开⽬录“/usr/local/redis/deps/hiredis”make[2]: *** [hiredis] 错误 2make[2]: 离开⽬录“/usr/local/redis/deps”make[1]: [persist-settings] 错误 2 (忽略)CC adlist.o/bin/sh: cc: 未找到命令make[1]: *** [adlist.o] 错误 127make[1]: 离开⽬录“/usr/local/redis/src”安装更新gccyum isntall gcc-c++make编译报错致命错误:jemalloc/jemalloc.h:没有那个⽂件或⽬录分配器allocator,如果有MALLOC 这个环境变量,会有⽤这个环境变量的去建⽴Redis。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
redis集群搭建现在项目上用redis的话,很少说不用集群的情况,毕竟如果生产上只有一台redis会有极大的风险,比如机器挂掉,或者内存爆掉,就比如我们生产环境曾今也遭遇到这种情况,导致redis内存不够挂掉的情况,当然这些都是我们及其不能容忍的,第一个必须要做到高可靠,其次才是高性能,好了,下面我来逐一搭建一下。
一:Redis集群搭建1. 下载首先去官网下载较新的3.2.0版本,下载方式还是非常简单的,比如官网介绍的这样。
$ wget http://download.redis.io/releases/redis-3.2.0.tar.gz$ tar xzf redis-3.2.0.tar.gz$ cd redis-3.2.0$ make2. redis配置由于我们要做集群,而且还要redis自带的redis-trib.rb 能正常运行,我们需要在集群中开启三台master,三台slave,所以这里我需要建立6个文件夹,而且文件夹的名称就使用端口地址的名字,比如:6389. 6380....6384。
3. config配置。
现在directory的分布情况大致如上图,接下来要做的事情就是配置redis.conf了,在这里需要配置四个选项。
<1> port 端口地址,比如6380文件夹下面的port就是6380,# Accept connections on the specified port, default is6379 (IANA #815344).# If port 0is specified Redis will not listen on a TCP socket.port 6379<2> cluster-enabled 和cluster-config-file这个顾名思义,首先需要开启redis的cluster模式,然后配置一个cluster-config-file文件,这个文件用于存放redis 的实时信息,redis会动态追加和修改这个conf下面的内容信息,不过要记住,这个nodes-6379.conf 可以根据端口文件夹依次配置,比如6380文件夹可以改成nodes-6380.conf这样。
# Normal Redis instances can't be part of a Redis Cluster; only nodes that are# started as cluster nodes can. In order to start a Redis instance as a# cluster node enable the cluster support uncommenting the following:#cluster-enabled yes# Every cluster node has a cluster configuration file. This file is not# intended to be edited by hand. It is created and updated by Redis nodes.# Every Redis Cluster node requires a different cluster configuration file.# Make sure that instances running in the same system do not have# overlapping cluster configuration file names.#cluster-config-file nodes-6379.conf<3> directory为了方便管理,我这里配置的root目录取决于在哪个文件夹,比如6380下面我的dir就是: dir ./6380/# Note that you must specify a directory here, not a file name.dir ./6379/<4> protected-mode这个是redis 3.2 才追加的一个功能,从功能注释中,我们就可以发现,这个默认就是不让外界可以访问redis,所以这里我们就改为no,可以远程访问。
# By default protected mode is enabled. You should disable it only if# you are sure you want clients from other hosts to connect to Redis# even if no authentication is configured, nor a specific set of interfaces# are explicitly listed using the "bind" directive.protected-mode nook,到现在为止,我们的config就修改完毕了,其他端口的文件夹也可以依次配置之~二:开启redis到现在为止,各个端口文件夹都配置成功了,接下来准备开启了。
接下来我们可以看一下,在6379下面是不是有生成node-6379.conf文件,比如下面:三:配置redis-trib.rb因为redis-trib.rb是ruby写的,而我们的电脑肯定是没有ruby和一些配置依赖项,不过没关系,有强大的yum安装,一切都不是问题。
1. 执行replicas命令[jack@localhost ~]$ cluster/redis-trib.rb create --replicas 1192.168.161.133:6379192.168.161.133:6380192.168.161.133:6381192.168.161.133:6382192.168.161.133:6383192.168.161.133:6384/usr/bin/env: ruby: No such file or directory[jack@localhost ~]$可以看到ruby是没有安装的,所以下一步我们要安装ruby了。
2. 安装ruby 【一定要是管理员权限哦】[jack@localhost ~]$ sudousage: sudo [-D level] -h | -K | -k | -Vusage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u username|#uid]usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U username] [-u user name|#uid] [-g groupname|#gid] [command]usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-ggroupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid][VAR=value] [-i|-s] [<command>]usage: sudo -e [-AknS] [-r role] [-t type] [-C fd] [-D level] [-ggroupname|#gid] [-p prompt] [-u user name|#uid] file ...[jack@localhost ~]$ suPassword:jacsu: incorrect password[jack@localhost ~]$ yum install rubyLoaded plugins: fastestmirror, refresh-packagekit, securityYou need to be root to perform this command.[jack@localhost ~]$ jackbash: jack: command not found[jack@localhost ~]$ suPassword:[root@localhost jack]# yum install rubyLoaded plugins: fastestmirror, refresh-packagekit, securityLoading mirror speeds from cached hostfile* base: * extras: * updates: Setting up Install ProcessResolving Dependencies--> Running transaction check---> Package ruby.x86_64 0:1.8.7.374-4.el6_6 will be installed--> Processing Dependency: ruby-libs = 1.8.7.374-4.el6_6 for package: ruby-1.8.7.374-4.el6_6.x86_64 --> Processing Dependency: libruby.so.1.8()(64bit) for package: ruby-1.8.7.374-4.el6_6.x86_64--> Running transaction check---> Package ruby-libs.x86_64 0:1.8.7.374-4.el6_6 will be installed--> Processing Dependency: libreadline.so.5()(64bit) for package: ruby-libs-1.8.7.374-4.el6_6.x86_64 --> Running transaction check---> Package compat-readline5.x86_64 0:5.2-17.1.el6 will be installed--> Finished Dependency ResolutionDependencies Resolved========================================================================= =======Package Arch Version Repository Size========================================================================= =======Installing:ruby x86_64 1.8.7.374-4.el6_6 base538 kInstalling for dependencies:compat-readline5 x86_64 5.2-17.1.el6 base130 kruby-libs x86_64 1.8.7.374-4.el6_6 base 1.7 MTransaction Summary========================================================================= =======Install 3 Package(s)Total download size: 2.3 MInstalled size: 7.8 MIs this ok [y/N]: yDownloading Packages:(1/3): compat-readline5-5.2-17.1.el6.x86_64.rpm | 130 kB 00:00(2/3): ruby-1.8.7.374-4.el6_6.x86_64.rpm | 538 kB 00:00(3/3): ruby-libs-1.8.7.374-4.el6_6.x86_64.rpm | 1.7 MB 00:02--------------------------------------------------------------------------------Total 747 kB/s | 2.3 MB 00:03warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEYRetrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6Importing GPG key 0xC105B9DE:Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@>Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5)From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6Is this ok [y/N]: yRunning rpm_check_debugRunning Transaction TestTransaction Test SucceededRunning TransactionInstalling : compat-readline5-5.2-17.1.el6.x86_64 1/3Installing : ruby-libs-1.8.7.374-4.el6_6.x86_64 2/3Installing : ruby-1.8.7.374-4.el6_6.x86_64 3/3Verifying : compat-readline5-5.2-17.1.el6.x86_64 1/3Verifying : ruby-libs-1.8.7.374-4.el6_6.x86_64 2/3Verifying : ruby-1.8.7.374-4.el6_6.x86_64 3/3Installed:ruby.x86_64 0:1.8.7.374-4.el6_6Dependency Installed:compat-readline5.x86_64 0:5.2-17.1.el6 ruby-libs.x86_64 0:1.8.7.374-4.el6_6Complete![root@localhost jack]#3. 安装rubygems接着我们再次运行replicas命令,看看会怎么样。