#!/bin/sh
system_version(){
SYSTEM=`rpm -q centos-release|cut -d- -f3`
if [ $SYSTEM = "6" ] ; then
echo "系統的版本是centos 6,下一步安裝java"
elif [ $SYSTEM = "7" ] ; then
echo "系統的版本是centos 7,該kafka應該安裝在6的環境中"
exit 1
elif [ $SYSTEM = "5" ] ; then
echo "系統的版本是centos 5,該kafka應該安裝在6的環境中"
exit 1
else
echo "What?"
fi
}
install_java(){
java -version
if [ $? -eq 0 ];then
echo '有 java環境'
else
echo '無java環境,安裝java'
yum install java-1.8.0-openjdk.x86_64
fi
}
install_zookeep(){
#ZK中的一個時間單元。ZK中所有時間都是以這個時間單元為基礎,進行整數倍配置的
tickTime=2000
#同步leader的時間
initLimit=10
#Leader負責與ZK集群中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀態
syncLimit=5
#zk的數據目錄
dataDir="/data/logs/zkdata"
if [ -d $dataDir ];then
rm -fr $dataDir
fi
mkdir -pv $dataDir
#zk的日志目錄
dataLogDir="/data/logs/zkdatalog"
if [ -d $dataLogDir ];then
rm -fr $dataLogDir
fi
mkdir -pv $dataLogDir
clientPort=2181
server.1=$1":4001:4002"
server.2=$2":4001:4002"
server.3=$3":4001:4002"
echo $server.1
cd /mnt/test
#wget https://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar -zxvf zookeeper-3.4.14.tar.gz
if [ -d '/usr/local/zookeeper' ];then
rm -fr /usr/local/zookeeper
fi
mv zookeeper-3.4.14 /usr/local/zookeeper
cd /usr/local/zookeeper/conf
cat << EOF > zoo.cfg
tickTime=$tickTime
initLimit=$initLimit
syncLimit=$syncLimit
dataDir=$dataDir
dataLogDir=$dataLogDir
clientPort=$clientPort
server.1=$1:4001:4002
server.2=$2:4001:4002
server.3=$3:4001:4002
EOF
#創建myid file
cd $dataDir
id1=$4
cat << EOF > myid
$id1
EOF
/usr/local/zookeeper/bin/zkServer.sh start
netstat -tunlp |grep 2281
if [ $? -eq 0 ];then
echo 'zookeep 起來了'
else
echo 'zookeep 沒起來'
fi
#設置開機自啟動
grep zookeeper /etc/rc.d/rc.local
if [ $? -eq 0 ];then
echo 'zookeeper開機自啟動已經設置';
else
echo '/usr/local/zookeeper/bin/zkServer.sh start' >> /etc/rc.d/rc.local
fi
}
install_kafka(){
cd /mnt/test
#wget https://www-us.apache.org/dist/kafka/2.2.0/kafka_2.12-2.2.0.tgz
tar -zxvf kafka_2.12-2.2.0.tgz
if [ -d '/usr/local/kafka' ];then
rm -fr /usr/local/kafka
fi
mv kafka_2.12-2.2.0 /usr/local/kafka
cd /usr/local/kafka/config/
mv server.properties /mnt/server.properties
cat << EOF > server.properties
broker.id=$4
listeners=PLAINTEXT://$1:9092
zookeeper.connect=$1:2181,$2:2181,$3:2181
log.retention.hours=72
log.segment.bytes=1073741824
log.flush.interval.ms=1000
replica.lag.time.max.ms:10000
replica.lag.max.messages:4000
num.replica.fetchers:1
default.replication.factor:2
acks:1
auto.create.topics.enable=true
EOF
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/loca/kafka/config/server.properties
netstat -tunlp |grep 9092
if [ $? -eq 0 ];then
echo 'kafka起來了'
else
echo 'kafka沒起來'
fi
#設置開機自啟動
grep kafka /etc/rc.d/rc.local
if [ $? -eq 0 ];then
echo 'kafka已經設置開機自啟動'
else
echo '/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties' >> /etc/rc.d/rc.local
fi
}
#install_supervesod(){
#yum install epel-release
#yum install supervisor
#}
usage(){
echo "usage:%s ip1 ip2 ip3 id1
ip: ip代表kafka集群的每個ip,請將本機ip賦值給ip1
id1:代表每個kafka實例的唯一id,每個實例的id一定不能相同
"
}
if [ $# -eq 4 ];then
system_version
install_java
install_zookeep $1 $2 $3 $4
install_kafka $1 $2 $3 $4
else
echo "參數輸入有誤,請重試"
usage
exit 1
fi