副本集群是一组维护相同数据集的mongod实例。一个副本集包含几个承载数据的节点和一个可选的仲裁节点。在承载数据的节点中,只有一个节点被认为是主节点,其他节点被认为是次节点。 主节点接收所有的写操作,次节点接收主节点的操作应用在自己的数据集上,副本节点只是做一个备份的作用,当主节点出现故障时,会自动选出新的主节点。 ![结构图](https://www.mongodb.com/docs/manual/images/replica-set-read-write-operations-primary.bakedsvg.svg) ![故障转移](https://www.mongodb.com/docs/manual/images/replica-set-trigger-election.bakedsvg.svg) 本教程描述的是包含三个节点的副本集群搭建,所有节点都没有开启访问控制。 因为集群需要通过选举来确定master节点,为了选举不会出现问题,所以集群成员数量应该总是奇数个。 MongoDb版本是`5.0`。 ### 1、启动成员节点 测...
 发布日期: 2022-05-18    分类: 数据库    浏览量: 197   0条评论  
使用Drone搭建持续集成系统 - 持续集成:自动化的测试、编译打包并且自动部署到开发或者测试环境 - 持续交付:自动化的测试、编译打包生产环境的包,但是不做自动化的生产环境部署,需要手动来做 - 持续部署:和持续交付的区别就是生产环境的部署也是自动化的。 Drone持续集成系统主要有两部分组成: - Drone服务器:这个是用来管理的一个UI界面 - runner:这个是用来执行构建动作的服务 仓库以国内的Gitee为例子。Drone版本是2。 ### 1、创建仓库访问应用 在自己的Gitee后台创建一个可以访问自己仓库的应用,位置在`个人设置-数据管理-第三方应用`。 ![gitee_oauth](https://360us.net/images/2022/gitee_token_create.png) Gihub和Gitlab也是类似的,创建一个`OAuth`的应用,方便可以通过这个密钥访问我们的仓库。 ![create](https://360us.net/images/2022/github_application_...
 发布日期: 2022-04-27    分类: 后端    浏览量: 179   0条评论  
### 概述 复制即主从(master-replica),读写分离。 **运行机制:** 1、主副本连接良好的情况下,主节点会把所有改动通过发送命令流的方式同步到副本节点。 包括客户端写,key过期或者淘汰,和其他在主节点的改动。 2、连接出现问题时,副本节点会尝试重新连接,并且会尝试重新同步连接异常期间丢失的数据。 3、如果同步丢失的数据失败,副本会要求同步完整数据,这个就需要主节点快照整个数据集,再发送到副本节点,之后才会接着正常同步。 默认使用低延时高性能的异步复制模式,适用于大多数Redis用例。副本实例会用异步ACK的方式把自己收到的数据量通告给主节点,所以主节点不需要等待副本节点执行完命令。 客户端可以用`WAIT`命令请求对数据进行同步复制,但是`WAIT`只能确认指定数量的ACK确认复制。 **关于redis复制的说明:** 1、redis使用异步复制(也可以同步复制),副主(replica-to-master)之间会异步确认(ack)处理的数据量。 2、一个主可以有多个副。 3、...
 发布日期: 2022-04-19    分类: 数据库    浏览量: 172   0条评论  
Gin模型数据绑定验证器用的是go-playground/validator/v10。默认提示是英文内容,我们需要翻译成中文内容。 创建一个文件`validator.go`: ```go package utils import ( "github.com/gin-gonic/gin/binding" "github.com/go-playground/locales/en" "github.com/go-playground/locales/zh" ut "github.com/go-playground/universal-translator" "github.com/go-playground/validator/v10" zhtranslations "github.com/go-playground/validator/v10/translations/zh" "log" ) var trans ut.Translator //设置验证器中文翻译 func init() { if trans != nil { ...
 发布日期: 2021-12-08    分类: Go    浏览量: 771   0条评论  
安全和活性失效保障按照我们的思路和设计方案,算法只需具备3个特性就可以实现一个最低保障的分布式锁。安全属性(Safety property): 独享(相互排斥)。在任意一个时刻,只有一个客户端持有锁。活性A(Liveness property A): 无死锁。即便持有锁的客户端崩溃(crashed)或者网络被分裂(gets partitioned),锁仍然可以被获取。活性B(Liveness property B): 容错。 只要大部分Redis节点都活着,客户端就可以获取和释放锁.为什么基于故障转移的实现还不够为了更好的理解我们想要改进的方面,我们先分析一下当前大多数基于Redis的分布式锁现状和实现方法.实现Redis分布式锁的最简单的方法就是在Redis中创建一个key,这个key有一个失效时间(TTL),以保证锁最终会被自动释放掉(这个对应特性2)。当客户端释放资源(解锁)的时候,会删除掉这个key。从表面上看,似乎效果还不错,但是这里有一个问题:这个架构中存在一个严重的单点失败问题。如果Redis挂了怎么办?你可能会说,可以通过增加一个slave节点解决这个问题。但这通常是行...
 发布日期: 2021-12-07    分类: 数据库    浏览量: 429   0条评论  
ElasticSearch分组聚合分页 ====== 类似SQL里面`group by`后分页输出列表。 这里需要分成两个步骤,一个是计算总数,第二个是输出列表。 ### 数据场景: 展示一个车主列表,输入关键字,可以通过车主的姓名、车辆的车牌来搜索出对应的车主数据列表。 添加一个车辆索引:`car`,里面包括车主姓名:`name`,车主id:`uid`,车牌:`car_no` 因为车主和车辆是一对多的关系,所以我们在车辆索引里面搜索车主的时候需要对uid去重,这里就用到了聚合。 ### 计算聚合桶的个数 方法就是用`cardinality`聚合和`sum_bucket`聚合结合起来计算。 ```json { "size": 0, "query": { "bool": { //这里用前缀搜索name和car_no "should": [ { "prefix": { "name": "113566" } }, { "...
 发布日期: 2020-10-28    分类: 数据库    浏览量: 2744   2条评论  
JetBrains IntelliJ IDEA 最新激活码 适用于JetBrains家族所有ide,包括IntelliJ IDEA ,PhpStorm,WebStorm,GoLand,PyCharm,DataGrip等 有人搭建了网站:https://jetbra.in/s 下载顶部提示的文件: ja-netfilter-all.zip,按照说明使用。 ja-netfilter-all.zip 下载提示的下面一行是一些收集的授权服务器。 ...
 发布日期: 2020-09-28    分类: 其他    浏览量: 3472   0条评论  
go从1.11版本开始,实验性的加入了`WebAssembly`的支持。 ## `hellow world`程序 ```go package main import "fmt" func main() { fmt.Println("Hello, WebAssembly!") } ``` 设置go编译`WebAssembly`环境变量值,`GOOS=js`和`GOARCH=wasm`。 设置方法有两种: - 修改默认变量值,执行命令:`go env -w GOOS=js GOARCH=wasm` - 编译的时候指定值:`cd`到项目根目录,执行命令:`GOOS=js GOARCH=wasm go build -o main.wasm` 这时将生成一个`main.wasm`文件,`.wasm`后缀的文件可以通过`http`设置合适的`Content-Type`http头来使用。 需要注意的一点是,只能编译`main`包,否则是不能在`WebAssembly`里面使用的。 **在浏览器里面运行`main.wasm`** ...
 发布日期: 2020-01-09    分类: Go    浏览量: 2883   0条评论  
material-ui的官方示例css都是用`makeStyles`创建的,用在`function`组件上。 但是如果我用的是`class`组件该怎么用呢?答案是用不了。 `makeStyles`只能用在`function`组件上,要在`class`组件上使用需要用`withStyles`。 用法如下: ```js import React, { Component } from 'react'; import { withStyles } from '@material-ui/core/styles'; import Button from '@material-ui/core/Button'; const styles = { root: { background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)', border: 0, borderRadius: 3, boxShadow: '0 3px 5px 2px rgba(255, 105...
 发布日期: 2020-01-03    分类: 前端    浏览量: 3011   0条评论  
场景是我们在本地电脑上安装了git,并初始化了一个测试仓库,但是并没有安装`gitlab`这种东西,那我们怎么可以通过`url`来`git pull`和`git push`仓库的内容呢。 这里以linux系统为例,在不再多添加其他依赖的情况下操作。 测试仓库路径`/home/dev/git/test`,初始化仓库的时候需要初始化成一个裸仓库`git init --bare`,否则需要做一些其他设置才能正常`push`。 1. 和git仓库在同一台电脑上面 这种情况可以用`file`协议来操作就可以,`git clone file:///home/dev/git/test`。 比如你在本机测试`Jenkins`的时候,配置`Pipeline`的git仓库,就可以这样填写仓库地址:`file:///home/dev/git/test`。 2. 在不同电脑上面操作git仓库 这种情况可以用ssh协议来操作,`git clone ssh://dev@192.168.2.199:/home/dev/git/test`,`dev`是登录用户。 `19...
 发布日期: 2019-07-22    分类: 其他    浏览量: 4035   0条评论