etcd源码流程---调试环境的搭建

news/2024/9/25 9:31:20/

etcd_0">etcd启动命令:

name必须设置,否则会用default,集群内不同etcd实例的名字应该是唯一的,因为他会有一个map(name->ip)。如果initial-cluster-state设置为new,那么他会创建一个新的clusterid。需要在initial-cluster中指定集群所有节点,否则会报错。然后把一个节点加入到已有的etcd集群则initial-cluster-state要设置为existing,这样就会从集群获取cluster-id,如果设置为new,那么就会创建一个新的clusterid,然后加入的时候就会因为cluster-id不匹配而导致申请加入得到信息被集群忽略掉。加入一个节点必须先调用member add告知集群有一个节点要加入集群,因为源代码中有一个exist集合和local集合,会检测已存在的集群和目标集群数是否相等即检测len(exist)==len(local),不相等则会拒绝该实例的加入.

个人建议是:最好配一个二节点集群,这样的话更加方便的调试leader/follwer:比如leader不动,然后给follower打断点来debug stepFollower函数

go run ./etcdctl/main.go --endpoints 192.168.129.129:2379,30.128.101.96:2379,30.128.101.96:12379  endpoint status --write-out=table
go run ./etcdctl/main.go --endpoints 30.128.101.96:2379 put x z步骤:
1:git 拉取代码,用goland打开,然后设置go版本,等待goland更新索引2:启动etcdserver,下面是启动参数,自己搭建的话更换两台机器的ip就行etcd-1: #假设本机IP是30.128.101.96--advertise-client-urls=http://30.128.101.96:2379
--initial-advertise-peer-urls=http://30.128.101.96:2380
--listen-client-urls=http://30.128.101.96:2379
--listen-peer-urls=http://30.128.101.96:2380
--initial-cluster-state=new 
--initial-cluster=centos=http://192.168.129.129:2380,windows=http://30.128.101.96:2380
--name=windowsetcd-2: #假设本机ip是192.168.129.129 (我用虚拟机搭建的第二台机器)
--advertise-client-urls=http://192.168.129.129:2379
--initial-advertise-peer-urls=http://192.168.129.129:2380
--listen-client-urls=http://192.168.129.129:2379
--listen-peer-urls=http://192.168.129.129:2380
--initial-cluster=centos=http://192.168.129.129:2380,windows=http://30.128.101.96:2380
--name=centos
--initial-cluster-state=new#goland里直接把上面的启动参数配置到程序的命令行参数中就行了,然后就可以愉快的debug了

goland etcdserver启动流程:

图中的–auto-compact-retention=1是用来激活compact线程的,如果没设置此参数,etcd就不会开启compact,从而无法debugcompact

启动<a class=etcdserver" />

etcdctl启动流程:(!!goland可以同时启动多个程序)

因为是代码启动,所以命令行参数不需要写etcdctl

在这里插入图片描述

一些杂记:

etcd put流程:https://juejin.cn/post/7253020765312860216
client通过grpc来和server通信,put操作就是client调用grpcclient的Put方法,然后服务端server再调用对应的put方法

!!!记得在centenos里关闭防火墙,否则外面是连不上2379/2380端口的

不知道为什么,启动三台就不行,启动一台就行。windows启动一台,虚拟机启动一台可以,但是windows同时启动两台在启动虚拟机里的就不行,莫名其妙


http://www.ppmy.cn/news/1453976.html

相关文章

爬取B站评论:Python技术实现详解

引言 在当今信息爆炸的互联网时代&#xff0c;用户生成的内容不断涌现&#xff0c;其中包括了各种各样的评论。而B站作为一个充满活力的视频分享平台&#xff0c;其评论区更是一个充满了各种各样精彩评论的宝藏地。那么&#xff0c;有没有一种简单的方法可以将这些评论收集起来…

OpenCV如何在图像中寻找轮廓(60)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何模板匹配(59) 下一篇 :OpenCV检测凸包(61) 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 cv::findContours使用 OpenCV 函数 cv::d rawContours …

[QNX] mmap+cache/nocache+memcpy/asm_memcpy速度对比

mmap nocache介绍 以linux系统的nocache介绍&#xff1a; 在Linux系统中&#xff0c;使用mmap映射文件到内存时可以指定不使用缓存。这可以通过在调用mmap时将MAP_NOCACHE标志传递给mmap函数来实现。 MAP_NOCACHE标志告诉内核不要将映射的内存页缓存到文件系统缓存中&#xff…

设置UIProgressView的样式

UIProgressView是UIKit框架中的一个控件&#xff0c;用于显示任务的完成进度。你可以使用UIProgressView来展示任务的完成情况&#xff0c;例如下载文件、上传数据等。 要设置UIProgressView的样式&#xff0c;包括粗细、颜色等&#xff0c;你可以使用UIProgressView的一些属性…

Android 安装过程三 MSG_ON_SESSION_SEALED、MSG_STREAM_VALIDATE_AND_COMMIT的处理

Android 安装过程一 界面跳转 知道&#xff0c;在InstallInstalling Activity中&#xff0c;PackageInstallerSession对象创建之后&#xff0c;接着会打开它&#xff0c;然后将安装文件进行拷贝&#xff0c;拷贝完成之后&#xff0c;会对Session对象确认。   从Session对象确…

QT-QTCreator环境配置

准备工作&#xff1a; 下载QT: 链接&#xff1a;https://pan.baidu.com/s/1prJcsC4DGqhKiXvLuPQFVA?pwd60b3 提取码&#xff1a;60b3下载WindowsKits&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1QNiS3HpbH5M5kXx5AhkqnQ?pwde2h8 提取码&#xff1a;e2h8安装的…

微信小程序实现九宫格

微信小程序使用样式实现九宫格布局 使用微信小程序实现九宫格样式&#xff0c;可以直接使用样式进行编写&#xff0c;具体图片如下&#xff1a;1、js代码&#xff1a; Page({/*** 页面的初始数据*/data: {current: 4},// 监听activeClick(e) {let index e.currentTarget.dat…

Linux磁盘逻辑卷LVM丢失

一.原因&#xff1a;服务器异常断电&#xff0c;重启服务器之后&#xff0c;服务所在的磁盘丢失&#xff0c;逻辑卷也不存在。 二.解决方法&#xff1a; 2.1&#xff09;执行以下命令查看lvm配置文件备份内容&#xff1a; more /etc/lvm/backup/datavg01 datavg是之前使…