一 . redis主从同步

  准备三个配置文件,实现一主两从的redis数据库结构(这三个配置文件仅仅端口不一样)

# redis-6379.conf 文件, 写入下面数据:

port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no

  下面两个文件直接替换就可以

sed  "s/6379/6380/g"  redis-6379.conf  >  redis-6380.conf
sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf # 把6379配置成主库,6380和6381配置成从库, 需要在6380和6381的conf文件下写入:
slaveof 127.0.0.1 6379

  分别启动redis数据库

redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf

  通过命令查看数据库的身份信息

127.0.0.1:6379> info  Replication     # 身份是master
127.0.0.1:6380> info Replication # 身份是slave
127.0.0.1:6381> info Replication # 身份是slave

  测试: 在主库中写入数据,然后在从库中查看,如果同步即为正常

二 . 故障切换

  手动进行主从故障切换

# 演示:
1. 手动检查进程, 杀死主库. (6379)
2.手动切换到其中的一个从库(6380),去掉conf文件中的slave身份
3.切换到另一个从库(6381), 把conf文件中的slave指向改成 slaveof 127.0.0.1 6380

  自动主从切换, 应用哨兵

# 哨兵(redis-sentinel)集群自动切换原理简述:
给数据库配上几个哨兵,让他们监控着数据库, 不时的去问主, 从数据库时候还活着,如果主库在规定时间内没有回复哨兵信息,证明挂了,
  哨兵会告诉其他的哨兵主库挂啦,然后其他的哨兵去验证一下,如果发现真的挂了,
    那么哨兵会在从库中选举出一个新的主库,然后把其他的从库slaveof 执行这个新的主库.

    1. 环境配置(准备三个redis配置文件)

# redis-6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/opt/redis/data/" # 另外两个如下
sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf
sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf
# 然后分别在这两个文件下写上:
slaveof 127.0.0.1 6379

    2. 分别启动三个redis

redis-server redis-6379.conf
redis-server redis-6380.conf
redis-server redis-6381.conf

    3. 分别查看他们的身份信息

redis-cli  -p  6379  info  Replication     # master 主库
redis-cli -p 6380 info Replication # slave 从库
redis-cli -p 6380 info Replication # slave 从库

    4. 准备三个哨兵(就是三个值班的,检测redis状态)

# redis-26379.conf   写入下面数据:
port 26379
dir /var/redis/data/
logfile "26379.log"
# 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
# 2代表判断主节点失败至少需要2个Sentinel节点节点同意,少数服从多数
# s18ms是主节点的别名
sentinel monitor s18ms 127.0.0.1 6379 2 # 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds s18ms 30000 # 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
# 原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs s18ms 1 # 故障转移超时时间为180000毫秒
sentinel failover-timeout s18ms 180000
daemonize yes
# 另外两个配置信息也只有端口不同

    5.分别启动三个哨兵

[root@localhost s18msredis]# redis-sentinel redis-26379.conf
[root@localhost s18msredis]# redis-sentinel redis-26380.conf
[root@localhost s18msredis]# redis-sentinel redis-26381.conf

    6.查看哨兵身份信息

[root@localhost s18msredis]# redis-cli -p 26379 info sentinel
[root@localhost s18msredis]# redis-cli -p 26380 info sentinel
[root@localhost s18msredis]# redis-cli -p 26381 info sentinel

    7.测试

# 这三个哨兵检测这一主两从
1.干掉(主库)6379,查看6380和6381这两个的身份信息
2.发现其中一个从库(如:6380)变成了主库, 另一个从库变成了6380的从库 # 这个选主库是随机的.
3.当6379复活后,会自动变成6380的从库 # 原理其实就是把6380里面的slave移除啦,然后把6381的slaveof指向了6381, 6379复活后slaveof也指向了6381

三 . redis-cluster的集群搭建

    

