每日新闻

每日新闻

GoCN每日新闻资讯
有问必答

有问必答

Go相关的问题,技术相关的问题
文章分享

文章分享

技术文章分享,让知识传播给更多的人
招聘应聘

招聘应聘

为Gopher服务的招聘应聘平台

关于规范招聘信息发帖说明 置顶

招聘应聘 回复了问题 • 10 人关注 • 4 个回复 • 5998 次浏览 • 2019-10-04 10:59 • 来自相关话题

GoCN每日新闻(2019-12-12)

每日新闻逍姚继凯 回复了问题 • 2 人关注 • 1 个回复 • 1116 次浏览 • 2 小时前 • 来自相关话题

GoCN每日新闻(2019-12-11)

回复

每日新闻yulibaozi 发起了问题 • 1 人关注 • 0 个回复 • 1704 次浏览 • 1 天前 • 来自相关话题

Go 学习、Go 进阶、Go 实用工具类

文章分享hwholiday 发表了文章 • 0 个评论 • 170 次浏览 • 1 天前 • 来自相关话题

## learning_tools [源码地址](https://github.com/hwholiday/learning_tools)

### [all_packaged_library](https://github.com/hwholiday/learning_tools/tree/master/all_packaged_library) 里面封装了一些常用的库,有详细的介绍,持续更新
1: base 里面封装mysql,redis,mgo,minio文件储存库S3协议,雪花算法,退出程序方法,redis全局锁,日志库等(插件形式可单独引用)
2: logtool uber_zap日志库封装,可自动切分日志文件,压缩文件
3: perf ppoof小插件
4: push 集成苹果推送,google推送,华为推送
5: quit 优雅的退出程序

### [kafka](https://github.com/hwholiday/learning_tools/tree/master/kafka) (分布式消息发布订阅系统)
1: main 消息队列

### [NATS_streaming](https://github.com/hwholiday/learning_tools/tree/master/NATS_streaming)(分布式消息发布订阅系统--是由NATS驱动的数据流系统)
1: main 消息队列

### [nsq](https://github.com/hwholiday/learning_tools/tree/master/kafka) (分布式实时消息平台)
1: main 消息队列

### [grpc](https://github.com/hwholiday/learning_tools/tree/master/grpc) (grpc学习)
1: bidirectional_streaming_rpc 双向流grpc
2: server_side_streaming_rpc 服务端流grpc,也可以写成客户端流grpc
3: simple_rpc 简单grpc

### [rpc](https://github.com/hwholiday/learning_tools/tree/master/rpc) (rpc学习)
1: main rpc学习

### [prometheus](https://github.com/hwholiday/learning_tools/tree/master/prometheus) (监控报警系统)
1: server Prometheus监控报警系统

### [jaeger](https://github.com/hwholiday/learning_tools/tree/master/jaeger) (jaeger分布式链路追踪)
1: main jaeger分布式链路追踪

### [service_load_balancing](https://github.com/hwholiday/learning_tools/tree/master/service_load_balancing) (负载均衡)
1: fisher_yates_test 添加fisher-yates算法 负载均衡节点

### [service_registration_discovery](https://github.com/hwholiday/learning_tools/tree/master/service_registration_discovery) (服务注册与发现)
1: etcdv3 通过etcd实现服务注册与发现

