Docker安装5.7版mysql服务
公司mysql使用的是5.6版本,不支持json,因此需要升级服务,使用传统方式在服务器上安装mysql服务十分复杂。
相比较,使用docker安装就非常简单、便捷。而且可以很容易切换版本。通过文件挂载方式,也可以将数据文件挂载在服务器上,再次迁移,升级也十分方便。
而且docker中,有5.7,5.8等多种版本可供选择。
安装可以在docker官方仓库中查看镜像,寻找适合的mysql版本
启动脚本
创建run.sh内容如下
12345678#!/bin/bashdocker run --name mysql-5.7.25 \ -p 3306:3306 \ -v /data/services/mysql/data:/var/lib/mysql \ -v /data/services/mysql/conf:/etc/mysql/ \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -d mysql:5.7.25
将数据库文件及配置文件挂载在服务器上,这样可以防止docker容器删除后, ...
误删K8s管理SLB导致阿里云web管理页面无法使用
今天使用阿里云k8s管理Web页面,突然出现了错误提示The request has failed due to a temporary failure of the server。
阿里云的管理页面一直显示异常,服务无法查看,节点数无显示。无法查看应用,应用配置等。
一直提示如下错误。
123456集群k8s-pro,无法查看应用,无节点显示。提示信息如下:由于短暂异常,服务暂时不可用,请稍后重试错误详情:ServiceUnavailableThe request has failed due to a temporary failure of the server.
排查提交阿里云工单时,工作人员排查,发送k8s的管理端口6443监听异常,无法连接。
12您好,您那边释放的这个SLB 是集群apiserver 的SLB , apiserver 是集群核心通信使用的。 这个释放了,相关数据通道无法连接上。确实无法恢复。 我们已经和研发反复沟通了这个问题。 确实没办法恢复。很抱歉。
开始时,客服说无法恢复,差点急死。
排查,最终定位到,是应用创建服务,选择负载均衡时,选择了k8s的 ...
go使用Makefile构建
原由在 Golang 的开发过程中,我们习惯于不断重复地手动执行 go build 和 go test 这两个命令。但是在一些复杂的任务中,如果依旧是手动执行 go build 和 go test ,就可能会成为一个让人头疼的事情。
我们可以通过其他方式解决这个问题。比如,可以用一个 bash 脚本来完成这些工作。但更好的选择是,写一个 makefile.。make 这个工具生来就是为了做这些事情,在 makefile 中我们可以将所有常见的任务都放在一起。
这样能够将makefile文件放在git记录中,方便多人协作和共享。毕竟大型项目有很多依赖关系,build或者测试更加复杂。
平常很多时候都是直接在命令行输入go build进行编译的
1go build .
或者测试使用go run运行项目
1go run main.go
大型开源项目都是如下方式
123make buildmake install
我们打包运行这个过程,还有一个更加贴切的词语叫做构建项目。
Makefile介绍Makefile 是和 make 命令一起配合使用的。它是开源的构建工具,很多大型项目的编译都是 ...
系统时间错误导致https请求失败
今天发现一个奇特的问题。设备请求接口失败,但是在本地模拟接口请求时,是正常的。仔细排查设备请求日志,发现设备的时间设置是12月25日,与当前时间12月31日。然后修改本地时间,再模拟,果然失效。
仔细看,接口是使用https请求,换成http请求后,能正常访问。使用https请求时,会返回如下错误。
1234567891011121314curl: (60) SSL certificate problem: certificate is not yet validMore details here: https://curl.haxx.se/docs/sslcerts.htmlcurl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). If the default bundle file isn't adequate, you can specify an alter ...
go test命令使用
单元测试单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般要根据实际情况去判定其具体含义,如 C语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。
单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
Go testGo语言拥有一套单元测试和性能测试系统,仅需要添加很少的代码就可以快速测试一段需求代码。
自带了测试框架和工具,在testing包中,以便完成单元测试(T类型)和性能测试(B类型)。
使用go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件。输出的信息类似
123ok archive/tar 0.011sFAIL archive/zip 0.022sok compress/gzip 0.033s
同时,性能测试系统可以给出代码的性能数据,帮助测试者分析性能问题。
单元测试,需要准备一个 go 源码文件,在命名文件 ...
golang中time包使用
时间类型在编码中,经常会涉及到时间的转换,对于time的使用,一直比较模糊,现在做一下整理。
首先,了解时间的两种类型。时间可分为时间点与时间段,golang 提供了以下两种基础类型
时间点(Time)
时间段(Duration)
除此之外 golang 也提供了以下类型,做一些特定的业务
时区(Location)
Ticker
Timer(定时器)
时间点(Time)时间相关的业务都是基于点而延伸的,两点组成一个时间段,大多数应用也都是围绕这些点与面去做逻辑处理。
时间初始化Go 针对不同的参数类型提供了以下初始化的方式
1234567891011121314151617181920212223//2019-12-13 10:42:09.364687 +0800 CST m=+0.003140465fmt.Println(time.Now())//2010-04-23 12:24:51 +0000 UTCs, _ := time.Parse("2006-01-02 15:04:05", "2010-04-23 12:24:51")fm ...
Docker多重构建实现自动化构建
前言自动化构建是应用发布过程中必不可少的环节, 常用的构建工具有jenkins ,walle 等。而这些工具在构建应用时通常会有以下问题:
需要直接或间接的写一坨用于构建的shell命令等,不易管理、兼容性较差
上面一点可能还比较容易解决,但最为致命的是:重度依赖如jenkins宿主机或打包机上的软件环境,如git, maven,java等
理想情况是: 不同的应用如java应用、go应用、php应用等等,都可以在某台负责构建的宿主机上并行无干扰的执行构建操作,且构建中依赖的软件环境、构建流程等都可以由开发人员控制。
到目前为止,能很好的完成以上使命的,可能非docker莫属了!
在docker的世界里,构建交付的是镜像,而能够产生镜像的是Dockerfile (手动使用docker commit 的另当别论).
在docker ce 17.05 之后,出现了一个很重要的特性Multi-Stage Build (多阶段构建) , 它将显著提升你的运维生产力!
下文将用实战案例来详细解读Multi-Stage Build这一特性
在Multi-Stage Build之前以下演 ...
Go提示错误first path segment in URL cannot contain colon
今天使用Go做HTTP POST请求时,出现错误,提示first path segment in URL cannot contain colon。意思为URL中的第一个路径段不能包含冒号。
排查问题,发现Url实际上包含空格,才导致出现这样的错误。为防止出现,需要对url进行过滤处理。
示例代码如下:
12345678910111213141516func SyncDo(host string, mdId, openId string) (string, error) { form := url.Values{ "mdId": {mdId}, "openId": {openId}, } resp, err := http.PostForm(host, form) if err != nil { logs.Info("http.PostForm err=%s, host=%q, form=%v", err, host, form) ...
Elasticsearch + Fluentd + Kibana搭建Docker日志管理系统
随着Docker容器广泛应用,不同的容器都会产生日志。对大规模运行的容器集群来说,日志不能统一管理是很耗费精力的。大量的微服务,各个容器服务是有相互调用的,这时候发现问题时,通过日志排查问题,需要查看对应各个容器的日志。如果没有一个统一的日志管理工具,没有可视化Web查看,是很痛苦的,而且不方便快速定位问题。
为了统一日志管理,现在有了Fluentd,但日志的检索,查看就依赖于其他工具了。这里我们使用Elasticsearch + Fluentd + Kibana搭建Docker日志管理系统。这3个系统又简称EFK。
Elasticsearch是一个以易用性着称的开源搜索引擎。
Fluentd是一个日志管理工具。
Kibana是一个开源的Web UI,使Elasticsearch对工程师和数据科学家都很友好。
通过这3个系统,我们使用Docker compose搭建我们的日志系统。
搭建服务准备docker-compse.yml文件
12345678910111213141516171819202122232425version: '2's ...
Docker日志管理工具Fluentd及elasticsearch插件
随着Docker容器广泛应用,对大规模运行的容器集群来说,日志不能集中管理是一件很痛苦的事情。不能合理的收集,管理检索应用日志,在应用发生了故障的时候将无法很好的追溯问题发生的原因。
通常我们会将docker日志挂载到宿主机目录,但是查看时十分不方便。如果用flunted统一管理日志,可以方便做统一管理。基于Elasticsearch+Fluentd+Kibana,可以方便的搭建日志分析平台,通过Kibana面板,可以在浏览器上方便查看。
启动Fluentd12345docker run -d \-p 24224:24224 -p 24224:24224/udp \-v /data/logs/fluented:/fluentd/log \fluent/fluentd:v1.3
将log挂载在宿主机的/data/logs/fluented, 注意对应的权限
此时会在宿主机目录下生成data.<fluentd容器id>.log,所有收集到的日志文件将存储至此。
测试启动一个测试容器,写入日志。这里我们使用nginx服务。
12345678# docker run -d \ ...