集群搭建的作用其实就是把一个很大的数据切片分摊, 就好比1吨重物放到一个马车上,马会拉不动的,
  但是分开放到6辆马车上,每辆马车分得重量就会变小,这样马就能拉动啦!

  redis-cluster 虚拟槽分区

虚拟槽分区巧妙地使用了哈希空间,使用分散度良好的哈希函数把所有的数据映射到一个固定范围内的整数集合,整数定义为槽(slot)。

Redis Cluster槽的范围是0 ~ 。

槽是集群内数据管理和迁移的基本单位。采用大范围的槽的主要目的是为了方便数据的拆分和集群的扩展,

每个节点负责一定数量的槽。

  

  搭建redis-cluster

准备节点(服务端)
服务端运输数据,分配16384个槽位,管理数据
ruby脚本自动帮你分配槽位

  环境配置

# 创建redis-7000.conf  文件并写入如下数据:
port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes #开启集群模式
cluster-config-file nodes-7000.conf  #集群内部的配置文件
cluster-require-full-coverage no  #redis cluster需要16384个slot都正常的时候才能对外提供服务,
                      换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no # 我们一共需要6个节点,也就是需要6个配置文件,3主3从,最少6个才能保证高可用,这6个配置文件仅仅是端口不同

  其他个配置文件

sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf

redis-7001.conf
redis-7002.conf
redis-7003.conf
redis-7004.conf
redis-7005.conf

  分别启动6个redis数据库

[root@localhost s18cluster]# redis-server redis-7000.conf
[root@localhost s18cluster]# redis-server redis-7001.conf
[root@localhost s18cluster]# redis-server redis-7002.conf
[root@localhost s18cluster]# redis-server redis-7003.conf
[root@localhost s18cluster]# redis-server redis-7004.conf
[root@localhost s18cluster]# redis-server redis-7005.conf

  把槽分配给马车,这样马车才能装数据,ruby自动分配

#安装准备ruby语言的环境,用于自动化创建redis集群
1.下载ruby
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2.解压缩
tar -zxvf ruby-2.3.1.tar.gz
./configure --prefix=/opt/ruby/
3.安装
make && make install

  配置ruby的path,就是找到ruby的bin目录的路径,然后添加到/etc/profile中的PATH中去

  通过ruby的软件包管理工具安装redis模块 (gem就是类似于python的pip工具)

wget http://rubygems.org/downloads/redis-3.3.0.gem

  通过gem安装这个redis包

gem install -l redis-3.3.0.gem

  找到ruby创建redis集群的脚本工具

[root@localhost s18cluster]# find /opt  -name redis-trib.rb
/opt/redis-4.0.10/src/redis-trib.rb

  此时就可以通过绝对路径ruby来创建redis的集群工具,进行槽位分配(开启所有集群)

/opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 
  127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
# --replicas 1 表示每个主节点有一个从节点

  查看集群状态

redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster nodes #等同于查看nodes-7000.conf文件节点信息 集群主节点状态
redis-cli -p 7000 cluster nodes | grep master
集群从节点状态
redis-cli -p 7000 cluster nodes | grep slave

  集群已经OK,开始测试

redis-cli -p 7000  -c    # -c 开启集群模式
!!! 当你在其中一个节点中,创建redis的key,只要redis的key经过了重定向,分配到不同的节点中,代表集群搭建ok
     重定向之后, 只要在集群里有数据 无论在哪个port里面,都可以get出来,比如set name attila 被分配到7001 你登录7000也能get到name

