redis sentinel 哨兵,看这一篇就够啦!

redis sentinel 哨兵,看这一篇就够啦!,第1张

    redis集群模式,丢失master主服务器是无法继续工作的,所以随时都需要一个master节点。但是服务器宕机是经常出现的事情,集群本身是无法完成故障转移的,所以需要一个第三方的解决方案,帮redis集群完成故障转移(选择主节点、通知从节点修改同步master地址,让原来的主节点成为从节点)。

(1)首先sentinel也属于一种redis服务器,只不过启动时加载的配置文件不同。配置文件里包括了监控的主服务器列表(对,可以是多个主服务器,即就是多个集群)。

(2)sentinel通过配置文件中的主服务器IP:端口号,建立链接和订阅,就是一个双向的通道

(3)sentinel默认每10秒,向建立链接的主服务器,发送INFO命令;主服务器收到命令,返回主服务器信息。

可以看到,返回了主服务器的运行ID,重要的是:同步主服务器的从节点信息

(4)从步骤(3)中获取到的从节点信息,从节点的IP和端口。sentinel和从节点建立链接和订阅

(5)sentinel默认每10秒,向建立链接的从服务器,发送INFO命令,从服务器接收到命令后,返回从服务器信息
    主要包括了从服务器对应的master节点的地址:端口号,偏移量

(6)sentinel与主服务器和从服务器建立了链接和订阅,可以向主从服务器发送命令,也可以接收主从服务器的广播

订阅命令:subscribe _sentinel_:hello

通道名:hello

sentinel对hello频道的订阅会一直持续到sentinel和服务器之间的链接断开为止
sentinel向服务器通道发送的消息,其他与该服务器建立订阅关系的sentinel也会收到订阅通知,sentinel自己也会收到自己发出的消息的订阅通知

(7)sentinel默认会每两秒一次,向所有建立链接和订阅的主从服务器,发送广播消息

命令:publish_sentinel__:hello  "<s_ip>,<s_port>,<s_runid>,<s_epoch>,<m_name>,<m_ip>,<m_port>,<m_epoch>"

可以看到主要包含
s_ip : sentinel自己 IP地址

s_port : sentinel自己端口号

s_runid : sentinel自己的运行ID

s_epoch : sentinel当前的配置纪元

m_name, m_ip, m_port, m_epoch : 当前监控服务器的名称(主或者从)、IP地址、端口号、当前配置纪元

这个消息,也会被其他订阅该通道的sentinel收到

sentinel在接收到订阅消息后(就是上文中自己与别的sentinel,publish的消息),首先过滤掉自己发,然后接收别人的消息,就能获取监听改主服务器的所有sentinel节点

(8)通过上一步,sentinel能够感知到其他监控主服务器的sentinel节点,然后和其他sentinel建立连接,最终,所有监视主服务器的sentinel节点组成了一个相关连接的网络!
sentinel会默认每1s向自己所建立连接的服务器发送PING命令,这些服务器包括(监视master的其他sentinel,master、salve服务器),根据收到的返回值,来确定目标服务器的状态

常见返回值:+PONG、-LOADING、-MASTERDOWN,含义在此处先不关注

判定条件:目标服务器在一定的时间内(配置文件字段:down-after-milliseconds的值),一直返回“失败”

对失败的定义:

(1)目标服务器没有在规定时间内返回(该时间可配置)

(2)目标服务器返回了上述三种返回值之外的值

确定一个目标服务器失败之后,会在sentinel自己的实例表中记录该实例的状态,用:

SRI_S_DOWN表示,S=subjective客观

注:一个master服务器会被多个sentinel监控,多个sentinel可能设置了不同的

down-after-milliseconds

        和我们设想的一样,单一的sentinel并不能决定目标master服务器的生死存亡,会拿着自己实例表里的“客观”下线的服务器地址和端口,去向同样监控这台服务器的sentinel询问,看看“别人”这个服务器到底下线没? 当能够从别的sentinel那里询问到“足够数量”的已下线(客观下线或者主观下线)结果后,sentinel就可以判断目标服务器真的下线了,就可以执行故障转移了。

