测试环境全部使用 Docker 搭建!

前提

安装好 dockerdocker-compose 的环境,具体安装教程查看链接

下载镜像

  1. docker pull mongo:4.0.10 # mongoDB 镜像
  2. docker pull elastisearch:5.6.11 # elasticsearch 镜像
  3. docker pull mobz/elasticsearch-head:5 # elasticsearch-head 镜像

创建所需的文件和目录

  1. mkdir -p /root/softdata/elastisearch/config
  2. cd /root/softdata/elastisearch/config
  3. touch elastisearch.yml # elasricsearch 配置文件
  4. cd ..
  5. touch docker-compose.yaml # docker-compose 启动文件

编写 docker-compose 文件

  1. version: '3'
  2. networks:
  3. mongoes:
  4. services:
  5. # mongoDB 副本集节点 1
  6. mongo-rs1:
  7. image: mongo:4.0.10
  8. restart: always
  9. container_name: mongo-rs1
  10. working_dir: /data
  11. command: mongod --replSet repl --directoryperdb --smallfiles
  12. ports:
  13. - 27001:27017
  14. volumes:
  15. - /root/softdata/mongo/rs1/db/:/data/db/
  16. - /root/softdata/mongo/rs1/configdb/:/data/configdb/
  17. networks:
  18. - mongoes
  19. # mongoDB 副本集节点 2
  20. mongo-rs2:
  21. image: mongo:4.0.10
  22. restart: always
  23. container_name: mongo-rs2
  24. working_dir: /data
  25. command: mongod --replSet repl --directoryperdb --smallfiles
  26. ports:
  27. - 27002:27017
  28. volumes:
  29. - /root/softdata/mongo/rs2/db/:/data/db/
  30. - /root/softdata/mongo/rs2/configdb/:/data/configdb/
  31. networks:
  32. - mongoes
  33. elasticsearch:
  34. image: elasticsearch:5.6.11
  35. container_name: elasticsearch
  36. restart: always
  37. environment:
  38. - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
  39. ulimits:
  40. memlock:
  41. soft: -1
  42. hard: -1
  43. volumes:
  44. - /root/softdata/elasticsearch/data/:/usr/share/elasticsearch/data
  45. - /root/softdata/elasticsearch/logs/:/usr/share/elasticsearch/logs
  46. - /root/softdata/elasticsearch/plugins/:/usr/share/elasticsearch/plugins
  47. - /root/softdata/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  48. ports:
  49. - 27003:9200
  50. networks:
  51. - mongoes
  52. es-head:
  53. image: mobz/elasticsearch-head:5
  54. container_name: es-head
  55. restart: always
  56. ports:
  57. - 27004:9100
  58. networks:
  59. - mongoes

启动容器

  1. docker-compose up -d

配置 mongoDB 副本集

  1. docker exec -it mongo-rs1 bash
  2. mongo
  3. > rs.initiate( {
  4. _id: "repl",
  5. members : [
  6. {_id : 0, host : "mongo-rs1:27017" },
  7. {_id : 1, host : "mongo-rs2:27017" }
  8. ]
  9. }
  10. )
  11. repl:PRIMARY> rs.status() # 查看副本集状态

mongoDB写入测试数据

  1. repl:PRIMARY> use testdb
  2. repl:PRIMARY> db.createCollection("book")
  3. repl:PRIMARY> db.device.ensureIndex({createTime:1})
  4. repl:PRIMARY> var cnt = 0;
  5. repl:PRIMARY> for(var i=0; i<100; i++){
  6. var dl = [];
  7. for(var j=0; j<500; j++){
  8. dl.push({
  9. "bookId" : "BBK-" + i + "-" + j,
  10. "type" : "Revision",
  11. "version" : "IricSoneVB"+j,
  12. "title" : "这是一本书哦",
  13. "subCount" : 10,
  14. "location" : "北京市石景山区八角游乐园",
  15. "author" : {
  16. "name" : "dmego",
  17. "email" : "dmeago@gmail.com",
  18. "gender" : "female"
  19. },
  20. "createTime" : new Date()
  21. });
  22. }
  23. cnt += dl.length;
  24. db.book.insertMany(dl);
  25. print("insert ", cnt);
  26. }

执行 db.book.stats() 查看 book集合状态。

ElasticSearch创建索引

打开网址: http://<IP>:27004 ,使用 elasticsearch-hard 连接上 elasticsearch ,然后使用 复合查询 项创建索引

  1. PUT http://<IP>:27003/testdb
  2. {
  3. "aliases": {
  4. "index_book": {}
  5. },
  6. "settings": {
  7. "index": {
  8. "refresh_interval": "30s",
  9. "number_of_shards": "5",
  10. "number_of_replicas": "0"
  11. }
  12. },
  13. "mappings": {
  14. "book": {
  15. "properties": {
  16. "bookId": {
  17. "type": "string"
  18. },
  19. "type": {
  20. "type": "string"
  21. },
  22. "version": {
  23. "type": "string"
  24. },
  25. "title": {
  26. "type": "string",
  27. "store": "true",
  28. "analyzer": "ik_smart"
  29. },
  30. "location": {
  31. "type": "string",
  32. "store": "true",
  33. "analyzer": "ik_max_word"
  34. },
  35. "author": {
  36. "properties": {
  37. "name": {
  38. "type": "string"
  39. },
  40. "email": {
  41. "type": "string"
  42. },
  43. "gender": {
  44. "type": "string"
  45. }
  46. }
  47. },
  48. "createTime": {
  49. "type": "string"
  50. }
  51. }
  52. }
  53. }
  54. }

下载 Transporter 工具

  1. mkdir -p /root/softdata/transporter
  2. cd /root/softdata/transporter
  3. wget https://github.com/compose/transporter/releases/download/v0.5.2/transporter-0.5.2-linux-amd64
  4. mv transporter-0.5.2-linux-amd64 transporter
  5. cp transporter /usr/bin

同步 mongoDB 数据到 elasticsearch

首先先初始化出配置文件

  1. transporter init mongodb elasticsearch

执行上条语句之后,当前目录下会生成一个 pipeline.js 配置文件,打开编辑修改 mongoDBelasticsearchURL地址。

  1. var source = mongodb({
  2. "uri": "mongodb://127.0.0.1:27002/testdb" //mongodb 地址
  3. // "timeout": "30s",
  4. // "tail": false,
  5. // "ssl": false,
  6. // "cacerts": ["/path/to/cert.pem"],
  7. // "wc": 1,
  8. // "fsync": false,
  9. // "bulk": false,
  10. // "collection_filters": "{}",
  11. // "read_preference": "Primary"
  12. })
  13. var sink = elasticsearch({
  14. "uri": "http://127.0.0.1:27003/testdb" // elasticsearch 地址
  15. // "timeout": "10s", // defaults to 30s
  16. // "aws_access_key": "ABCDEF", // used for signing requests to AWS Elasticsearch service
  17. // "aws_access_secret": "ABCDEF" // used for signing requests to AWS Elasticsearch service
  18. // "parent_id": "elastic_parent" // defaults to "elastic_parent" parent identifier for Elasticsearch
  19. })
  20. t.Source("source", source, "/.*/").Save("sink", sink, "/.*/")

执行下面的命令进行数据同步

  1. transporter run

执行完成之后,可到 es-head 上查看是否同步成功。