阿里云k8s+log-pilot日志收集
阿里云k8s+log-pilot日志收集
部署Elasticsearch集群
登录阿里云Elasticsearch控制台。
在Elasticsearch实例页面的实例列表中,单击实例ID/名称链接。
单击左侧导航栏的ES集群配置,进入ES集群配置页面。在YML文件配置区域框右侧单击修改配置,弹出YAML文件配置页面。
自动创建索引设置为允许自动创建索引,选中该操作会重启实例,请确认后操作。然后单击确认。
需要开启自动创建索引功能,版本最好选择6.3 或者6.7版本。
测试Elasticsearch集群测试集群
1curl -XGET "http://name:passwd@es-cn-*******.public.elasticsearch.aliyuncs.com:9200/_cluster/health?pretty"
查看index
1curl 'name:passwd@es-cn-******.public.elasticsearch.aliyuncs.com:9200/_cat/indices?v'
部署Log- ...
Swagger介绍及使用
swagger是什么无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。
但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。
你只需要按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。
这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。
Openapi规范因为 Swagger 定义是基于 OpenAPI 规范的。
OpenAPI 规范(OAS)为 RESTful API 定义了一个与语言无关的标准接口,允许人和计算机发现和理解服务的功能,而无需通过访问源代码、文档或开发者工具。
OpenAPI 定义大致如下:
123456789101112 ...
解决x509:certificate signed by unknown authority证书验证问题
错误信息在go项目中发送https请求时,就会提示x509:certificate signed by unknown authority
原因我们在构建 docker 镜像时一般使用的是 linux(centos或者ubuntu等待) 系统,默认是不带 ca-certificates 根证书的,导致无法识别外部 https 携带的数字证书。
所以在我们项目中发送https请求时,就会提示x509:certificate signed by unknown authority
为了解决证书验证的问题,我们要在构建 docker 镜像的时候把 ca-certificates 根证书给装上,这样就能识别来自外部 https 的数字证书了。
12FROM alpine:3.8RUN apk --no-cache add ca-certificates
以utuntu基础镜像为例,apt-get是utuntu的下载命令在编辑 Dockerfile 的时候加入以下命令即可:
12RUN apt-get -qq update \ && apt-get -qq install ...
Elasticsearch数据迁移
公司测试的elasticsearch是直接在ECS上安装的,现在需要迁移服务器,准备通过docker安装一个elasticsearch,并将数据迁移过去。
查询资料,有多种迁移方式。
通过Oss快照
通过阿里云Logstash的管道配置功能实现
通过reindex方式
本文通过reindex方式,将旧数据迁移到新的es中。
Docker启动elasticsearch12345678910#!/bin/bashdocker stop elasticsearchdocker rm elasticsearchdocker run --name elasticsearch -d \ -p 9200:9200 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -v /data/services/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticse ...
Elasticsearch状态red解决
将公司的Elasticsearch的磁盘缩小了一些,节省点成本。但是操作完成后,发现status为red。参考了相关文章,终于解决了问题。现在将参考文章及解决方法分享如下。
这里说的red,是指es集群的状态,一共有三种,green、red、yellow。具体含义:
问题:ES集群Red集群节点是否都存在、查看集群状态。
1curl -XGET 'http://localhost:9200/_cluster/health?pretty'
响应
1234567891011121314151617{ "cluster_name" : "es_idc", "status" : "red", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 10 ...
Docker容器内用户与宿主机用户不匹配问题
打包了一个lnmp包,里面包含了Nginx和php服务。设置nginx和php用户为www-data,同时将代码挂载到容器下。使用时,发现代码基本能正常运行,但生成缓存及图片上传时,都提示文件夹权限错误。因为使用Thinkphp,框架运行时会生成缓存文件,图片上传时也需要生成存放路径。
总结来说,容器中php能够读取代码,但是写的权限不够。这很奇怪。
而且在不同服务器,表现不同。有一台服务器能够运行,另外一个却出现这个问题。
进入容器中查看,php和nginx中配置运行用户都是www-data,理论上应该是没有问题的。搜索了相关问题,仔细研究,才发现了问题所在。
发现问题代码目录,所属用户www-data,同时设置php配置文件中用户使用www-data
正常时候能够运行,但是生成的runtime缓存文件,用户却不是www-data
缓存文件的所属用户为33,而用户组都是tape,为啥会是这样的。
产生原因产生上述问题的根源是,容器中用户和宿主机用户ID不同。
宿主机用户的ID查看宿主机用户www-data的id,可以看到所属用户及组
1id www-data
为uid=1000 ...
阿里云远程连接mysql失败
在阿里云的服务器上使用docker安装了MySQL, 然后远程访问总是不通。 查询了很久,排查思路如下:
检查mysql是否启动,服务是否正常
检查本机3306端口是否处于监听状态
检查阿里云控制台是否开启了安全限制, 限制3306和23端口
检查mysql用户能否在远程进行登录
mysql 的 bind-address 设置为 127.0.0.1
mysql是否启动这个比较简单, ps -ef | grep mysql 如果能看到对应的进程就是没有问题的
如果使用docker安装,需要docker ps 查看对应的状态
检查本机3306端口是否处于监听状态可以通过netstat -tlanp | grep 3306 来看mysql是否在监听。
主要如果使用docker安装,要查看docker 3306端口所对应开发是否是指定IP,还是0.0.0.0
如果本地端口监听状态 telnet 127.0.0.1 3306 看看是否成功, 如果成功。则说明本地服务没有问题。
远程 telnet 公网ip 3306 则 在远程 telnet 公网ip 3306 来判断一下是否成功, 如果成 ...
Docker安装mysql8及远程链接
Docker安装1docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.23
docker mysql官方文档
不过我们一般讲mysql的数据文件挂载在容器外,这样重启容器不会数据。
对应脚本docker_run.sh
123456789#!/bin/bashdocker stop mysql8docker rm mysql8docker run --name mysql8 \ -p 3306:3306 \ -v /docker/services/mysql8/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456\ -d mysql:8.0.23
也可以使用docker-compose安装
123456789101112131415version: '3.1'services: db: image: mysql:8.0.23 volumes: ...
使用podman代替docker管理容器
最近新装了Centos8,运行docker时,发现服务器有提示使用Podman。
后来了解才发现 CentOS8 使用 Podman 作为默认的容器管理工具了。相比docker,具有不少新的优势。
查询了相关文档,了解到,Podman(Pod Manager)是一个功能齐全的容器引擎,它是一个简单的无守护工具。 Podman提供了一个类似Docker-CLI的命令行,可以简化从其他容器引擎的转换,并允许管理pod,容器和图像。
Podman 的用法几乎和原来的 docker 一样,命令基本都一样。下面就看看 Podman 怎样来管理容器吧。
相比Docker优势 podman 相对与 docker 来说,最明显的变化是 podman 不需要启动一个后台服务,可以直接运行了,并且可以使用普通用户来运行。
123456789podman imagespodman run -d -p 8000:80 nginxpodman ps podman inspect nginx //获取容器元数据 podman inspect nginx | grep IPAddress //显示容器的内部ip
...
ElasticSearch应用
公司服务器最新经常提示ElasticSearch占用cpu太高,查询相关文档,加深了了解。
介绍全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选。
它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
Elastic 是 Lucene 的封装,提供了 REST API 的操作接口。
使用Elastic 需要 Java 8 环境。也可以使用docker安装。
1docker run -p 9200:9200 -d --name elasticsearch elasticsearch
其默认使用9200端口。打开另一个命令行窗口,请求该端口,会得到说明信息。
123456789101112131415$ curl localhost:9200{ "name" : "atntrTf", "cluster_name" : "elasticsearch", "cluster_ ...