### [service_req_hystrix](https://github.com/hwholiday/learning_tools/tree/master/service_req_hystrix) (熔断)
1: hystrix 学习并使用熔断(Hystrix

### [service_req_limit](https://github.com/hwholiday/learning_tools/tree/master/service_req_limit) (限流)
1: main 使用带缓存的channel实现限流
2: uber_ratelimit 使用uber_ratelimit实现限流

### [ini](https://github.com/hwholiday/learning_tools/tree/master/ini) (配置文件库)
1: main 配置文件ini的读取,以及自动匹配到结构体里面

### [minio](https://github.com/hwholiday/learning_tools/tree/master/minio) (对象存储服务)
1: minio 对象存储服务使用

### [mysql](https://github.com/hwholiday/learning_tools/tree/master/mysql) (mysql服务器)
1: main 简单的mysql使用

### [redis](https://github.com/hwholiday/learning_tools/tree/master/redis) (redis相关)
1: bloom_filter redis 实现BloomFilter过滤器
2: lock redis实现全局锁
3: pipeline redis事务
4: subscription redis发布订阅

### [mongodb](https://github.com/hwholiday/learning_tools/tree/master/mongodb) (mongodb服务器)
1: mgo.v2 mgo.v2库的基础使用学习
2: mongo-go-driver 官方库的demo,以及事务提交(不能是单节点)

### [gin](https://github.com/hwholiday/learning_tools/tree/master/gin) (web框架gin学习)
1: mvc 模式,swagger文档 可作为基础学习gin

### [jwt](https://github.com/hwholiday/learning_tools/tree/master/jwt) (JSON WEB TOKEN)
1: jwt 学习使用

### [zaplog](https://github.com/hwholiday/learning_tools/tree/master/kafka) (uber zap日志封装)
1: zap 日志封装

### [snow_flake](https://github.com/hwholiday/learning_tools/tree/master/snow_flake) (雪花算法)
1: main 雪花算法

### [encryption_algorithm](https://github.com/hwholiday/learning_tools/tree/master/encryption_algorithm) (双棘轮算法, KDF链,迪菲-赫尔曼棘轮,x3dh)
1: aes ase-(cfb,cbc,ecb)-(128,192,256)加解密方法
2: curve25519 椭圆曲线算法
3: 3curve25519 双棘轮算法,KDF

### [LRU](https://github.com/hwholiday/learning_tools/tree/master/LRU)(缓存淘汰算法)
1: list lru 缓存淘汰算法

### [tcp](https://github.com/hwholiday/learning_tools/tree/master/tcp) (tcp协议实现)
1: 实现网络库,封包,解包 len+tag+data 模式

### [websocket](https://github.com/hwholiday/learning_tools/tree/master/websocket) (websocket协议实现)
1: 实现网络库

### [binary_conversion](https://github.com/hwholiday/learning_tools/tree/master/binary_conversion) (进制转换)
1: 10to36 10进制转36进制
2: 10to62 10进制转62进制
3: 10to76 10进制转76进制
4: binary 用一个int64来描述开关(用户设置很多建议使用)

### [job_worker_mode](https://github.com/hwholiday/learning_tools/tree/master/job_worker_mode) (job_worker模式)
1: worker job_worker模式,可提高系统吞吐量

### [filewatch](https://github.com/hwholiday/learning_tools/tree/master/filewatch) (监控文件变化)
1: main 监控文件变化 可实现自动构建

### [push](https://github.com/hwholiday/learning_tools/tree/master/prometheus) (一个简单的推送服务)
1: main 推送服务

### [goquery](https://github.com/hwholiday/learning_tools/tree/master/goquery) (网页解析工具)
1: main 可以作为爬虫解析网页使用

### [active_object](https://github.com/hwholiday/learning_tools/tree/master/active_object)(并发设计模式)
1: active_object Go并发设计模式之Active Object

### [heap](https://github.com/hwholiday/learning_tools/tree/master/container/heap) (优先级队列)
1: heap 利用heap创建一个优先级队列

### [cli](https://github.com/hwholiday/learning_tools/tree/master/cli) (go命令行交互)
1: main go命令行交互

### [context](https://github.com/hwholiday/learning_tools/tree/master/context) (context包学习)
1: main context包学习

### [err](https://github.com/hwholiday/learning_tools/tree/master/err) (error 相关)
1: main golang 1.13 error 相关

### [interface](https://github.com/hwholiday/learning_tools/tree/master/interface) (interface包学习)
1: main interface包学习

### [syncPool](https://github.com/hwholiday/learning_tools/tree/master/syncPool) (syncPool包学习)
1: main syncPool包学习

### [reflect](https://github.com/hwholiday/learning_tools/tree/master/reflect) (reflect包学习)
1: main reflect包学习

【蚂蚁金服】蚂蚁金服研发效能团队招人啦!

回复

招聘应聘vs小金刚 发起了问题 • 1 人关注 • 0 个回复 • 173 次浏览 • 2 天前 • 来自相关话题

GoCN每日新闻(2019-12-10)

回复

每日新闻傅小黑 发起了问题 • 1 人关注 • 0 个回复 • 2729 次浏览 • 2 天前 • 来自相关话题

百度GOPROXY代理服务

开源程序dolfly 发表了文章 • 0 个评论 • 179 次浏览 • 2 天前 • 来自相关话题

百度GOPROXY代理服务https://goproxy.baidu.com/ ...查看全部

百度GOPROXY代理服务


https://goproxy.baidu.com/

GoCN每日新闻(2019-12-09)

回复

每日新闻kevin 发起了问题 • 1 人关注 • 0 个回复 • 3908 次浏览 • 3 天前 • 来自相关话题

gout v0.0.4发布,新增接口benchmark功能

开源程序guonaihong 发表了文章 • 0 个评论 • 196 次浏览 • 3 天前 • 来自相关话题

gout简介gout 是go开发的流式http client。v0.0.4版本主要功能是benchmark功能拥有此版本gout,助你很方便开发出apache ab此类轮子。benchmark功能性能如何 ...查看全部

gout简介

gout 是go开发的流式http client。v0.0.4版本主要功能是benchmark功能

拥有此版本gout,助你很方便开发出apache ab此类轮子。

benchmark功能性能如何


Changlog:

  • #95 优化文档
  • #97 修改New接口
  • #98 优化文档2
  • #103 quick start增加综合示例
  • #107 BindHeader函数tag设置没生效(fix)
  • #109 修改debug模式默认配色方案
  • #92 benckmark模式
  • #105 优化超时API
  • #102 提升测试覆盖度

项目地址

github地址https://github.com/guonaihong/gout


gin 注解路由,自动参数绑定工具

文章分享xie1xiao1jun 发表了文章 • 0 个评论 • 237 次浏览 • 4 天前 • 来自相关话题

ginprcgolang ...查看全部

ginprc

golang gin 参数自动绑定工具

  • 支持 rpc 自动映射
  • 支持对象注册
  • 支持注解路由
  • 基于 go-gin 的 json restful 风格的 golang 基础库
  • 自带请求参数过滤及绑定实现 binding:"required" validator
  • 代码注册简单且支持多种注册方式

api 接口说明

支持 3 种接口模式

  • func(gin.Context) //go-gin 原始接口
    func(
     api.Context) // 自定义的 context 类型
  • func(api.Context,req) // 自定义的 context 类型,带 request 请求参数
    func(
     api.Context,*req)
  • func(gin.Context,req) //go-gin context 类型,带 request 请求参数
    func(*gin.Context,req)

示例代码

初始化项目 (本项目以 ginweb 为名字)

``` go mod init ginweb ```

代码 (详细地址:https://github.com/xxjwxc/ginrpc/tree/master/sample/ginweb)

  package main

import (
"fmt"
"net/http"

_ "ginweb/routers" // debug模式需要添加[mod]/routers 注册注解路由

"github.com/gin-gonic/gin"
"github.com/xxjwxc/ginrpc"
"github.com/xxjwxc/ginrpc/api"
)

type ReqTest struct {
Access_token string `json:"access_token"`
UserName string `json:"user_name" binding:"required"` // 带校验方式
Password string `json:"password"`
}

// Hello ...
type Hello struct {
Index int
}

// Hello 带注解路由(参考beego形式)
// @router /block [post,get]
func (s *Hello) Hello(c *api.Context, req *ReqTest) {
fmt.Println(req)
fmt.Println(s.Index)
c.JSON(http.StatusOK, "ok")
}

// Hello2 不带注解路由(参数为2默认post)
func (s *Hello) Hello2(c *gin.Context, req ReqTest) {
fmt.Println(req)
fmt.Println(s.Index)
c.JSON(http.StatusOK, "ok")
}

//TestFun1 gin 默认的函数回调地址
func TestFun1(c *gin.Context) {
fmt.Println(c.Params)
c.String(200, "ok")
}

//TestFun2 自定义context的函数回调地址
func TestFun2(c *api.Context) {
fmt.Println(c.Params)
c.JSON(http.StatusOK, "ok")
}

//TestFun3 带自定义context跟已解析的req参数回调方式
func TestFun3(c *api.Context, req *ReqTest) {
fmt.Println(c.Params)
fmt.Println(req)
c.JSON(http.StatusOK, "ok")
}

//TestFun4 带自定义context跟已解析的req参数回调方式
func TestFun4(c *gin.Context, req ReqTest) {
fmt.Println(c.Params)
fmt.Println(req)

c.JSON(http.StatusOK, req)
}

func main() {
base := ginrpc.New(ginrpc.WithCtx(func(c *gin.Context) interface{} {
return api.NewCtx(c)
}), ginrpc.WithDebug(true), ginrpc.WithGroup("xxjwxc"))

router := gin.Default()
h := new(Hello)
h.Index = 123
base.Register(router, h) // 对象注册
router.POST("/test1", base.HandlerFunc(TestFun1)) // 函数注册
router.POST("/test2", base.HandlerFunc(TestFun2))
router.POST("/test3", base.HandlerFunc(TestFun3))
router.POST("/test4", base.HandlerFunc(TestFun4))
base.RegisterHandlerFunc(router, []string{"post", "get"}, "/test", TestFun1) // 多种请求方式注册

router.Run(":8080")
}
  • curl
    curl 'http://127.0.0.1:8080/test4' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'

注解路由

  • 1. 注解路由会自动创建 [mod]/routers/gen_router.go 文件 需要在调用时加:

    _ "[mod]/routers" // debug模式需要添加[mod]/routers 注册注解路由

    默认也会在项目根目录生成 [gen_router.data] 文件 (保留次文件,可以不用添加上面代码嵌入)

  • 2. 注解路由调用方式:

    base := ginrpc.New(ginrpc.WithCtx(func(c *gin.Context) interface{} {
    return api.NewCtx(c)
    }), ginrpc.WithDebug(true), ginrpc.WithGroup("xxjwxc"))
    base.Register(router, new(Hello)) // 对象注册
    router.Run(":8080")

    详细请看 demo ginweb

  • 3. 执行 curl,可以自动参数绑定。直接看结果

    curl 'http://127.0.0.1:8080/xxjwxc/block' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
    curl 'http://127.0.0.1:8080/xxjwxc/hello.hello2' -H 'Content-Type: application/json' -d '{"access_token":"111", "user_name":"222", "password":"333"}'
  • 4 参数说明
    ginrpc.WithCtx : 设置自定义 context
    ginrpc.WithDebug (true) : 设置 debug 模式
    ginrpc.WithGroup ("xxjwxc") : 添加路由前缀 (也可以使用 gin.Group 分组)
    ginrpc.WithBigCamel (true) : 设置大驼峰标准 (false 为 web 模式,_, 小写)

    更多

下一步

1.导出api文档
2.导出postman测试配置

代码地址: ginprc 如果喜欢请给星支持

传送门

如果你喜欢,请'star'

GoCN每日新闻(2019-12-08)

回复

每日新闻罗发宣 发起了问题 • 1 人关注 • 0 个回复 • 4706 次浏览 • 4 天前 • 来自相关话题

GoCN每日新闻(2019-12-07)

回复

每日新闻samurai 发起了问题 • 1 人关注 • 0 个回复 • 5622 次浏览 • 5 天前 • 来自相关话题

GoCN每日新闻(2019-12-06)

回复

每日新闻cloudy 发起了问题 • 1 人关注 • 0 个回复 • 5865 次浏览 • 6 天前 • 来自相关话题

分布式图数据库 Nebula Graph 中的集群快照实践

文章分享NebulaGraph 发表了文章 • 0 个评论 • 215 次浏览 • 6 天前 • 来自相关话题


1 概述


1.1 需求背景


图数据库 Nebula Graph 在生产环境中将拥有庞大的数据量和高频率的业务处理,在实际的运行中将不可避免的发生人为的、硬件或业务处理错误的问题,某些严重错误将导致集群无法正常运行或集群中的数据失效。当集群处于无法启动或数据失效的状态时,重新搭建集群并重新倒入数据都将是一个繁琐并耗时的工程。针对此问题,Nebula Graph 提供了集群 snapshot 的创建功能。


Snapshot 功能需要预先提供集群在某个时间点 snapshot 的创建功能,以备发生灾难性问题时用历史 snapshot 便捷地将集群恢复到一个可用状态。


1.2 术语


本文主要会用到以下术语:



  • **StorageEngine:**Nebula Graph 的最小物理存储单元,目前支持 RocksDB 和 HBase,在本文中只针对 RocksDB。

  • Partition:Nebula Graph 的最小逻辑存储单元,一个 StorageEngine 可包含多个 Partition。Partition 分为 leader 和 follower 的角色,Raftex 保证了 leader 和 follower 之间的数据一致性。

  • GraphSpace:每个 GraphSpace 是一个独立的业务 Graph  单元,每个 GraphSpace 有其独立的 tag 和 edge 集合。一个 Nebula Graph 集群中可包含多个 GraphShpace。

  • checkpoint:针对 StorageEngine 的一个时间点上的快照,checkpoint 可以作为全量备份的一个 backup 使用。checkpoint files是 sst files 的一个硬连接。

  • snapshot:本文中的 snapshot 是指 Nebula Graph 集群的某个时间点的快照,即集群中所有 StorageEngine 的 checkpoint 的集合。通过 snapshot 可以将集群恢复到某个 snapshot 创建时的状态。

  • wal:Write-Ahead Logging ,用 raftex 保证 leader 和 follower 的一致性。


2 系统构架


2.1 系统整体架构


image


2.2 存储系统结构关系


image


2.3 存储系统物理文件结构


[bright2star@hp-server storage]$ tree
.
└── nebula
└── 1
├── checkpoints
│ ├── SNAPSHOT_2019_12_04_10_54_42
│ │ ├── data
│ │ │ ├── 000006.sst
│ │ │ ├── 000008.sst
│ │ │ ├── CURRENT
│ │ │ ├── MANIFEST-000007
│ │ │ └── OPTIONS-000005
│ │ └── wal
│ │ ├── 1
│ │ │ └── 0000000000000000233.wal
│ │ ├── 2
│ │ │ └── 0000000000000000233.wal
│ │ ├── 3
│ │ │ └── 0000000000000000233.wal
│ │ ├── 4
│ │ │ └── 0000000000000000233.wal
│ │ ├── 5
│ │ │ └── 0000000000000000233.wal
│ │ ├── 6
│ │ │ └── 0000000000000000233.wal
│ │ ├── 7
│ │ │ └── 0000000000000000233.wal
│ │ ├── 8
│ │ │ └── 0000000000000000233.wal
│ │ └── 9
│ │ └── 0000000000000000233.wal
│ └── SNAPSHOT_2019_12_04_10_54_44
│ ├── data
│ │ ├── 000006.sst
│ │ ├── 000008.sst
│ │ ├── 000009.sst
│ │ ├── CURRENT
│ │ ├── MANIFEST-000007
│ │ └── OPTIONS-000005
│ └── wal
│ ├── 1
│ │ └── 0000000000000000236.wal
│ ├── 2
│ │ └── 0000000000000000236.wal
│ ├── 3
│ │ └── 0000000000000000236.wal
│ ├── 4
│ │ └── 0000000000000000236.wal
│ ├── 5
│ │ └── 0000000000000000236.wal
│ ├── 6
│ │ └── 0000000000000000236.wal
│ ├── 7
│ │ └── 0000000000000000236.wal
│ ├── 8
│ │ └── 0000000000000000236.wal
│ └── 9
│ └── 0000000000000000236.wal
├── data
复制代码

3 处理逻辑分析


3.1 逻辑分析


image


Create snapshot  由 client api  或 console  触发, graph server  对 create snapshot  的 AST 进行解析,然后通过 meta client  将创建请求发送到 meta server 。 meta server  接到请求后,首先会获取所有的 active host ,并创建 adminClient  所需的 request 。通过 adminClient  将创建请求发送到每个 StorageEngine ,StorageEngine 收到 create 请求后,会遍历指定 space 的全部 StorageEngine,并创建 checkpoint ,随后对 StorageEngine 中的全部 partition  的 wal 做 hardlink。在创建 checkpoint 和 wal hardlink 时,因为已经提前向所有 leader partition 发送了 write blocking 请求,所以此时数据库是只读状态的。


因为 snapshot 的名称是由系统的 timestamp 自动生成,所以不必担心 snapshot 的重名问题。如果创建了不必要的 snapshot,可以通过 drop snapshot 命令删除已创建的 snapshot。


3.2 Create Snapshot


image


3.3 Create Checkpoint


image


4 关键代码实现


4.1 Create Snapshot


folly::Future<Status> AdminClient::createSnapshot(GraphSpaceID spaceId, const std::string& name) {
// 获取所有storage engine的host
auto allHosts = ActiveHostsMan::getActiveHosts(kv_);
storage::cpp2::CreateCPRequest req;

// 指定spaceId,目前是对所有space做checkpoint,list spaces 工作已在调用函数中执行。
req.set_space_id(spaceId);

// 指定 snapshot name,已有meta server根据时间戳产生。
// 例如:SNAPSHOT_2019_12_04_10_54_44
req.set_name(name);
folly::Promise<Status> pro;
auto f = pro.getFuture();

// 通过getResponse接口发送请求到所有的storage engine.
getResponse(allHosts, 0, std::move(req), [] (auto client, auto request) {
return client->future_createCheckpoint(request);
}, 0, std::move(pro), 1 /*The snapshot operation only needs to be retried twice*/);
return f;
}
复制代码

4.2 Create Checkpoint


ResultCode NebulaStore::createCheckpoint(GraphSpaceID spaceId, const std::string& name) {
auto spaceRet = space(spaceId);
if (!ok(spaceRet)) {
return error(spaceRet);
}
auto space = nebula::value(spaceRet);

// 遍历属于本space中的所有StorageEngine
for (auto& engine : space->engines_) {

// 首先对StorageEngine做checkpoint
auto code = engine->createCheckpoint(name);
if (code != ResultCode::SUCCEEDED) {
return code;
}

// 然后对本StorageEngine中的所有partition的last wal做hardlink
auto parts = engine->allParts();
for (auto& part : parts) {
auto ret = this->part(spaceId, part);
if (!ok(ret)) {
LOG(ERROR) << "Part not found. space : " << spaceId << " Part : " << part;
return error(ret);
}
auto walPath = folly::stringPrintf("%s/checkpoints/%s/wal/%d",
engine->getDataRoot(), name.c_str(), part);
auto p = nebula::value(ret);
if (!p->linkCurrentWAL(walPath.data())) {
return ResultCode::ERR_CHECKPOINT_ERROR;
}
}
}
return ResultCode::SUCCEEDED;
}
复制代码

5 用户使用帮助


5.1 CREATE SNAPSHOT


CREATE SNAPSHOT  即对整个集群创建当前时间点的快照,snapshot 名称由 meta server 的 timestamp 组成



在创建过程中可能会创建失败,当前版本不支持创建失败的垃圾回收的自动功能,后续将计划在 metaServer 中开发 cluster checker 的功能,将通过异步线程检查集群状态,并自动回收 snapshot 创建失败的垃圾文件。



当前版本如果 snapshot 创建失败,必须通过 DROP SNAPSHOT 命令清除无效的 snapshot。


当前版本不支持对指定的 space 做 snapshot,当执行 CREATE SNAPSHOT 后,将对集群中的所有 space 创建快照。
CREATE SNAPSHOT 语法:


CREATE SNAPSHOT
复制代码

以下为笔者创建 3 个 snapshot 的例子:


(user@127.0.0.1) [default_space]> create snapshot;
Execution succeeded (Time spent: 28211/28838 us)

(user@127.0.0.1) [default_space]> create snapshot;
Execution succeeded (Time spent: 22892/23923 us)

(user@127.0.0.1) [default_space]> create snapshot;
Execution succeeded (Time spent: 18575/19168 us)
复制代码

我们用 5.3 提及的 SHOW SNAPSHOTS 命令看下现在有的快照


(user@127.0.0.1) [default_space]> show snapshots;
===========================================================
| Name | Status | Hosts |
===========================================================
| SNAPSHOT_2019_12_04_10_54_36 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
| SNAPSHOT_2019_12_04_10_54_42 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
| SNAPSHOT_2019_12_04_10_54_44 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
Got 3 rows (Time spent: 907/1495 us)
复制代码

从上 SNAPSHOT_2019_12_04_10_54_36  可见 snapshot 名同 timestamp 有关。


5.2 DROP SNAPSHOT


DROP SNAPSHOT 即删除指定名称的 snapshot,可以通过 SHOW SNAPSHOTS 命令获取 snapshot 的名称,DROP SNAPSHOT 既可以删除有效的 snapshot,也可以删除创建失败的 snapshot。


语法:


DROP SNAPSHOT name
复制代码

笔者删除了 5.1 成功创建的 snapshot SNAPSHOT_2019_12_04_10_54_36 ,并用SHOW SNAPSHOTS 命令查看现有的 snapshot。


(user@127.0.0.1) [default_space]> drop snapshot SNAPSHOT_2019_12_04_10_54_36;
Execution succeeded (Time spent: 6188/7348 us)

(user@127.0.0.1) [default_space]> show snapshots;
===========================================================
| Name | Status | Hosts |
===========================================================
| SNAPSHOT_2019_12_04_10_54_42 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
| SNAPSHOT_2019_12_04_10_54_44 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
Got 2 rows (Time spent: 1097/1721 us)
复制代码

5.3 SHOW SNAPSHOTS


SHOW SNAPSHOTS 可查看集群中所有的 snapshot,可以通过 SHOW SNAPSHOTS 命令查看其状态(VALID 或 INVALID)、名称、和创建 snapshot 时所有 storage Server 的 ip 地址。
语法:


SHOW SNAPSHOTS
复制代码

以下为一个小示例:


(user@127.0.0.1) [default_space]> show snapshots;
===========================================================
| Name | Status | Hosts |
===========================================================
| SNAPSHOT_2019_12_04_10_54_36 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
| SNAPSHOT_2019_12_04_10_54_42 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
| SNAPSHOT_2019_12_04_10_54_44 | VALID | 127.0.0.1:77833 |
-----------------------------------------------------------
Got 3 rows (Time spent: 907/1495 us)
复制代码

6 注意事项



  • 当系统结构发生变化后,最好立刻 create snapshot,例如 add host、drop host、create space、drop space、balance 等。

  • 当前版本暂未提供用户指定 snapshot 路径的功能,snapshot 将默认创建在 data_path/nebula 目录下

  • 当前版本暂未提供 snapshot 的恢复功能,需要用户根据实际的生产环境编写 shell 脚本实现。实现逻辑也比较简单,拷贝各 engineServer 的 snapshot 到指定的文件夹下,并将此文件夹设置为 data_path,启动集群即可。


7 附录


最后,附上 Nebula Graph GitHub 地址:github.com/vesoft-inc/… 如果你在使用 Nebula Graph 过程中遇到任何问题,欢迎 GitHub 联系我们或者加入微信交流群,请联系微信号:NebulaGraphbot


关注公众号

Go 开发者进阶周刊

进阶周刊astaxie 发表了文章 • 3 个评论 • 2220 次浏览 • 6 天前 • 来自相关话题

前沿动态(来自Go官方的最新资讯) ...查看全部

前沿动态(来自Go官方的最新资讯)

  1. 2019 Go Developer 官方调查

语言学习(Golang 编程知识与技巧)

  1. [译] Go语言的协程,系统线程以及CPU管理  
  2. Go Module探索之工程、依赖与Gopls
  3. [译] 《Go in Action》第6章 Concurrency 
  4. 你应该知道的Go漏洞之Top5
  5. Go中的版本控制原则
  6. 万字长文带你深入浅出 Golang Runtime   
  7. Go切片内存应用技巧 
  8. Go 编写友好的命令行应用程序
  9. Go 语言中避免类型推断 
  10. Go 命令行解析 flag 包之通过子命令实现看 go 命令源码 
  11. 浅谈 Go 语言中的读写锁和互斥锁 
  12. Go中的中断处理 
  13. 停止信任你的依赖包
  14. Go的组合与继承

工程实践(Go的项目应用实践)

  1. 使用 Go AST 重构代码 
  2. 利用 Go 开发布隆过滤器 
  3. uber-go 漏桶限流器使用与原理分析
  4. Go后台定时任务执行
  5. 使用 OpenFaaS 和 Go 开启 Serverless 之旅 
  6. Go 号称几行代码开启一个 HTTP Server,底层都做了什么?
  7. 70行Go代码打败C
  8. [译]Go: 理解Sync.Pool的设计思想 
  9. Go 项目终极设置

生态拓展(云原生等 Go 生态体系)

  1. k8s v1.17 新特性预告: 拓扑感知服务路由
  2. 蚂蚁金服 Service Mesh 大规模落地系列 - RPC 篇
  3. 给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践 
  4. kubeedge 源码分析系列之 edgecore

开源项目(社区新涌现的开源成果)

  1. nebula: 一个可扩展的overlay网络工具
  2. arachne:Go实现的丢包检测系统 
  3. orbiter:元数据集群管理器  
  4. errwrap:error 检查优化工具  
  5. reflow:字符串自动换行库
  6. Golang 实现的分布式限流滑动窗口算法

彩蛋(活动与招聘)

11.30 Gopher Meetup 北京站 PPT 下载

  • 探探长链接项目的Go语言实践
  • 蚂蚁金服深度剖析Mosn
  • 美团构建部署平台解析与 Go 的实践 
  • Go语言电子表格文档格式标准实践
  • 探探微服务架构演进之路 

12.24 Gopher Meetup 上海站站活动 报名

[上海徐汇] 积梦智能招聘Go工程师 详情