redis集群
劣势
采纳redis集群,能够保证数据扩散存储(主机-主机),同时保证数据存储的一致性(主机-从机),并且在外部实现高可用的机制,实现了服务故障的主动迁徙.
搭建打算
主从--3台主/3台从(1主1从)
端口--7000/7001/7002/7003/7004/7005
集群搭建
1.筹备集群文件夹:
筹备集群文件夹Mkdir cluster
在cluster文件夹中别离创立7000-7005文件夹
2.复制配置文件:
将redis根目录中的redis.conf文件复制到cluster/7000/ 并以原名保留cp redis.conf cluster/7000/
3.编辑配置文件:
1).正文本地绑定IP地址(69行)#bind 127.0.0.1
2).敞开保护模式(88行)protected-mode no
3).批改端口号(92行)port 7000
4).启动后盾启动(136行)daemonize yes
5).批改pid文件(158行)pidfile /usr/local/src/redis/cluster/7000/redis.pid
6).批改长久化文件(263行)dir /usr/local/src/redis/cluster/7000
7).设定内存优化策略(597行)maxmemory-policy volatile-lru
8).敞开AOF模式(699行)appendonly no
9).开启集群配置(838行)cluster-enabled yes
10).开启集群配置文件(846行)cluster-config-file nodes.conf
11).批改集群超时工夫(852行)cluster-node-timeout 15000
4.复制批改后的配置文件:
阐明:将7000文件夹下的redis.conf文件别离复制到7001-7005中
[root@localhost cluster]# cp 7000/redis.conf 7001/[root@localhost cluster]# cp 7000/redis.conf 7002/[root@localhost cluster]# cp 7000/redis.conf 7003/[root@localhost cluster]# cp 7000/redis.conf 7004/[root@localhost cluster]# cp 7000/redis.conf 7005/
5.批量批改配置文件:
阐明:别离将7001-7005文件中的7000改为对应的端口号的名称,批改时留神方向键的应用
在vim编辑器内底行模式,通过:%s/7000/7001/g
命令批改
g--示意批量批改,将文件内7000都替换为7001/7002...
6.通过脚本编辑启动/敞开指令:
1).创立启动脚本 vim start.sh
#!/bin/shredis-server 7000/redis.conf &redis-server 7001/redis.conf &redis-server 7002/redis.conf &redis-server 7003/redis.conf &redis-server 7004/redis.conf &redis-server 7005/redis.conf &
2).编辑敞开的脚本 vim shutdown.sh
#!/bin/shredis-cli -p 7000 shutdown &redis-cli -p 7001 shutdown &redis-cli -p 7002 shutdown &redis-cli -p 7003 shutdown &redis-cli -p 7004 shutdown &redis-cli -p 7005 shutdown &
3).启动redis节点 sh start.sh
4).查看redis节点启动是否失常 ps -ef | grep redis
7.创立redis集群
redis-cli --cluster create --cluster-replicas 1 192.168.126.129:7000 192.168.126.129:7001 192.168.126.129:7002 192.168.126.129:7003 192.168.126.129:7004 192.168.126.129:7005
redis创立错误做法
前提条件: redis.conf的配置文件首先应该配置正确
步骤:
1.敞开所有的Redis服务项 sh stop.sh
2.删除nodes.conf配置文件
因为搭建集群之后,所有的集群的信息都会写入nodes.conf文件中,如果下次重启会读取其中的配置信息实现redis集群的主从的搭建. 所以如果须要从新搭建集群,则必须删除该文件从新生成.
rm -rf 700*/nodes.confrm -rf 700*/dump.rdb
3.重启Redis服务器之后从新搭建集群
集群工作原理阐明
redis集群高可用测试
1.查看redis主机的状态 info replication
2.将主机敞开 redis-cli -p 7000 shutdown
3.查看主机是否切换
4.重启7000服务器.查看是否为7003的从机(我的我的项目中7003为7000的从机)
集群工作原理
原理阐明:
Redis的所有节点都会保留以后redis集群中的全副主从状态信息.并且每个节点都可能互相通信.当一个节点产生宕机景象.则集群中的其余节点通过PING-PONG检测机制查看Redis节点是否宕机.当有半数以上的节点认为宕机.则认为主节点宕机.同时由Redis残余的主节点进入选举机制.投票选举链接宕机的主节点的从机.实现故障迁徙.
redis集群面试题
准则: Redis的 内存缺失(短少主机) 则集群解体
1.如果3主3从(1主1从) 起码宕机几台集群解体?---2台
2.如果3主6从(1主2从) 起码宕机几台集群解体?---5台
阐明: 如果没有子节点 则会借用其余主机的多余的从机
特点:
集群中如果主机宕机,那么从机能够持续提供服务,当主机中没有从机时,则向其它主机借用多余的从机(若只剩一个主机则不能借).持续提供服务.如果主机宕机时没有从机可用,则集群解体.
SpringBoot整合Redis
/** * redis集群的入门案例 * jedisCluster 操作整个redis集群,链接redis的所有的节点 */ @Test public void testCluster(){ Set<HostAndPort> sets = new HashSet<>(); sets.add(new HostAndPort("192.168.126.129", 7000)); sets.add(new HostAndPort("192.168.126.129", 7001)); sets.add(new HostAndPort("192.168.126.129", 7002)); sets.add(new HostAndPort("192.168.126.129", 7003)); sets.add(new HostAndPort("192.168.126.129", 7004)); sets.add(new HostAndPort("192.168.126.129", 7005)); JedisCluster jedisCluster = new JedisCluster(sets); jedisCluster.set("cluster", "集群测试"); System.out.println(jedisCluster.get("cluster")); }