普通视图

发现新文章,点击刷新页面。
昨天以前Xiaoi's Blog

搭建 Elasticsearch 单节点以及简单的使用教程

2019年11月12日 00:00

Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。

官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。


搭建 Elasticsearch 单节点以及简单的使用教程

接下来介绍如何本地搭建一个单节点的 Elasticsearch 服务器以及进行一些增删改查的简单操作。

安装 Elasticsearch

  • 第一步:所需要的软件环境:最新稳定版 Java,若使用 docker 方式则不必安装 Java;
  • 第二步:下载最新版 Elasticsearch
  • 第三步:解压下载的 Elasticsearch,建议位置选择一个用于存放数据的目录,磁盘剩余空间尽量留大一点;
  • 第四步:运行 Elasticsearch,Linux 或者 macOS 运行 bin/Elasticsearch,Windows 运行 bin\Elasticsearch.bat;
  • 第五步:使用命令 curl -X GET http://localhost:9200/ 检查运行状态,或者直接复制链接到浏览器中打开也可以, 正常情况下会显示以下类似的内容:
    {
      "name" : "DESKTOP-FHFP51P",
      "cluster_name" : "Elasticsearch",
      "cluster_uuid" : "lAdgnvl8TrmSrzRn321AKw",
      "version" : {
     "number" : "7.4.2",
     "build_flavor" : "default",
     "build_type" : "zip",
     "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
     "build_date" : "2019-10-28T20:40:44.881551Z",
     "build_snapshot" : false,
     "lucene_version" : "8.2.0",
     "minimum_wire_compatibility_version" : "6.8.0",
     "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }
    

使用 Elasticsearch 进行简单的操作

添加数据

curl -XPOST 'http://localhost:9200/twitter/_doc/?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "kimchy",
    "post_date": "2009-11-15T13:12:00",
    "message": "Trying out Elasticsearch, so far so good?"
}'

查找数据

curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -H 'Content-Type: application/json' -d '
{
    "query" : {
        "match_all" : {}
    }
}'

修改数据

curl -XPUT 'http://localhost:9200/twitter/_doc/{ID}?pretty' -H 'Content-Type: application/json' -d '
{
    "user": "kimchy",
    "post_date": "2009-11-15T13:12:00",
    "message": "Trying out Elasticsearch, so far so good?"
}'

删除数据(不建议直接删除)

curl -XDELETE 'http://localhost:9200/twitter/_doc/{ID}?pretty''

注意:上文中的{ID}为变量,具体要操作哪条数据应当传入数据的实际 ID

Elasticsearch 性能测试

经过上文的教程,我们对 Elasticsearch 有了初步的了解以及学会了如何使用基本的操作,接下来我们测一下单节点的性能。

首先我们主要使用的是 ab 命令(Apache-Bench)进行压力测试,命令如下

ab -n100000 -c10 -p ./postfile.ab -T 'application/json' http://localhost:9200/twitter/_doc/?pretty=true

其中,postfile.ab 为我们需要发送给 Elasticsearch 的模拟数据,数据内容参考如下

{
    "user": "kimchy",
    "post_date": "2009-11-15T13:12:00",
    "message": "Trying out Elasticsearch, so far so good?"
}

并发 10TPS 请求 10 万次

测试报告如下

This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:
Server Hostname:        localhost
Server Port:            9200

Document Path:          /twitter/_doc/?pretty=true
Document Length:        243 bytes

Concurrency Level:      10
Time taken for tests:   28.107 seconds
Complete requests:      10000
Failed requests:        5557
   (Connect: 0, Receive: 0, Length: 5557, Exceptions: 0)
Total transferred:      3815557 bytes
Total body sent:        2860000
HTML transferred:       2435557 bytes
Requests per second:    355.79 [#/sec] (mean)
Time per request:       28.107 [ms] (mean)
Time per request:       2.811 [ms] (mean, across all concurrent requests)
Transfer rate:          132.57 [Kbytes/sec] received
                        99.37 kb/s sent
                        231.94 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    6   6.5      5     170
Processing:     6   21  19.5     17     529
Waiting:        4   17  17.4     13     527
Total:         11   28  21.7     23     534

Percentage of the requests served within a certain time (ms)
  50%     23
  66%     26
  75%     29
  80%     31
  90%     41
  95%     53
  98%     79
  99%    112
 100%    534 (longest request)

通过 ab 的测试报告可以看出,单节点的 Elasticsearch 性能非常强悍,达到了 355.79 / 秒处理量,另外通过观测 JVM 的系统资源使用,也是比较低的水平。 搭建 Elasticsearch 单节点以及简单的使用教程

并发 400TPS 请求 10 万次

接下来我们进行更高的并发测试

This is ApacheBench, Version 2.3 <$Revision: 1807734 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 10000 requests
Completed 20000 requests
Completed 30000 requests
Completed 40000 requests
Completed 50000 requests
Completed 60000 requests
Completed 70000 requests
Completed 80000 requests
Completed 90000 requests
Completed 100000 requests
Finished 100000 requests


Server Software:
Server Hostname:        localhost
Server Port:            9200

Document Path:          /twitter/_doc/?pretty=true
Document Length:        245 bytes

Concurrency Level:      400
Time taken for tests:   209.947 seconds
Complete requests:      100000
Failed requests:        0
Total transferred:      38300000 bytes
Total body sent:        28600000
HTML transferred:       24500000 bytes
Requests per second:    476.31 [#/sec] (mean)
Time per request:       839.787 [ms] (mean)
Time per request:       2.099 [ms] (mean, across all concurrent requests)
Transfer rate:          178.15 [Kbytes/sec] received
                        133.03 kb/s sent
                        311.18 kb/s total

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       87  392 214.7    345    3133
Processing:    26  445 216.2    397    3697
Waiting:       25  300 188.6    265    2722
Total:        443  838 380.2    746    6498

Percentage of the requests served within a certain time (ms)
  50%    746
  66%    822
  75%    884
  80%    951
  90%   1074
  95%   1314
  98%   1637
  99%   2002
 100%   6498 (longest request)

可以看出,并发量达到了 476.31 / 秒,JVM 的资源使用情况也没有发生大幅提升的情况,可以说是非常的稳定。 搭建 Elasticsearch 单节点以及简单的使用教程

总结

Elasticsearch 单节点的性能已经非常强悍了,并且支持分布式提升更大的性能扩容,可以说是完全满足日常的需求已经高并发的需求。 另外我们可以将系统日志、网络日志、应用日志、业务日志等易产生大量数据的接入 Elasticsearch 进行统一的管理,这样既保证效率,也避免了日志分散、数量大无法维护等带来问题。

参考文献

版权

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
原创作者:10086@xiaoi.me 发表于 Xiaoi’s Blog:https://blog.xiaoi.me
原文链接:https://blog.xiaoi.me/2019/11/12/elastic-search-get-start

扫码关注我,在线与我沟通、咨询 Xiaoi's Blog

转载请保留原文链接以及版权信息

使用 docker 运行 frp 服务端,并且上传到 docker hub 在线仓库

2019年10月23日 10:23

最近在使用 frp 内网穿透服务,运行了一段时间,发现 frp 挺稳定的,突发奇想,之前学习了一下 docker 的使用,何不把 frp 打包成 docker 镜像,这样在任意服务器上就能快速开启 frp 服务了,于是折腾了一下午总算是搞定了。

如果不想自己配置,可以使用 docker run -p 7000:7000 xiaoi/frp_for_docker:0.27.0 命令直接运行已经打包好的镜像。若要修改配置,覆盖镜像中的 /app/frps.ini 配置文件即可。

操作步骤

下载和配置 frp

首先我们需要下载一个 frp 服务端程序,可以在 github.com 上下载到最新发布的版本,这里下载 frp_0.27.0_linux_386.tar.gz 版本作为演示。

下载好了之后解压得到相关的应用程序和配置文件,我们只需要保留 frps 和 frps.ini 即可。若有需要可以在 frps.ini 进行自定义配置。 image

Dockerfile 编写

接下来我们编写 Dockerfile 文件,由于 frp 使用 golang 开发,发布的版本可以直接在 alpine 环境下运行,于是我们的工作变得非常简单,按照如下的代码编写即可

FROM alpine:latest

WORKDIR /app

COPY . /app

EXPOSE 7000

CMD ["./start.sh"]

由于我在 frps.ini 中配置的 7000 端口,这里 EXPOSE 也设置 7000 端口保持一致。

CMD 这里填写 "./start.sh"方便启动,start.sh 内容如下

#!/bin/sh
./frps -c ./frps.ini

docker 命令打包镜像

编写好 Dockerfile 和启动脚本之后,我们就可以使用 docker 命令打包了

docker build --tag=frp_for_docker .

打包好了之后使用 docker image ls 查看打包好的镜像 image

运行和检查镜像

使用 docker run -p 7000:7000 frp_for_docker 运行我们打包好的镜像,出现 success 等字样信息表明运行成功 image

上传镜像至在线仓库

如果想要在任意地方都能运行我们打包好的镜像,则需要上传镜像至 hub.docker.com 在线仓库,上传之前需要 注册 docker 账号

注册好了之后回到控制台运行 docker login 然后输入账号密码登录

然后将我们的镜像改名,格式为 用户名/镜像名:版本号 ,例如我的用户名为 xiaoi,镜像名我定义为 frp_for_docker ,版本号我这里按照 frp 版本号来定义,其中除了用户名不能自定义,镜像名和版本号都是可以任意命名,使用如下命令将本地镜像改名。

docker tag frp_by_docker xiaoi/frp_by_docker:0.27.0

改好之后使用 docker push 命令上传至在线仓库

docker push xiaoi/frp_for_docker:0.27.0

上传完成之后我们就可以在 hub.docker.com 在线仓库中查看我们的镜像了 image

在别处直接运行在线仓库中的镜像

在有 docker 环境的服务器或者个人电脑上使用 docker run 命令就可以运行在线仓库中的镜像,例如运行我们上传的镜像

docker run -p 7000:7000 xiaoi/frp_for_docker:0.27.0

运行命令之后,接下来的这一切都是自动化完成的,无需我们再做任何操作 image

总结

  • 使用 docker 我们可以很容易的将一个应用程序分发到各个地方运行,便于后期的维护和管理,同时也不用担心跨平台的问题产生;
  • 程序所依赖的环境我们也可以通过编写 Dockerfile 来解决,不必再为各个环境依赖重复安装运行环境,这样极大的减轻来工作量;
  • docker 能运行的程序远不于此,我们可以将所熟悉的一切软件都使用 docker 来运行和管理;

版权

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

原创作者 10086@xiaoi.me 发表于阿里云·云栖社区:https://yq.aliyun.com/users/y4epujtm5wye6

扫码关注我,在线与我沟通、咨询 image

转载请保留原文链接以及版权信息

欢迎使用 Frp 内网穿透服务

2019年10月22日 16:03

近期收到部分群友反馈,ngrok 服务偶尔会出现无法连接、访问缓慢、客户端闪退等情况,群主决定研究一下如何搭建 frp 服务,经过一下午的时间,总算搭建好了 frp 服务,现在将 frp 服务公开给群友供大家使用。

目前客户端只打包了 windows,其他操作系统的群友可以在 frp 官方下载对应的客户端,目前服务端使用的 0.27.0 版本,客户端尽量使用相同版本:https://github.com/fatedier/frp/releases/tag/v0.27.0

windows 客户端下载地址:https://img.xiaoi.me/pms-upload/20190605/15a82187-d4b8-e1f9-371b-5113463b57f0.zip

另外,服务器提供了更多“黑科技”服务,欢迎大家的使用和咨询。

若对群主提供的服务满意,还请捐赠支持一下:https://tb.4kb.cn

Docker 容器化服务笔记

2019年10月22日 09:14

容器化服务笔记

安装和启用 docker

> yum install docker

> systemctl enable docker.service

> systemctl start docker.service

1、运行时时区设置问题:

FROM openjdk:8-jdk-alpine

RUN apk add --no-cache tzdata

ENV TZ Asia/Shanghai



RUN date -R

运行时字体加载失败:NPE at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

RUN apk add --no-cache fontconfig

2、进入容器执行 bash 命令

container id 不用输全

docker exec -t -i {container id} /bin/bash

查询日志

docker logs 9573ada

服务的方式 docker 运行 nginx

sudo docker run --name my-nginx -p 80:80 -v /Users/stevenkang-mac/docker-nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

打包镜像命令

mvn clean package docker:build -D maven.test.skip=true

打包并上传镜像

mvn clean package docker:build -DpushImage -D maven.test.skip=true

docker-maven-plugin 无法推送时,清除 ~/.docker/config.json 中的 autos 配置信息后重拾

Failed to push registry

MySQL 容器化运行

 > docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

 > docker run --rm --name mysql -v /var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pwd -p 3306:3306 -d mysql:5.7

 > docker run --rm --name mysql -v /var/lib/mysql:/var/lib/mysql -p 3306:3306 -d mysql:5.6

 > sudo docker run --rm --name mysql -v /Users/stevenkang-mac/mysql:/var/lib/mysql -p 3306:3306 -m 256m --memory-swap=512m -d mysql:5.6

Spring Config Server 容器化运行

 > docker run —rm --name config-server -p 192.168.1.145:8888:8888 -v /etc/spring/config_server-application.yml:/application.yml -d springcloud/configserver

Redis 容器化运行

 > docker run --name redis -d redis:4-alpine

 > docker run --name redis -p 6379:6379 -d --rm redis --requirepass "password"

Nginx 容器化运行

 > docker run --name my-nginx -v /etc/nginx.conf:/etc/nginx/nginx.conf:ro -v /etc/nginx:/v-nginx -p 80:80 -p 443:443 --rm -d nginx

编译 kms 服务:Dockerfile


FROM alpine:latest



RUN echo 'https://mirrors.aliyun.com/alpine/latest-stable/main/' > /etc/apk/repositories \

    && echo 'https://mirrors.aliyun.com/alpine/latest-stable/community/' >> /etc/apk/repositories \

    && apk update \

    && apk upgrade \

    && apk add --no-cache build-base gcc abuild binutils cmake git \

    && cd / \

    && git clone https://github.com/Wind4/vlmcsd.git vlmgit \

    && cd vlmgit \

    && make \

    && chmod +x bin/vlmcsd \

    && mv bin/vlmcsd / \

    && cd / \

    && apk del build-base gcc abuild binutils cmake git \

    && rm -rf /vlmgit  \

    && rm -rf /var/cache/apk/*



EXPOSE 1688



CMD ["/vlmcsd", "-D", "-d", "-t", "3", "-e", "-v"]

阿里云日志服务


> docker pull registry.cn-hangzhou.aliyuncs.com/log-service/logtail

> docker run -d -v /:/logtail_host:ro -v /var/run/docker.sock:/var/run/docker.sock --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/cn-hangzhou/ilogtail_config.json --env ALIYUN_LOGTAIL_USER_ID=1553473*******38 --env ALIYUN_LOGTAIL_USER_DEFINED_ID=userdefined registry.cn-hangzhou.aliyuncs.com/log-service/logtail 

参考文献

Docker 官方使用指南

Github: docker-nginx issues #92

Docker 官方镜像之 Nginx

Docker 官方镜像之 MySQL

A Maven plugin for building and pushing Docker images.

❌
❌