零、写在前面与规划
之前抄过一篇,搭建Kafka运行环境 这篇更侧重于如何运行一个简单的kafka,但却没涉及到kafka的集群相关内容
这篇会将全流程补全
包括zookeeper和ssh免密登录,以及戏肉--kafka集群
因为会涉及到集群,因此规划了三台服务器,如下所示
ip | 名称 | 作用 | 其他 |
192.168.122.21 | xxCentos7One | kafka/rabbitmq | zookeeper |
192.168.122.22 | xxCentos7Two | kafka/rabbitmq | zookeeper |
192.168.122.23 | xxCentos7Three | kafka/rabbitmq | zookeeper |
一、安装jdk
# 将linux版本jdk传到服务器,并解压。同时记录下解压后的jdk的路径,例如 /usr/local/jdk11
# 修改profile
vim /etc/profile
# 将自己的jdk路径替换到下面的JAVA_HOME的等号后面
# jdk11及以上的配置方式
JAVA_HOME=/usr/local/jdk11
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/lib
export JAVA_HOME CLASSPATH PATH
# jdk8 的配置方式
JAVA_HOME=/usr/local/jdk8
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
# 刷新profile文件
source /etc/profile
二、安装ssh与免密登录
因为需要集群,需要zookeeper访问各个服务器,所以最好能让各服务器之间通过ssh免密码访问
所以第一步就是需要安装ssh
2.1:安装ssh
rpm -qa|grep -E "openssh"
如果结果有以下的内容表示已安装,
openssh-ldap-7.4p1-16.el7.x86_64
openssh-cavs-7.4p1-16.el7.x86_64
openssh-clients-7.4p1-16.el7.x86_64
openssh-server-sysvinit-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
openssh-keycat-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
openssh-askpass-7.4p1-16.el7.x86_64
否则需要执行下面命令来安装
yum install openssh*
成功后,启动服务并开启防火墙
sudo systemctl enable sshd
sudo systemctl start sshd
或者
service sshd start
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
sudo service firewalld restart
2.2:配置免密登录
这部分是一个力气活,至少我没发现省事的
先说思路:就是在每个主机上执行ssh-keygen命令,将生成出来的公钥放入authorized_keys中
最后保证每台主机中的authorized_keys文件里都有其他主机的公钥。
这样任意两台服务器在互相ssh登录的时候,就会从“authorized_keys”中找到目标服务器的公钥
然后拿着公钥与对端的私钥进行比对,如果正确,那就可以免密登录了。
再说步骤:
2.2.0:配置ip与服务器名的映射关系
修改集群中每台服务器的/etc/hosts,将ip与主机名添加在里面
2.2.1:在xxCentos7One上创建秘钥
执行命令
ssh-keygen -t rsa
过程中,会让你选择路径和passphrase,这两项可以直接输入回车跳过即可。
生成的秘钥会保存在/root/.ssh路径下的id_rsa中和id_ras.pubz中,前者是私钥,后者是公钥
私钥是留着自己用的,公钥是给别人登录自己用的。所以后面我们需要把公钥告诉每一个“别人”
2.2.2:将公钥保存以备用
步骤:从第一台生成了秘钥的服务器(在我这里就是xxCentos7One)开始操作
进入/root/.ssh下面,执行下面的命令,将公钥的内容追加到authorized_key文件中。
cat id_rsa.pub >> authorized_keys
2.2.3:将公钥给别人
这个文件将会记录这个集群中所有服务器的公钥,后面会有大用
然后将这个文件传输到下一个服务器上(比如我这里的xxCentos7Two)
scp authorized_keys xxCentos7Two:/root/.ssh/
当然,如果你在/etc/hosts下已经配置过所有的映射,写服务器名比写ip还是更方便一些的
不过一般来说,第一次执行上面的命令可能会有问题,特别是目标服务器没有执行过ssh命令的时候
会提示你/root/.ssh是一个directory,其实解决也简单,直接在目标服务器上执行一次ssh命令即可
2.2.4:迭代执行
然后当你将这个authorized_key文件传给第二个服务器(比如我这里是xxCentos7Two)后,
就可以在第二个服务器上执行2.2.1至2.2.3这三步了
然后每次传递给下一个服务器的时候,authorized_keys里面的内容会逐渐增多
直到集群中最后一台服务器的公钥也被加入到这个authorized_keys中,
就可以将这个文件覆盖之前的那些服务器中去了。