redis 集群读写分离 redis集群模式的读写分离_linux

redis 集群读写分离 redis集群模式的读写分离_数据库_02


因为热爱所以坚持,因为热爱所以等待。熬过漫长无戏可演的日子,终于换来了人生的春天,共勉!!!

Redis主从,读写分离、哨兵、集群搭建详解

  • 1.Redis主从搭建
  • 2.哨兵模式高可用
  • 3.Redis集群


1.Redis主从搭建

概述:
Redis主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布 记录。同步对读取操作的可扩展性和数据冗余很有帮助。

于目前redis主从的搭建,主流的都是主机读写从机只读,我们这次搭建也按照这种模式来,如图下所示进行搭建

redis 集群读写分离 redis集群模式的读写分离_数据库_03


搭建步骤:

(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   #存放配置的地方

redis 集群读写分离 redis集群模式的读写分离_数据库_04

(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

同时我们要公共配置做一些更改:

  1. 把端口号配置注释掉
  2. redis 集群读写分离 redis集群模式的读写分离_redis 集群读写分离_05

  3. 关掉保护模式
  4. redis 集群读写分离 redis集群模式的读写分离_linux_06

  5. 注释掉ip绑定
  6. redis 集群读写分离 redis集群模式的读写分离_linux_07

  7. 注释掉端口启动文件
  8. 设置后台启动
  9. redis 集群读写分离 redis集群模式的读写分离_数据库_08

  10. 注释掉日志文件
  11. redis 集群读写分离 redis集群模式的读写分离_Redis_09

  12. 开启RDB持久化
  13. redis 集群读写分离 redis集群模式的读写分离_linux_10

  14. 设置数据存储的地方(开头我们创建的目录)
  15. redis 集群读写分离 redis集群模式的读写分离_Redis_11

  16. 设置密码
  17. redis 集群读写分离 redis集群模式的读写分离_Redis_12

  18. 设置主从验证密码
  19. redis 集群读写分离 redis集群模式的读写分离_linux_13

  20. 完成这些公共配置后我们继续下一步!

(3) 创建三份redis配置

[root@qzk052 conf]# touch redis-6379.conf
[root@qzk052 conf]# touch redis-6380.conf
[root@qzk052 conf]# touch redis-6381.conf

redis 集群读写分离 redis集群模式的读写分离_linux_14


每一份配置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

redis 集群读写分离 redis集群模式的读写分离_Redis_15


(5)最后一步,检验配置是否成功

我们多开几个连接测试一下,登录客户端,输入info replication查看主从信息

  1. 从主机信息我们可以看到,目前连接了两台从机,成功!!!
[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

redis 集群读写分离 redis集群模式的读写分离_redis_16

  1. 从机
[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

redis 集群读写分离 redis集群模式的读写分离_数据库_17


测试一下:

我们在主机写一个k-v

redis 集群读写分离 redis集群模式的读写分离_redis_18


从机读取

redis 集群读写分离 redis集群模式的读写分离_数据库_19


成功!!!

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
  1. 注释掉端口号
  2. redis 集群读写分离 redis集群模式的读写分离_数据库_20

  3. 开启后台启动
  4. redis 集群读写分离 redis集群模式的读写分离_redis 集群读写分离_21

  5. 注释掉进程启动文件
  6. redis 集群读写分离 redis集群模式的读写分离_Redis_22

  7. 注释掉日志文件
  8. redis 集群读写分离 redis集群模式的读写分离_redis 集群读写分离_23

  9. 改为你的ip
  10. redis 集群读写分离 redis集群模式的读写分离_数据库_24

  11. 设置主从验证密码
  12. redis 集群读写分离 redis集群模式的读写分离_linux_25

哨兵配置

[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

redis 集群读写分离 redis集群模式的读写分离_Redis_26


完成!!!

3.Redis集群

后续。。。

redis 集群读写分离 redis集群模式的读写分离_linux

redis 集群读写分离 redis集群模式的读写分离_数据库_02