精华内容
下载资源
问答
  • Redis 主从集群搭建及哨兵模式配置 最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来; 1.Redis安装 2.主从架构  2.1 Redis主从架构图    2.2Redis主从结构搭建  Redis集群不用安装多...

    最近搭建了redis集群及哨兵模式,为方便以后查看特此记录下来;

    1.Redis安装

    2.主从架构

      2.1 Redis主从架构图

      

      2.2Redis主从结构搭建

      Redis集群不用安装多个Redis,只需复制多个配置文件,修改即可;

      搭建redis master

      进入redis安装目录,创建redis_master文件夹,并且拷贝redis的可执行文件

        cd redis-4.0.8

        mkdir redis_master

        cp redis-4.0.8/src/redis-cli .

        cp redis-4.0.8/src/redis-server .

        cp redis-4.0.8/redis.conf

      修改redis.conf配置文件

    # 守护进程模式
    daemonize yes 
    # pid file 修改pidfile指向路径 pidfile
    /usr/local/redis-4.0.8/redis_master/redis_master.pid # 监听端口 port 7001 # TCP接收队列长度,受/proc/sys/net/core/somaxconn和tcp_max_syn_backlog这两个内核参数的影响 tcp-backlog 511 # 一个客户端空闲多少秒后关闭连接(0代表禁用,永不关闭) timeout 0 # 如果非零,则设置SO_KEEPALIVE选项来向空闲连接的客户端发送ACK tcp-keepalive 60 # 指定服务器调试等级 # 可能值: # debug (大量信息,对开发/测试有用) # verbose (很多精简的有用信息,但是不像debug等级那么多) # notice (适量的信息,基本上是你生产环境中需要的) # warning (只有很重要/严重的信息会记录下来) loglevel notice # 指明日志文件名 logfile "./redis7001.log" # 设置数据库个数 databases 16 # 会在指定秒数和数据变化次数之后把数据库写到磁盘上 # 900秒(15分钟)之后,且至少1次变更 # 300秒(5分钟)之后,且至少10次变更 # 60秒之后,且至少10000次变更 save 900 1 save 300 10 save 60 10000 # 默认如果开启RDB快照(至少一条save指令)并且最新的后台保存失败,Redis将会停止接受写操作 # 这将使用户知道数据没有正确的持久化到硬盘,否则可能没人注意到并且造成一些灾难 stop-writes-on-bgsave-error yes # 当导出到 .rdb 数据库时是否用LZF压缩字符串对象 rdbcompression yes # 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。 rdbchecksum yes # 持久化数据库的文件名 dbfilename dump-master.rdb # 工作目录 dir /usr/local/redis-4.0.8/redis_master/ # 当master服务设置了密码保护时,slav服务连接master的密码 masterauth testmaster123 # 当一个slave失去和master的连接,或者同步正在进行中,slave的行为可以有两种: # # 1) 如果 slave-serve-stale-data 设置为 "yes" (默认值),slave会继续响应客户端请求, # 可能是正常数据,或者是过时了的数据,也可能是还没获得值的空数据。 # 2) 如果 slave-serve-stale-data 设置为 "no",slave会回复"正在从master同步 # (SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。 slave-serve-stale-data yes # 你可以配置salve实例是否接受写操作。可写的slave实例可能对存储临时数据比较有用(因为写入salve # 的数据在同master同步之后将很容易被删除 slave-read-only yes # 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY? # 如果你选择“yes”Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave # 上有延迟,Linux内核的默认配置会达到40毫秒 # 如果你选择了 "no" 数据传输到salve的延迟将会减少但要使用更多的带宽 repl-disable-tcp-nodelay no # slave的优先级是一个整数展示在Redis的Info输出中。如果master不再正常工作了,哨兵将用它来 # 选择一个slave提升=升为master。 # 优先级数字小的salve会优先考虑提升为master,所以例如有三个slave优先级分别为10,10025, # 哨兵将挑选优先级最小数字为10的slave。 # 0作为一个特殊的优先级,标识这个slave不能作为master,所以一个优先级为0的slave永远不会被 # 哨兵挑选提升为master slave-priority 100 # 密码验证 # 警告:因为Redis太快了,所以外面的人可以尝试每秒150k的密码来试图破解密码。这意味着你需要 # 一个高强度的密码,否则破解太容易了 requirepass testmaster123 # redis实例最大占用内存,不要用比设置的上限更多的内存。一旦内存使用达到上限,Redis会根据选定的回收策略(参见: # maxmemmory-policy)删除key maxmemory 3gb # 最大内存策略:如果达到内存限制了,Redis如何选择删除key。你可以在下面五个行为里选: # volatile-lru -> 根据LRU算法删除带有过期时间的key。 # allkeys-lru -> 根据LRU算法删除任何key。 # volatile-random -> 根据过期设置来随机删除key, 具备过期时间的key。 # allkeys->random -> 无差别随机删, 任何一个key。 # volatile-ttl -> 根据最近过期时间来删除(辅以TTL), 这是对于有过期时间的key # noeviction -> 谁也不删,直接在写操作时返回错误。 maxmemory-policy volatile-lru # 默认情况下,Redis是异步的把数据导出到磁盘上。这种模式在很多应用里已经足够好,但Redis进程 # 出问题或断电时可能造成一段时间的写操作丢失(这取决于配置的save指令)。 # # AOF是一种提供了更可靠的替代持久化模式,例如使用默认的数据写入文件策略(参见后面的配置) # 在遇到像服务器断电或单写情况下Redis自身进程出问题但操作系统仍正常运行等突发事件时,Redis # 能只丢失1秒的写操作。 # # AOF和RDB持久化能同时启动并且不会有问题。 # 如果AOF开启,那么在启动时Redis将加载AOF文件,它更能保证数据的可靠性。 appendonly no # aof文件名 appendfilename "appendonly.aof" # fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。 # 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。 # # Redis支持三种不同的模式: # # no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。 # always:每次写操作都立刻写入到aof文件。慢,但是最安全。 # everysec:每秒写一次。折中方案。 appendfsync everysec # 如果AOF的同步策略设置成 "always" 或者 "everysec",并且后台的存储进程(后台存储或写入AOF # 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。 # 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。 # # 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止主进程进行fsync()。 # # 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。 # 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定) # # 如果你有延时问题把这个设置成"yes",否则就保持"no",这是保存持久数据的最安全的方式。 no-appendfsync-on-rewrite yes # 自动重写AOF文件 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # AOF文件可能在尾部是不完整的(这跟system关闭有问题,尤其是mount ext4文件系统时 # 没有加上data=ordered选项。只会发生在os死时,redis自己死不会不完整)。 # 那redis重启时load进内存的时候就有问题了。 # 发生的时候,可以选择redis启动报错,并且通知用户和写日志,或者load尽量多正常的数据。 # 如果aof-load-truncated是yes,会自动发布一个log给客户端然后load(默认)。 # 如果是no,用户必须手动redis-check-aof修复AOF文件才可以。 # 注意,如果在读取的过程中,发现这个aof是损坏的,服务器也是会退出的, # 这个选项仅仅用于当服务器尝试读取更多的数据但又找不到相应的数据时。 aof-load-truncated yes # Lua 脚本的最大执行时间,毫秒为单位 lua-time-limit 5000 # Redis慢查询日志可以记录超过指定时间的查询 slowlog-log-slower-than 10000 # 这个长度没有限制。只是要主要会消耗内存。你可以通过 SLOWLOG RESET 来回收内存。 slowlog-max-len 128 # redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。 # 通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控 # 这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作, # 这个预定时间是通过latency-monitor-threshold配置来指定的, # 当设置为0时,这个监控系统处于停止状态 latency-monitor-threshold 0 # Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭 notify-keyspace-events "" # 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省内存的 # 数据结构来编码。可以通过下面的指令来设定限制 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 # 与hash似,数据元素较少的list,可以用另一种方式来编码从而节省大量空间。 # 这种特殊的方式只有在符合下面限制时才可以用 list-max-ziplist-entries 512 list-max-ziplist-value 64 # set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。 # 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。 set-max-intset-entries 512 # 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。 # 这种编码只适合长度和元素都小于下面限制的有序集合 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 # HyperLogLog稀疏结构表示字节的限制。该限制包括 # 16个字节的头。当HyperLogLog使用稀疏结构表示 # 这些限制,它会被转换成密度表示。 # 值大于16000是完全没用的,因为在该点 # 密集的表示是更多的内存效率。 # 建议值是3000左右,以便具有的内存好处, 减少内存的消耗 hll-sparse-max-bytes 3000 # 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表) activerehashing yes # 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 # 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key # 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理 hz 10 # 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步 aof-rewrite-incremental-fsync yes

      启动master : redis-server ./redis.conf

      查看下redis进程有没有 7001的:ps axu|grep redis

      在客户端做链接测试 : redis-cli  -p 7001 -a testmaster123

      插入一条数据:set name lisi

      查询数据:get name

      "lisi"

      退出:quit

      至此 redis_master 启动成功,能正常读写数据

      搭建redis slave

      进入redis安装目录,创建redis_slave文件夹,并且拷贝redis的可执行文件

        cd redis-4.0.8

        mkdir redis_slave

        cp redis-4.0.8/src/redis-cli .

        cp redis-4.0.8/src/redis-server .

        cp redis-4.0.8/redis.conf

      修改redis.conf配置文件  slave的配置和master基本一致,只需要修改相应的pidfile,端口,日志文件名,并配上master的地址和认证密码

        # pid file

        pidfile  /usr/local/redis-4.0.8/redis_slave/redis_slave.pid

        # 监听端口  

        port 7002

        # 指明日志文件名

        logfile "./redis7002.log"

         # 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

        slaveof 127.0.0.1 7001

         # 当master服务设置了密码保护时,slav服务连接master的密码

        masterauth testmaster123

       #(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)

      启动redis slave 查看数据同步情况

      启动redis slave : redis-server ./redis.conf

      链接redis slave :  redis-cli -p 7002 -a testmaster123

      查询数据 : get name

      "zhangsan"

      至此 master中设置的key-value已经成功同步过来

     

       主从复制原理:

       1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令

         2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来

              3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis

             4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令

             5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致

     

      Redis Sentinel (哨兵)部署

        Sentinel介绍:Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,

               自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,

               自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决(每个sentinel只有一次选举的机会,当主库出现故障,哨兵会投票从库中选出一个承担主库的任务,剩下的还是从库

        Sentinel作用:

          1. 监控:监控主从是否正常
          2. 通知:出现问题时,可以通知相关人员
          3. 自动故障迁移:自动主从切换
          4. 统一的配置管理:连接者询问sentinel取得主从的地址

        哨兵配置

        进入redis的安装目录 创建sentinel文件夹 拷贝可执行文件 配置哨兵

          cd redis-4.0.8

          mkdir redis_sentinel

          cp redis-4.0.8/src/redis-cli .

          cp redis-4.0.8/src/redis-server .

          touch sentinel1.conf 

        哨兵一配置 sentinel1.conf  

    # Example sentinel.conf
    
    # port <sentinel-port>
    port 8001
    
    # 守护进程模式
    daemonize yes
    
    # 指明日志文件名
    logfile "./sentinel1.log"
    
    # 工作路径,sentinel一般指定/tmp比较简单
    dir ./
    
    # 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
    # (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
    # slaves是自动发现,所以你没必要明确指定slaves。
    sentinel monitor MyMaster 127.0.0.1 7001 1
    
    # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
    sentinel down-after-milliseconds MyMaster 1500
    
    # 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
    sentinel failover-timeout TestMaster 10000
    
    # 设置master和slaves验证密码
    sentinel auth-pass TestMaster testmaster123
    
    sentinel config-epoch TestMaster 15
    #除了当前哨兵, 还有哪些在监控这个master的哨兵
    sentinel known-sentinel TestMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
    sentinel known-sentinel TestMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862
    

       

      哨兵二配置 sentinel2.conf

        复制 sentinel1.conf 命名为  sentinel2.conf

        修改sentinel2.conf配置文件 需要修改端口,日志文件名,其他监控哨兵配置

          # port <sentinel-port>

          port 8002

          # 指明日志文件名

          logfile "./sentinel2.log"

          #除了当前哨兵, 还有哪些在监控这个master的哨兵

          sentinel known-sentinel TestMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5

          sentinel known-sentinel TestMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862

     

      哨兵三配置 sentinel3.conf

        复制 sentinel1.conf 命名为  sentinel3.conf

        修改sentinel3.conf配置文件 需要修改端口,日志文件名,其他监控哨兵配置

          # port <sentinel-port>

          port 8003

          # 指明日志文件名

          logfile "./sentinel3.log"

          #除了当前哨兵, 还有哪些在监控这个master的哨兵

          sentinel known-sentinel TestMaster 127.0.0.1 8001 0aca3a57038e2907c8a07be2b3c0d15171e44da5

          sentinel known-sentinel TestMaster 127.0.0.1 8002 ac1ef015411583d4b9f3d81cee830060b2f29862

    启动哨兵:redis.sentinel  ./sentinel1.conf  或使用 redis.server ./sentinel1.conf  --sentinel

         redis.sentinel  ./sentinel2.conf

         redis.sentinel  ./sentinel3.conf

    在sentinel中查看 所监控的master 和slave 

    链接哨兵:redis-cli -p 8001

    查看master:  SENTINEL masters

      查看当前mastrer :SENTINEL get-master-addr-by-name TestMaster

      

     

      检查容灾切换情况

      查看当前redis进程:ps -ef|grep redis

      杀掉当前master进程 : kill -9 进程号

      再在哨兵中查看当前master,已经切换成了 7002

      

      启动原来的master ,查询当前的slave  (SENTINEL slaves TestMaster)  主从发生了对调

     

      Redis注意事项

        1.最大内存问题:要设置好最大内存,以防不停的申请内存,造成系统内存都被用完。

        2.Fork进程问题:'vm.overcommit_memory = 1'这一个选项要加到系统的配置中,防止fork因内存不足而失败。

        3.密码问题:需要设置复杂一些,防止暴力破解。

      

     

      

        

      

      

    posted on 2018-09-12 10:46 【cosmo】 阅读(...) 评论(...) 编辑 收藏
    展开全文
  • Redis 主从集群搭建+哨兵模式监控 redis分为单机、主从集群、redis cluster集群。... Redis主从复制【主节点负责写操作,从节点进行读操作】: 1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令  2.主...

    Redis 主从集群搭建+哨兵模式监控

    redis分为单机、主从集群、redis cluster集群。

    主从集群+哨兵:适合机器少的情况下进行部署。分为三个哨兵、一个主节点、多个从节点。

    可以做到:

                    Redis主从复制【主节点负责写操作,从节点进行读操作】:

             1.当从库和主库建立MS关系后,会向主数据库发送SYNC命令

         2.主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来

              3.当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis

             4.从Redis接收到后,会载入快照文件并且执行收到的缓存的命令

             5.之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致

                     Redis Sentinel (哨兵)部署:

              1. 监控:监控主从是否正常
       2. 通知:出现问题时,可以通知相关人员
       3. 自动故障迁移:自动主从切换
       4. 统一的配置管理:连接者询问sentinel取得主从的地址

    搭建Redis Master(主节点)+slave(从节点):

    主节点:

    进入redis安装目录,创建redis_master文件夹,并且拷贝redis的可执行文件:redis-cli    redis-server    redis.conf

    修改redis.conf配置文件:

    # 守护进程模式
    daemonize yes 

    # pid file 修改pidfile指向路径
    pidfile /usr/local/redis-4.0.8/redis_master/redis_master.pid

    # 监听端口
    port 9001

    # 指明日志文件名
    logfile "./redis9001.log"

    #更改启动ip

    bind "启动的ip“

     校验:1.启动master : ./redis-server 全目录路径/redis.conf

                2.查看下redis进程有没有 9001的:ps el|grep redis

                3.   ./redis-cli -h 启动的ip -p 9001

                4.set wu yifan     -> get wu  如果得到”yifan“ 则正确

    退出:quit或者exit  。至此主节点启动成功。

    从节点:

    进入redis安装目录,创建redis_slave文件夹,并且拷贝redis的可执行文件:redis-cli    redis-server    redis.conf

    修改redis.conf配置文件  slave的配置和master基本一致,只需要修改相应的pidfile,端口,日志文件名,并配上master的地址和认证密码。

    修改redis.conf配置文件:

    # pid file

        pidfile  /usr/local/redis-4.0.8/redis_slave/redis_slave.pid

        # 监听端口  

        port 9002

        # 指明日志文件名

        logfile "./redis7002.log"

         # 设置当本机为slav服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

        slaveof 主节点ip 主节点端口 或者 replicaof 主节点ip 主节点端口

         # 当master服务设置了密码保护时,slav服务连接master的密码

        masterauth testmaster123

       #(默认情况下redis数据库充当slave角色时是只读的不能进行写操作 可以在配置文件中开启非只读:slave-read-only no)

     

     校验:1.启动master : ./redis-server 全目录路径/redis.conf

                2.查看下redis进程有没有 9002的:ps el|grep redis

                3.   ./redis-cli -h 启动的ip -p 9002

                4.在主节点set wu yifang     

                5. 在从节点 get wu  如果得到”yifan“ 则正确

    退出:quit或者exit  。至此从节点启动成功。

    如果失败 检查一下服务器之前的通信 telnet一下看是否可通 还可以通过在redis用info看连接状态

    结果演示:

    主                                                           从                                                                           从

     Redis Sentinel (哨兵)部署

     

    Sentinel运作机制介绍:Sentinel是Redis的高可用性(HA)解决方案,由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,

    自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求。Redis提供的sentinel(哨兵)机制,通过sentinel模式启动redis后,

    自动监控master/slave的运行状态,基本原理是:心跳机制+投票裁决(每个sentinel只有一次选举的机会,当主库出现故障,哨兵会投票从库中选出一个承担主库的任务,剩下的还是从库)。


    哨兵配置

    进入redis的安装目录 创建sentinel文件夹 拷贝可执行文件 配置哨兵: redis-cli     redis-server    sentinel.conf

    修改redis.conf配置文件(三个哨兵相同配置):

    port 8002

    daemonize yes

    pidfile "/var/run/redis-sentinel.pid"

    logfile "选择日志输出的位置"

    sentinel monitor mymaster 主节点ip 主节点端口 2

    sentinel announce-ip 当前哨兵ip

     

    sentinel auth-pass mymaster 主节点密码

     

    启动哨兵:  redis.server ./sentinel.conf  --sentinel

    链接哨兵:redis-cli -h 哨兵ip -p 8001

    校验:查看master:  SENTINEL masters 

               查看当前mastrer :SENTINEL get-master-addr-by-name TestMaster

               info sentinel  查看状态及当前主节点

    哨兵属性介绍:

    # Example sentinel.conf

    # port <sentinel-port>
    port 8001

    # 守护进程模式
    daemonize yes

    # 指明日志文件名
    logfile "./sentinel1.log"

    # 工作路径,sentinel一般指定/tmp比较简单
    dir ./

    # 哨兵监控这个master,在至少quorum个哨兵实例都认为master down后把master标记为odown
    # (objective down客观down;相对应的存在sdown,subjective down,主观down)状态。
    # slaves是自动发现,所以你没必要明确指定slaves。
    sentinel monitor MyMaster 127.0.0.1 7001 1

    # master或slave多长时间(默认30秒)不能使用后标记为s_down状态。
    sentinel down-after-milliseconds MyMaster 1500

    # 若sentinel在该配置值内未能完成failover操作(即故障时master/slave自动切换),则认为本次failover失败。
    sentinel failover-timeout TestMaster 10000

    # 设置master和slaves验证密码
    sentinel auth-pass TestMaster testmaster123

    sentinel config-epoch TestMaster 15
    #除了当前哨兵, 还有哪些在监控这个master的哨兵
    sentinel known-sentinel TestMaster 127.0.0.1 8002 0aca3a57038e2907c8a07be2b3c0d15171e44da5
    sentinel known-sentinel TestMaster 127.0.0.1 8003 ac1ef015411583d4b9f3d81cee830060b2f29862

    展开全文
  • 【Redis】redis主从复制原理

    千次阅读 2020-02-09 21:52:50
    【Redis】redis主从复制原理

    在这里插入图片描述
    Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

    主从复制

    什么是主从复制

    在这里插入图片描述
    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。

    默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

    主从复制的作用

    1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
    2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
    3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
    4. 读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;
    5. 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

    主从复制启用

    从节点开启主从复制,有3种方式:

    1. 配置文件: 在从服务器的配置文件中加入:slaveof
    2. 启动命令: redis-server启动命令后加入 --slaveof
    3. 客户端命令: Redis服务器启动后,直接通过客户端执行命令:slaveof
      ,则该Redis实例成为从节点。
      主从复制过程大体可以分为3个阶段:连接建立阶段(即准备阶段)、数据同步阶段、命令传播阶段。
      在从节点执行 slaveof 命令后,复制过程便开始运作,下面图示大概可以看到,
      从图中可以看出复制过程大致分为6个过程
      在这里插入图片描述
      1)保存主节点(master)信息。
      执行 slaveof 后 Redis 会打印如下日志:
      在这里插入图片描述
      2)从节点(slave)内部通过每秒运行的定时任务维护复制相关逻辑,当定时任务发现存在新的主节点后,会尝试与该节点建立网络连接
      在这里插入图片描述
      从节点与主节点建立网络连接

    从节点会建立一个 socket 套接字,从节点建立了一个端口为51234的套接字,专门用于接受主节点发送的复制命令。从节点连接成功后打印如下日志
    在这里插入图片描述
    如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行 slaveof no one 取消复制

    关于连接失败,可以在从节点执行 info replication 查看 master_link_down_since_seconds 指标,它会记录与主节点连接失败的系统时间。从节点连接主节点失败时也会每秒打印如下日志,方便发现问题

    # Error condition on socket for SYNC: {socket_error_reason}
    

    3)发送 ping 命令。
    连接建立成功后从节点发送 ping 请求进行首次通信,ping 请求主要目的如下:
    ·检测主从之间网络套接字是否可用。
    ·检测主节点当前是否可接受处理命令。
    如果发送 ping 命令后,从节点没有收到主节点的 pong 回复或者超时,比如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连。
    在这里插入图片描述在这里插入图片描述
    从节点发送的 ping 命令成功返回,Redis 打印如下日志,并继续后续复制流程:
    在这里插入图片描述
    4)权限验证。如果主节点设置了 requirepass 参数,则需要密码验证,从节点必须配置 masterauth 参数保证与主节点相同的密码才能通过验证;如果验证失败复制将终止,从节点重新发起复制流程。

    5)同步数据集。主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持有的数据全部发送给从节点,这部分操作是耗时最长的步骤。

    6)命令持续复制。当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从数据一致性。
    https://segmentfault.com/a/1190000018268350

    展开全文
  • redis 主从搭建,添加哨兵,提供系统容灾

    介绍

    搭建一个分布式主从集群,机器有限,设置不同端口,模拟分布式(伪分布式), 多台机器搭建方式一样的。增加哨兵配置,提高系统高可用

    环境

    机器 服务
    192.168.116.131:6379 master
    192.168.116.131:6380 slave
    192.168.116.131:6381 slave

    主从架构

    在这里插入图片描述
    主从通过 rdb 进行数据同步,

    主从配置

    # 任何ip都可以访问,可以指定
    bind 0.0.0.0
    # 访问密码
    requirepass ikang
    # 后台运行
    daemonize yes
    

    master配置

    # 复制缓冲区的大小,默认关闭
    # 缓存区的作用就是用于slave离线后的数据存放,缓冲区越大,slave离线时间就可以越长
    # 缓冲区只有在有slave连接的时候才会分片内存,没有slave一段时间后内存就会被释放出来,默认是1m
    repl-backlog-size 5mb
    # master在没有slave多久后会将缓冲区释放,默认关闭,单位:秒
    repl-backlog-ttl 3600
    # master正常写入时salve 最少个数。默认为0, 关闭该功能
    min-replicas-to-write 2 
    # 副本心跳延时,必须小于<=min-replicas-max-lag,认为可用。 默认关闭
    min-replicas-max-lag 10
    # master的访问密码
    masterauth ikang 
    

    salve 配置

    # master的ip和端口
    replicaof 127.0.0.1 6379 
    # slave上要设置访问master的密码
    masterauth ikang
    # yes:主从复制中,从服务器可以响应客户端请求
    # no:主从复制中,从服务器阻塞,有客户端请求时会返回:SYNC with master in progress
    replica-serve-stale-data yes
    # 节点只允许read,默认就是yes,只对slave 有效
    replica-read-only yes
    # slave根据指定时间间隔向master发送ping请求
    repl-ping-replica-period 10
    # 这是哨兵选举的权重,越小被选举的权重就越大
    # 当这个值为0则不参数选举
    # 默认开启,在slave上配置
    replica-priority 100
    

    启动

    #进入安装目录,执行启动命令
    redis-cli -p 6379 -a ikang
    

    在这里插入图片描述

    测试

    • 数据写入、同步测试
      在这里插入图片描述

    • 主写入数据,同步到了从节点

    • 只允许主节点写入

    • 从节点挂掉
      在这里插入图片描述

    • 2个从节点干掉一个从节点后,主节点保存数据失败,主节点设置min-replicas-to-write 值为2,至少有两个从,才能正常写入。启动6380后,服务恢复。

    小结

    以上是主从节点搭建,测试

    redis 作为一个集群使用,从从节点挂点后,符合最小集群配置,服务正常启动,如果主节点挂掉后,从从节点又是只读,会导致整个服务不可用,为了避免这种这种情况发生,集群必须是高可用并且有自愈功能 为了满足高可用、自愈需要用到哨兵

    Sentinel(哨兵)

    哨兵作用

    • 集群监控:可以监控Redis Master和Slave进程是否正常工作
    • 消息通知:如果redis发生故障,哨兵可以发送消息给到系统管理员
    • 故障转移:如果Master挂了,哨兵可以将Master自动转移到其中一台Slave Node上
    • 配置中心:如果故障转移发生了,通知client客户端新的master地址

    为了搭建哨兵,又装了一个机器,在一台机器上也可以。

    环境

    机器 服务
    192.168.116.131:6379 master
    192.168.116.131:6380 slave
    192.168.116.131:6381 slave
    192.168.116.132:26379 sentinel
    192.168.116.132:26380 sentinel
    192.168.116.132:26381 sentinel

    哨兵配置

    redis安装目录下有哨兵配置sentinel.conf

    # 关闭默认的专用IP保护
    protected-mode no
    port 26379
    daemonize yes
    # 修改路径文件
    pidfile /var/run/redis-sentinel-26379.pid 
    logfile /usr/local/sentinel-26379/redis-sentinel.log
    dir /usr/local/sentinel-26379
    # mymaster监控集群名,随意起名
    # 最后一个2(quorum)是指当>=2个哨兵主观认为master下线后(最后这个值一般>哨兵总数的一半),master才会被客观下线,这时sentinel会从slave中选举一个节点来做master
    sentinel monitor mymaster 127.0.0.1 6379 2
    # 设置哨兵访问主机的密码
    sentinel auth-pass mymaster ikang
    # 哨兵认为多久无法连接的时长配置,超过这个时间如果无法连接上就主观下线
    sentinel down-after-milliseconds mymaster 3000 
    # 新的slave成为maser后,其他的的slave要改变master的所属关系,这个1就是改变后重新同步master的并行数量
    # slave在同步master数据时不能处理外部请求
    sentinel parallel-syncs mymaster 1
    # 原master再次被选为新master的时间间隔, 单位:ms
    sentinel failover-timeout mymaster 180000 
    # 启动sentinel哨兵
    redis-sentinel sentinel.conf
    

    查看哨兵配置

    # 查看集群master
    sentinel master mymaster 
    # 查看集群slave
    sentinel slaves mymaster
    # 查看sentinel的信息
    sentinel sentinels mymaster 
    

    干掉master

    在这里插入图片描述

    • 主节点被干掉后,哨兵主动从从节点中选择一个节点为主节点

    原理

    • 哨兵选主,再sentinel.conf 文件中记录了主从配置
      在这里插入图片描述
    • redis的配置文件中,哨兵通过config命令在从节点,追加replicaof 配置,主节点没有该配置。

    总结

    redis 的主从高可用高可用集群搭建完成,redis 本身是没有自愈功能,必须借助哨兵,进行故障转移

    展开全文
  •  2.1 Redis主从架构图    2.2Redis主从结构搭建  Redis集群不用安装多个Redis,只需复制多个配置文件,修改即可;  搭建redis master  进入redis安装目录,创建redis_master文件夹,并且拷贝redis的可执行...
  • docker:搭建单机redis主从集群

    千次阅读 2017-11-24 21:58:59
    主要是在搭建redis主从集群时遇到的困难。1、获取redis镜像首先从Docker Hub中或者其他的镜像仓库中获取现有的可用镜像,在这些镜像的基础上启动镜像,这里我选择从docker官方镜像中获取redis镜
  • Redis通过主从集群扩充主节点的读能力,同时又一定程度上保证数据的不丢失,但是主从集群由如下的问题: 1、如果主节点故障了,需要手动执行主从切换,没法保证高可用; 2、主从集群只能扩充读能力,并不能扩充主...
  • Redis 主从复制原理

    2021-04-01 19:43:04
    Redis 主从复制 主从复制的概念 就是将一台 redis 服务器的数据,复制到其他的 redis 服务器,前者为主节点(master/leader),后者称为从节点(slave/follower),数据的复制是单向的,只能从主节点到从节点,一般 ...
  • redis主从:可以一主多从,redis主服务器负责读写,从服务器只负责读。master写入完成后会将指令发给slave服务器,这个过程是异步的,slave服务器根据指令写入,所以存在读取数据延迟的问题。 哨兵 :redis主从配置...
  • Redis主从复制原理以及常见问题

    千次阅读 2020-06-02 10:40:34
    相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和常见问题很多都没有深入的了解。咔咔这次用时俩天时间给大家整理一份redis主从复制的全部知识点。 主从复制(一)什么是redis主从复制?...
  • Redis主从同步原理

    2020-09-11 10:09:47
    在redis中为了保证redis的高可用,一般会搭建集群模式,其中一种就是主从模式,还有...Redis在2.8版本提供了PSYNC命令来带代替SYNC命令,为Redis主从复制提供了部分复制的能力。PSYNC命令格式是: PSYNC <runid>
  • redis主从复制原理

    2019-07-09 20:55:17
    前言: Redis持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上...为了分担压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制根据是否全量分为全量...
  • Redis主从复制原理

    2021-01-10 23:26:24
    一、为什么需要主从复制: 1、单台Redis节点的局限性: (1)单节点的Redis能够支撑QPS大概在5万左右,如果上千万的用户访问,Redis就承载不了,成为了高并发的瓶颈。 (2)内存上,单个Redis...四、Redis主从复..
  • Redis主从同步原理 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为...
  • 主从复制的作用Redis主从复制原理连接建立阶段(即准备阶段)数据同步阶段命令传播阶段心跳检测min-slaves选项 什么是Redis主从复制? Redis主从复制,就是说现在有多台Redis服务器,我们把他们分为master(主节点)...
  • Redis主从复制原理及其部署 Redis主从复制如何实现?为什么?存在问题有哪些?解决方案是什么? Redis的主从复制 (1)主从复制的目的 机器故障:(可用性)如何保证数据同步。 容器瓶颈:读写分离,扩容需求 ...
  • 前言2.Redis集群方案比较3.Redis伪主从搭建(1主2从)4.Redis主从复制原理5.结语 1.前言 博主最早接触的是redis高可用集群(linux+windows),因为当时在国网,有充足的硬件支持,也写过搭建博文,但并不是所...
  • 在前面的一篇博客中【Redis多实例及主从复制环境搭建】简单的介绍了一下redis主从复制原理以及搭建redis主从复制环境, Redis的复制是基于rdb方式的持久化实...
  • 相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和原理等问题很多都没有深入的了解。今天笔者就为大家来梳理一下Redis主从复制的原理及实践,希望能帮到大家更好的提升哦~~~ Redis主从...
  • Redis主从哨兵集群

    2019-11-12 19:55:37
    Redis:Redis主从复制哨兵机制及集群搭建 Redis主从复制 什么是主从复制 持久化保证了即使Redis服务重启也不会丢失数据,因为Redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当Redis服务器的硬盘损坏了...
  • 生产环境中,为保证Redis缓存系统的高可用性,对于Redis集群,一般都会采用主从架构来实现读写分离。 那么主从架构下,主节点和从节点间,数据是如何进行复制和同步,中间是一个什么样的流程,通过本文,想跟众博友...
  • redis主从复制原理以及流程图 概念:就是将一台服务器的数据,复制到其他的redis服务器,前者为主节点(master/leader),后者称为从节点(slave/follower),数据的复制是单向的,只能从主节点到从节点,master以写...
  • Redis主从复制一、什么是主从复制二、主从复制的作用三、Redis集群搭建四、主从服务器宕机问题1、主机宕机2、从机宕机五、主从复制原理1、全量复制2、增量复制 一、什么是主从复制 主从复制是将一台Redis服务器的...
  •   之前写过一篇博客(http://blog.csdn.net/sk199048/article/details/50725369)来介绍了Redis主从同步的过程,里面主要介绍从服务器使用SYNC命令复制数据的过程。Reids复制数据主要有2种场景: 1. 从服务器从来...
  • redis主从同步原理(浅谈)

    万次阅读 多人点赞 2019-01-23 19:31:39
    主从模式可以保证redis的高可用,那么redis是怎么保证主从服务器的数据一致性的,接下来我们浅谈下redis主(master)从(slave)同步的原理。 2.初次全量同步 当一个redis服务器初次向主服务器发送salveof命令时,redis...
  • 为了实现高可用,我们通常需要将Redis部署多份,部署在不同的服务器上,然后通过数据同步,来实现多副本之间数据的一致,Redis自身提供了主从复制机制来实现数据同步,从而使得我们可以在此基础上,能实现快速的故障...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,332
精华内容 11,332
关键字:

redis主从集群原理

redis 订阅