在 CentOS7 上部署 zookeeper 服務html
1 用 SecureCRT 或 XShell 等 Linux 客戶端工具鏈接至 CentOS7 服務器;算法
2 進入到 /usr/local/tools 目錄中:
cd /usr/local/
如沒有此目錄則建立:
mkdir -p toolsapache
3 下載 zookeeper-3.4.8.tar.gz:
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz服務器
4 返回到上一級目錄並建立 zookeeper 文件夾:
cd ..
mkdir -p zookeepersession
5 將 zookeeper-3.4.8 文件從 /usr/local/tools 文件夾中移動到 /usr/local/zookeeper 文件夾中:
mv ./tools/zookeeper-3.4.8 ./zookeeper/ide
6 進入到 zookeeper/zookeeper-3.4.8/conf 目錄中:
cd zookeeper/zookeeper-3.4.8/conf工具
7 複製 zoo_sample.cfg 文件並將新文件命名爲 zoo.cfg:
cp zoo_sample.cfg zoo.cfg性能
8 修改 zoo.cfg 文件:
vi zoo.cfg
進入到 zoo.cfg 文件中;
修改數據文件夾 dataDir=/tmp/zookeeper 爲 dataDir=/usr/local/zookeeper/zookeeper-3.4.8/data
配置日誌文件夾 dataLogDir=/usr/local/zookeeper/zookeeper-3.4.8/logs
保存並退出;
9 將 zookeeper 的根目錄設置到系統環境變量 PATH 中:
sudo vi /etc/profile
在打開的 profile 文件末尾追加以下配置:
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.8
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH
保存並退出 vi;
刷新 profile 文件使之當即生效:
source /etc/profile大數據
10 執行以下命令啓動 zookeeper 服務:
zkServer.sh start
如打印以下信息則代表啓動 zookeeper 成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTEDui
因爲咱們將 zookeeper 配置到了系統環境變量 PATH 中,故此能夠在任何地方執行 zookeeper 命令;
若是咱們沒有作第 9 步,那麼咱們須要先進入到 zookeeper 的命令工具文件夾中:
cd /usr/local/zookeeper/zookeeper-3.4.8/bin
而後在執行啓動 zookeeper 服務的操做;
11 查看 zookeeper 當前的狀態:
zkServer.sh status
出現以下信息:
Using config: /usr/local/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: standalone
其中 standalone 表示處於單機模式;
12 關閉 zookeeper 服務:
zkServer.sh stop
如打印以下信息,則代表關閉 zookeeper 成功:
Using config: /usr/local/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
13 重啓 zookeeper 服務:
zkServer.sh restart
如打印以下信息,則代表重啓 zookeeper 服務成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
14 經過客戶端程序鏈接指定 IP 的 zookeeper 服務器,也能夠鏈接任意 IP 的 zookeeper 服務器:
zkCli.sh -server localhost:2181
如何是本機也能夠直接使用以下命令:
zkCli.sh
15 查看 zookeeper 的啓動狀態:
echo ruok | nc localhost 2181
16 查看 zookeeper 的進程:
jps
打印信息中的 QuorumPeerMain 以前的數字表示 zookeeper 的PID;
17 在 /usr/local/zookeeper/zookeeper-3.4.8/data/ 目錄下建立 myid 文件,其內容爲服務的編號;
18 zooKeeper 服務之間不存在刻意的主從關係(master/slave 關係),各個節點都是服務器,若是服務器 leader 掛了,會立馬從從服務器 follower 中選舉一個出來做爲新的 leader 服務器。 各 zookeeper 服務器之間經過 TCP 協議交流信息。
附一:
zookeeper 下載列表:
http://apache.fayea.com/zookeeper/
能夠選擇
http://apache.fayea.com/zookeeper/zookeeper-3.4.8/
附二:
zoo.cfg 配置文件:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
# 同步階段一個放鬆和接受請求之間,不容許超過多少個tick的時間
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
# dataDir=/tmp/zookeeper
# 配置數據目錄
dataDir=/usr/local/zookeeper/zookeeper-3.4.8/data
# 配置日誌目錄
dataLogDir=/usr/local/zookeeper/zookeeper-3.4.8/logs
# the port at which the clients will connect
# 客戶端訪問 zookeeper 的端口號:
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
# 2888,3888 are election port
# server.一、二、3 表示 zookeeper 集羣中的 一、二、3 號服務器;
# zookeeper 表示當前的 zookeeper 服務器的IP,因爲 zookeeper 以在 hosts 文件中映射了本地的 IP,故此這裏直接寫 zookeeper 便可;
# 2888 表示 一、二、3 號 zookeeper 服務器與 zookeeper 集羣中的 leader 服務器交流信息的端口;
# 3888 表示當 zookeeper 集羣中的 leader 服務器掛掉以後,用來選舉新的 leader 服務器時交流信息的端口;
server.1=192.168.1.100:2888:3888
server.2=192.168.1.101:2888:3888
server.3=192.168.1.102:2888:3888
附三:
zookeeper的配置文件說明:
clientPort # 客戶端鏈接server的端口,即對外服務端口,通常設置爲2181。
dataDir # 存儲快照文件snapshot的目錄。默認狀況下,事務日誌也會存儲在這裏。建議同時配置參數dataLogDir, 事務日誌的寫性能直接影響zk性能。
tickTime # ZK中的一個時間單元。ZK中全部時間都是以這個時間單元爲基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。
dataLogDir # 事務日誌輸出目錄。儘可能給事務日誌的輸出配置單獨的磁盤或是掛載點,這將極大的提高ZK性能。
globalOutstandingLimit # 最大請求堆積數。默認是1000。ZK運行的時候, 儘管server已經沒有空閒來處理更多的客戶端請求了,可是仍是容許客戶端將請求提交到服務器上來,提升吞吐性能。固然,爲了防止Server內存溢出,這個請求堆積數仍是須要限制下的。 Java system property:zookeeper.globalOutstandingLimit.
preAllocSize # 預先開闢磁盤空間,用於後續寫入事務日誌。默認是64M,每一個事務日誌大小就是64M。若是ZK的快照頻率較大的話,建議適當減少這個參數。
snapCount # 每進行snapCount次事務日誌輸出後,觸發一次快照(snapshot), 此時,ZK會生成一個snapshot.*文件,同時建立一個新的事務日誌文件log.*。默認是100000.(真正的代碼實現中,會進行必定的隨機數處理,以免全部服務器在同一時間進行快照而影響性能)。
traceFile # 用於記錄全部請求的log,通常調試過程當中可使用,可是生產環境不建議使用,會嚴重影響性能
maxClientCnxns # 單個客戶端與單臺服務器之間的鏈接數的限制,是ip級別的,默認是60,若是設置爲0,那麼代表不做任何限制。請注意這個限制的使用範圍,僅僅是單臺客戶端機器與單臺ZK服務器之間的鏈接數限制,不是針對指定客戶端IP,也不是ZK集羣的鏈接數限制,也不是單臺ZK對全部客戶端的鏈接數限制。
clientPortAddress # 對於多網卡的機器,能夠爲每一個IP指定不一樣的監聽端口。默認狀況是全部IP都監聽 clientPort 指定的端口。
minSessionTimeoutmaxSessionTimeout # Session超時時間限制,若是客戶端設置的超時時間不在這個範圍,那麼會被強制設置爲最大或最小時間。默認的Session超時時間是在2 * tickTime ~ 20 * tickTime 這個範圍 。
fsync.warningthresholdms # 事務日誌輸出時,若是調用fsync方法超過指定的超時時間,那麼會在日誌中輸出警告信息。默認是1000ms。
autopurge.purgeInterval # 3.4.0及以後版本,ZK提供了自動清理事務日誌和快照文件的功能,這個參數指定了清理頻率,單位是小時,須要配置一個1或更大的整數,默認是0,表不開啓自動清理功能
autopurge.snapRetainCount # 這個參數和上面的參數搭配使用,這個參數指定了須要保留的文件數目。默認是保留3個。
electionAlg #在以前的版本中, 這個參數配置是容許咱們選擇leader選舉算法,可是因爲在之後的版本中,只會留下一種「TCP-based version of fast leader election」算法,因此這個參數目前看來沒有用了。
initLimit # Follower在啓動過程當中,會從Leader同步全部最新數據,而後肯定本身可以對外服務的起始狀態。Leader容許F在 initLimit 時間內完成這個工做。一般狀況下,咱們不用太在乎這個參數的設置。若是ZK集羣的數據量確實很大了,F在啓動的時候,從Leader上同步數據的時間也會相應變長,所以在這種狀況下,有必要適當調大這個參數了。
syncLimit # 在運行過程當中,Leader負責與ZK集羣中全部機器進行通訊,例如經過一些心跳檢測機制,來檢測機器的存活狀態。若是L發出心跳包在syncLimit以後,尚未從F那收到響應,那麼就認爲這個F已經不在線了。注意:不要把這個參數設置得過大,不然可能會掩蓋一些問題。
leaderServes # 默認狀況下,Leader是會接受客戶端鏈接,並提供正常的讀寫服務。可是,若是你想讓Leader專一於集羣中機器的協調,那麼能夠將這個參數設置爲no,這樣一來,會大大提升寫操做的性能。
server.X=A:B:C # 其中X是一個數字, 表示這是第幾號server. A是該server所在的IP地址. B配置該server和集羣中的leader交換消息所使用的端口. C配置選舉leader時所使用的端口. 這裏的x是一個數字,與myid文件中的id是一致的。右邊能夠配置兩個端口,第一個端口用於F和L之間的數據同步和其它通訊,第二個端口用於Leader選舉過程當中投票通訊。
group.x=nnnnn[:nnnnn]weight.x=nnnnn # 對機器分組和權重設置,
cnxTimeout # Leader選舉過程當中,打開一次鏈接的超時時間,默認是5s
zookeeper.DigestAuthenticationProvider.superDigest # ZK權限設置相關
skipACL # 對全部客戶端請求都不做ACL檢查。若是以前節點上設置有權限限制,一旦服務器上打開這個開頭,那麼也將失效
forceSync # 這個參數肯定了是否須要在事務日誌提交的時候調用 FileChannel .force來保證數據徹底同步到磁盤
jute.maxbuffer # 每一個節點最大數據量,是默認是1M。這個限制必須在server和client端都進行設置纔會生效。