經(jīng)過近一個(gè)月的學(xué)習(xí)和實(shí)踐,終于成功部署了車輛監(jiān)控軟件成功,在這里將相關(guān)的步驟和遇到的坑總結(jié)一下
目錄
- 概述
- 系統(tǒng)安裝(CentOS 7.3)
- 大數(shù)據(jù)環(huán)境配置(java hadoop hbase zookeeper )
- 軟件運(yùn)行環(huán)境配置(docker mysql kafka redis zookeeper tomcat)
- 軟件部署
- 跑起來
- 注意事項(xiàng)
- Q&A
概述
本項(xiàng)目為某單位開發(fā)的“電動(dòng)汽車監(jiān)控系統(tǒng)”,采用一個(gè)終端盒子從電動(dòng)汽車上采集數(shù)據(jù),使用4G發(fā)送出去,服務(wù)端接收到數(shù)據(jù)后進(jìn)行預(yù)處理,使用kafka進(jìn)行消息分發(fā),將實(shí)時(shí)數(shù)據(jù)存儲(chǔ)在redis,將歷史數(shù)據(jù)存儲(chǔ)在hbase,通過webservice向web前端傳遞mysql數(shù)據(jù),從而實(shí)現(xiàn)電動(dòng)汽車的實(shí)時(shí)數(shù)據(jù)的監(jiān)控以及歷史數(shù)據(jù)的回放。本文將描述如何在以下的軟硬件環(huán)境下,進(jìn)行該監(jiān)控系統(tǒng)的配置與部署。
結(jié)構(gòu)圖:
硬件環(huán)境
- 1號(hào)機(jī) 工作站1 thinkstation i7
- 2號(hào)機(jī) 工作站2 thinkstation i7
- 3號(hào)機(jī) 服務(wù)器1 Dell Intel Xeon
- 4號(hào)機(jī) 服務(wù)器2 Dell Intel Xeon
- 交換機(jī)一臺(tái),網(wǎng)線若干
其中
- 1號(hào)機(jī)安裝hadoop管理節(jié)點(diǎn)
- 1、2、3號(hào)機(jī)安裝hadoop三個(gè)數(shù)據(jù)節(jié)點(diǎn)
- 4號(hào)機(jī)安裝服務(wù)軟件,web軟件
軟件環(huán)境
軟件由對(duì)方單位提供,包括以下幾部分:
- CentOS 7.3 安裝盤
- hadoop 2.6.1 、hbase 1.2.0 、jdk 1.8.0 、zookeeper 3.4.8
- 配置好的data、tmp文件夾,profile文件
- 大數(shù)據(jù)啟動(dòng)、停止腳本
- docker離線安裝包,安裝腳本,redis、kafka、mysql、zookeeper鏡像,docker基礎(chǔ)環(huán)境
- tomcat安裝包
- 應(yīng)用軟件發(fā)布包(webservice、datacollector、dataprocessor、alertprocessor、simulator、ddhbase、vehicle)
系統(tǒng)安裝(CentOS 7.3)
系統(tǒng)為對(duì)方單位提供的CentOS 7.3 安裝盤(也可以自己做一個(gè)安裝盤,但是如果系統(tǒng)版本不一樣的話,在安裝docker的時(shí)候,會(huì)報(bào)錯(cuò),因?yàn)橛行┮蕾嚢陌姹緦?duì)不上,太新和太舊都不行,這時(shí)候,可以采用yum安裝的方式,詳見后文)
系統(tǒng)安裝步驟
- 如果想裝雙系統(tǒng)就先清出來一個(gè)空白分區(qū)
- 插入光盤
- 重啟電腦,設(shè)置boot選項(xiàng),從光盤啟動(dòng)
- 如果光盤沒問題的話,直接進(jìn)入安裝界面,如果進(jìn)不去,換一張盤或者重新刻盤
- 保持默認(rèn)最小系統(tǒng)安裝
- 手動(dòng)創(chuàng)建分區(qū),去掉/home分區(qū),保持/swap、/boot,然后將剩下所有的空間分配給/
- 開始安裝系統(tǒng)
- 系統(tǒng)安裝重啟電腦
- 如果是雙系統(tǒng),開機(jī)后只能進(jìn)入CentOS,無法進(jìn)入原來的windows,這時(shí)候要進(jìn)行以下修改:
安裝CentOS和Windows雙系統(tǒng),開機(jī)沒有Windows選項(xiàng)的解決辦法:
進(jìn)入centos系統(tǒng),修改/boot/grub2/gurb.cfg文件,如下
### BEGIN /etc/grub.d/30_os-prober ### menuentry 'Window XP'{ insmod ntfs set root=(hd0,1) chainloader +1 } ### END /etc/grub.d/30_os-prober ###
如此,即可將系統(tǒng)安裝好
系統(tǒng)基本配置
日期時(shí)間
CentOS 設(shè)置日期
#date -s 09/28/2017
設(shè)置時(shí)間
#date -s 17:21
寫入硬件
#clock -w
各主機(jī)之間的時(shí)間差不可超過30s,否則hadoop節(jié)點(diǎn)起不來
主機(jī)名配置
#hostnamectl set-hostname xxx
本次配置的主機(jī)名如下
- 1號(hào)機(jī): hadoop1
- 2號(hào)機(jī): hadoop2
- 3號(hào)機(jī): hadoop3
- 4號(hào)機(jī): webserver
網(wǎng)絡(luò)配置
查看當(dāng)前網(wǎng)卡的ip和配置:
#ip addr show
修改配置:
#vi /etc/sysconfig/network-scripts/ifcfg-eno1
其中eno1為所使用的網(wǎng)卡的名字,做以下修改:
- ONBOOT=yes
- BOOTPROTO=static #如果是自動(dòng)獲取ip,則是dhcp,且不需要配置下面的ip和mask我在這里用的是靜態(tài)ip
- 添加ip地址 : IPADDR=192.168.34.124
- 添加子網(wǎng)掩碼:NETMASK=255.255.255.0
修改完成后,重啟網(wǎng)絡(luò)服務(wù):
#systemctl restart network.service
4臺(tái)機(jī)子ip配置如下:
- hadoop1 : 192.168.34.121
- hadoop2 : 192.168.34.122
- hadoop3 : 192.168.34.123
- webserver : 192.168.34.124
關(guān)閉防火墻:
#systemctl disable firewalld.service
關(guān)閉之后,可以互相ping一下,看是不是能互相ping通
ssh免密登錄配置
hadoop三個(gè)節(jié)點(diǎn)必須要實(shí)現(xiàn)互相ssh免密登錄
參考 http://blog.csdn.net/triumphao/article/details/53264190
關(guān)閉SELinux
如果不關(guān)閉,hadoop啟動(dòng)可能會(huì)失敗
修改/etc/selinux/config 文件
將
SELINUX=enforcing
改為
SELINUX=disabled
重啟機(jī)器即可
大數(shù)據(jù)環(huán)境配置(java hadoop hbase zookeeper)
本部分是將hadoop安裝到hadoop1、hadoop2、hadoop3三臺(tái)機(jī)子上,其中hadoop1既是管理節(jié)點(diǎn),也是數(shù)據(jù)節(jié)點(diǎn),hadoop2和hadoop3是另外兩個(gè)數(shù)據(jù)節(jié)點(diǎn),需要安裝的有
- jdk
- hadoop,Hadoop是一個(gè)由Apache基金會(huì)所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),Hadoop=HDFS(文件系統(tǒng),數(shù)據(jù)存儲(chǔ)技術(shù)相關(guān))+ Mapreduce(數(shù)據(jù)處理)
- hbase,HBase是建立在Hadoop文件系統(tǒng)之上的分布式面向列的數(shù)據(jù)庫。
- ZooKeeper,ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。
配置步驟包括:
- 環(huán)境變量配置
- hadoop配置
- zookeeper配置
- hbase配置
- 啟動(dòng)配置
每臺(tái)機(jī)子上都要做以下配置
環(huán)境變量配置
- 將軟件包 hadoop 2.6.1 、hbase 1.2.0 、jdk 1.8.0 、zookeeper 3.4.8
以及data,tmp文件夾放到/usr/htdadao目錄下 - 配置環(huán)境變量:profile文件追加內(nèi)容:
export JAVA_HOME=/usr/htdadao/jdk1.8.0_65 export HADOOP_HOME=/usr/htdadao/hadoop-2.6.1 export ZOOKEEPER_HOME=/usr/htdadao/zookeeper-3.4.8 export HBASE_HOME=/usr/htdadao/hbase-1.2.0 export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 修改完成后,運(yùn)行以下指令使修改生效
#source profile
hadoop配置
- 配置hadoop管理節(jié)點(diǎn)
#vim /usr/htdadao/hadoop-2.6.1/etc/hadoop/core-site.xml
修改后的文件為:(省略注釋)
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/htdadao/tmp/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>
</configuration>
- 配置數(shù)據(jù)節(jié)點(diǎn)
vim /usr/htdadao/hadoop-2.6.1/etc/hadoop/slaves
將各個(gè)節(jié)點(diǎn)的主機(jī)名寫到該文件,配置好的文件:
hadoop1
hadoop2
hadoop3
- 修改備份數(shù)量
#vim /usr/htdadao/hadoop-2.6.1/etc/hadoop/hdfs-site.xml
其中value表示數(shù)據(jù)備份數(shù)量,本例為1
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
配置zookeeper
- 修改zookeeper配置文件
#vim /usr/htdadao/zookeeper-3.4.8/conf/zoo.cfg
修改后的文件:(省略注釋)
dataDir=/usr/htdadao/tmp/zookeeper
clientPort=2181
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
有幾個(gè)server就加幾個(gè)server,server后面的數(shù)字與下一步的myid對(duì)應(yīng)
- 配置zookeeper的myid
#vim /usr/htdadao/tmp/zookeeper/myid
修改每臺(tái)機(jī)子的id與上一步中的server后面的數(shù)字對(duì)應(yīng)
配置hbase
- 配置管理數(shù)據(jù)的節(jié)點(diǎn)
#vim /usr/htdadao/hbase-1.2.0/conf/regionservers
修改后的文件內(nèi)容如下
hadoop1
hadoop2
hadoop3
- 修改配置文件
#vim /usr/htdadao/hbase-1.2.0/conf/hbase-site.xml
修改后的文件:(省略注釋)
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop1:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.master</name>
<value>hdfs://hadoop1:60000</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/htdadao/data/hbase/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop1,hadoop2,hadoop3</value>
啟動(dòng)配置
啟動(dòng)順序?yàn)閦ookeeper-->hadoop-->hbase
編寫啟動(dòng)腳本 start-hadoop.sh如下
ssh root@hadoop1 'echo "start-hadoop..."'
ssh root@hadoop1 '/usr/htdadao/zookeeper-3.4.8/bin/zkServer.sh start'
ssh root@hadoop2 '/usr/htdadao/zookeeper-3.4.8/bin/zkServer.sh start'
ssh root@hadoop3 '/usr/htdadao/zookeeper-3.4.8/bin/zkServer.sh start'
sleep 3
ssh root@hadoop1 '/usr/htdadao/hadoop-2.6.1/sbin/start-dfs.sh'
sleep 3
ssh root@hadoop1 '/usr/htdadao/hadoop-2.6.1/sbin/start-yarn.sh'
sleep 3
ssh root@hadoop1 '/usr/htdadao/hbase-1.2.0/bin/start-hbase.sh'
ssh root@hadoop1 'echo "hadoop1...jps -l"'
ssh root@hadoop1 'jps -l'
編寫啟動(dòng)腳本 stop-hadoop.sh如下
ssh root@hadoop1 'echo "stop-hadoop..."'
ssh root@hadoop1 '/usr/htdadao/hbase-1.2.0/bin/stop-hbase.sh'
sleep 3
ssh root@hadoop1 '/usr/htdadao/hadoop-2.6.1/sbin/stop-yarn.sh'
sleep 3
ssh root@hadoop1 '/usr/htdadao/hadoop-2.6.1/sbin/stop-dfs.sh'
sleep 3
ssh root@hadoop1 '/usr/htdadao/zookeeper-3.4.8/bin/zkServer.sh stop'
ssh root@hadoop2 '/usr/htdadao/zookeeper-3.4.8/bin/zkServer.sh stop'
ssh root@hadoop3 '/usr/htdadao/zookeeper-3.4.8/bin/zkServer.sh stop'
ssh root@hadoop1 'echo "hadoop1...jps -l"'
ssh root@hadoop1 'jps -l'
在第一次運(yùn)行腳本之前,每臺(tái)機(jī)子都需要運(yùn)行一下
#echo 'source /etc/profile' >> ~/.bashrc
查看運(yùn)行狀態(tài)
運(yùn)行start-hadoop.sh腳本成功后,可以看hbase中的表
#hbase shell
進(jìn)入hbase命令行,輸入指令list,如果出現(xiàn)所有的表,則啟動(dòng)成功
hbase(main):001:0> list
TABLE
ALERT
ENGINE
EXTREME
FUEL
GPS
LENGJI15S
MOTOR
VEHICLE
VOLTAGE
YLKZ
10 row(s) in 8.2730 seconds
各個(gè)節(jié)點(diǎn)的java進(jìn)程如下:
hadoop1:
[root@hadoop1 ~]# jps -l
3602 sun.tools.jps.Jps
2050 org.apache.hadoop.hdfs.server.datanode.DataNode
3011 org.apache.hadoop.hbase.regionserver.HRegionServer
2228 org.apache.hadoop.hdfs.server.namenode.SecondaryNameNode
2854 org.apache.hadoop.hbase.master.HMaster
1910 org.apache.hadoop.hdfs.server.namenode.NameNode
2539 org.apache.hadoop.yarn.server.nodemanager.NodeManager
1743 org.apache.zookeeper.server.quorum.QuorumPeerMain
hadoop2:
[root@hadoop2 ~]# jps -l
2528 org.apache.hadoop.yarn.server.nodemanager.NodeManager
2341 org.apache.zookeeper.server.quorum.QuorumPeerMain
2711 org.apache.hadoop.hbase.regionserver.HRegionServer
2413 org.apache.hadoop.hdfs.server.datanode.DataNode
2957 sun.tools.jps.Jps
hadoop3:
[root@hadoop3 ~]# jps -l
2432 org.apache.hadoop.hdfs.server.datanode.DataNode
2549 org.apache.hadoop.yarn.server.nodemanager.NodeManager
2742 org.apache.hadoop.hbase.regionserver.HRegionServer
3002 sun.tools.jps.Jps
2363 org.apache.zookeeper.server.quorum.QuorumPeerMain
如果有某個(gè)進(jìn)程沒啟動(dòng),則表示該節(jié)點(diǎn)相關(guān)軟件啟動(dòng)失敗
軟件運(yùn)行環(huán)境配置(docker mysql kafka redis zookeeper tomcat)
安裝 docker
有兩種方式,離線和在線
離線安裝
該安裝方式基于該單位提供的離線安裝包和腳本
將 run.sh 和 docker_offline_install.tar 放在相同目錄. 運(yùn)行 run.sh
腳本根據(jù)輸入 可執(zhí)行以下操作:
- 安裝 createrepo, 建立 /home/repo-local 目錄作為本地 yum repo
- 添加rpm包, 配置yum源 (僅保留本地源, 其他源備份至 /etc/yum.repos.d_bak)
- 安裝 docker-engine 和 docker-compose
- 安裝 jdk(1.8.0_131), vim, nc, nmap, ntpdate, net-tools
該種安裝方式較為局限,如果操作系統(tǒng)版本不對(duì),則會(huì)出現(xiàn)部分依賴包版本不對(duì)的錯(cuò)誤,從而安裝失敗
在線安裝
在機(jī)器聯(lián)網(wǎng)的情況下可以直接在線安裝
這個(gè)沒試過在線安裝,需要查一下怎么做:安裝 createrepo, 建立 /home/repo-local 目錄作為本地 yum repo
其他試過了:
yum install docker
yum install vim
yum install nc
yum install nmap
yum install ntpdate
yum install net-tools
安裝 docker-compose需要通過pip安裝
參考 http://blog.csdn.net/gsying1474/article/details/52988784
安裝python-pip
#yum -y install epel-release
#yum -y install python-pip
安裝docker-compose
#pip install docker-compose
待安裝完成后,執(zhí)行查詢版本的命令,驗(yàn)證是否成功
#docker-compose version
安裝完成
啟動(dòng)docker服務(wù):
#systemctl start docker.service
查看docker服務(wù)狀態(tài):
#systemctl status docker.service
停止docker服務(wù):
#systemctl stop docker.service
重啟docker服務(wù):
#systemctl restart docker.service
docker鏡像導(dǎo)入與啟動(dòng)
- 復(fù)制basicEnv和Dockerimage兩個(gè)文件夾到某個(gè)路徑下,此處以/opt/dadao為例;
- 導(dǎo)鏡像:
- 進(jìn)入/opt/dadao后執(zhí)行l(wèi)s,查看下面的文件;
- 進(jìn)入Dockerimage,執(zhí)行l(wèi)s查看其中的鏡像文件;
- 依次執(zhí)行以下指令,導(dǎo)入四個(gè)鏡像文件;
#docker load –i kafka.img
#docker load –i zookeeper.img
#docker load –i redis.img
#docker load –i mysql.img
- 再進(jìn)入basicEnv路徑下,執(zhí)行l(wèi)s查看文件,執(zhí)行以下命令,編輯其中的IP為當(dāng)前服務(wù)器的IP。
#vim docker-compose.yml
- 運(yùn)行導(dǎo)入的鏡像:
- 進(jìn)入/opt/dadao/basicEnv路徑下;
- 執(zhí)行
docker-compose up
查看是否有報(bào)錯(cuò),如果有報(bào)錯(cuò)查看原因,沒有報(bào)錯(cuò),ctrl+c停止當(dāng)前進(jìn)程,執(zhí)行docker ps查看是否已經(jīng)停止;
執(zhí)行指令將各鏡像對(duì)應(yīng)的服務(wù)跑起來:
docker-compose up –d
- 執(zhí)行指令,查看執(zhí)行情況
docker ps
- 執(zhí)行指令可以停止鏡像對(duì)應(yīng)的服務(wù)(如果需要)。
docker-compose down
tomcat安裝
官方下載地址:http://tomcat.apache.org/download-80.cgi
下載tar.gz壓縮包并解壓即可
如果防火墻是開著的,需要設(shè)置防火墻端口號(hào)
tomcat默認(rèn)端口是8080,以8080為例,執(zhí)行命令:
#firewall-cmd --zone=public --add-port=8080/tcp --permanent
#firewall-cmd reload
未完待續(xù)