redis集群原理及搭建
Reids集群设置
机器数量:6台
实例个数:9
Redis集群至少六个实例,至少六个节点,实现三主三从的集群方式,在spring cloud 及其开发构架中主要写在application.yaml文件中
需要将实例的ip和端口全部写上,如需要密码,还需要添加password参数
为了将资源利用最大化并且达到最高可用性和数据稳定性,采用六个节点,配置九个实例的方式,将集群中slave节点的机器配置不同端口号,这样实现集群资源最大化利
Spring cloud 在连接时填写需要填写九个ip 和想对应的端口
此集群,因为每一组主从节点均不在一台机器上,所以六台机器任一台集群挂机,都不会影响程序
原理:
Redis集群将redis的主节点has成16384个虚拟内存槽平均分配给三个主节点,要存储的数据会通过hash计算分配带对应的主节点,再由主节点同步给队形的slave节点 。
Redis集群是没有同意的入口的,客户端连接集群的时候连接集群中的node即可,集群内部的节点是互相通信(PING-PONG机制),每个节点都是一个redis实例。
为了实现集群的高可用,判断节点是否健康,redis-cluster有一个投票容错机制,吐过集群中超过半数的节点投票认为节点挂了,那么节点就挂了,超过半数的主节点挂了,那么cluser也挂了。
工具:
在之前的redis4.X版本中创建redis集群必须的搭建ruby环境,到了redis5.x以后自带的c语言工具redis-cli便可以完成集群的使用和搭建
搭建过程及遇到的问题:
首先安装reids
在redis安装包中tar解压后不用生成makefile直接就可以编译
在make过程出现问题可能原因是gcc gcc-c++ 或者在内核中使用的内存函数没有指定正确需要手动修改make MALLOC=libc即可修复
改动配置文件
bind 192.168.155.114
监听的IP
protected-mode no
是否开启redis保护机制,会有拒绝请求的可能
port 6378
监听端口
masterauth 1q2w3e4r
开启集群密码
replica-priority 96
权重值,集群中挂掉机器再次复活,看权重值是否代替活着的机器
requirepass 1q2w3e4r
开启redis密码
cluster-enabled yes
集群模式是否开启
cluster-node-timeout6000
集群超时时间。默认15秒这里设置成6秒,不能大也不能小
cluster-require-full-coverageno
表示当负责一个插槽的主库下线且没有相应的从库进行故障恢复时,集群仍然可用
pidfile/var/run/redis_6379.pid
生成相应的pid位置,根据端口号来修改
将所有势力按照此方式修改保存
进入src目录
使用命令创建集群
./redis-cli --clustercreate 192.168.155.108:6378 192.168.155.107:6378 192.168.155.104:6378 192.168.155.130:6378 192.168.155.114:6378192.168.155.143:6378 192.168.155.130:6377 192.168.155.143:6377 192.168.155.114:6377--cluster-replicas 2 -a 1q2w3e4r
其中 --cluster-replicas 2 意思是每个主节点设置两个slave节点
也可以设置更多主节点,理论上可以设置16384个主节点。通过-M 指定 -a 是集群密码
蓝色标记的是主节点,要放在前面,后面随机生成
查看集群状态
./redis-cli --cluster info 192.168.155.108:6378 -a 1q2w3e4r
节点可以是任意的。-a 是集群密码
由于配置的权重值,实验问题,每次kill掉机器重启,主节点都会被接替
更多功能使用 ./redis-cli --cluster help 查看
也可以进入集群查看
./redis-cli -c -h192.168.155.108 -p 6378 -a 1q2w3e4r
CLUSTER INFO
-c 是进入集群模式
如果集群fail 可以使用./redis-cli --cluster fix ip 来修复单点
重新创建集群时务必将集群里的数据清理干净,并把src下的 dump.rdb 和 node.conf文件删除后才能重新创建集群,要不会报错或者脑裂
单点:在单点环境中默认会出现16个db数据库
默认set key value值是会选择db0 如果在spring cloud的配置文件中设置库需要select x 再进行set
集群:集群环境下 将所有的库合并成db0
所以不需要选库,直接设置就好,spring cloud的配置文件中也要改写成db0