Apache Druid集群搭建

一.服务器及规划

    我的集群是三台服务器,每台安装的软件及服务如下:

 

我集群的每个软件的具体的版本是: 

   apache-druid-0.17.0-bin.tar.gz
   hadoop-2.8.3.tar.gz
   jdk-8u171-linux-x64.tar.gz
   kafka_2.12-2.1.0.tgz
   mysql-5.7.11-linux-glibc2.5-x86_642.tar.gz
   zookeeper-3.4.14.tar.gz

其中:

  1.1. java的版本是必须是1.8以上,并且;以上软件请自行准备,版本请自行选择,不要太老即可;

  1.2.所有的软件压缩包我都放在 /home/apps/下;

  1.3. 提前关闭防火墙,提前关闭防火墙,提前关闭防火墙;

       systemctl stop firewalld.service || chkconfig iptables off || service iptables stop

二.安装软件及相关的配置

  2.1  修改每台服务的hostname  (三台服务器都需要)

         主要是方便后面的管理和配置,红色部分就是需要添加的:

       

   2.2 jdk的安装    (三台服务器都需要)

   (1)看下当前的服务器有无安装jdk,如果有且符合要求可以不用安装;

               java -version

    (2)如果当前的服务器没有安装过jdk,请安装:

               tar -zxvf jdk-8u201-linux-x64.tar.gz

       (3)  配置环境变量

               vim /etc/profile   在最后一行

          export JAVA_HOME=/apps/jdk1.8

          export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

           export PATH=$PATH:$JAVA_HOME/bin

     (4) 使环境生效:source /etc/profile

  2.3 mysql的安装,这里我个人选择用mysql存储元数据:(一台安装mysql即可,我是安装在mysql)

       关于mysql的安装请自行解决,以下是官网的配置:

  -- create a druid database, make sure to use utf8mb4 as encoding

      CREATE DATABASE druid DEFAULT CHARACTER SET utf8mb4;

  -- create a druid user

      CREATE USER 'druid'@'localhost' IDENTIFIED BY 'diurd';

  -- grant the user all the permissions on the database we just created

       GRANT ALL PRIVILEGES ON druid.* TO 'druid'@'localhost';

    注意:这里如果使用的是MySQL数据库,可能因为版本不同,设置编码时会有问题,官方文档为CREATE DATABASE druid DEFAULT CHARACTER SET utf8mb4;,后面发下会报如下错误:

Caused by: org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: java.sql.BatchUpdateException: Specified key was too long; max key length is 767 bytes [statement:"null", located:"null", rewritten:"null", arguments:null]
	at org.skife.jdbi.v2.Batch.execute(Batch.java:131) ~[jdbi-2.63.1.jar:2.63.1]
	at org.apache.druid.metadata.SQLMetadataConnector$2.withHandle(SQLMetadataConnector.java:189) ~[druid-server-0.15.0-incubating.jar:0.15.0-incubating]
	at org.apache.druid.metadata.SQLMetadataConnector$2.withHandle(SQLMetadataConnector.java:179) ~[druid-server-0.15.0-incubating.jar:0.15.0-incubating]
	at org.skife.jdbi.v2.DBI.withHandle(DBI.java:281) ~[jdbi-2.63.1.jar:2.63.1]
	... 15 more

     因此创建元数据库时,最好设置为utf8_general_ci编码。

     2.4 zoookeeper的安装(三台,每台的配置不一样)

         (1)解压,tar -zxvf  zookeeper-3.4.14.tar.gz

         (2)修改下文件名: mv  zookeeper-3.4.14.tar.gz   zookeeper

           (3)  修改配置文件 :vim /home/apps/zookeeper/conf/zoo.cfg (如果没有此文件,请把zoo_sample.cfg复制一份,命名为zoo.cfg)     

            

 

   (4)   上图红色部分是需要修改的: 

   (5)    ①在/zookeeper/下创建data目录,

                 ②在data下创建 /log/目录;

                 ③在其他的两台服务器上也执行上面的操作;

                 ④在data下创建myid文件,其中的内容是 zoo.cfg中最下面的“server.1”中的1(master对应的是1);集群第2台服务器必须是2,集群第3台服务器必须是3:即

 

上述配置完后,可以启动集群了,启动集群前必须关闭防火墙,常用的命令是:

a. 启动ZK服务:       sh bin/zkServer.sh start

b. 查看ZK服务状态: sh bin/zkServer.sh status

c. 停止ZK服务:       sh bin/zkServer.sh stop

d. 重启ZK服务:       sh bin/zkServer.sh restart

 

