influxdb的docker-compose如何配置

2021年8月26日 06:27

 
influxdb的docker-compose如何配置
 

1. 新建数据目录

 
mkdir data-volumne
 

2. 生成配置文件

 
docker run --rm influxdb:2.0.8 influxd print-config > config.yml
 

3. docker-compose配置

 
docker-compose.yaml内容
 
version: "2"
services:
   influxdb:
       image: influxdb:2.0.8
       volumes:
           - ./data-volumne:/var/lib/influxdb2
           - ./config.yml:/etc/influxdb2/config.yml
           - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
       ports:
           - 8086:8086
       environment:
           DOCKER_INFLUXDB_INIT_MODE: setup
           DOCKER_INFLUXDB_INIT_USERNAME: my-user
           DOCKER_INFLUXDB_INIT_PASSWORD: my-password
           DOCKER_INFLUXDB_INIT_ORG: my-org
           DOCKER_INFLUXDB_INIT_BUCKET: my-bucket
 

4. 启动

 
docker-compose up
 

5. 目录结构如下

 
[root@localhost influxdb]# tree
.
├── config.yml
├── data-volumne
│   ├── engine
│   │   └── data
│   └── influxd.bolt
└── docker-compose.yaml
 
 

* 注意

 
上面修改influx时区无效,好像不能修改时区,默认都是UTC
 

Tags: influxdb docker
评论(26) 阅读(2065)

以管理员身份运行cmd有哪几种方法

2021年8月26日 05:15

描述

    
    除了右键"以管理员身份运行",还有哪几种方法,能够以管理员身份启动cmd
 

方式一:右键"以管理员方式运行"

 

方式二:powershell命令

 
Start-Process cmd -Verb runas
Start-Process powershell -Verb runas
 

方式三: 第三方工具

 
http://code.kliu.org/misc/elevate/
 

方式四:编程

 
在编译程序时,设置启动时请求权限
 
 
 

评论(5) 阅读(1181)

golang离线环境依赖包问题

2021年8月21日 17:06

 

问题描述

 
在一个win10虚拟机中安装了go(go1.16.4)的开发环境, 其中有自己的项目,此时正常编译。
    
然后将这个虚拟机放到内网,内网网络受限,不允许访问外网
    
如果新一个依赖包,该怎么办呢?
 
 
 

方法一: 拷贝vendor目录(推荐)

 
1. 在外网环境项目目录,生成vendor
 
go mod vendor
 
2. 将vendor拷贝进内网,放在内网项目目录
 
 
缺点:只能当前项目使用
 
优点:体积小
 
 
类似python的pip download -r requipment.txt,将包下载后放到一个目录
 
 

方法二: 拷贝$GOPATH/pkg/mod目录

 
1. 外在更新全局依赖
 
go mod download
 
2.拷贝进入内网,替换mod目录
 
优点:可以被所有项目公用
 
缺点:有可能会比较大
 
 

方法三: 使用自己的goproxy

 
详细见
https://github.com/goproxyio/goproxy
 
 
 

吐槽

 
不少资料都是介绍GO111MODULE=on/off/auto之类的查找顺序,看得云山雾绕
 
假如GO111MODULE=on,并且在内网,此时无法访问网络,难道它不会找一下当前目录中的vendor?
 
 

评论(30) 阅读(1188)

nats-server系统服务只能使用sc命令注册

2021年8月19日 02:42

 

起因描述

 
windows环境下nats-server注册成系统, 官方推荐是sc命令
 
而我觉得sc命令台太麻烦, 为什么不用github.com/kardianos/service,或者更方便的工具呢?
 

方法一:使用nssm通过界面进行配置

 
1. 下载地址
 
http://nssm.cc/download
 
2. 过程省略
 
3. 结果死活不行,由于是第三方工具,出错找不到原因,放弃
 
 

方法二:通过服务外壳作为系统服务

 
* 介绍
 
使用go生成一个demo.exe,再将demo.exe注册成系统,demo.exe读取配置文件,然后demo.exe通过exec.Command启动nats-server.exe
 
go比较好用的库可以用github.com/kardianos/service
 
 
* demo.exe启动nats-server.exe关键源码
 
