zookeeper高可用集群搭建


前提:已經在master01配置好hadoop;在各個slave節點配置好hadoop和zookeeper;

(該文是將zookeeper配置在各slave節點上的,其實也可以配置在各master上,在哪配置就在哪啟動zookeeper集群)

此文章基於上一篇文章:linux安裝配置zookeeper-3.4.10

 

首先新增虛擬機master02;
一、虛擬機中操作(啟動網卡)
sh /install/initNetwork.sh
ifup eth0


二、基礎配置(主機名、IP配置、防火牆及selinux強制訪問控制安全系統)
vi /etc/sysconfig/network (配置磁盤中主機名字)
vi /etc/hosts (配置映射,)
hostname 主機名 (修改內存中主機名)
然后,重新鏈接查看是否成功;

vi /etc/sysconfig/network-scripts/ifcfg-eth0
查看內容是否設置成功:cat /etc/sysconfig/network-scripts/ifcfg-eth0 

DEVICE=eth0 (設置需要重啟的設備的名字)
TYPE=Ethernet(以太網)
ONBOOT=yes (設置為yes)
NM_CONTROLLED=yes
BOOTPROTO=static (設置為靜態)
IPADDR=192.168.238.130 (本機IP地址)
NETMASK=255.255.255.0 (子網掩碼)
GATEWAY=192.168.238.2 (網關)(查詢本機網關:route -n)
DNS1=192.168.238.2
DNS2=8.8.8.8    (谷歌IP地址)

vi /etc/sysconfig/selinux
修改:SELINUX=disabled
去掉注釋查看selinux內容:
grep -Ev '^#|^$' /etc/sysconfig/selinux

永久關閉防火牆:
service iptables stop
chkconfig iptables off


三、時間同步

for node in master01 master02 slave01 slave02 slave03;do ssh $node "date -s '2017-12-20 21:32:30'";done

 

四、配置ssh免密登錄(為hadoop用戶配置免密碼登錄)
需要兩個master免密登錄自己和其它各個節點,無需反向
[hadoop@master01 ~]# ssh-keygen -t rsa 創建公匙
[hadoop@master01 ~]# ssh-copy-id master02 拷貝公匙

 提升權限: 大數據學習交流群:217770236 讓我我們一起學習大數據

chmod 777 /install /software

 

五、安裝hadoop
所有安裝了hadoop的節點執行下面的語句:
[hadoop@master01 ~]# rm -rf /software/hadoop-2.7.3/logs/* /software/hadoop-2.7.3/work/
然后[hadoop@master01 ~]# scp -r /software/hadoop-2.7.3/ master02:/software/
然后配置環境變量:
[root@master02 ~]$ vi /etc/profile

JAVA_HOME=/software/jdk1.7.0_79
HADOOP_HOME=/software/hadoop-2.7.3
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/lib:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export PATH JAVA_HOME HADOOP_HOME

 

在master01下:
進入文件夾下:cd /software/hadoop-2.7.3/etc/hadoop/
1、修改core-site.xml配置文件

 1 <configuration>
 2 <property>
 3     <name>fs.defaultFS</name>
 4         <!--默認的nameservice節點名字-->
 5     <value>hdfs://ns1</value>
 6     </property>
 7     <!-- 配置ZK集群,多個ZK集群節點中間用英文逗號隔開, -->
 8 <property>
 9       <name>ha.zookeeper.quorum</name>
10             <value>slave01:2181,slave02:2181,slave03:2181</value>
11             </property>
12   <property>
13       <name>hadoop.tmp.dir</name>
14       <value>/software/hadoop-2.7.3/work</value>
15   </property>
16 
17 </configuration>
core-site.xml

2、修改hdfs-site.xml 配置文件:

 1 <configuration>
 2 <property>
 3        <name>dfs.replication</name>
 4        <value>3</value>
 5 </property>
 6 <!-- 注意:此配置文件的配置必須與core-site.xml配置相吻合 -->
 7 <property>
 8        <name>dfs.nameservices</name>
 9        <value>ns1</value>    