redis--主从同步,故障切换,集群搭建的更多相关文章

  1. Redis主从哨兵和集群搭建

    主从配置 哨兵配置 集群配置 1.主从: 国王和丞相,国王权力大(读写),丞相权利小(读) 2.哨兵: 国王和王子,国王死了(主服务挂掉),王子继位(从服务变主服务) 3.集群: 国王和国王,一个国王 ...

  2. 转:Redis 3.2.1集群搭建

    Redis 3.2.1集群搭建   一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2) ...

  3. Redis 5.0.5集群搭建

    Redis 5.0.5集群搭建 一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):s ...

  4. Redis单机安装以及集群搭建

    今天主要来看一下Redis的安装以及集群搭建(我也是第一次搭建). 环境:CentOS 7.1,redis-5.0.7 一.单机安装 1.将Redis安装包放置服务器并解压 2.进入redis安装目录 ...

  5. Redis 3.0.2集群搭建以及相关问题汇总

    Redis3 正式支持了 cluster,是为了解决构建redis集群时的诸多不便 (1)像操作单个redis一样操作key,不用操心key在哪个节点上(2)在线动态添加.删除redis节点,不用停止 ...

  6. kubernetes部署redis主从高可用集群

    1.redis主从高可用集群结构 2.k8s部署有状态的服务选择 对于K8S集群有状态的服务,我们可以选择deployment和statefulset statefulset service& ...

  7. redis主从同步故障切换及集群配置

    一.redis是一中高性能的缓存数据库, 原理:1. 从服务器向主服务器发送 SYNC 命令.2. 接到 SYNC 命令的主服务器会调用BGSAVE 命令,创建一个 RDB 文件,并使用缓冲区记录接下 ...

  8. redis + 主从 + 持久化 + 分片 + 集群 + spring集成

    Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...

  9. redis主从复制,哨兵以及集群搭建部署

    redis主从复制 1.redis支持多实例的功能,一台机器上,可以运行多个单个的redis数据库 环境准备,运行3个redis数据库,达到 1主 2从的配置 主库 6379.conf port 63 ...

随机推荐

  1. 5-Redis 的持久化之 RDB

    2016-12-22 13:58:48 该系列文章链接NoSQL 数据库简介Redis的安装及及一些杂项基础知识Redis 的常用五大数据类型(key,string,hash,list,set,zse ...

  2. Java设计模式之【工厂模式】(简单工厂模式,工厂方法模式,抽象工厂模式)

    Java设计模式之[工厂模式](简单工厂模式,工厂方法模式,抽象工厂模式) 工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字.但在一些复杂的业务逻辑中,创建一个对象不只需 ...

  3. sql 中 联表on 和where

    left join  on 中对表添加的过滤条件 只对右表起作用   左表会完整的呈现出来  要想过滤左表  on 之后用where 进行过滤  不过这样实际上是对量表之后的结果集进行过滤. rint ...

  4. gitbook 入门教程之发布电子书

    输出目标文件 语法格式: gitbook build [book] [output] 默认情况下,gitbook 输出方式是静态网站,其实 gitbook 的输出方式有三种: website, jso ...

  5. Linux 环境 Intelij Idea 安装与快捷图标配置

    索引: 目录索引 参看代码 GitHub: intelij-idea.txt 一.Linux (DeepinOS) 环境 1.官网下载 ideaIU-.tar.gz 2.解压 .tar.gz -C ~ ...

  6. Java https ssl证书导入删除

    下载并命名 例如命名github.cer 放进jre的lib\security下 keytool -delete [OPTION]... 选项: -alias <alias> 要处理的条目 ...

  7. sql 语句-初级进阶(二)

    1.insert插入数据时注意事项: 每次插入一整行,不能半行或者是几列数据. 值与列数必须相同,包括数据类型也必须匹配. 不能为标识列指定值(就是最前面的那一序号列),它是自动增长的 列的数据类型为 ...

  8. JavaCC的TokenManager和Parser

    TokenManager不会感知Parser的存在,这意味着TokenManager会尽量匹配足够长的终结符,而不是依据Parser的语法规则. 当被解析的文本为" @@ "时,T ...

  9. c/c++ 网络编程 UDP 发送端 bind 作用

    网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口. upd 发送端 调用bind函数的目 ...

  10. 【重新发布,代码开源】FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片

    原创博客,转载请注明出处:[重新发布,代码开源]FPGA设计千兆以太网MAC(1)——通过MDIO接口配置与检测PHY芯片 - 没落骑士 - 博客园 https://www.cnblogs.com/m ...