(1)sentinel发送命令is-master-down-by-addr

SENTINEL is-master-down-by-addr <ip> <port> <current_epoch> <runid>

发送的目标:监控master服务器的其他sentinel

参数解析:ip、port=自己监控的master服务器的IP,端口,current_epoch=源sentinel当前的配置纪元,runid=源sentinel的唯一标识ID

(2)sentinel对命令is-master-dowm-by-addr的回复

        1) <down_state> :下线的状态,0-未下线,1-已下线

        2) <leader_runid> :当前sentinel的局部leader,为 “” 时表示没有leader

        3) <leader_epoch> :当前sentinel的局部leader的配置纪元,当没有leader时,该项为0

(3)sentinel收到命令is-master-down-by-addr的回复后

        sentinel收到足够数量(可配置)的“已下线”回复(即down_state=1),就会在自己的实例表里将对应的master服务器状态(flags)设置为 SRI_O_DOWN,O=Objective。

        监控同一个master服务器的sentinel,对客观下线的条件可以不一致,即收到多少已下线回复才认定客观下线,可以不尽相同。

        由于监控同一个master服务器的sentinel有很多,并不能决定是哪个sentinel去执行故障转移,所以需要多个sentinel进行选leader头结点。

        具体步骤:

        (1)sentinel通过向其他sentinel节点发送is-master-down-by-addr命令,已经可以判断当前master服务器是否客观下线

     (2)已经判断master服务器客观下线的sentinel,再次向其他节点发送
is-master-down-by-addr命令,携带自己的runId和配置纪元

这里再复习一遍命令 :
sentinel is-master-down-by-addr <ip>,<port>,<cur_epoch>,<runid>

    (3)目标sentinel收到源sentinel的 is-master…命令之后,执行以下判断

            1>判断epoch和自己的纪元是否相等,不相等直接舍弃这条命令

            2>判断自己的配置表里是否有局部leader,没有的话,将源sentinel的runid设置为自己的局部了leader

                如果已经有了局部leader,那么会返回自己的局部leader的信息

            3>对源sentinel的is-master-down-by-addr命令进行回复

示例:
        源sentinel向目标sentinel发送命令,
                 SENTINEL is-master-down-by-addr 127001 8080 0 11522852334a

        源sentinel收到命令的回复

                1    

                11522852334a

                0

        表示有一个sentinel将自己成功设置成为leader(需要把返回的runid和自己的runid比对)

            4>当过半的sentinel将自己成功设置为局部leader,标识选主成功,如果在一段时间内没有收到过半的成功数,那么会进行下一轮命令的发送,epoch递增+1

                例如,共有10个sentinel监视同一个master服务器,其中一个sentinel必须收到10/2+1=6个及以上的成功数,才能认为自己成功当选leader

(1)筛选master节点的备胎(即就是哪些slave节点可以成为新的master)

          选择master节点备胎就一个要求,数据尽量完整,状态尽量好

            1>删除,客观下线或者主观下线的slave服务器

            2>删除,在最近5s没有回复过头sentinel节点的INFO命令的slave服务器

            剩下的slave服务器,根据优先级进行排序,遇到优先级一样的,再根据偏移量排序(目的是筛选出和master服务器数据较同步的slave服务器)。再遇到偏移量一样的,继续根据runid排序,找出runid最小的(没有什么依据,只是个排序),至此,可以作为master的slave服务器就筛选好了。

    (2)slave服务器升级为master

            头sentinel向步骤(1)中筛选出来的slave服务器发送slaveof_no_one,发送完该转移命令。之后,头sentinel每秒一次的频率向上述slave服务器发送INFO命令,观察INFO命令返回的role字段,看是否变为master,变为master表示成功升级为master服务器。

   (3)修改原slave服务器列表的复制/同步目标

            头sentinel向原slave服务器列表发送命令:

