go语句初探
go语句和通道类型是Go语言的并发编程理念的最终体现。相比之下,go语句在用法上要比通道简单很多。与defer语句相同,go语句也可以携带一条表达式语句。注意,go语句的执行会很快结束,并不会对当前流程的进行造成阻塞或明显的延迟。一个简单的示例如下: go fmt.Println("Go!") 可以看到,go语句仅由一个关键字go和一条表达式语句构成。同样的,go语句的执行与其携带的表达式语句的执行在时间上没有必然联系。这里能够确定的仅仅是后者会在前者完成之后发生。在go语句被执行时,其携带的函数(也被称为go函数)以及要传给它的若干参数(如果有的话)会被封装成一个实体(即Goroutine),并被放入到相应的待运行队列中。Go语言的运行时系统会适时的从队列中取出待运行的Goroutine并...阅读全文
目录监控fsnotify包测试问题
下边测试的例子中,有文件变化时,case event := <-Watch.Events会触发三次,有用过的朋友能解释一下啊 package main import ( "flag" "log" "os/exec" "strings" "time" // "sync" // "time" "github.com/fsnotify/fsnotify" ) var ( sleeptime int path string cmd string args []string ) func init() { flag.IntVar(&sle...阅读全文
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标
k8s与HPA--通过 Prometheus adaptor 来自定义监控指标 自动扩展是一种根据资源使用情况自动扩展或缩小工作负载的方法。 Kubernetes中的自动缩放有两个维度:Cluster Autoscaler处理节点扩展操作,Horizontal Pod Autoscaler自动扩展部署或副本集中的pod数量。 Cluster Autoscaling与Horizontal Pod Autoscaler一起用于动态调整计算能力以及系统满足SLA所需的并行度。虽然Cluster Autoscaler高度依赖托管您的集群的云提供商的基础功能,但HPA可以独立于您的IaaS / PaaS提供商运营。 Horizontal Pod Autoscaler功能最初是在Kubern...阅读全文
HyperLogLog 算法在监控场景中的运用
HyperLogLog 算法在监控场景中的运用 背景介绍 OpsMind 低代码开发平台监控模块,为了支撑B站众多监控数据的管理场景,研发人员在分布式层做了众多优化工作。为了更好的掌握每个 metric 自身的空间占用以及各个存储节点的时序分布情况,需要对每个指标的时序数目(基数)有一个大致的预估(允许存在误差),以便于 OpsMind 系统能更加合理的均衡各个存储节点的负载。 为何选用 HyperLogLog OpsMind 系统指标的形式与 prometheus 完全兼容(在此 prometheus 基础上做了一些拓展),一个监控指标(metric)的时序数,可以看做是该指标所有 labels 的组合(对 labels 求 fingerprint)数目。在对每个指标时序集合进行统计的过程...阅读全文
Monitoring your service
<p>We are diving into the world of Microservices and I'm curious, how does a gopher send metric data and to where?</p> <p>We looked at Prometheus but I don't see how I can send trace data or any kind of event. I want to be able to do that, advice?</p> <hr/>**评论:**<br/><br/>MalkMalice: <p...阅读全文
k8s与aws--add-ebs-tags-controller为ebs增加tag
前言 在使用aws的托管k8s--eks过程中,避免不了使用aws的LB和块存储。AWS公有云所有的资源都可以自定义tags,这样的好处就是可以根据tag具体含义来对资源进行不同维度的审计和统计。比如按照部门,按照项目,环境(test,prod,uat)等维度。在设置service的类型为Loadbanlance的时候,可以通过以下annotations来自定义tag。 apiVersion: v1 kind: Service metadata: annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb # service.beta.kubernetes.io/aws-load-balancer-internal:...阅读全文
要优雅退出吗?dubbogo给你
dubbogo Apache Dubbo是由阿里开源的一个RPC框架,而dubbogo则是相对应的go语言版本: 之前dubbogo一直没有优雅退出的机制,终于有小伙伴忍不住了强烈要求我们实现这个部分。艰难摸鱼了两周之后,我才把这个搞完,该功能的PR是https://github.com/apache/dubbo-go/pull/255。 当我们讨论优雅退出的时候,最基本的要求是自动无损停机。它同时强调了自动和无损两个方面。 首先是自动,而与自动对应的则是手动了。手工介入的缺陷是显而易见的,它要求我们在应用下线的时候手动摘掉流量。这一步可以通过网关、负载均衡或者注册中心来实现。它还容易忘和出错,如果这个东西还要求到运维身上,那就真的是下个线都得求爷爷告奶奶,开发体验十分不好。 而无损,关键则...阅读全文
Go 编程:图解反射
文发布在个人站点: GitDiG.com, 原文链接:https://www.gitdig.com/go-reflect/ 1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to interface value. To modify a reflection object, the value must be settable. 在三原则中,有两个关键词 interface value ...阅读全文
重磅!容器集群监控利器 阿里云Prometheus 正式免费公测
Prometheus 作为容器生态下集群监控的首选方案,是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。 7月3日,阿里云Promtheus云托管实例正式开始免费公测。针对容器集群监控场景,提供了完整的采集、存储、监控、告警、图表展现的数据监控服务。通过与 Kubernetes 平台运维解耦合,使得 Prometheus 监控服务不受被监控平台的性能、稳定性、可靠性等诸多因素的影响。通过提供全托管服务,用户无需部署运维 Prometheus 监控实例,使整个容器平台 ...阅读全文
初始Prometheus
监控的目标 在《SRE: Google运维解密》一书中指出,监控系统需要能够有效的支持白盒监控和黑盒监控。通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。而黑盒监控,常见的如HTTP探针,TCP探针等,可以在系统或者服务在发生故障时能够快速通知相关的人员进行处理。通过建立完善的监控体系,从而达到以下目的: 长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。例如,通过对磁盘空间增长率的判断,我们可以提前预测在未来什么时间节点上需要对资源进行扩容。 对照分析:两个版本的系统运行资源使用情况的差异如何?在不同容量情况下系统的并发和负载变化如何?通过监控能够方便的对系统进行跟踪和比较。 告警:当系统出现或者...阅读全文
file lock
Note: 文中部分内容截取自 File locking in Linux Prior knowledge 在了解文件锁之前先简单介绍一下File相关的知识。 在C程序中Files由文件指针(file pointers)或文件描述符(file descriptors)来指定。ISO C的标准I/O库函数( stdio.h中的fopen, fscanf, fprintf, fread, fwrite, fclose等等)用的是文件指针;UNIX 中的I/O函数(unistd.h中的open, read, write, close和ioctl)使用的文件描述符。文件指针和文件描述符提供了用于执行独立于设备的输入输出逻辑标识(logical designations),成为句柄(handle)。其...阅读全文
Go编程:图解反射
文发布在个人站点:GitDiG.com, 原文链接:Go 编程:图解反射 反射三原则太难理解,看一张图你就懂了。完美解释两个关键词 interface value 与 reflection object 是什么。 1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to interface value. To modify a reflection object, the value mu...阅读全文
Prometheus数据抓取及数据存储实现
Goroutine生命周期 Prometheus使用一种通用的Goroutine生命周期的管理机制oklog的run.Group。run包的代码很少很简单 // Croup 收集 actors 函数然后并行运行它们;当一个 actor(函数)返回,所有 actors 被 interrupted type Group struct { actors []actor } // 将一个 actor(函数)添加到group,每一个 actor 必须预占一个中断函数,如果调用了中断函数,execute必须return // 此外,即使在执行 return 后调用 interrupt 也必须是安全的 // 第一个 return 的 actor(函数)中断所有正在运行的 actors; error 传递给...阅读全文
golang简单应用
学习的golang的练习,推荐学习golang。https://www.liwenzhou.com mian.go 文件 package main import ( "fmt" "os" ) func showAction() { fmt.Println("学生管理系统!") fmt.Println("1. 添加学生信息") fmt.Println("2. 编辑学生信息") fmt.Println("3. 显示学生信息") fmt.Println("4. 退出学生管理系统") } //getInput 获取输入信息 func getInput() *Student { var ( name string id int ages int ) fmt.Println("输入信息") fmt.Pr...阅读全文
Golang面试之Linux系统
参考 深入理解Linux的CPU上下文切换 CPU上下文切换 Linux 是一个多任务操作系统,它支持同时运行的任务数量远大于 CPU 个数。其实这些任务没有真正的同时运行,是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、从哪里开始运行,需要系统事先设置好 CPU 寄存器和程序计数器。CPU 寄存器是 CPU 内置的容量小、速度极快的内存。而程序计数器则是用来存储 CPU 正在执行的指令位置、或即将执行的下一条指令位置。它们都是 CPU 在运行任务前必须依赖的环境,也被叫做 CPU 上下文。 上下文切换,就是先把前一个任务的 CPU 上下文保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳...阅读全文
微服务监测的五大原则
一、背景容器和微服务的出现并得到大量应用,从根本上改变了应用系统的组成和运行方式。而随着开发人员开始利用编排系统来管理和部署容器,规则进一步发生了变化。以往主机上的一个简单应用,现在已成为一个复杂的、动态编排的、多容器的体系架构,这同时也对应用的监测提出了全新的挑战。Sysdig,是专注于系统故障排查和监控工具的公司,其产品Sysdig Cloud是定位于容器系统故障排查和监控的平台。在今年召开的JFrog SwampUp用户大会上,Sysdig公司提出监测容器及构建在其上的微服务的五大关键原则。这些原则充分考虑了容器和微服务与传统架构在运维方式上的差异。本文即是根据Sysdig公司在本次大会上的演讲视频整理而成的。二、微服务是什么要正确地监测微服务,首先要正确地理解什么是微服务。演讲首先...阅读全文
一、环境搭建
点击链接获得对应版本的包:https://studygolang.com/dlwindow下直接安装msi就好,linux看这个链接我想把go的开发环境迁移到sublime上,所以还有以下步骤:1.打开sublime > 首选项 > 浏览插件目录2.这时候打开一个文件夹,下载这个,解压之后把文件夹放到步骤一打开的目录3.点击 > 工具 > 编译系统 > 新建编译系统 输入{ "cmd": ["go", "run", "$file_name"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "working_dir": "$file_path", "selector": "source.go"}命名为Golang,然后选用这个编译...阅读全文
记一次websocket车祸
写在前面 最近在修改调试系统中的日志展示,日志展示用的是websocket,用curl不好测试,所以动手写了一个客户端来查看系统日志。 websocket client 代码如下(代码中有bug,不要复制粘贴) package main import ( "fmt" "log" "os" "os/signal" "syscall" "golang.org/x/net/websocket" ) func main() { url := os.Args[1] origin := os.Args[2] fmt.Printf("Dial url: %s ,origin: %s\n", url, origin) ws, err := websocket.Dial(url, "", origin) if...阅读全文
利用Prometheus 打造企业分布式监控平台(2)--服务发现
服务发现在Wikipedia的描述是:Service discovery is the automatic detection of devices and services offered by these devices on a computer network. 换句话说,它允许应用程序动态发现服务,而不是在应用程序配置中静态定义服务。 对于Prometheus,可以使用多种方法进行服务发现,包括云提供商API(例如AWS,Azure,GCE,Openstack),基于DNS的发现(使用SRV记录)以及查询Kubernetes API中正在运行的服务。 可想而知,在目前云原生环境下,应用具备高度弹性,通过静态配置监控目标的行为是多么的低效。 Hotreload 当然Prometheu...阅读全文
企业运维监控平台架构设计与实现
课程介绍 本课程主要介绍了企业常见的运维监控平台的构建思路和常用软件,讲述了cacti、nagios、zabbix、ganglia、webnagios等常用监控软件的差异和优劣,并深入介绍了通过ganglia+nagios如何快速构建一个统一运维监控平台。 课时列表 • 课时1:Cacti/Nagios/Zabbix/centreon/Ganglia之抉择 • 课时2:统一运维监控平台设计思路 • 课时3:ganglia的安装与配置过程 • 课时4:通过gmetric接口扩展Ganglia监控 • 课时5:Centreon的结构与运行机制以及安装配置 • 课时6:配置centreon监控系统 • 课时7:实现ganglia与centreo...阅读全文
通用抽奖工具之系统设计
前言 上篇文章《通用抽奖工具之需求分析》我们已经通过一些常见的抽奖场景,得到了符合这些抽奖场景的抽奖工具五要素: 抽奖五要素 要素名称 第一要素 活动 第二要素 场次 第三要素 奖品 第四要素 中奖概率 第五要素 均匀投奖 以及创建一个抽奖活动的5个基本步骤,如下: 活动配置 场次配置 奖品配置 奖品中奖概率配置 奖品投奖配置 上篇文章回顾 《通用抽奖工具之需求分析》 需求已经分析完了,今天我们就来看看这通用抽奖工具具体的设计,分为如下三个部分: DB设计 配置后台设计 接口设计 DB设计 第一要素活动配置的抽奖活动表: -- 通用抽奖工具(万能胶Glue) glue_activity 抽奖活动表 CREATE TABLE `glue_activity` ( `id` int(11) uns...阅读全文
Prometheus 折腾笔记
《 Prometheus 折腾笔记 》
最近以来都很想写写关于这段时间以来折腾 Prometheus 的心得,但是人总是有惰性的,拖延是会上瘾的。 正所谓,拖更一时爽,一直拖就一直爽 ????。 有时候人的动力来源就很迷,你也说不出为什么,就是突然地他就心血来潮开写了,像这样 ????! ### 目录 * [0x01-云原生的来源](https://github.com/chenjiandongx/prometheus101/blob/master/0x01-云原生的来源.md) * [0x02-监控系统](https://github.com/chenjiandongx/prometheus101/blob/master/0x02-监控系统....阅读全文重磅!容器集群监控利器 阿里云Prometheus 正式免费公测
Prometheus 作为容器生态下集群监控的首选方案,是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。 7月3日,阿里云Promtheus云托管实例正式开始免费公测。针对容器集群监控场景,提供了完整的采集、存储、监控、告警、图表展现的数据监控服务。通过与 Kubernetes 平台运维解耦合,使得 Prometheus 监控服务不受被监控平台的性能、稳定性、可靠性等诸多因素的影响。通过提供全托管服务,用户无需部署运维 Prometheus 监控实例,使整个容器平台 ...阅读全文
P的状态转换
声明 下面的分析均基于Golang1.14版本。 状态图 P状态图 主要流程 1.procresize创建,Go程序初始化时初始CPU数量个P。 2.acquirep进入运行状态。当有新的G创建或waiting状态的G变得可运行,并且有P空闲时,通过acquirep获取p来运行最新的G。 3.entersyscall,进入系统调用状态。当P绑定的M正在运行的G进入系统调用状态,P也随之进入系统调用状态。 4.exitsyscallfast,退出系统调用状态。如果G快速退出系统调用,此时P理应等待G,当G退出系统调用时,继续运行G的代码。 5.retake,如果G长时间处于系统调用,此时P应与对应的G,M解绑。考虑到如果所有G都阻塞在系统调用,则整个Go程序都阻塞在系统调用,无法执行用户代码,...阅读全文
why using expvar is beneficial?
<p>I read the doc and know expvar provides interface for global variables. But I don't understand the design purpose for this pkg. Need some expert opnion on this</p> <hr/>**评论:**<br/><br/>Loves_Portishead: <pre><p>The idea is to make the running process inspectable. The stdlib package debug/pprof f...阅读全文
Prometheus vs Zabbix
一、开发语言zabbix 后端用 C 开发,界面用 PHP 开发,定制化难度很高。Prometheus 后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。二、集群规模zabbix 集群规模上限为 10000 个节点。Prometheus 支持更大的集群规模,速度也更快。三、能够监控的环境zabbix 更适合监控物理机环境。Prometheus 更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。四、使用的数据库zabbix 监控数据存储在关系型数据库内,如 MySQL,很难从现有数据中扩展维度。Prometheus监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。五、安装方式zabbix 安装简单,zabb...阅读全文
List of single binary golang web applications?
<p>I'm working on an article. Can you folks list all single binary golang applications that are used for self-hosting applications?</p> <hr/>**评论:**<br/><br/>throwbible: <pre><p>What happens if we miss one? Why do you need a list with all of them?</p> <p>Arguably, from an operations poin...阅读全文
Need a selfhosted uptimerobot alternative
<p>Any uptimerobot alternative written in go? Even without the notifications is fine. Just need a website that pings IP's and reports the status</p> <hr/>**评论:**<br/><br/>StallmanTheWhite: <pre><blockquote> <p>Just need a website that pings IP's and reports the status</p> </bl...阅读全文
Aura: 一个专注于监控和采集的 SDK 组件
## ???? Overview ☁️ 在云原生时代,以 [Prometheus](https://prometheus.io) 为中心的监控生态已经逐渐完善,社区也出现了大量的中间件,数据库以及各种基础组件的 exporter,Prometheus 官方也给出了维护了一份 exporter 列表 [instrumenting/exporters](https://prometheus.io/docs/instrumenting/exporters)。 但是 Prometheus 的缺点和它的优点一样明显,缺少高可用的集群方案。想了解 Prometheus 和监控系统的同学可阅读 [Prometheus 折腾笔记](https://github.com/chenjiandongx/prome...阅读全文
Golang 使用 Prpme
???? ginpromPrometheus metrics exporter for Gin.Inspired by Depado/ginprom.???? Installation$ go get -u github.com/chenjiandongx/ginprom???? UsageIt's easy to get started with ginprom, only a few lines of code needed.import ( "github.com/chenjiandongx/ginprom" "github.com/gin-gonic/gin" "github.com/prometheus/client_golang/prometheus/promhttp" ) fu...阅读全文
Golang expvar原理
前言 在学习go的metric的过程中,有些实现支持prometheus、expvar等,expvar是什么,竟然在sdk的库中?另外,发现jaeger(github.com/uber/jaeger-lib)也支持这种metric数据暴露方式。 分析 expvar提供将变量暴露出去的机制(暴露到http接口等),java中也有类似的机制。 原理 go默认创建一个全局并发安全的map,可以将key为string,val为实现Var的实例保存进去;同时,将所有的key保存到列表中。 http暴露原理,注册http接口到默认的mutex中,返回数据是所有key,val的结果。 实现 expvar.Int实现接口Var,创建Int时,会将实例添加到map,并将key设置到list中。 func Ne...阅读全文
利用Prometheus 打造企业分布式监控平台(1)--扩展性
Prometheus是CNCF基金会管理的一个开源监控项目,由于其良好的架构设计和完善的生态,迅速成为了监控领域事实上的标准,尤其是在云原生领域。 随着深入地了解Prometheus,你会发现一些非常好的功能: 服务发现使配置更加容易。Prometheus支持consul,etcd,kubernetes以及各家公有云厂商自动发现。对于监控目标动态发现,这点特别契合Cloud时代,应用动态扩缩的特点。我们无法想象,在Cloud时代,需要运维不断更改配置。 开源社区建立了数百个exporter。基本上涵盖了所有基础设施和主流中间件。 工具库可从您的应用程序获取自定义指标。基本上主流开发语言都有对应的工具库。 它是CNCF旗下的OSS,是继Kubernetes之后的第二个毕业项目。Kubernet...阅读全文
Go 编程:图解反射
1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to interface value. To modify a reflection object, the value must be settable. 在三原则中,有两个关键词 interface value 与 reflection object。有点难理解,画张图可能你就懂了。 先看一下什么是反射对象 reflection ob...阅读全文
Go Reflect
1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to interface value. To modify a reflection object, the value must be settable. 在三原则中,有两个关键词 interface value 与 reflection object。有点难理解,画张图可能你就懂了。 reflect.png 先看一下什么是反射对象 r...阅读全文
kube-state-metrics
https://github.com/kubernetes/kube-state-metrics/tree/master/kubernetes 概述 已经有了cadvisor、heapster、metric-server,几乎容器运行的所有指标都能拿到,但是下面这种情况却无能为力: 我调度了多少个replicas?现在可用的有几个? 多少个Pod是running/stopped/terminated状态? Pod重启了多少次? 我有多少job在运行中 而这些则是kube-state-metrics提供的内容,它基于client-go开发,轮询Kubernetes API,并将Kubernetes的结构化信息转换为metrics。 功能 kube-state-metrics提供的指标,按照阶段...阅读全文
撮合引擎开发:日志输出
欢迎关注「Keegan小钢」公众号获取更多文章 撮合引擎开发:开篇 撮合引擎开发:MVP版本 撮合引擎开发:数据结构设计 撮合引擎开发:对接黑箱 撮合引擎开发:解密黑箱流程 撮合引擎开发:流程的代码实现 撮合引擎开发:缓存和MQ 日志需求 我们都知道日志在一个程序中有着重要的作用,撮合引擎也同样需要一个完善的日志输出功能,以方便调试和查询数据。 对一个撮合引擎来说,需要输出的日志主要有以下几类: 程序启动的日志,包括连接 Redis 成功的日志、Web 服务启动成功的日志; 接口请求和响应数据的日志; 启动了某引擎的日志; 关闭了某引擎的日志; 订单被添加到 orderBook 的日志; 成交记录的日志; 撤单结果的日志。 另外,撮合引擎产生的日志会非常多,所以还应该做日志分割,按日期分割是...阅读全文
Suggest me a project to contribute to?
<p>I'm an experienced developer but a Go noob. Can you suggest me an open source Go project I can contribute to to ramp up my skills? I can be interested in a lot of things but mostly of backend nature.</p> <hr/>**评论:**<br/><br/>Kaln0s: <pre><p>Prometheus is cool and always seems to be looking for c...阅读全文
新装Linux操作系统后,要保留哪些自启动服务?
和Windows系统一样,Linux服务器运行过程中也会一些没用的软件服务默认运行,这些占用了很多系统资源,也会有安全隐患,所以一般是建议关闭的。那么,工作中Linux主机到底需要有哪些开机自启动服务呢? 新装Linux系统之后,有必要保留的开机自启动服务有5个: Ø sshd:远程连接Linux服务器时要用到,所以必须开启,不然就无法提供远程连接服务了。 Ø rsyslog:日志相关软件,这是操作系统提供的一种机制,系统的守护程序通常会使用rsyslog程序将各种信息写到各个系统日志文件中。 Ø network:系统启动时,如果想激活或关闭各个网络接口的话,可以考虑开启。 Ø crond:用于周期性的执行系统及用户配置的任务计划。有需要时开启。几乎是运维工作中必须要用的一个软件。 Ø sy...阅读全文
mongo集群安装
Mongo集群部署 1.部署准备 1.1 Mongo集群环境 1.1.1mongo版本 版本号:4.0.0 1.1.2硬件环境: | 172.16.18.73 | 172.16.20.211 | 172.16.21.190 | | mongos | mongos | mongos | | config server | config server | config server | | shard server1主节点 | shard server1副节点 | shard server1仲裁 | | shard server2副节点 | shard server2仲裁 | shard server2主节点 | | sh...阅读全文