zookeeper_0_搭建叢集模式以及遇到的問題
阿新 • • 發佈:2018-12-20
title: zookeeper搭建叢集模式以及遇到的問題 tags: zookeeper author: 辰砂
搭建步驟
一. 安裝jdk(我準備的是1.8版本)
二.搭建zookeeper叢集模式
1.環境準備
本地虛擬機器準備三臺虛擬機器準備搭建
192.168.70.130 node1
192.168.70.131 node2
192.168.70.132 node3
在官網上下載zookeeper 的包並拷貝到三個節點上
scp zookeeper-3.5.0-alpha.tar.gz [email protected]:/home/taojian/software/zookeeper
更改檔案,由於zookeeper會用到zoo.cfg,所以需要找到位置並修改
路徑/home/taojian/software/zookeeper/zookeeper-3.5.0-alpha/conf 下面的
zoo_sample.cfg 檔案需要改名
命令: mv zoo_sample.cfg zoo.cfg
更改zoo.cfg檔案內容
initLimit=5 syncLimit=2 clientPort=2181 tickTime=2000 dataDir=/home/taojian/software/zookeeper/data dataLogDir=/home/taojian/software/zookeeper/datalog server.1=192.168.70.130:2888:3888 server.2=192.168.70.131:2888:3888 server.3=192.168.70.132:2888:3888
注意:
dataDir 和dataLogDir 裡面的路徑檔案一定需要存在,同時需要在dataDir路徑下面建立檔案myid,表明當前的id。假如 192.168.70.130 這個節點,在zoo.cfg 的配置檔案上是server.1在裡面配置1就可以了
zoo.cfg 這個檔案是三臺機器上面都需要存在的,統一檔案即可
驗證服務
在不同的節點上面啟動zookeeper服務
sh zkServer.sh start
sh zkServer.sh status
sh zkServer.sh stop
檢視狀態後出現了每一個zookeeper的身份說明執行成功
問題總結
1.在啟動zookeeper服務的時候出現 UnkownHostException :未知的服務 這種情況的時候,可以檢視你的防火牆的問題
firewall-cmd --state # 檢視防火牆是否running
systemctl stop firewalld.service # 關閉防火牆
systemctl disable firewalld.service # 開機防止啟動防火牆
firewall-cmd --state
2.叢集搭建完成後發現ip變動,vmfusion上面固定IP
1.在你本地終端檢視
sudo vim /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf\n
2.修改
subnet 192.168.70.0 netmask 255.255.255.0 {
# range是ip範圍
range 192.168.70.128 192.168.70.254;
option broadcast-address 192.168.70.255;
option domain-name-servers 192.168.70.2;
option domain-name localdomain;
default-lease-time 1800;
host CentOS7_node1 {
# CentOS7_node1 你的虛擬機器名字
hardware ethernet 00:50:56:27:40:E2;
# 你的虛擬機器節點的mac地址
fixed-address 192.168.70.130;
#固定ip ,當然這個固定ip需要在上面的ip範圍內
}
3.java如何連線zookeeper(原生的zookeeper的API,zkClient和Curator) 演示:原生的zookeeper
public class ZookeeperBase {
/** zookeeper地址 */
static final String CONNECT_ADDR = "192.168.70.130:2181,192.168.70.131:2181,192.168.70.132:2181";
/** session超時時間 */
static final int SESSION_OUTTIME = 2000;//ms
/** 訊號量,阻塞程式執行,用於等待zookeeper連線成功,傳送成功訊號 */
static final CountDownLatch connectedSemaphore = new CountDownLatch(1);
public static void main(String[] args) throws Exception{
ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher(){
@Override
public void process(WatchedEvent event) {
//獲取事件的狀態
KeeperState keeperState = event.getState();
EventType eventType = event.getType();
//如果是建立連線
if(KeeperState.SyncConnected == keeperState){
if(EventType.None == eventType){
//如果建立連線成功,則傳送訊號量,讓後續阻塞程式向下執行
connectedSemaphore.countDown();
System.out.println("zk 建立連線");
}
}
}
});
//進行阻塞
connectedSemaphore.await();