slave of 127001:8080,修改slave的复制目标

   (4)修改已下线的master服务器为新master的slave节点

            头sentinel保持对已下线master的监控,当已下线master重新上线(对PING命令有回复),就对他发送slave of 127001命令,让其成为slave。

            至此,故障转移全部结束。

河北省联网收费拆账的现状为结算中心在其委托的结算银行开具的账户有拆分账户、未拆分账户、利息账户、路段收益账户,河北省一片区路段联网结算分三部分:正常交易的拆分(拆分账户中完成)、未拆分交易及长款拆分(由拆分账户拆分划转到未拆分账户中的),利息拆分。
1 正常交易的拆分
11 交易上传流程 一片区所有收费站的实时交易通过软件编制的Commservise传给收费站级服务器的同时通过2M通道分别传到路中心服务器和省结算结算中心服务器,由结算中心的后台服务器进行实时拆分;拆分原则按车辆行驶的路径串拆分到路中心所属各收费站。对于非正常情况下(U型、J型、超时、无卡、换卡等)通行费收入包括两部分,一部分是正常通行费,一部分是根据省物价局制定的加收费,正常通行费实时拆分,对于加收费管委会规定将作为长款放到未拆分账户,每月末按联网路段的收益进行拆分划拨。
12 对账管理流程 收费站将每天的通行费收入通过电汇的方式电汇到省结算银行,同时联网路段将本路段所属收费站电汇金额的汇总后通过传真上报到省结算中心备查。省结算中心每日生成的日终结算与结算银行通过专用2M网络发给生结算汇中心的各个收费站电汇数据进行对账,包括明细对账和汇总对账,即明细对账以收费站为单位进行对账,即所有收费站的电汇数据与省中心的日终结算对账,如果对账后出现长款并且无法找回的,如收费员多收司乘人员通行费、交易再上传时确实丢失等情况,这样就在生成划账指令时放到未拆分账户;对账后不允许出现短款,如果出现短款要查明原因或在路段收益中扣除;汇总对账是以路公司为单位进行对账,即每条路段的所属收费站电汇数据汇总后与日终汇总结算进行对账。
13 划账指令 所有收费站的收入与省结算中心比较如果对账相等或者相差范围在千分之五内,由拆分软件生成划拨指令发送给结算银行,省结算银行根据划拨指令将通行费划拨到路段收益账户,同时将长款和非正常情况的加收费划拨到未拆分账户。
2 对未拆分账,户进行拆分
未拆分账户的收入分两部分,即所有收费站的收入与省结算中心比较的长款及非正常交易(9999995~9999999)的款额,省结算中心规定每月进行一次拆分,省结算银行在月初发给省结算中心每天转入未拆分账户的通行费明细表及汇总表,省结算中心按时间段统计查询一月划入未拆分账户的款额,省结算中心生成每路月收益汇总/全网日结月汇总未拆分账户金额,生成为拆分最终的划账指令,每月初进行划账一次,并生成划账指令给结算银行进行利息的划拨。
3 利息账户
所有收费站收款账户、拆分账户、未拆分账户产生的利息,在每季度末21日由收款银行提供利息款额并由收费站财务人员填写电汇单电汇至省结算银行的利息账户中,拆分账,户、未拆分账,户的利息由省结算中心转入利息账户,省结算中心汇总本路段季度收益及全网季度收入,按照本路段季度收益/全网季度收入利息账户金额进行拆分,并生成利息划账指令给结算银行进行利息的划拨。
以上仅是对基本正常的情况的拆分划拨,实际运营过程中也涉及到其他一些特殊情况,如欠款车回来补交通行费、收费站分流启用便携式收费机等收取的通行费如何拆分划拨。河北省联网拆账软件结合管理规定制定了详细的规章和流程。
4 对于欠款车补交通行费
站级财务人员在站级管理软件中找出欠款交易,点[支付]按钮,收取费用,给司机票据。财务人员按照收费员的 *** 作方式作交班缴款,将所收取的通行费当作当天的收费额电汇给银行,其他与正常交易拆分相同。
5 便携式收费机收取的通行费
高速公路收费站口遇有特殊情况如设备更新改造、设备损毁、车流量增大等各种计划或突发性事件的压力,对于这些问题的解决,便携式收费机无疑是一种很好的选择。便携式收费机也只是对非计重车辆收取通行费,对于计重收费的货车原则上还是要通过计重设备收取通行费。便携式收费机收取的通行费收费员在下班后由收费站专职维护员通过网线与站级服务器相连后将原始交易数据导入,这是交易也会通过2M通道上传到省结算中心与当天的车道交易一样进行拆分汇总统计,使用便携式收费机的收费员与正常收费员一样在站级做交班缴款 *** 作。随着河北省高速公路网的逐步形成,结合其他省市的经验,目前的收费模式及运营水平越来越不满足现有的状况,将来的发展趋向是多路径系统和不停车收费系统。