p.cmd = exec.Command(fullExec, p.Args...)
p.cmd.Dir = p.Dir
p.cmd.Env = append(os.Environ(), p.Env...)
 
* demo.json配置示例
 
{
"Name": "demo",
"DisplayName": "demo",
"Description": "demo for nats-server",

"Dir": "d:\\nats-server",
"Exec": "xxxx\\nats-server.exe",
"Args": ["-c ","xxx\\nats-server.conf"],
"Env": [
],

"Stderr": "C:\\log\\nats_err.log",
"Stdout": "C:\\log\\nats_out.log"
}
 
* 结果报错
 
The service process could not connect to the service controller.
 
意思是一个服务不能连接到另一个服务,啥意思呢? 也就是通过exec.Command启动的竟然是服务,不应该是exe么.
 
* nats-server启动源码分析
 
nats-server.exe的启动入口源码
 
func Run(server *Server) error {
    //入口1:docker
if dockerized {
server.Start()
return nil
}
isInteractive, err := svc.IsAnInteractiveSession()
if err != nil {
return err
}
    //入口2: 交互模式
if isInteractive {
server.Start()
return nil
}
    //入口3: 启动服务(serviceName被写死了,只能是nats-server)
return svc.Run(serviceName, &winServiceWrapper{server})
}
 
* 错误原因总结
 
当以外壳方式启动时,走的是"入口3",也是启动服务,如果没有nats-server,它就啥事也没干,结果nats-server并没有启动
 

方法三:sc命令

 
官方推荐
 

总结

 
1、nat-server只能以sc命令注册成服务。怕麻烦可以写一个bat。
 
2、nats-server服务名只能是nats-server
 
 

Tags: nats
评论(51) 阅读(1629)

zap日志写入通道被覆盖

2021年8月17日 20:00

 

描述

 
实现了一个io.Writer接口,允许zap日志写入,传递给界面,出现了日志被覆盖、重复的情况。
 

原因

 
io.Writer的接口Write传入的[]byte真实类型是slice。通道传递slice时,用的是引用传递,所以真实数据有被覆盖的情况 
 

示例

 
* zap初始化
 
...
out = COut()
zapcore.NewCore(encoder, zapcore.AddSync(out), clevel),
...
 
* 自定义日志写入Channel
 
package logs

var _GlobalChanOutput = &ChanOutput{
outs: make([]chan *[]byte, 0),
}

/*---------------------------------------
全局函数
示例
logs.COut().AddOut(xx)
---------------------------------------*/

//全局ChanOutput
func COut() *ChanOutput{
return _GlobalChanOutput
}

/*---------------------------------------
log to channel
---------------------------------------*/

type ChanOutput struct{
outs []chan *[]byte
}

//io.Writer接口
func (c *ChanOutput) Write(p []byte) (n int, err error) {
count :=0

//数据复制(防止被覆盖)
_p := make([]byte, len(p))
copy(_p, p)

for _, out :=range c.outs{
select{
case out <- &_p:
count += 1
default:
}
}
return count, nil
}

func (c *ChanOutput) AddOut(out chan *[]byte) {
c.outs = append(c.outs, out)
}
 
* 读取日志
 
logOut := make(chan *[]byte, 1024)
logs.COut().AddOut(logOut)

pctx, pctxCancel := context.WithCancel(context.Background())
go func(ctx context.Context){
    select {
    case msg := <- logOut:
        fmt.Println(string(*msg))
    case <-ctx.Done():
        break
    }
}(pctx)
 
 

评论(1) 阅读(908)

msgpack代替json防止丢失类型

2021年6月30日 15:12

 

描述

 
开发了一个通信协议, 协议对数据类型比较敏感, 根据不同数据数据类型使用不同格式。golang的数据类型能够满足需求。
 
然而,将协议转为http方式时,如果传入json,会发现数据类型不符合预期
 
例如,本来是应该int结果是float64; 本来应该是[]byte,结果是string
 

环境

 
http服务器: gin
 
开发语言: golang
 

解决方法探寻

 
什么传输协议会带上数据类型?
 
* json类型丢失
 
默认情况下gin的BindJSON,可将传入的参数绑定到具体的结构体,产生类型转换。然后,我的结果需要是动态的,不知道参数的具体内容。
 