10 </property>
11 <property>
12        <name>dfs.ha.namenodes.ns1</name>
13     <!-- 定義高可用nameservice節點集群ns1下的主從節點(就是高可用的那兩個NN節點)-->
14        <value>nn1,nn2</value>    
15 </property>
16 <!--分別定義主從NN節點的RPC和HTTP通信,NN指代的是master,需修改-->
17 <property>
18     <name>dfs.namenode.rpc-address.ns1.nn1</name>
19     <value>master01:9000</value>
20 </property>
21 
22 <property>
23     <name>dfs.namenode.http-address.ns1.nn1</name>
24     <value>master01:50070</value>
25 </property>
26 
27 <property>
28     <name>dfs.namenode.rpc-address.ns1.nn2</name>
29     <value>master02:9000</value>
30 </property>
31 
32 <property>
33     <name>dfs.namenode.http-address.ns1.nn2</name>
34     <value>master02:50070</value>
35 </property>
36 <!-- 配置存放元數據的qjournal集群 -->
37 <property>
38     <name>dfs.namenode.shared.edits.dir</name>
39     <!-- 存放在QJID標識的文件夾中 -->
40     <value>qjournal://slave01:8485;slave02:8485;slave03:8485/QJID</value>
41 </property>
42 <!-- 配置qjournal集群節點在本地存放數據的位置 -->
43 <property>
44     <name>dfs.journalnode.edits.dir</name>
45     <value>/software/hadoop-2.7.3/QJMetaData</value>
46 </property>
47 <!-- 開啟NN節點宕機后自動切換 -->
48 <property>
49     <name>dfs.ha.automatic-failover.enabled</name>
50     <value>true</value>
51 </property>
52 <!-- 配置故障轉移代理類 -->
53 <property>
54     <name>dfs.client.failover.proxy.provider.ns1</name>
55     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
56 </property>    
57 <!-- 確認是否主master是否真的宕機了,ensure.sh腳本需要自己編寫 -->
58 <property>
59     <name>dfs.ha.fencing.methods</name>
60     <value>
61         sshfence
62         shell(/software/hadoop-2.7.3/ensure.sh)
63     </value>
64 </property>
65 <!-- 配置公式密鑰 -->
66 <property>
67     <name>dfs.ha.fencing.ssh.private-key-files</name>
68     <value>/home/hadoop/.ssh/id_rsa</value>
69 </property>
70 <!-- 配置超時 -->
71 <property>
72     <name>dfs.ha.fencing.ssh.connect-timeout</name>
73     <value>30000</value>
74 </property>
75 </configuration>
hdfs-site.xml的configuration

拷貝這兩個配置到其它所有節點:

scp -r /software/hadoop-2.7.3/etc/hadoop/core-site.xml /software/hadoop-2.7.3/etc/hadoop/hdfs-site.xml master02:/software/hadoop-2.7.3/etc/hadoop/

3、Yarn之ResourceManager高可用集群配置:

修改yarn-site.xml配置文件:

 1 <configuration>
 2 
 3 <!-- Site specific YARN configuration properties -->
 4 <!--
 5   <property>
 6       <name>yarn.resourcemanager.hostname</name>
 7       <value>master01</value>
 8   </property>
 9 -->
10 <property>
11       <name>yarn.resourcemanager.ha.enabled</name>
12       <value>true</value>
13 </property>
14 <property>
15       <name>yarn.resourcemanager.cluster-id</name>
16       <value>RMHA</value>
17 </property>
18 <property>
19       <name>yarn.resourcemanager.ha.rm-ids</name>
20       <value>rm1,rm2</value>
21 </property>
22 <property>
23       <name>yarn.resourcemanager.hostname.rm1</name>
24       <value>master01</value>
25 </property>
26 <property>
27       <name>yarn.resourcemanager.hostname.rm2</name>
28       <value>master02</value>
29 </property>
30 
31 <property>
32       <name>yarn.resourcemanager.zk-address</name>
33       <value>slave01:2181,slave02:2181,slave03:2181</value>
34 </property>
35 <property>
36       <name>yarn.nodemanager.aux-services</name>
37       <value>mapreduce_shuffle</value>
38 </property>
39 </configuration>
yarn-site.xml的configuration

 拷貝這一個配置到其它所有節點:

scp -r /software/hadoop-2.7.3/etc/hadoop/yarn-site.xml master02:/software/hadoop-2.7.3/etc/hadoop/

 大數據學習交流QQ群:217770236 讓我們一起學習大數據

 

六、查看zookeeper高可用集群是否搭建成功:
1、在slave節點啟動zookeeper集群(小弟中選個leader和follower)

cd /software/zookeeper-3.4.10/bin/ && ./zkServer.sh start && cd - && jps

2、在slaver節點上啟動Qjournal集群(控制存放元數據的)

此步驟可以省略,因為在master上啟動dfs集群時會自動拉起zk集群的Qjournal進程;

cd /software/hadoop-2.7.3/ && hadoop-daemon.sh start journalnode && jps

3、在master01上執行:
【格式化HDFS(只有第一次測試才執行)】cd /software/ && hdfs namenode -format
【拷貝work到master02對應節點下(只有第一次測試才執行)】scp -r /software/hadoop-2.7.3/work/ master02:/software/hadoop-2.7.3/
【格式化ZKFC客戶端(只有第一次測試才執行)】cd /software/hadoop-2.7.3/ && hdfs zkfc -formatZK
【啟動HDFS集群】cd /software/ && start-dfs.sh && jps

【啟動YARN集群】cd /software/ && start-yarn.sh && jps

【YARN集群啟動時,不會把另外一個備用主節點的YARN集群拉起來啟動,所以在master02執行語句:】

cd /software/ && yarn-daemon.sh start resourcemanager && jps

【查看兩個master誰是主節點:】

[hadoop@master01 software]$ hdfs haadmin -getServiceState nn1
active (主節點)
[hadoop@master01 software]$ hdfs haadmin -getServiceState nn2
standby (備用主節點)
【查看兩個resourcemanager誰是主:】
[hadoop@master01 hadoop]$ yarn rmadmin -getServiceState rm1
active(主)
[hadoop@master01 hadoop]$ yarn rmadmin -getServiceState rm2
standby(備用)

【DFSZKFailoverController是Hadoop-2.7.0中HDFS NameNode HA實現的中心組件,它負責整體的故障轉移控制等。它是一個守護進程,通過main()方法啟動,繼承自ZKFailoverController】

七、使用hdfs命令操作集群文件

【在master01新建測試文件mytest.txt,並上傳到hdfs集群目錄;且現在集群的前綴是hdfs://nsa/這是在hdfs-site.xml中配置的】

 

【在ZK集群slave節點中,可以看到】

 

 

【瀏覽器查看該節點的狀態(端口號是在hdfs-site.xml文件中配置的)】
http://master的IP地址:50070   http://master的IP地址:8088

【如果出問題了,那么執行下面的語句:】

cd /software/hadoop-2.7.3/ && rm -rf QJMetaData/ work/ logs/* && cd /software

 

八、關閉啟動的集群:

【關閉YARN集群】cd /software/ && stop-yarn.sh
【YARN集群關閉時,同樣不會把另外一個備用主節點的YARN集群拉起來關閉,所以在master02執行語句:】
cd /software/ && yarn-daemon.sh stop resourcemanager
【關閉HDFS集群】cd /software/ && stop-dfs.sh
【關閉slave節點的QuorumPeerMain進程】cd /software/zookeeper-3.4.10/bin/ && ./zkServer.sh stop && jps

 

 

強制轉換結點的狀態:

<!-- 開啟NN節點宕機后自動切換 -->
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
   <!-- 現將true改成false -->
  <value>true</value>
</property>


<!-- 強制修改節點的狀態,此操作不可逆,一般不做該操作 -->
  hdfs haadmin -transitionToActive --forceactive nn1 
  hdfs haadmin -transitionToStandby nn1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM