第一个服务是zookeeper
什么是zookeeper?
ZooKeeper 是一个开源的分布式协调服务,由雅虎创建,是 Google Chubby 的开源实现。 分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协 调/通知、集群管理、Master 选举、配置维护,名字服务、分布式同步、分布式锁和分布式队列等功能。
如何启动zookeeper集群?
ZooKeeper服务的启动方式分为三种,即单机模式、伪分布式模式、分布式模式。调试过程建议尽量使用分布式模式,单机模式不推荐在生产环境下使用,伪分布式模式实质上是在一个进程内派生多个线程模拟分布式形态,由于操作系统的内部结构设计,容易造成一些问题,建议与其解决问题不如切换到分布式模式。生产环境下建议一定采用分布式模式,如果机器不够,推荐采用虚拟机方式。所以这里只写分布式的启动方式。
首先得找到zookeeper放在哪里
进入服务器的根目录,输入:
$ find -name zookeeper
就能看到一系列的文件夹目录,找到其中带有bin/,应该就是zookeeper的放置位置了。
因为是分布式,我这里有两台服务器,都执行下面操作:
$ cd /usr/local/zookeeper/bin
$ ./zkServer.sh start
出现STARTED后,说明ZooKeeper启动成功,如下图所示。
停止某个节点的ZooKeeper执行如下指令:
$ cd /usr/local/zookeeper/bin
$ ./zkServer.sh stop
然后,查看ZooKeeper的2181端口是否启动:netstat -tnpl|grep 2181
出现如下图所示后,说明ZooKeeper端口号启动成功,如下:
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 2288/java
ps:保证各服务器的防火墙打开
CentOS7执行如下指令可以开放端口号:
firewall-cmd --permanent --add-port=2181/tcp
firewall-cmd --permanent --add-port=2888/tcp
firewall-cmd --permanent --add-port=3888/tcp
添加端口号:
重新载入防火墙配置:
firewall-cmd --reload
查看配置是否生效:
firewall-cmd --list-ports
firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
这里我碰到了问题:FirewallD is not running
原因应该是防火墙没打开。
如何打开防火墙?
①通过systemctl status firewalld查看firewalld状态,发现当前是dead状态,即防火墙未开启。
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
②通过systemctl start firewalld开启防火墙,没有任何提示即开启成功。
③再次通过systemctl status firewalld查看firewalld状态,显示running即已开启了。
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2018-10-10 13:41:38 CST; 28s ago
Main PID: 2341 (firewalld)
CGroup: /system.slice/firewalld.service
└─2341 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
Oct 10 13:41:37 izbp18d3jgsseseh1yxjfiz systemd[1]: Starting firewalld - dynamic firewall daemon...
Oct 10 13:41:38 izbp18d3jgsseseh1yxjfiz systemd[1]: Started firewalld - dynamic firewall daemon.
④如果要关闭防火墙设置,可能通过systemctl stop firewalld这条指令来关闭该功能。
ok,防火墙开启,回到前面设置开放端口
输入后会返回success,说明执行成功
这里又碰到一个问题
firewall-cmd --permanent --add-port=2181/tcp显示成功了,但是
重新载入防火墙配置:
firewall-cmd --reload
查看配置是否生效:
firewall-cmd --list-ports
之后,该端头并没有显示出来。说明添加实际上是失败了。
检查一下端口
netstat -nap #会列出所有正在使用的端口及关联的进程/应用
结果返回了:-bash: netstat: command not found
看来是这个工具没有装,输入:
yum install net-tools
安装该工具。
输入:firewall-cmd --list-ports
还是没有,查了一番之后,我添加的语句中带有--add-rich-rule=
所以应该用下面这个命令
firewall-cmd --list-all //查看防火墙所有信息
可以看到有几行是:
rich rules:
xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx
接着,两台服务器都执行如下指令,查看本机zookeeper的状态:会有一台服务器的zookeeper状态显示为follower(跟随者状态),有一台服务器zookeeper状态显示为leader(领导者状态):
# echo stat|nc localhost 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Clients:
/127.0.0.1:36666[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x600000007
Mode: follower
Node count: 327
这里值得一提的是leader和follew谁主谁次没有关系,是zookeeper自动选举的。
还可以执行如下指令,查看本机zookeeper的状态:
/zookeeper/bin
./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/bin/../conf/zoo.cfg
Mode: leader
-------------------------------------------------------------------------------------------------
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/bin/../conf/zoo.cfg
Mode: follower
2.kafka集群查看
什么是kafka集群?
它是一个分布式消息系统,由linkedin使用scala编写,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础。具有高水平扩展和高吞吐量。
前台启动kafka:
./kafka-server-start.sh ../config/server.properties
后台启动kafka:
./kafka-server-start.sh ../config/server.properties 1>/dev/null 2>&1 &
当然,命令实在有些长,可以写启动和关闭脚本
在$KAFKA_HOME/bin下新建如下脚本文件
start-kafka.sh
#!/bin/bash
BROKERS="mini41 mini42 mini43"
APPHOME="/home/hadoop/apps/kafka"
APP_NAME="kafka_2.10-0.10.1.0"
for i in $BROKERS
do
echo "Starting ${APP_NAME} on ${i} "
ssh ${i} "source /etc/profile; nohup sh ${APPHOME}/bin/kafka-server-start.sh ${APPHOME}/config/server.properties > /dev/null 2>&1 &"
if [[ $? -ne 0 ]]; then
echo "Starting ${APP_NAME} on ${i} is ok"
fi
done
echo All $APP_NAME are started
exit 0
stop-kafka.sh
#!/bin/bash
BROKERS="mini41 mini42 mini43"
APPHOME="/home/hadoop/apps/kafka"
APP_NAME="kafka_2.10-0.10.1.0"
for i in $BROKERS
do
echo "Stopping ${APP_NAME} on ${i} "
ssh ${i} "source /etc/profile;bash ${APPHOME}/bin/kafka-server-stop.sh"
if [[ $? -ne 0 ]]; then
echo "Stopping ${APP_NAME} on ${i} is down"
fi
done
echo All $APP_NAME are stopped
exit 0
注意修改权限
chmod a+x start-kafka.sh
chmod a+x stop-kafka.sh
启动后,输入jps
显示有进程号代表成功
好了,未完待续~