Redis 主从复制与集群搭建

目录

主从复制

1、配从(服务器)不配主(服务器)

2、 一主两从

3、 复制原理

4、 薪火相传

5、反客为主

集群

1、redis集群介绍

2、 启动哨兵

3、 集群搭建 (重点)

 

主从复制

下面用五种方式介绍主从关系。 

1、配从(服务器)不配主(服务器)

步骤

  • 拷贝多个redis.conf文件include
  • 开启daemonize yes
  • Pid文件名字pidfile
  • 指定端口port
  • Log文件名字
  • dump.rdb名字dbfilename
  • Appendonly关掉或者换名字

示例

新建一个文件 redis6379.conf

(1) include /root/myredis/redis.conf => /root/myredis/redis.conf 是主配置文件

(2) 在主文件中开启daemonize => 在/root/myredis/redis.conf 中设置daemonize yes

(3) 继续添加内容 => pidfile /var/run/redis_6379.pid

(4) 继续添加内容 => port 6379

(5) 继续添加内容 => dbfilename dump6379.rdb

同理redis6380.conf、redis6381.conf也如此,替换快捷命令 => :%s/6379/6380

2、 一主两从

(1) redis-cli -p 6380 => 进入到端口为6380的redis客户端

(2) 进入redis-cli后,调用命令 info replication 查看主从复制相关配置信息

(3) slaveof => 成为某个实例的从服务器

主机死了后,从机不会篡位,主机活了后,仍是主机!!

但是如果从机死了后,活了时,不再是从机,而是主机,得重新配置!!!

3、 复制原理

(1)每次从机联通后,都会给主机发送sync指令

(2)主机立刻进行存盘操作,发送RDB文件给从机

(3)从机收到RDB文件后,进行全盘加载

(4)之后每次主机的写操作,都会立刻发送给从机,从机执行相同的命令

Redis 主从复制与集群搭建_第1张图片

4、 薪火相传

上一个slave可以是下一个slave的master,slave同样可以接收其他slaves的连接和同步请求,那么该slave作为链条中下一个的master,可以有效减轻master的写压力,去中心化降低风险。

用slaveof

中途变更转向:会清除之前的数据,重新建立拷贝最新的

风险是一旦某个slave宕机,后面的slave都没法备份

Redis 主从复制与集群搭建_第2张图片

5、反客为主

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。

用slaveof no one 将从机变为主机

集群

1、redis集群介绍

redis集群实现了对redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点储存总数据的1/N。

redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

2、 启动哨兵

redis-sentinel /myredis/sentinel.conf

Redis 主从复制与集群搭建_第3张图片

3、 集群搭建 (重点

(1) 安装ruby环境

Redis 主从复制与集群搭建_第4张图片

然后下载redis-3.2.0.gem文件,并运行命令gem install redis-3.2.0.gem

(2) 制作6个实例

  • 拷贝多个redis.conf文件开启 daemonize yes
  • Pid文件名字pidfile
  • 指定端口port
  • Log文件名字
  • dump.rdb名字dbfilename
  • Appendonly关掉或者换名字

新建一个文件 redis6379.conf

(1) include /root/myredis/redis.conf => /root/myredis/redis.conf 是主配置文件

(2) 在主文件中开启daemonize => 在/root/myredis/redis.conf 中设置daemonize yes

(3) 继续添加内容 => pidfile /var/run/redis_6379.pid

(4) 继续添加内容 => port 6379

(5) 继续添加内容 => dbfilename dump6379.rdb

(6) 继续添加内容 => cluster-enabled yes # 打开集群模式

(7) 继续添加内容 => cluster-config-file nodes-6379.conf #设定节点配置文件名

(8) 继续添加内容 => cluster-node-timeout 15000 # 设置节点失联时间,超过该时 间(毫秒),集群自动进行主从切换。

Redis 主从复制与集群搭建_第5张图片

同理redis6380.conf、redis6381.conf、redis6389.conf、redis6390.conf、redis6391.conf也如此,替换快捷命令 => :%s/6379/6380

(3) 整合

./redis-cli --cluster create 10.211.55.5:6379 10.211.55.5:6380 10.211.55.5:6381 10.211.55.5:6389 10.211.55.5:6390 10.211.55.5:6391 --cluster-replicas 1

一个集群至少要有三个主节点

replicas是复制品的意思,1代表为集群中的每个主节点创建一个从节点

不要用127.0.0.1,要用真实IP地址!!!!

分配原则尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上

(4) 存数据

运行命令 redis-cli -c -p 6379

(5) 查看集群信息

进入redis-cli后,运行cluster nodes命令

(6) slots介绍

一个Redis集群包括16384个插槽(hash slot),数据库中的每个键都属于这16384个插槽的其中一个,集群使用公式CRC16(key) % 16384来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。

Redis 主从复制与集群搭建_第6张图片

Redis 主从复制与集群搭建_第7张图片

Redis 主从复制与集群搭建_第8张图片

(7) 如果集群中的主从都宕机会怎样

主从都宕掉,意味着有一片数据,会变成真空,没法再访问了!

如果无法访问的数据,是连续的业务数据,我们需要停止集群,避免缺少此部分数据,造成整个业务异常,此时可以通过配置cluster-require-full-coverage为yes (不可以访问)

如果无法访问的数据,是相对独立的,对于其他业务的访问,并不影响,那么可以继续开启集群提供服务。此时,可以配置cluster-require-full-coverage为no。(可以访问)

(8) java开发

Redis 主从复制与集群搭建_第9张图片

你可能感兴趣的