共计 3054 个字符,预计需要花费 8 分钟才能阅读完成。
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/sh
redis-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/sh
redis-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.conf
rm -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"));
}