2.5 kafka的安装配置三台(每台的配置不一样)

         (1)解压,tar -zxvf  kafka_2.12-2.1.0.tgz

         (2)修改下文件名: mv  kafka_2.12-2.1.0.tgz   kafka

           (3)  修改配置文件 :vim /home/apps/kafka/config/server.properties    

     

    

    

     (4) 在以上配置的基础上,其余的两台服务器需要修改的地方有: 

            broker.id=1 (主机是1,其余两台集群的是2和 3)

           listeners=PLAINTEXT://192.168.3.41:9092(当前机器的ip)

     (5)   启动 kafka

           cd /home/apps/kafka

           nohup bin/kafka-server-start.sh config/server.properties > /home/apps/kafka/kafka.log &

     (6)  停止kafka

          bin/kafka-server-stop.sh

2.6 hadoopka的安装配置三台(每台的配置不一样)

          (1)解压,tar -zxvf  hadoop-2.8.3.tar.gz

         (2)修改下文件名: mv  hadoop-2.8.3.tar.gz   hadoop

           (3)  修改配置文件 cd    /home/apps/hadoop/etc/hadoop/,这里需要修改5个文件,具体是

core-site.xml、hadoop-env.s、hdfs-site.xml、mapred-site.xml、yarn-site.xml

              ① vim core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://query:9000</value>
        </property>
        <!-- hadoop.tmp.dir 是 hadoop文件系统依赖的基本配置 
                     默认的配置每次启动服务器都会被清空,这里要重新配置 如果没有目录 自己新建一下-->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/apps/hadoop/data/tmp</value>
        </property>

</configuration>

              ② vim hadoop-env.sh

# The java implementation to use.
export JAVA_HOME=export JAVA_HOME=/home/jdk1.8

              ③vim hdfs-site.xml

<configuration>
        <!-- 文件备份数 -->
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.http.address</name>
                <value>query:50070</value>
        </property>
        <!-- 配置SecondaryNamenode -->
        <property>
                <name>dfs.secondary.http.address</name>
                <value>data:50090</value>
        </property>
        <property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
</configuration>

              ④vim mapred-site.xml

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

              ⑤vim yarn-site.xml

<configuration>

        <!-- reducer获取数据的方式 -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定YARN的老大(ResourceManager)的地址 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>

</configuration>

         (4)在其余两台服务器上也进行上面的配置修改;

         (5)创建 data目录(只在master)

                  mkdir  data

         (6)执行格式化文件系统命令(只在master)

                  hadoop namenode -format

          (7)启动和关闭Hadoop集群(只在master)

                  cd  /home/apps/hadoop/

                   启动在 master服务器上    sbin/start-all.sh

                   关闭 master 服务器上      sbin/stop-all.sh

     三.druid的安装及配置

             3.1  配置druid的公共配置文件

        (1) 修改文件  vim /home/apps/druid/conf/druid/cluster/_common/common.runtime.properties

#druid.extensions.loadList=["mysql-metadata-storage","druid-hdfs-storage", "druid-kafka-indexing-service", "druid-datasketches"]
druid.extensions.loadList=["druid-histogram", "druid-datasketches", "druid-lookups-cached-global", "mysql-metadata-storage", "druid-kafka-indexing-service", "druid-hdfs-storage"]

# Hostname
druid.host=192.168.3.41
# Log all runtime properties on startup. Disable to avoid logging properties on startup:
druid.startup.logging.logProperties=true

# Zookeeper
#druid.zk.service.host=localhost
#druid.zk.paths.base=/druid

druid.zk.service.host=master:2181,query:2181,data:2181
druid.zk.paths.base=/druid

# For MySQL (make sure to include the MySQL JDBC driver on the classpath):
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://192.168.3.41:3306/druid?characterencoding=utf-8
druid.metadata.storage.connector.user=druid
druid.metadata.storage.connector.password=druid

# For HDFS:
#druid.storage.type=hdfs
#druid.storage.storageDirectory=/druid/segments
druid.storage.type=hdfs
druid.storage.storageDirectory=hdfs://192.168.3.42:9000/druid/segments
# For HDFS:
#druid.indexer.logs.type=hdfs
#druid.indexer.logs.directory=/druid/indexing-logs
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=hdfs://192.168.3.42:9000/druid/indexing-logs

# Service discovery
druid.selectors.indexing.serviceName=druid/overlord
druid.selectors.coordinator.serviceName=druid/coordinator

druid.request.logging.type=file
druid.request.logging.dir=/home/apps/druid/logs

# Monitoring
druid.monitoring.monitors=["org.apache.druid.java.util.metrics.JvmMonitor"]
druid.emitter=noop
druid.emitter.logging.logLevel=info

# Storage type of double columns
# ommiting this will lead to index double as float at the storage layer

druid.indexing.doubleStorage=double

# Security
druid.server.hiddenProperties=["druid.s3.accessKey","druid.s3.secretKey","druid.metadata.storage.connector.password"]

# SQL
druid.sql.enable=true

