【Redis学习笔记】2018-06-15 哨兵sentinel

news/2023/12/1 10:59:59 标签: 数据库

顺风车运营研发团队 周生政

哨兵的配置与启动
启动命令

redis-server --sential  /path/to/your/sential.conf
redis-sential /path/to/your/sential.conf

配置文件sential.conf

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
 
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5

Redis 哨兵的服务框架

int main(int argc, char **argv) {
    // 通过命令行参数确认是否启动哨兵模式
    server.sentinel_mode = checkForSentinelMode(argc,argv);
    // 初始化服务器配置,主要是填充redisServer 结构体中的各种参数
    initServerConfig();
    // 将服务器配置为哨兵模式,与普通的redis 服务器不同
    if (server.sentinel_mode) {
        // initSentinelConfig() 只指定哨兵服务器的端口
        initSentinelConfig();
        //替换哨兵特有命令
        initSentinel();
    }
    //加载配置文件,
    loadServerConfig(configfile,options);
 
 
    // 检测哨兵模式是否正常配置
    sentinelIsRunning();
     
    // 进入事件循环
    aeMain(server.el);
    // 去除事件循环系统
    aeDeleteEventLoop(server.el);
    return 0;
}

哨兵结构体
哨兵监控对象结构体
master,slave,其他哨兵

typedef struct sentinelRedisInstance {
     .....
    /* Master独有 */                                                                                                     
      dict *sentinels;    /* Other sentinels monitoring the same master. */
      dict *slaves;       /* Slaves for this master instance. */
 
}sentinelRedisInstance

哨兵结构体

struct sentinelState {
      dict *masters;      /* Dictionary of master sentinelRedisInstances.
                             Key is the instance name, value is the
                             sentinelRedisInstance structure pointer. */
  } sentinel;

哨兵结构体关系

clipboard.png

哨兵监控流程

void sentinelHandleRedisInstance(sentinelRedisInstance *ri) {
      //链接监控的服务器,发送ping,并订阅hello频道
      sentinelReconnectInstance(ri);
      //执行各种周期性命令
      sentinelSendPeriodicCommands(ri);
}

哨兵周期性命令

  • 向master和slaves发送info命令
  • 向master、slaves、sentinel发送ping命令
  • 向master、slaves、sentinel发送hello 消息
  • 检查master、slaves、sentinel的主观下线
  • 对master检查客观下线,并进行故障转移

execv和fork
为了做两件事,可以fork出两个进程,替换子进程做其他事情

fork() 复制当前进程, 子进程返回 0 , 父进程返回子进程的pid
fork() 返回-1标识失败
通常 fork/exec 对 替换子进程

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
 
int main(int argc, char **argv)
{
    pid_t i = fork();
    if (i == 0)
    {
        execv("./prcs1", (char *[]){ "./prcs1", argv[1], NULL });
        _exit(1);
    }
    else if (i > 0)
    {
        execv("./prcs2", (char *[]){ "./prcs2", argv[0], NULL });
        _exit(2);
    }
    else
    {
        perror("fork failed");
        _exit(3);
    }
}

http://www.niftyadmin.cn/n/1374710.html

相关文章

如何解决input遇到fixed,absolute布局出现的问题

最近在做手机端input&#xff0c;关于吊起系统软键盘遇到一些问题&#xff0c;小米部分手机absolute定位导致页面文档错乱问题&#xff0c;ios手机对页面提示或者弹窗布局问题&#xff0c;先总结如下&#xff1a; input碰撞的系列火花&#xff1a; 1. input和absolute使用弹起系…

tomcat源码分析(第一篇 从整体架构开始)

作为一款开源的轻量级的jsp服务器软件&#xff0c;tomcat是使用最广泛的web服务器之一。tomcat源码用Java编写&#xff0c;研读tomcat源码&#xff0c;向大师学习编程思想&#xff0c;还是会有不少收获。 一、tomcat总体架构 宏观角度来看&#xff0c;tomcat可以分为两大块&…

数据中心架构

2019独角兽企业重金招聘Python工程师标准>>> 数据中心是企业的业务系统与数据资源进行集中、集成、共享、分析的场地、工具、流程等的有机组合。从应用层面看&#xff0c;包括业务系统、基于数据仓库的分析系统&#xff1b;从数据层面看&#xff0c;包括操作型数据和…

unity打成aar上传到maven库的工具

