一边安装一边写,写得略乱
安装OpenTsdb需要HBase,HBase需要Zookeeper和HDFS
这一串都是apache家的,安装java是必须的
yum install -y java
一、安装Zookeeper
在五个节点上部署zk
解压
tar -xzvf apache-zookeeper-3.6.1-bin.tar.gz
mv apache-zookeeper-3.6.1-bin zookeeper
修改配置文件,zookeeper/conf目录下有三个配置文件
修改log4j.properties里的zookeeper.log.dir,修改日志目录
zoo_sample.cfg是一个默认的zoo.cfg配置,这个是zookeeper的主要配置文件,复制一份
cp zoo_sample.cfg zoo.cfg
修改数据文件目录dataDir,端口按需修改
配置集群,把集群中所有节点写上,2888是zk节点通信端口,3888是zk选举端口
然后就可以推送到各个节点的安装目录下,我是放到了/usr/local,顺便我把配置目录做了软链接到/etc/zookeeper/conf下
cp zookeeper /usr/local/
mkdir /etc/zookeeper
ln -s /usr/local/zookeeper/conf /etc/zookeeper/conf #创建配置目录软链接
启动
/usr/local/zookeeper/bin/zkServer.sh start
然后就报错了,报错,很正常,但是你没有异常提示啊,日志也没生成你就给我来个FAILED TO START
修改了一下这个脚本,把启动命令的nohup去掉看看输出
报了Invalid config,但是检查了配置文件都没错,上网查了一下,又仔细看了官方文档发现这么一句
“You attribute the server id to each machine by creating a file named myid, one for each server, which resides in that server's data directory, as specified by the configuration file parameter dataDir.”
也就是说,需要在data目录下创建一个叫做myid的文件,这个文件里只有一个数字,就是配置文件里server.后面的编号
弄好之后,启动成功了,但是日志没有在我设置的目录下,还是在原来的.目录,因为bin/zkEnv.sh里面要加上ZOO_LOG_DIR变量
重启就可以了
二、安装HDFS
我用的是hadoop3.2.1版本,部署2nn+3dn+5jn,ha模式
下载hadoop3.2.1https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
解压,修改配置,注意配置中设计的各种目录,都新建一下,并把属主改为hdfs用户
改一下hadoop-env.sh,增加JAVA_HOME、HADOOP_CLASSPTH、日志目录
# 日志目录
export HADOOP_LOG_DIR=/var/log/hadoop/
# JAVA_HOME
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre"
# HADOOP_CLASSPATH
export HADOOP_HOME="/usr/local/hadoop-3.2.1"
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/hdfs/lib/*:/usr/lib/hadoop/lib/*
修改一下core-site.xml
<configuration>
<!-- 文件系统 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<!-- zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>IP1:2181,IP2:2181,IP3:2181,IP4:2181,IP5:2181</value>
</property>
</configuration>
hdfs-site.xml,都是基础配置,没有涉及到参数调优
<configuration>
<!-- hdfs管理员 -->
<property>
<name>dfs.permissions.superusergroup</name>
<value>hdfs</value>
</property>
<property>
<name>dfs.cluster.administrators</name>
<value>hdfs</value>
</property>
<!-- namenode地址 -->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns.nn1</name>
<value>nnIP1:54310</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns.nn2</name>
<value>nnIP2:54310</value>
</property>
<property>
<name>dfs.namenode.servicerpc-address.ns.nn1</name>
<value>nnIP1:53310</value>
</property>
<property>
<name>dfs.namenode.servicerpc-address.ns.nn2</name>
<value>nnIP2:53310</value>
</property>
<property>
<name>dfs.namenode.http-address.ns.nn1</name>
<value>nnIP1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.ns.nn2</name>
<value>nnIP2:50070</value>
</property>
<!-- 高可用 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.ns</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- journalnode地址 -->
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.ns</name>
<value>qjournal://jnIP1:8485;jnIP2:8485;jnIP3:8485;jnIP4.ctc.local:8485;jnIP5:8485/ns</value>
</property>
<!-- journalnode相关 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/data01/hadoop/hdfs/journalnode</value>
<final>true</final>
</property>
<!-- namenode相关 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data01/hadoop/hdfs/namenode,/data02/hadoop/hdfs/namenode</value>
<final>true</final>
</property>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>${dfs.namenode.checkpoint.dir}</value>
</property>
<!-- datanode相关 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data03/hadoop/hdfs/datanode,/data04/hadoop/hdfs/datanode,/data05/hadoop/hdfs/datanode,/data06/hadoop/hdfs/datanode,/data07/hadoop/hdfs/datanode,/data08/hadoop/hdfs/datanode,/data09/hadoop/hdfs/datanode,/data10/hadoop/hdfs/datanode,/data11/hadoop/hdfs/datanode,/data12/hadoop/hdfs/datanode</value>
<final>true</final>
</property>
</configuration>
放到自己喜欢的目录,我是放到了/usr/local下面
创建hdfs用户用于运行
useradd -m /bin/false hdfs
两台nn之间需要做免密登陆,先生成ssh的公钥,再把自己的公钥拷贝到另外一台机器上就可以
在两台nn上生成一下密钥,切换到hdfs用户,选项都保持默认,回车即可
ssh-keygen -t rsa
成功的话,在hdfs用户的home目录下,就会出现.ssh文件夹
把第一台nn的.ssh/id_rsa.pub文件里的文本拷贝到第二台nn的.ssh/authorized_keys下,authorized_keys文件的权限必须为600
做好之后,第一台nn就可以免密登陆第二台nn了,再把第二台的密钥也拷贝到第一台上
互相ssh测试一下,通了就可以
首先启动5台jn
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon start journalnode
在1台nn上格式化dfs
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs namenode -format
启动nn和zkfc
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon start namenode
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs zkfc -formatZK #初始化zookeeper上节点
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon start zkfc
看一下zkfc的日志,出现下面字样就是成功了
现在,要把第一台nn上的元数据文件同步到第二台nn上,在第2台nn上执行同步命令
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs namenode -bootstrapStandby
然后启动第二台nn和zkfc
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon start namenode
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon start zkfc
zkfc日志出现下面字样证明成功
现在关掉active nn,测试一下切换
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon stop namenode
通过50070端口的页面来确认是否切换成功
最后启动dn
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs --daemon start datanode
三、安装hbase
使用hbase2.2.5版本,2master+3regionserver
修改conf/hbase-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.tmp.dir</name>
<value>/data03/hbase/tmp</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://ns/hbase</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>IP1:2181,IP2:2181,IP3:2181,IP4:2181,IP5:2181</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data02/zookeeper</value>
</property>
</configuration>
conf/hbase.sh,增加JAVA_HOME和日志目录配置,关闭自带zookeeper
export HBASE_LOG_DIR=/var/log/hbase
export HBASE_MANAGES_ZK=false
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre"
新建conf/backup-masters,写上所有master节点的名字,不能只写backup master,不然backup master挂了怎么切换回去呢
新建conf/egionservers,写上所有regionserver节点
2台master需要免密登陆regionserver,操作同hdfs里面的一样,生成master节点的key放到所有节点(主master到备份master也需要ssh免密的)就好了,注意,如果打算用新用户,比如hbase,就要切换到hbase用户重新生成key,做好免密之后ssh试一下
hbase需要hdfs-site.xml和core-site.xml才能访问hdfs,做一个软连接到hbase的配置目录下
ln -s /usr/local/hadoop-3.2.1/etc/hadoop/hdfs-site.xml /usr/local/hbase-2.2.5/conf/
ln -s /usr/local/hadoop-3.2.1/etc/hadoop/core-site.xml /usr/local/hbase-2.2.5/conf/
在hdfs上新建hbase的目录,并赋予权限
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs dfs -mkdir /hbase
sudo -uhdfs /usr/local/hadoop-3.2.1/bin/hdfs dfs -chown hbase /hbase #修改属主
启动,只要在主master上启动这个脚本,主master会通过ssh启动其他组件
sudo -uhbase /usr/local/hbase-2.2.5/bin/start-hbase.sh
16010端口打开web页面
测试一下备用master节点,关闭主节点
sudo -uhbase /usr/local/hbase-2.2.5/bin/hbase-daemon.sh stop master
查看备节点16010端口的页面,和上面的图一致,regionserver都正确,那就可以了
四、OpenTSDB安装
终于来到了最后一步
下载opentsdb的rpm包,我用的是2.3.2
https://github.com/OpenTSDB/opentsdb/releases/download/v2.3.2/opentsdb-2.3.2.noarch.rpm
在hbase上建立opentsdb需要的表,去https://github.com/OpenTSDB/opentsdb/blob/master/src/create_table.sh下载这个脚本,放到hbase机器上
export HBASE_HOME=/usr/local/hbase-2.2.5
export COMPRESSION=NONE
./create_table.sh
安装依赖
yum install -y gnuplot
安装rpm包
rpm -ivh opentsdb-2.3.2.noarch.rpm
修改配置文件/etc/opentsdb/opentsdb.conf
tsd.storage.hbase.zk_quorum设置为zk的地址,用逗号分隔
tsd.core.auto_create_metrics设置为true,这一点很重要,不然open-falcon发送来的数据不会自动新建指标,录不进去
增加用户opentsdb
useradd -m opentsdb
修改启动脚本/etc/init.d/opentsdb里面的用户,还可以修改日志目录、配置目录等
# Default program options
NAME=opentsdb
PROG=/usr/bin/tsdb
HOSTNAME=$(hostname --fqdn)
USER=opentsdb
启动
service opentsdb start
4242端口查看web页面
五、连接Open-falcon
这一步很简单了,open-falcon transfer配置改一改,重启transfer即可
"tsdb": {
"enabled": true,
"batch": 200,
"connTimeout": 1000,
"callTimeout": 5000,
"maxConns": 32,
"maxIdle": 32,
"retry": 3,
"address": "IP:4242"
}
等一会儿,在opentsdb页面上就可以查看到open-falcon的监控数据了