1. 程式人生 > >zookeeper_0_搭建叢集模式以及遇到的問題

zookeeper_0_搭建叢集模式以及遇到的問題

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();