需求&#xff1a; 把unity打成aar并上传到maven库 其实就是把前两个博客整合了一下 unity打aar包工具 aar上传maven库工具 这里先说eclipse版的 package com.jinkejoy.build_aar;import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.Action…

关于Java文件路径问题

1.如何获得当前文件路径 常用&#xff1a; 字符串类型&#xff1a;System.getProperty("user.dir"); 综合&#xff1a; package com.zcjl.test.base; import java.io.File; public class Test { public static void main(String[] args) throws Exception { …

关于Maven在编译的时候出现不能打开zip FIle的error

1、首先介绍开发环境&#xff1a; 我用的是Mave2.1,JDK1.7,安装了Svn的客户端程序和Subversion,在项目中我用的是以前的Maven库&#xff0c;默认的是C盘下当前用户的.m2/respository目录&#xff0c; 偶在编译的过程中出现了以下的错误&#xff1a; 2、错误信息如下&#xff1…

安吉尔A3净水器——健康饮水新搭档!

现代人对于高配置的科技产品&#xff0c;越来越热衷。小到高配置门锁&#xff0c;大到高配置厨房&#xff0c;各种各样的高配置产品已经渐渐的融入到了我们的生活中。例如下面这款跟我们生活息息相关的高配置净水器——安吉尔A3净水器&#xff0c;我们健康生活饮水新搭档。安吉…

关于Java.net.URL对象使用Proxy访问Internet资源

最近在做项目的过程中遇到了以下的问题&#xff0c;在跑下面这段代码的时候&#xff1a; url.openConnection().getInputStream(); 跑出了一个连接超时的异常&#xff0c;经过详细的检查&#xff0c;发现问题是因为我在局域网 访问Internet的资源的时候是通过代理服务器上网的…

【Absible学习】Ansible常用模块---包管理模块

yum_repository模块yum_repository模块可以管理远程主机上的yum仓库。 模块参数 参数说明name必须参数&#xff0c;用于指定要操作的唯一的仓库ID&#xff0c;也就是".repo"配置文件中每个仓库对应的"中括号"内的仓库IDbaseurl设置yum仓库的baseurldescrip…

Java实现数组的添加、删除、查找(基础型)

/*delete add find */ public class ArrayTest {/*** param args*//*定义数组大小*/private static int COUNT40;public static int[] arrnew int[COUNT];/*定义当前数组的个数&#xff0c;为了和下标统一&#xff0c;以0开头*/private int currentNumber0;public ArrayTest(){…

Tab命令补全办法

安装yum源yum -y install bash-completion.noarc命令可以补全也可以用yum search bash-com 搜索版本转载于:https://blog.51cto.com/13735155/2134096

网络中的A类、B类、C类地址的划分

IP地址有三种基本类型&#xff0c;由网络号的第一组数字来表示。 A类地址的第一组数字为1&#xff5e;126。注意&#xff0c;数字0和 127不作为A类地址&#xff0c;数字127保留给内部回送函数&#xff0c;而数字0则表示该地址是本地宿主机&#xff0c;不能传送。 B类地址的第…

对象互转工具类

2019独角兽企业重金招聘Python工程师标准>>> public class BeanToMapUtil {private static String characterConstant "_";public BeanToMapUtil(){//私有的构造方法}/*** 将Map对象转化为JavaBean** param map* param T* return* throws Exception*/pub…

网络中的子网划分

子网划分定义&#xff1a;Internet组织机构定义了五种IP地址&#xff0c;有A、B、C三类地址。A类网络有126个&#xff0c;每个A类网络可能有16777214台主机&#xff0c;它们处于同一广播域。而在同一广播域中有这么多结点是不可能的&#xff0c;网络会因为广播通信而饱和&#…

Subversion 的配置以及安装

这段时间因为对版本控制的需要&#xff0c;所以自己根据网上的资料以及自己的在配置中遇到的问题&#xff0c;来写个自己的Subversion的配置心得。 一、安装Subversion 1) 准备工作 1. Apache服务器程序。到http://www.apache.org/上下载apache http server&#xff0c;我的是…

使用 expect 工具自动交互密码远程其他主机安装 httpd 软件

使用 expect 工具自动交互密码远程其他主机安装 httpd 软件#!/bin/bash#删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机rm -rf ~/.ssh/known_hostsexpect <<EOFspawn ssh192.168.4.254expect "yes/no"{send "yes\r"}#根据…
最新文章