* 自定义参数格式,将类型带上。例如 marchinery
 
Arg struct{
    Type string
    Value interface{}
}
 
缺点:太麻烦
 
* 常用协议中选择
 
xml         可以用,不理想
 
yaml        不能解决问题
 
protobuf    不能解决问题
 
messagepack 有详细的数据类型,完美
 
 

msgpack替代json

 
gin示例
 
func SendXX(c *gin.Context){
    rawData, _ := c.GetRawData()
    var param interface{}
    msgpack.Unmarshal(rawData, ¶m)

result := struct{
Name string
}{
Name: "xxx",
}
resultData, _ := msgpack.Marshal(result)
c.Data(200, "application/x-msgpack", resultData)
}
 

备注

 
* gin自带的msgpack版本是1.1.7不好用,不会自动进行类型转换。 最好改用  github.com/vmihailenco/msgpack/v5
 
* 替换gin中的部分接口就可以,不用全部改为msgpack
 
 
 
 

评论(33) 阅读(1728)

人生枷锁之一:傲慢

2021年6月15日 06:08

 

问题

 
有时会生出轻视之心,觉得某某能力不行。确实它真的能力不行,为什么会产生这种情绪?
 
别人与我何干,应该很平淡才对。
 
这是什么?
 
在什么地方是否会出现?
 
对我有多大危害?
 
 

 这是什么?

 
傲慢
 
 

什么地方会出现?

 
1、熟人之间。熟悉了对方,才会有分别判断,才会产生某某不行的情绪。
 
2、能力、相貌、财富、权势、等等不平等的地方
 
 

实例

 
1、骂人、打人。傲慢是原因之一。
 
2、刻薄、不能容人。傲慢是原因。
 
3、怨恨,愤世嫉俗。有才能而不得志,傲慢是原因。
 
4、嫌弃、不如意。觉得周围人不如你,必然产生嫌弃感。
 
 

对我有多大危害?

 
人事环境决定个人的命运。而傲慢在破坏命运。
 
 

客观思惟

 
1、环境决定命运,而不是能力(xxx)。
 
2、能力(xxx)强又如何?能带给我们什么,没有人支持,没有平台,没有环境,什么也是不。
 
3、能力(xxx)只是果报,可以修得到,又不是永恒的。
 
4、别人不如你,代表着这个环境需要你。如果环境不需要你,排斥你,会怎么样?
 
5、人与人之间互助生存,此时正代表你需要承担责任。
 
 

应该如何做?

 
能力(xxx)应该发挥它的正面作用,而不是发挥负面作用。
 
 

总结

 
1、上天给了我们某方面的优势,是一把双刃剑,是福也是祸。
 
2、傲慢是潜意识,根深蒂固,很难被自己察觉到。
 
3、值得花大部分精力去对治它。
 
 

Tags: 体悟
评论(78) 阅读(1013)

nats的安装docker方式

2021年6月12日 12:02

描述

    docker-compose方式启动nats-server。nats的镜像非常小, docker-cpomse进行管理。下面是配置方式
 

docker-compose.yaml配置 

 
version: "2"
services:
   nats-server:
       #image: provide/nats-server:latest
       image: nats:latest
       volumes:
           - ./nats-server.conf:/nats-server.conf
       ports:
           - 4222:4222
 

配置文件nats-server.conf

# Client port of 4222 on all interfaces
port: 4222

# HTTP monitoring port
monitor_port: 8222

# This is for clustering multiple servers together.
cluster {

  # Route connections to be received on any interface on port 6222
  port: 6222

  # Routes are protected, so need to use them with --routes flag
  # e.g. --routes=nats-route://ruser:T0pS3cr3t@otherdockerhost:6222
  authorization {
    user: ruser
    password: T0pS3cr3t
    timeout: 2
  }

  # Routes are actively solicited and connected to from this server.
  # This Docker image has none by default, but you can pass a
  # flag to the gnatsd docker image to create one to an existing server.
  routes = []
}
 

启动

 
docker-compose -f docker-compose.yaml up/restart/start/stop
 

Tags: nats
评论(22) 阅读(1319)

go实现Event事件模型修正

2021年6月03日 22:39

 