服务器维护。聚品荟无通道指的是无法进入软件,通道指的是服务器通道,无通道便是服务器维护的意思,可以在维护结束后打开软件。聚品荟(原随意生活),2022xyk代还APP排名前十,已经稳定运维4年的xyk代还平台。

我忘记了在哪里说过会出现3次挥手的TCP协议的连接是全双工连接,一个TCP连接存在双向的读写通道。 简单说来是 “先关读,后关写”,一共需要四个阶段。以客户机发起关闭连接为例:1服务器读通道关闭2客户机写通道关闭3客户机读通道关闭4服务器写通道关闭关闭行为是在发起方数据发送完毕之后,给对方发出一个FIN(finish)数据段。直到接收到对方发送的FIN,且对方收到了接收确认ACK之后,双方的数据通信完全结束,过程中每次接收都需要返回确认数据段ACK。详细过程: 第一阶段 客户机发送完数据之后,向服务器发送一个FIN数据段,序列号为i; 1服务器收到FIN(i)后,返回确认段ACK,序列号为i+1,关闭服务器读通道; 2客户机收到ACK(i+1)后,关闭客户机写通道; (此时,客户机仍能通过读通道读取服务器的数据,服务器仍能通过写通道写数据) 第二阶段 服务器发送完数据之后,向客户机发送一个FIN数据段,序列号为j; 3客户机收到FIN(j)后,返回确认段ACK,序列号为j+1,关闭客户机读通道; 4服务器收到ACK(j+1)后,关闭服务器写通道。这是标准的TCP关闭两个阶段,服务器和客户机都可以发起关闭,完全对称。FIN标识是通过发送最后一块数据时设置的,标准的例子中,服务器还在发送数据,所以要等到发送完的时候,设置FIN(此时可称为TCP连接处于半关闭状态,因为数据仍可从被动关闭一方向主动关闭方传送)。如果在服务器收到FIN(i)时,已经没有数据需要发送,可以在返回ACK(i+1)的时候就设置FIN(j)标识,这样就相当于可以合并第二步和第三步。复制粘贴

边缘服务器为用户提供一个进入网络的通道和与其它服务器设备通讯的功能,通常边缘服务器是一组完成单一功能的服务器,如防火墙服务器,高速缓存服务器,负载均衡服务器,DNS服务器等。感兴趣的话点击此处,免费学习一下
边缘节点服务(Edge Node Service, ENS)提供基于CDN的边缘d性基础设施,使您可以将计算、转发等业务下沉至边缘。降低响应时延和带宽成本、减轻中心集群压力,适用于“中心+边缘”架构模型下的各类业务。

深圳市亿万克数据设备科技有限公司(以下简称亿万克)是研祥高科技控股集团旗下的全资子公司。研祥集团作为中国企业500强,持续运营30年。研祥集团全球49个分支机构,三个国家级创新平台,一直致力于技术创新引领行业发展。拥有1100多项授权专利,1300项非专利核心技术。

直接使用服务器的卡槽。服务器都有8条内存插槽,现在主流的服务器主板内存通道每个插槽最大支持16G,一共是可以扩展到128G的。

使用多路多处理器板。

使用内存扩展箱


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10649644.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存