kafka運維のbroker拡張
背景:
最近会社の3ノードkafkaクラスタでは,2ノードが存在するカッターボックススイッチに故障リスクがあり,ポートup/downがランダムに現れることが分かった.そのため、この2つのbrokerを一時的に移行し、スイッチが修復されてから移行する必要があります.
以下は実験シミュレーションの全過程(拡張+縮小)である.
元の3ノードのkafkaはnode 1,node 2,node 3と仮定する.
空きポイントのサーバを2台用意します(ここではnode 4とnode 5と仮定します)
システムバージョン:CentOS 7
node1 192.168.2.187
node2 192.168.2.188
node3 192.168.2.189
node4 192.168.2.190
node5 192.168.2.191
kafkaの拡張操作は2ステップに分けられます.
1、zkノード拡張
2、kafkaノード拡張
まずnode 4 node 5に関連するソフトウェアを配置します.
1、node 4で実行する:
node 1 node 2 node 3のzk構成を次のように変更します.
1、node 4(192.168.2.1190)で修正:
ここではkafka-console-producerを自分で使うことができます.shとkafka-console-consumer.shは正常に動作しているかどうかを自己測定し、kafka-managerに再均衡が必要なコピーがあるかどうかを確認します.
第3部:リスクbrokerノードのデータ移行(ここではこのような操作が必要であり、単純な拡張にはこのステップは必要ありません):
ここではkafka-managerというwebプラットフォームを使ってtopicの移行操作をすることができます.簡単です.ここではスクリーンショットをしません.
第四部分:node 2 node 3ラインオフ操作
1、node 2 node 3ノード上のzkプロセスを閉じ、zk leaderノードを自動的に選択させる
2、node 2 node 3上のkafkaプロセスを閉じ、kafka controllerノードを自動的に選挙させる
##発生する可能性のある問題:
移行中、consumergroupがtopicを移行したときに異常が発生し、ビジネス側がconsumerを再起動した後、エラーが発生しました.
最近会社の3ノードkafkaクラスタでは,2ノードが存在するカッターボックススイッチに故障リスクがあり,ポートup/downがランダムに現れることが分かった.そのため、この2つのbrokerを一時的に移行し、スイッチが修復されてから移行する必要があります.
以下は実験シミュレーションの全過程(拡張+縮小)である.
元の3ノードのkafkaはnode 1,node 2,node 3と仮定する.
空きポイントのサーバを2台用意します(ここではnode 4とnode 5と仮定します)
システムバージョン:CentOS 7
node1 192.168.2.187
node2 192.168.2.188
node3 192.168.2.189
node4 192.168.2.190
node5 192.168.2.191
kafkaの拡張操作は2ステップに分けられます.
1、zkノード拡張
2、kafkaノード拡張
まずnode 4 node 5に関連するソフトウェアを配置します.
cd /root/
tar xf zookeeper-3.4.9.tar.gz
tar xf kafka_2.11-0.10.1.0.tar.gz
tar xf jdk1.8.0_101.tar.gz
mv kafka_2.11-0.10.1.0 zookeeper-3.4.9 jdk1.8.0_101 /usr/local/
cd /usr/local/
ln -s zookeeper-3.4.9 zookeeper-default
ln -s kafka_2.11-0.10.1.0 kafka-default
ln -s jdk1.8.0_101 jdk-default
第一部:zkノードの拡張:1、node 4で実行する:
mkdir /usr/local/zookeeper-default/data/
vim /usr/local/zookeeper-default/conf/zoo.cfg , 2 :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-default/data/
clientPort=2181
maxClientCnxns=2000
maxSessionTimeout=240000
server.1=192.168.2.187:2888:3888
server.2=192.168.2.188:2888:3888
server.3=192.168.2.189:2888:3888
server.4=192.168.2.190:2888:3888
server.5=192.168.2.191:2888:3888
##
rm -fr /usr/local/zookeeper-default/data/*
## myid zk
echo 4 > /usr/local/zookeeper-default/data/myid
2、node 4のzkプロセスを起動する:/usr/local/zookeeper-default/bin/zkServer.sh start
/usr/local/zookeeper-default/bin/zkServer.sh status :
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-default/bin/../conf/zoo.cfg
Mode: follower
/usr/local/zookeeper-default/bin/zkCli.sh
echo stat | nc 127.0.0.1 2181 :
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
/127.0.0.1:50072[1](queued=0,recved=6,sent=6)
/127.0.0.1:50076[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/2/13
Received: 24
Sent: 23
Connections: 2
Outstanding: 0
Zxid: 0x10000009a
Mode: follower
Node count: 63
3、node 5で実行する:vim /usr/local/zookeeper-default/conf/zoo.cfg 2 :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-default/data/
clientPort=2181
maxClientCnxns=2000
maxSessionTimeout=240000
server.1=192.168.2.187:2888:3888
server.2=192.168.2.188:2888:3888
server.3=192.168.2.189:2888:3888
server.4=192.168.2.190:2888:3888
server.5=192.168.2.191:2888:3888
##
rm -fr /usr/local/zookeeper-default/data/*
## myid zk
echo 5 > /usr/local/zookeeper-default/data/myid
4、node 5のzkプロセスを起動する:/usr/local/zookeeper-default/bin/zkServer.sh start
/usr/local/zookeeper-default/bin/zkServer.sh status
echo stat | nc 127.0.0.1 2181 :
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
/127.0.0.1:45582[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 3
Sent: 2
Connections: 1
Outstanding: 0
Zxid: 0x10000009a
Mode: follower
Node count: 63
echo mntr | nc 127.0.0.1 2181 , :
zk_version3.4.9-1757313, built on 08/23/2016 06:50 GMT
zk_avg_latency0
zk_max_latency194
zk_min_latency0
zk_packets_received101436
zk_packets_sent102624
zk_num_alive_connections4
zk_outstanding_requests0
zk_server_statefollower
zk_znode_count141
zk_watch_count190
zk_ephemerals_count7
zk_approximate_data_size10382
zk_open_file_descriptor_count35
zk_max_file_descriptor_count102400
5、新しく追加した2つのzkノードに問題がないことを確認したら、前の古い3台のzkの構成を修正して、この3つのzkを再起動する必要があります.node 1 node 2 node 3のzk構成を次のように変更します.
vim /usr/local/zookeeper-default/conf/zoo.cfg 2 :
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-default/data/
clientPort=2181
maxClientCnxns=2000
maxSessionTimeout=240000
server.1=192.168.2.187:2888:3888
server.2=192.168.2.188:2888:3888
server.3=192.168.2.189:2888:3888
server.4=192.168.2.190:2888:3888
server.5=192.168.2.191:2888:3888
再起動に注意するときは、まずfollowerノードを再起動します(例えば、followerはnode 2、node 3、leaderはnode 1です)/usr/local/zookeeper-default/bin/zkServer.sh stop
/usr/local/zookeeper-default/bin/zkServer.sh status
/usr/local/zookeeper-default/bin/zkServer.sh start
/usr/local/zookeeper-default/bin/zkServer.sh status
第2部:kafkaノードの拡張:1、node 4(192.168.2.1190)で修正:
mkdir -pv /usr/local/kafka-default/kafka-logs
vim /usr/local/kafka-default/config/server.properties :
broker.id=4 #
listeners=PLAINTEXT://:9094,TRACE://:9194
advertised.listeners=PLAINTEXT://192.168.2.190:9094
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/usr/local/kafka-default/kafka-logs
num.partitions=3
num.recovery.threads.per.data.dir=1
log.retention.hours=24
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.2.187:2181,192.168.2.188:2181,192.168.2.189:2181,192.168.2.190:2181,192.168.2.191:2181 #
zookeeper.connection.timeout.ms=6000
default.replication.factor=2
compression.type=gzip
offsets.retention.minutes=2880
controlled.shutdown.enable=true
delete.topic.enable=true
2、node 4のkafkaプログラムを起動する:/usr/local/kafka-default/bin/kafka-server-start.sh -daemon /usr/local/kafka-default/config/server.properties
3、node 5(192.168.2.1191)で修正mkdir -pv /usr/local/kafka-default/kafka-logs
vim /usr/local/kafka-default/config/server.properties :
broker.id=5 #
listeners=PLAINTEXT://:9094,TRACE://:9194
advertised.listeners=PLAINTEXT://192.168.2.191:9094
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/usr/local/kafka-default/kafka-logs
num.partitions=3
num.recovery.threads.per.data.dir=1
log.retention.hours=24
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.2.187:2181,192.168.2.188:2181,192.168.2.189:2181,192.168.2.190:2181,192.168.2.191:2181 #
zookeeper.connection.timeout.ms=6000
default.replication.factor=2
compression.type=gzip
offsets.retention.minutes=2880
controlled.shutdown.enable=true
delete.topic.enable=true
4、node 5のkafkaプログラムを起動する:/usr/local/kafka-default/bin/kafka-server-start.sh -daemon /usr/local/kafka-default/config/server.properties
5、テストに問題がないかここではkafka-console-producerを自分で使うことができます.shとkafka-console-consumer.shは正常に動作しているかどうかを自己測定し、kafka-managerに再均衡が必要なコピーがあるかどうかを確認します.
第3部:リスクbrokerノードのデータ移行(ここではこのような操作が必要であり、単純な拡張にはこのステップは必要ありません):
ここではkafka-managerというwebプラットフォームを使ってtopicの移行操作をすることができます.簡単です.ここではスクリーンショットをしません.
第四部分:node 2 node 3ラインオフ操作
1、node 2 node 3ノード上のzkプロセスを閉じ、zk leaderノードを自動的に選択させる
2、node 2 node 3上のkafkaプロセスを閉じ、kafka controllerノードを自動的に選挙させる
##発生する可能性のある問題:
移行中、consumergroupがtopicを移行したときに異常が発生し、ビジネス側がconsumerを再起動した後、エラーが発生しました.