描述

 
之前文章中实现了event事件模型,实际使用中发现了几个问题
 
 
1. 并发会出现情况send先执行, 此时还没有waiter。将wait拆分成addWaiter和wait()
 
2. 不能使用缓冲通道。会出现send完成,wait还未收到的情况。
 

用法修正

 
e.Reset()
waiter := e.AddWaiter()
waiter := e.Wait(waiter, xxx)
e.Send(xxx)
 

事件实现

package common

import (
	"context"
	"errors"
	"go.uber.org/zap"
	"time"
)

var NOT_USED = struct{}{}

func NewEvent() *Event {
	e := &Event{
		log: zap.S(),
	}
	e.Reset()
	return e
}

type Event struct{
	//监听者
	waiters  []chan interface{}
	//结果
	result interface{}
	//上下文控制
	ctxBg 	context.Context
	ctxCancel context.CancelFunc
	//日志
	log *zap.SugaredLogger
}


func (e *Event) AddWaiter() *chan interface{}{
	//等待者
	resultChan := make(chan interface{}, 0)
	e.waiters = append(e.waiters, resultChan)
	return &resultChan
}

//等待结果
func (e *Event) Wait(waiter *chan interface{}, timeout time.Duration) (interface{}, error){
	if e.result ==NOT_USED{
		ctx, cancel := context.WithTimeout(e.ctxBg, time.Second*timeout)
		defer cancel()

		//等待
		select{
		case result := <- *waiter:
			return result, nil
		case <- ctx.Done():
			if ctx.Err() == context.Canceled{
				return nil, nil
			}
			return nil, errors.New("event wait timeout")
		}
		return nil, nil
	}else{
		return e.result, nil
	}
}

//发送结果
func (e *Event) Send(result interface{}) error{
	//防止发送多次
	if e.result !=NOT_USED{
		return errors.New("Event is used")
	}

	ctx, cancel := context.WithTimeout(e.ctxBg, time.Second*3)
	defer cancel()

	for _, resultChan := range e.waiters{
		select{
		case resultChan <- result:
		case <- ctx.Done():
			e.log.Warnf("Event.Send %p resultChan=%d, result=%v", e, len(resultChan), result)
		}
	}
    e.result = result
	return nil
}

//重置
func (e *Event) Reset(){
	if e.ctxBg !=nil{
		e.ctxCancel()
	}

	e.ctxBg, e.ctxCancel = context.WithCancel(context.Background())
	e.waiters = nil
	e.result = NOT_USED
}
 
 

评论(78) 阅读(1286)

rabbitmq辣眼睛的忙等

2021年5月28日 07:13

背景

 
用golang做了一个分布式结构的系统, 消息服务器用了rabbitmq。
 
整体是基于machinery+rabbitmq形式的分布式任务系统
 
在做压力测试时,发现rabbitmq的cpu使用率飙升
 
 

分析

 
* 官方给出的解释
 
scheduler采用了忙等,来提高消息传递性能
 
https://www.rabbitmq.com/runtime.html#cpu
 
其中也讲了一些方法来降低cpu使用率
 
* 官方建议
 
1. rabbtimq最好是装在单独的服务器,不与其它应用共用。
 
2. 也介绍了修改cpu使用个数的方法
 
* 对我而言
 
通信关cpu什么事,导致cpu飙升,就是不应该
 
* 站在传统语言java/python/...等语言角度
 
忙等好像也没啥
 
* 站在go的角度
 
忙等是上世纪的技术了。
 
看起来太辣眼睛。
 
* 从我的应用场景上来看
 
系统规模可大可小, 而且业务高峰时间很短
 
在系统规模小时,不大愿意单独给rabbitmq一台服务器
 
在业务高峰的这几分钟,正好会影响其它系统
 
* 是否有其它选择
 
nats
 
* 来源
 
 
[佛說大乘無量壽莊嚴清淨平等覺經pdf](http://doc.sxjy360.top/book/佛說大乘無量壽莊嚴清淨平等覺經(難字注音).pdf)
[净土大经科注2014-doc](http://doc.sxjy360.top/book/净土大经科注2014-doc.zip)
 

Tags: rabbitmq
评论(175) 阅读(1603)