# Lookups
druid.lookup.enableLookupSyncOnStartup=false

     上面的配置三台服务器都一样,除了“druid.host”需要改为当前服务器的host;

    (2) 复制上面2.6.3章节中修改的5个文件到当前目录(和common.runtime.properties同一路径下)

      

             3.2  master节点的配置

         vim /home/apps/druid/conf/druid/cluster/master/coordinator-overlord/jvm.config

-server
-Xms10g
-Xmx10g
-XX:+ExitOnOutOfMemoryError
-XX:+UseG1GC
-Duser.timezone=UTC+0800
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dderby.stream.error.file=var/druid/derby.log

        修改:(1)-Xms 根据自己的电脑配置调

                   (2)-Xmx 根据自己的电脑配置调

                   (3)Duser.timezone 改为UTC+0800

         vim /home/apps/druid/conf/druid/cluster/master/coordinator-overlord/runtime.properties  ,默认配置就可以;

             3.3  query节点的配置

       (1)  broker的配置jvm.config

          vim /home/apps/druid/conf/druid/cluster/query/broker/jvm.config,内存的配置结合自己的电脑配置,user.timezone 改为UTC+0800;

        (2)broker的配置runtime.properties

          vim /home/apps/druid/conf/druid/cluster/query/broker/runtime.properties

#druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
druid.service=druid/broker
druid.plaintextPort=8082

# HTTP server settings
druid.server.http.numThreads=20
#如果代理从不处于高并发负载下(在这种情况下,快速处理收集的数据并释放所使用的内存),那么拥有大限制并不一定是坏事 
#druid.server.http.maxScatterGatherBytes=Long.MAX_VALUE   #9223372036854775807

# HTTP client settings
#查询线程数
druid.broker.http.numConnections=20
#
druid.broker.http.maxQueuedBytes=25000000

# Processing threads and buffers
druid.processing.buffer.sizeBytes=150000000
#可用于合并查询结果的直接内存缓冲区数
druid.processing.numMergeBuffers=4
#并行处理segment的线程数 默认是(Number of cores - 1 (or 1))
druid.processing.numThreads=8
druid.processing.tmpDir=var/druid/processing

#在单个JDBC帧中返回的最大行数。将此属性设置为-1表示不应应用行限制
druid.sql.avatica.maxRowsPerFrame=-1
#选定查询的页大小阈值。对于较大结果集的Select查询将使用分页连续发出
druid.sql.planner.selectThreshold=10000
# Query cache disabled -- push down caching and merging instead
druid.broker.cache.useCache=false
druid.broker.cache.populateCache=false

         (3)router的配置jvm.config

           vim /home/apps/druid/conf/druid/cluster/query/router/jvm.config,内存的配置结合自己的电脑配置,user.timezone 改为UTC+0800;

          (4)router的配置runtime.properties

          vim /home/apps/druid/conf/druid/cluster/query/router/runtime.properties,默认配置就可以;

     3.4    data节点的配置

         (1)historical的配置jvm.config

           vim /home/apps/druid/conf/druid/cluster/data/historical/jvm.config,内存的配置结合自己的电脑配置,user.timezone 改为UTC+0800;

          (2)historical的配置runtime.properties

          vim /home/apps/druid/conf/druid/cluster/data/historical/runtime.properties:

druid.service=druid/historical
druid.plaintextPort=8083

# HTTP server threads
# HTTP请求的线程数 max(10, (Number of cores * 17) / 16 + 2) + 30
druid.server.http.numThreads=30

# Processing threads and buffers
druid.processing.buffer.sizeBytes=125000000
druid.processing.numMergeBuffers=8
#可用于并行处理段的处理线程数 默认Number of cores - 1 (or 1)
druid.processing.numThreads=15
druid.processing.tmpDir=var/druid/processing

# Segment storage
# 段的缓存位置,及此目录可以缓存的大小  默认 300G
druid.segmentCache.locations=[{"path":"var/druid/segment-cache","maxSize":300000000000}]
#进程分配给它的段的最大字节数。这不是历史进程实际执行的限制,只是发布到协调进程的值,以便它可以相应地进行计划
#相当于这个历史节点的总容量  计算采用的是 /1000 默认130G
druid.server.maxSize=300000000000
#分层是使用,在前台设置规则
#druid.server.tier=_default_tier
#分层时使用,层的优先级 数字越高,优先级越高
#druid.server.priority=0

# Query cache
druid.historical.cache.useCache=true
druid.historical.cache.populateCache=true
druid.cache.type=caffeine
druid.cache.sizeInBytes=128000000

         (3)middleManager的配置jvm.config

           vim /home/apps/druid/conf/druid/cluster/data/middleManager/jvm.config,内存的配置结合自己的电脑配置,user.timezone 改为UTC+0800;

          (4)middleManager的配置runtime.properties

          vim /home/apps/druid/conf/druid/cluster/data/middleManager/runtime.properties:

