我們物理部署三臺(tái)zookeeper,因?yàn)槭潜镜貑?dòng)皇帮,所以需要三份配置文件溯壶。
配置文件都是類似的芋酌。
開放2181端口服務(wù)器的配置
tickTime=2000
dataDir=/Users/olifer/middle/zk/1/data
dataLogDir=/Users/olifer/middle/zk/1/datalog
clientPort=2181
initLimit=5
syncLimit=2
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.3=127.0.0.1:10003:20003
開放2182端口服務(wù)器的配置
tickTime=2000
dataDir=/Users/olifer/middle/zk/2/data
dataLogDir=/Users/olifer/middle/zk/2/datalog
clientPort=2182
initLimit=5
syncLimit=2
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.3=127.0.0.1:10003:20003
開放2183端口服務(wù)器的配置
tickTime=2000
dataDir=/Users/olifer/middle/zk/3/data
dataLogDir=/Users/olifer/middle/zk/3/datalog
clientPort=2183
initLimit=5
syncLimit=2
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.3=127.0.0.1:10003:20003
我們會(huì)發(fā)現(xiàn)首尼,這三份配置文件,不同點(diǎn)端口不同和存放數(shù)據(jù)的文件夾以及存放log的文件夾不同耙替。但是我們發(fā)現(xiàn)這三份配置文件有一個(gè)相同的配置
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.3=127.0.0.1:10003:20003
server 1,2,3組成一個(gè)集群,但是我們知道server 1,server 2,server 3?通過創(chuàng)建在dataDir里添加myid文件谚中,里面的內(nèi)容就是server的標(biāo)示1或2或3渴杆,這樣就給server增加了物理的標(biāo)識(shí),所以在配置文件中宪塔,server.1就知道是在集群中的哪臺(tái)機(jī)器。server.NUM=IP:port1:port2 囊拜,NUM表示本機(jī)為第幾號(hào)服務(wù)器某筐,IP 為 這個(gè)server的ip地址,port1為leader與follower通信端口冠跷,port2為參與競選leader的通信端口南誊。
配置文件解釋完畢,我們就開始啟動(dòng)了蜜托。
zkServer start /Users/olifer/middle/zk/1/zoo.conf
zkServer start /Users/olifer/middle/zk/2/zoo.conf
zkServer start /Users/olifer/middle/zk/3/zoo.conf
每臺(tái)啟動(dòng)時(shí)如果開到下面的日志抄囚,說明配置成功了
JMX enabled by default
Using config: /Users/olifer/middle/zk/3/zoo.conf
Starting zookeeper ... STARTED
我們看一下每臺(tái)zk的角色
zkServer status /Users/olifer/middle/zk/1/zoo.conf
JMX enabled by default
Using config: /Users/olifer/middle/zk/1/zoo.conf
Mode: follower
zkServer status /Users/olifer/middle/zk/2/zoo.conf
JMX enabled by default
Using config: /Users/olifer/middle/zk/2/zoo.conf
Mode: leader
zkServer status /Users/olifer/middle/zk/3/zoo.conf
JMX enabled by default
Using config: /Users/olifer/middle/zk/3/zoo.conf
Mode: follower
我們可以看到server_id=2的zk是leader,其他的都是follower。我們連接上2182(leader)的機(jī)器
zkCli -server 127.0.0.1:2182
Connecting to 127.0.0.1:2182
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2182(CONNECTED) 0]
在此機(jī)器上創(chuàng)建一個(gè)永久節(jié)點(diǎn)
[zk: 127.0.0.1:2182(CONNECTED) 1] create /linyang olifer
Created /linyang
[zk: 127.0.0.1:2182(CONNECTED) 2] ls /linyang
[]
[zk: 127.0.0.1:2182(CONNECTED) 3] get /linyang
olifer
cZxid = 0x300000002
ctime = Tue Dec 05 09:26:49 CST 2017
mZxid = 0x300000002
mtime = Tue Dec 05 09:26:49 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: 127.0.0.1:2182(CONNECTED) 4]
ls 查看路徑下的節(jié)點(diǎn)橄务,create 創(chuàng)建節(jié)點(diǎn)并且指明節(jié)點(diǎn)存儲(chǔ)的內(nèi)容幔托,get 獲取節(jié)點(diǎn)存儲(chǔ)的內(nèi)容等。在leader上進(jìn)行了存儲(chǔ)的操作,我們可以看一下重挑,在follower上的反應(yīng)嗓化,連接上2181的機(jī)器
zkCli -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper, linyang]
[zk: 127.0.0.1:2181(CONNECTED) 1] ls /linyang
[]
[zk: 127.0.0.1:2181(CONNECTED) 2] get /linyang
olifer
cZxid = 0x300000002
ctime = Tue Dec 05 09:26:49 CST 2017
mZxid = 0x300000002
mtime = Tue Dec 05 09:26:49 CST 2017
pZxid = 0x300000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 3]
可以看到數(shù)據(jù)已經(jīng)同步過來了。我們嘗試在follower上進(jìn)行寫操作谬哀,看看結(jié)果怎么樣
[zk: 127.0.0.1:2181(CONNECTED) 4] create /follower test
Created /follower
[zk: 127.0.0.1:2181(CONNECTED) 5] get /follower
test
cZxid = 0x300000004
ctime = Tue Dec 05 09:32:56 CST 2017
mZxid = 0x300000004
mtime = Tue Dec 05 09:32:56 CST 2017
pZxid = 0x300000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 6]
也是可以創(chuàng)建成功的刺覆,這一點(diǎn)和redis不同,redis默認(rèn)的是從節(jié)點(diǎn)是只讀的操作史煎。follower進(jìn)行的修改谦屑,leader可以看到嗎?試一下
[zk: 127.0.0.1:2182(CONNECTED) 4] get /follower
test
cZxid = 0x300000004
ctime = Tue Dec 05 09:32:56 CST 2017
mZxid = 0x300000004
mtime = Tue Dec 05 09:32:56 CST 2017
pZxid = 0x300000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: 127.0.0.1:2182(CONNECTED) 5]
答案是可以的篇梭。zk的數(shù)據(jù)復(fù)制模式就講到這里氢橙。