因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!
Redis主从,读写分离、哨兵、集群搭建详解
- 1.Redis主从搭建
- 2.哨兵模式高可用
- 3.Redis集群
1.Redis主从搭建
概述:
Redis主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布 记录。同步对读取操作的可扩展性和数据冗余很有帮助。
于目前redis主从的搭建,主流的都是主机读写,从机只读,我们这次搭建也按照这种模式来,如图下所示进行搭建
搭建步骤:
(1) 我们先在linux的opt目录下创建几个目录,作为统一存放相关文件的地方
[root@qzk052 etc]# mkdir -p /opt/redis/data #存放redis数据的地方
[root@qzk052 etc]# mkdir -p /opt/redis/log #存放日志的地方
[root@qzk052 etc]# mkdir -p /opt/redis/conf #存放配置的地方
(2) 将redis.conf拷贝一份放到 /opt/redis/conf/ 目录下,同时改名为redis-common.conf作为公共配置
[root@qzk052 etc]# cp redis.conf /opt/redis/conf/
[root@qzk052 etc]# cd /opt/redis/conf/
[root@qzk052 conf]# ls
redis.conf
[root@qzk052 conf]# vim redis.conf
[root@qzk052 conf]# mv redis.conf redis-common.conf
同时我们要公共配置做一些更改:
- 把端口号配置注释掉
- 关掉保护模式
- 注释掉ip绑定
- 注释掉端口启动文件
- 设置后台启动
- 注释掉日志文件
- 开启RDB持久化
- 设置数据存储的地方(开头我们创建的目录)
- 设置密码
- 设置主从验证密码
- 完成这些公共配置后我们继续下一步!
(3) 创建三份redis配置
[root@qzk052 conf]# touch redis-6379.conf
[root@qzk052 conf]# touch redis-6380.conf
[root@qzk052 conf]# touch redis-6381.conf
每一份配置copy下面代码,按照端口号稍微修改一下即可,从机要指定配置主机的地址及端口号
#引入公共配置
include /opt/redis/conf/redis-common.conf
#进程编号记录文件
pidfile /var/run/redis-6379.pid
#进程端口号
port 6379
#日志记录文件
logfile "/opt/redis/log/redis-6379.log"
#数据记录文件
dbfilename dump-6379.rdb
#追加文件名称
appendfilename "appendonly-6379.aof"
#下面的配置无需在6379里配置
#备份服务器从属于6379推荐配置局域网ip
#slaveof 106.12.147.77 6379
(4) 每一份配置启动对应一个redis服务
[root@qzk052 opt]# cd /usr/local/redis-6.2.6/bin
[root@qzk052 bin]# ls
backup.db mkreleasehdr.sh redis-check-aof redis-server
dump.rdb redis-benchmark redis-cli
[root@qzk052 bin]# ./redis-server /opt/redis/conf/redis-6379.conf
[root@qzk052 bin]# ./redis-server /opt/redis/conf/redis-6380.conf
[root@qzk052 bin]# ./redis-server /opt/redis/conf/redis-6381.conf
(5)最后一步,检验配置是否成功
我们多开几个连接测试一下,登录客户端,输入info replication查看主从信息
- 从主机信息我们可以看到,目前连接了两台从机,成功!!!
[root@qzk052 ~]# cd /usr/local/redis-6.2.6/bin/
[root@qzk052 bin]# ./redis-cli -p 6379 -a root
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
- 从机
[root@qzk052 ~]# cd /usr/local/redis-6.2.6/bin/
[root@qzk052 bin]# [root@qzk052 bin]# ./redis-cli -p 6379 -a root
-bash: [root@qzk052: command not found
[root@qzk052 bin]# ./redis-cli -p 6381 -a root
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6381> info replication
测试一下:
我们在主机写一个k-v
从机读取
成功!!!
2.哨兵模式高可用
概述:
Redis的主从复制下,一旦主节点由于故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址,对于很多应用场景这种故障处理的方法是无法接受的。但是Redis从2.8开始正式提供了Redis Sentinel(哨兵)架构来解决这个问题。
Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化通知给Redis应用方。整个过程完全是自动的,不需要人工来介入,所以这套方案很有效地解决了Redis的高可用问题。
创建公共配置
[root@qzk052 redis-6.2.6]# cp sentinel.conf /opt/redis/conf/
[root@qzk052 redis-6.2.6]# cd /opt/redis/conf/
[root@qzk052 conf]# mv sentinel.conf sentinel-common.conf
[root@qzk052 conf]# vim sentinel-common.conf
- 注释掉端口号
- 开启后台启动
- 注释掉进程启动文件
- 注释掉日志文件
- 改为你的ip
- 设置主从验证密码
哨兵配置
[root@qzk052 conf]# vim sentinel-26379.conf
[root@qzk052 conf]# vim sentinel-26380.conf
[root@qzk052 conf]# vim sentinel-26381.conf
#引用公共配置
include /opt/redis/conf/sentinel-common.conf
#进程端口号
port 26379
#进程编号记录文件
pidfile /var/run/sentinel-26379.pid
#日志记录文件(为了方便看日志,先注释掉,搭建好再打开)
logfile "/opt/redis/log/sentinel-26379.log"
启动哨兵
[root@qzk052 bin]# redis-sentinel /opt/redis/conf/sentinel-26379.conf
[root@qzk052 bin]# redis-sentinel /opt/redis/conf/sentinel-26380.conf
[root@qzk052 bin]# redis-sentinel /opt/redis/conf/sentinel-26381.conf
完成!!!
3.Redis集群
后续。。。