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"));    }