druid.service=druid/middleManager
druid.plaintextPort=8091

# Number of tasks per middleManager
# 可以创建的最大任务数
druid.worker.capacity=4

# Task launch parameters
druid.indexer.runner.javaOpts=-server -Xms512m -Xmx512m -XX:MaxDirectMemorySize=512m -Duser.timezone=UTC+0800 -Dfile.encoding=UTF-8 -XX:+ExitOnOutOfMemoryError -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
druid.indexer.task.baseTaskDir=var/druid/task

# HTTP server threads
#HTTP请求的线程数	两个大小相等的HTTP线程池 一个是 Overlord Indexer 的通信 一个处理所有其他HTTP请求 公式 max(10, (Number of cores * 17) / 16 + 2) + 30
druid.server.http.numThreads=30
#以字节为单位的请求标头的最大大小 较大的报头会消耗更多内存,并且会使服务器更容易受到拒绝服务攻击
#druid.server.http.maxRequestHeaderSize = 8*1024

# Processing threads and buffers on Peons
# peons的设置  内存计算方式与middlemanager的计算一致 druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
druid.indexer.fork.property.druid.processing.numMergeBuffers=2
druid.indexer.fork.property.druid.processing.buffer.sizeBytes=100000000
druid.indexer.fork.property.druid.processing.numThreads=1
#druid middleManager 需要的直接内存  这一块都是使用的默认值
# druid.processing.numThreads=Number of cores - 1
# druid.processing.numMergeBuffers=max(2, druid.processing.numThreads / 4)
# druid.processing.buffer.sizeBytes=auto (max 1GB)
#	druid.processing.buffer.sizeBytes * (druid.processing.numMergeBuffers + druid.processing.numThreads + 1)
# Hadoop indexing
druid.indexer.task.hadoopWorkingPath=var/druid/hadoop-tmp

          3.5    druid集群的启动

                 cd /learn/druid

                 在master节点: nohup ./bin/start-cluster-master-no-zk-server > master.log &

                 在query节点: nohup ./bin/start-cluster-query-server > query.log &

                 在data 节点: nohup ./bin/start-cluster-data-server > data.log &

                看相应的master.log、query.log、data.log,结合 “jps”命令看下进程,表名成功启动;

            3.6    从web控制台登录;

             登录地址:http://ip:8888/  ,(ip为query节点的ip)

能从页面上看见红色部分的内容,说明集群的启动是没问题了;其中“Services”就是druid集群的服务及个数,我本地是2个“historical”,2个“middle_manager”。

 四.其他的问题

     4.1 集群的启动脚本;

     4.2 本人安装druid遇见的问题;

     4.3 SSH免密码登录;

  上面的三个内容,后面单独介绍;

最后:感谢济南同事郑先生在学习过程中给予的帮助;

参考资料:https://druid.apache.org/docs/0.17.0/design/index.html

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Apache Druid提供了多种备份方式,包括本地备份和远程备份。 1. 本地备份 本地备份是将Druid集群数据备份到本地磁盘上。可以通过以下步骤进行本地备份: - 在Druid集群的coordinator节点上运行以下命令,创建本地备份: ``` bin/druid.sh coordinator -conf conf/coordinator/local_backup.json ``` - 创建local_backup.json文件,并指定备份目录和时间范围: ``` { "type" : "local", "backupDirectory" : "/path/to/backup/directory", "period" : "PT1H", "windowPeriod" : "PT10M" } ``` 其中,backupDirectory指定备份目录,period指定备份周期,windowPeriod指定备份时间窗口。 2. 远程备份 远程备份是将Druid集群数据备份到远程存储设备上,如AWS S3或HDFS。可以通过以下步骤进行远程备份: - 在Druid集群的coordinator节点上安装S3插件或HDFS插件。 - 在Druid集群的coordinator节点上创建一个JSON文件,指定远程备份配置: ``` { "type" : "s3", // or "hdfs" "bucket" : "my-bucket", "basePath" : "druid/backups", "accessKey" : "my-access-key", "secretKey" : "my-secret-key", "endpoint" : "s3.amazonaws.com", // or your HDFS endpoint "period" : "PT1H", "windowPeriod" : "PT10M" } ``` 其中,type指定备份类型,bucket和basePath指定备份存储路径,accessKey和secretKey指定访问凭证,endpoint指定远程存储设备的地址,period和windowPeriod同上。 - 在Druid集群的coordinator节点上运行以下命令,启动备份任务: ``` bin/druid.sh coordinator -conf conf/coordinator/remote_backup.json ``` 以上是Druid数据备份的简单介绍,更多详细内容可参考Druid官方文档。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值