redis集群配置
不熟悉redis请先看:redis6学习
主从复制
主从模式指的是使用一个redis实例作为主机,其余的实例作为备份机。主机和从机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取,也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。主从模式很好的解决了数据备份问题,并且由于主从服务数据几乎是一致的,因而可以将写入数据的命令发送给主机执行,而读取数据的命令发送给不同的从机执行,从而达到读写分离的目的。
缺点:
- 主节点宕机,无法继续使用
- 需要通过配置切换到从节点(通过Nginx反向代理、修改redis配置地址等)
- 降低读的访问能力,写的访问没有降低 数据同步也存在问题
- 单台机器内存有局限性
作用
- 读写分离,性能扩展
- 容灾快速恢复
搭建
本次以搭建一主两从为案例
准备
准备三台centos7服务器分别为192.168.3.106、192.168.3.107、192.168.3.108
关闭防火墙:systemctl stop firewalld.service
步骤
- 正常启动三台redis服务 并进入客户端
src/redis-server redis.conf
src/redis-cli
- 清空里面的数据并且查看启动信息
清空数据:flushall
查看启动信息:info replication
- 配从(库)不配主(库)
以192.168.3.106 节点为主节点,其他两个为从节点
slaveof <ip><port>
在192.168.3.107、192.168.3.108这两个节点上执行
slaveof 192.168.3.106 6379
- 在此查看三个服务器的启动信息
- 测试
在从节点中插入数据,报错从节点只允许读操作
在主节点中插入数据,查看其他从节点,都能获取数据
到此主从配置成功 - 主节点宕机
可以看到两个从节点不会成为主节点,重启主节点即可恢复
- 从节点宕机
重新启动后,还需要设置slaveof 192.168.3.106 6379
哨兵模式
准备四台服务器 分别为192.168.3.106、192.168.3.107、192.168.3.108、192.168.3.109
搭建
1.按照主从复制模式,搭建一主两从
192.168.3.106 为主服务器,192.168.3.107、192.168.3.108 为从服务器 (主从搭建如上)
2.将192.168.3.109 作为哨兵模式启动
- sentinel.conf 文件
在redis src 目录下有个sentinel.conf 文件, 该文件重要的属性
sentinel monitor mymaster 127.0.0.1 6379 2
其中mymaster为监控对象起的服务器名称,ip地址、端口为master 服务器 2表示至少有多少个哨兵同意迁移的数量。
- 修改sentinel.conf 将 默认的
sentinel monitor mymaster 127.0.0.1 6379 2
改为
sentinel monitor mymaster 192.168.3.106 6379 1
- 启动哨兵
src/redis-sentinel sentinel.conf
可以看到哨兵监听到主服务器
3.关闭主服务器,查看哨兵信息
看到哨兵主服务器down,选举108的作为主服务器
4.故障恢复
优先级在redis.conf中默认:slave-priority 100,值越小优先级越高
偏移量是指获得原主机数据最全的
每个redis实例启动后都会随机生成一个40位的runid
集群搭建
概念
Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N。
Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求
准备
六台虚拟机,分别为192.168.3.106、192.168.3.107、192.168.3.108、192.168.3.109、192.168.3.110、192.168.3.111
删除所有节点的aof、rdb文件 rm -rf *.rdb *.aof
开始搭建
-
修改redis.conf
cluster-enabled yes 打开集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换。 -
启动所有的redis
通过ps -ef|grep redis 查看所有的redis是否启动成功
启动成功后会在生成 nodes-6379.conf -
创建集群
用redis-cli 创建整个redis集群(redis5以前的版本集群是依靠ruby脚本redis-trib.rb实现)
通过redis-cli --cluster help
来获取指令
create host1:port1 … hostN:portN
–cluster-replicas 表示复制因子 1表示 一主一从
根据算法自动配置主从
src/redis-cli --cluster create 192.168.3.106:6379 192.168.3.107:6379 192.168.3.108:6379 192.168.3.109:6379 192.168.3.110:6379 192.168.3.111:6379 --cluster-replicas 1
输入命令后开始分配槽,分配主从节点,然后提示是否确认此分配,输入yes
到此集群搭建完毕
-
测试集群
连接任意一个客户端即可:src/redis-cli -c -h -p(-a访问服务端密码 -c集群模式 -h-p 表示ip地址和端口)
src/redis-cli -c -h 192.168.3.106 -p 6379
cluster info(查看集群信息)
cluster nodes (查看节点列表)
第一串字符表示节点id
master : 主节点
slave:表示从节点 后面跟着的id 表示是这个主节点的从节点 上图可以看出 110节点是106节点的从节点
myself:本机
最后的数字表示主机连接的槽
数据测试
数据插入的时候会根据槽进行数据存储,插入name的值属于107节点的会自动连接107进行存储 -
关闭集群
关闭集群则需要逐个进行关闭