hadoop高可用性部署

高可用hdfs部署

當你使用hadop進入一段時間後,你可能會碰到更高的要求。系統穩定嗎?uptime時間能達到100%?爲了可以安撫這類擔心情緒你須要作更多的工做.在集羣裏hadoop的NameNode是SPOF模式,加上backup namenode保證namenode數據在硬盤正確完整的存儲,但一旦進程或者服務器掛掉,以及不得不進行的硬件更換升級致使停機,集羣同樣會處於不可用狀態,這也是運行中的hadoop生態系統最麻煩的事情。這時候你就只能重啓,或者在另一個服務器上啓動一個namenode.node

爲保證高可用性,咱們必須有1臺StandbyNamenode角色的服務器,它可以隨時保持與namenode服務器的狀態同步,隨時可以接替namenode的工做。最簡單的辦法是StandbyNamenode與namenode都使用NFS遠程掛載一個如出一轍的地址來作存儲。這樣當namenode的edits更改時StandbyNamenode可以隨時知道。nfs的方案可能不夠健壯,可是足夠說服其它人安心了。apache

準備一臺服務器做爲nfs服務端。硬盤網卡須要最好質量的。預算足夠的話建議購買專業的存儲主機。服務器

下面是配置過程:ssh

爲保證始終只有一個namenode是處於激活狀態的。也就是始終只有一個namenode能夠寫edits,必須有一個方法用來阻止非激活狀態的namenode去寫這個文件。稱爲fencing方法,在配置
dfs.ha.fencing.methods裏邊指定。ide

爲保證主備namenode的快速切換,全部DataNode都會同時配置這2個namenode的地址,同時向這2個namenode發送信息和心跳。 這2個namenode誰先啓動誰就處於初始激活狀態。oop

客戶端的datanode
hdfs-site.xml 配置以下:orm

<property>
<name>fs.defaultFS</name>
<value>hdfs://clusternamenode</value>
</property>
server

<property>
<name>dfs.nameservices</name>
<value>clusternamenode</value>
</property>

<property>
<name>dfs.ha.namenodes.clusternamenode</name>
<value>namenode1,namenode2</value>
</property>xml

namenode1,namenode2是你準備用於做爲主備namenode的服務器。最多就2臺!!進程

由於有2個namenode因此不少配置都要分別設置
<property>
<name>dfs.namenode.rpc-address.clusternamenode.namenode1</name>
<value>namenode1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.clusternamenode.namenode2</name>
<value>namenode2:8020</value>
</property>

指定每一個NameNode監聽的rpc通訊端口
the fully-qualified RPC address for each NameNode to listen on

這些配置也要做相應修改只是不一樣端口
dfs.namenode.servicerpc-address.clusternamenode.namenode1
dfs.namenode.servicerpc-address.clusternamenode.namenode2
dfs.namenode.http-address.clusternamenode.namenode1
dfs.namenode.http-address.clusternamenode.namenode2
dfs.namenode.shared.edits.dir file:///mnt//namenode-shared 指定nfs掛載的路徑


HDFS客戶端檢查目前激活的namenode是哪一個的驅動
<property>
<name>dfs.client.failover.proxy.provider.clusternamenode</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

fencing方法

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/${yourname}/.ssh/id_rsa</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
sshfence使用ssh鏈接的方式來攔截殺死服務進程,以防止它修改edits文件
dfs.ha.fencing.ssh.private-key-files 是ssh的登陸驗證文件路徑。你必須在2臺namenode上互相設置免密碼登陸。
若是沒有這個文件 /home/${yourname}/.ssh/id_rsa 。你能夠用命令ssh-keygen從新生成。
dfs.ha.fencing.ssh.connect-timeout 是sshfence的超時失效時間,到這個時間就認爲失敗了。

上面的設置咱們已經實現了 向2臺namenode發送信息跟保持心跳,同時防止2臺namenode同是處於激活狀態。可是激活的namenodey一旦掛掉,
仍是須要手動運行命令 bin/hdfs haadmin -failover來切換,zookeeper能幫咱們自動運行這個命令.
須要一個zookeeper的監控團。在生常環境中至少須要3個節點的zookeeper來組成這個監控團。zookeeper的節點只能是單數。
同時hdfs內置了一個zookeeper的客戶端ZKFailoverController,這個組件的做用是管理跟監控namenode的狀態,同時向zookeeper爭取一個稱爲znode鎖。
這個鎖處於激活狀態,該namenode處於激活狀態

zookeeper與ZKFailoverController的配置以下:(注意在生產環境中咱們至少須要3臺zookeeper)

<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.2.20</value>
</property>

重啓集羣后在namenode上運行:
bin/hdfs zkfc -formatZK //啓動zookeeper的監控客戶端。
到此高可用性的hdfs就上線了,接下來配置一套高可用hbase。

 

高可用hbase部署

先中止hbase集羣

配置conf/hbase-site.xml

<property>
<name>hbase.rootdir</name>
<value>hdfs://clusternamenode/hbase</value>
</property>

//clusternamenode 就是上面配置的hadoop namenode.

你可能須要刪除zookeeper上面的 /hbase目錄/splitlogs 這個文件。

hbase.zookeeper.property.quorum 192.168.2.20,192.168.2.21,192.168.2.22 zookeeper監管列表
運行是環境變量配置conf/hbase-env.sh :
HBASE_MANAGES_ZK false 不使用內置的zookeeper服務

啓動hbasebin/start-hbase.sh

相關文章
相關標籤/搜索