Kali Linux2020设置中文超详细文字教程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kali Linux2020设置中文超详细文字教程相关的知识,希望对你有一定的参考价值。

参考技术A kali设置中文——LCZ亲测

By-花伤情犹在 QQ:1926585708

首先:(kali 2020.1 汉化

打开终端,输入:

sudo dpkg-reconfigure locales

这时可能会让你输入root密码 ,默认的密码是:kali

然后选择字符编码: en_US.UTF-8、zh_CN.GBK、zh_CN.UTF-8 (用空格选定)

接着选择字符: zh_CN.UTF-8)

然后重启kali(由于默认没有安装中文源和字体,所以重启后会出现乱码情况)

这个时候要切换root用户

(sudo passwd root先输入默认密码kali随后自定义2遍新的密码,再后输入su root然后输入自定义密码即可切换root用户)

此时处于root用户状态下:输入(sudo vim /etc/apt/sources.list)

然后copy中文源例如清华的源:

清华大学更新源:

deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

粘贴切记(按i将vim编辑器切换到输入模式,黏贴国内源进去将下列源添加到文件中然后按:ESC--->shift+:--->wq保存文件)

安装ok后输入apt-get clean

再输入apt-get update

然后安装字体

apt-get install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy

安装完毕后:

输入dpkg-reconfigure locales

然后还是选择zn_CH-UTF-8然后确认

好了就重启命令为sudo reboot

扩展:

1.sudo vim /etc/apt/sources.list

//新手推荐使用leafpad编辑器sudo leafpad /etc/apt/sources.list

按i将vim编辑器切换到输入模式,黏贴国内源进去将下列源添加到文件中然后按:

ESC--->shift+:--->wq保存文件

2.国内源#中科大

deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

#阿里云

deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

#清华大学

deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free

ps:获取更多源请找度娘

3.更新系统

清理旧软件缓存

sudo apt-get clean

解决依赖

sudo apt -f install

更新软件库

apt update

更新软件

sudo apt-get update

更新系统

sudo apt-get dist-upgrade

安装kali所有软件

sudo apt install kali-linux-all -y

重启系统

sudo reboot

4.解决乱码问题

sudo apt-get install localeslocale -a

//安装中文字体:(1)

sudo apt-get install xfonts-intl-chinese

//安装中文字体:(2)

sudo apt-get install ttf-wqy-microhei

//重启系统

5.安装中文输入法:

sudo apt-get install fcitx

sudo apt-get install fcitx-table-wbpy ttf-wqy-microhei ttf-wqy-zenhei

sudo reboot

6.配置终端颜色打开终端---->右上角点击文件--->参数配置--->界面设置,在这里面自定义即可。

7.更改超级用户(root)密码

一般 2020.1版本的root密码我们不知道,更改它即可sudo passwd root

输入当前用户(安装系统是创建的一般用户的登录密码)密码

输入新的root密码确认root密码

sudo reboot

用户名输入root登录试试到这里我们的基本配置就完成了!

8.kali安装翻译软件

//安装星际译王

apt-get install stardict

9.火狐浏览器汉化

apt install firefox-esr-l10n-zh-cn -y

大数据期末作业: Kali Linux 之Zookeeper集群 的搭建(超详细,适合纯小白)

  Kali Linux 搭建Zookeeper集群 ,满干货,超详细,免入坑!!

   大三下学期的Hadoop课程,需要学习高可用,由于学校设备有限,只能由我们自己先手动搭建环境了。老师将该任务与期末大作业一并向我们做了安排,博主把小组6台机器搭建好后,抽空将整个过程总结到博客中,以便其他小伙伴们在搭建时借鉴。


  众所周知,在HSFS-HA集群中,自动故障转移为HDFS部署增加了两个新组件:ZooKeeperZKFailoverController(ZKFC)进程。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。而HA的自动故障转移却很依赖于ZooKeeper的以下功能:

  ● 1>故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。

  ● 2>现役NameNode选择: ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。

  ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:

  ●1)健康监测: ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
  ●2)ZooKeeper会话管理: 当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
  ●3)基于ZooKeeper的选择: 如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。

  HDFS-HA的图解如下:

  所以,相信读者已了解到了Hadoop高可用集群中Zookeeper的重要作用了,而博主在该篇中仅着重介绍Zookeeper集群的原理和搭建过程,至于HA的搭建待博主学校考完试后抽空再做总结。

  首先,了解Kali Linux的搭建环境,6台Mac地址不同的Vmware的kali虚拟机,分别在6台不同的电脑上:

  版本:kali 2020.4(上图为xfce4图像的win10伪装界面截图)。

  其次,明确任务目标:

    ● JAVA JDK环境配置

    ● SSH免密登陆生效

    ● Zookeeper集群搭建

  一、JDK环境在Kali Linux中的配置

  由于,博主已在之前的篇幅中已做了详细的介绍和讲解,因此就不再累赘了,读者可以通过博主之前的博文来学习了解:Kali Linux 安装 jdk 和搭建 hadoop 平台 Debian系列Linux安装JDK的三种方式

  若想用Kali Linux搞安全渗透又想学习大数据的朋友,还可以移步博主另一篇博文:Kali Linux中搭建好Hadoop后安装和配置Hive的方法 ,等有足够的时间,博主会将自己所学大数据内容做系统化的总结和讲解。

  二、SSH免密登陆

  老师定六人组为一组(吐槽:实际上仅有博主一人干活,hhh),搭建Hadoop高可用时,需两台master机能和除自身外的其他5台机器均ssh免密,而4台slave机亦能和2台master ssh免密。

  ①:在克隆Kali虚拟机后,需要生成新的Mac地址后由DHCP分配指定的ip地址:

  注意,各电脑在相同的网络桥段下生成其各自的ip地址后,MAC地址就不能再更改了!切记!!
  否则,在后续工作过程中发现集群中哪台机器的ip地址发生了更改,就前功尽弃了! 所以,要避免悲剧的发生。

  ②:修改各自的 hostname主机名 (在这里博主是以6人各自的学号+饰演身份来修改的)和 hosts系统文件

#	vim /etc/hostname	# 修改主机识别名

  两台 master机的识别名为(为信息安全,学号仅部分可见):

	20180804******master1
	20180804******master2

  而其他4台slave机为:

	20180804******slave1
	20180804******slave2
	20180804******slave3
	20180804******slave4

  两台master机hosts系统文件:

#	vim /etc/hosts # 对应各自的DHCP分配的ip地址


  其他slave机hosts系统文件均为:

  ③:ssh免密生效:

#	cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost
#	rm ./id_rsa*            # 删除之前生成的公匙(如果有)	
#	ssh-keygen -t rsa  		# 该命令可在任何路径下执行生效,一路按回车即可。

  首先,为确保主节点能SSH到本机,分别在俩master机中将公钥id_rsa.pub追加授权给authorized_keys文件保管:

#	cat ~/.ssh/id_rsa.pub >> ~/.ssh./authorized_keys

  倘若你的Linux账户无.ssh文件夹,mkdir创建在用户路径下即可。但切记,为确保SSH的修改生效,文件夹.ssh和authorized_keys文件的权限分别必须700和600。



  之后将俩master节点自身公钥id_rsa.pub文件传给除自身外的其他5台机器去授权:

matser1:
#	scp /root/.ssh/id_rsa.pub 20180804******master2:/root 
#	scp /root/.ssh/id_rsa.pub 20180804******slave1:/root 
...
...
#	scp /root/.ssh/id_rsa.pub 20180804******slave4:/root 

matser2:
#	scp /root/.ssh/id_rsa.pub 20180804******master1:/opt
#	scp /root/.ssh/id_rsa.pub 20180804******slave1:/opt
...
...
#	scp /root/.ssh/id_rsa.pub 20180804******slave4:/opt 

  在其他slave机中将俩master的id_rsa.pub内容追加到authorized_keys中授权:

#	cat /root/id_rsa.pub >> ~/.ssh./authorized_keys	(给master1授权)
# 	cat /opt/id_rsa.pub >> ~/.ssh./authorized_keys	(给master2授权)

#	rm /root/id_rsa.pub /opt/id_rsa.pub	(授权后删除无用文件)

  检测免密授权成功,分别在俩master机中执行:

#	ssh 20180804******master1(登入其他机)
#	exit	(退出)

# ssh 20180804******master2
# exit

......
......
(除自身外的其他电脑均测试)

#	ssh 20180804******slave4
#	exit
(执行无误,则高可用俩主节点master的ssh免密登陆授权完成)

  为确保Zookeeper集群能正常选举,需确保各slave节点也能免密登陆俩主节点master:

在slave1节点中执行:
#	rm ~/.ssh/id_rsa*	 # 删除之前已无用的文件	
#	ssh-keygen -t rsa	 # 默认回车即可

#	scp /root/.ssh/id_rsa.pub 20180804******master1:/root 
#	scp /root/.ssh/id_rsa.pub 20180804******master2:/root 

在俩master中追加授权:
cat /root/id_rsa.pub >> ~/.ssh./authorized_keys	

同理!!在其他slave机和俩master机间各授权一次给俩master主节点

  验证slave与master可免密登陆:

#	ssh 20180804******master1

	ctrl+D 退出,换登第二台master
	
#	ssh 20180804******master2
  若顺利执行完,则任务点二也正式完成了!!

  三、ZooKeeper集群的搭建

  1. Zookeeper官网下载

  注意!!应当下载 apache-zookeeper-版本号-bin.tar.gz的安装包,而不是为tar.gz的编译安装包

  否则,会报找不到或无法加载主类错误:
错误:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
原因:java.lang.ClassNiFoundException:org.apache.zookeeperr.server.quorum.QuorumPeerMain


  上图为博主在给小组搭建时踩的坑,通过查阅日志文件才晓得是找错包了。

  顺便,需要提一句的是,像这类软件在安装配置出错时,不妨查阅一下log的工作日志,可以在很大程度上减轻我们的工作负担,给我们正确的解决方向,例如,在搭建Zookeeper集群时应查阅的是logs/下的zookeeper-root-server-.out日志文件:

  2. ZooKeeper的搭建原理:

  在搭建 zookeeper 集群之前,我们首先要明白为什么要选择奇数台电脑来搭建呢,偶数台不行么?答案是肯定的,仅能是奇数台。

  zookeeper 集群通常是用来对用户的分布式应用程序提供协调服务的,为了保证数据的一致性,对 zookeeper 集群进行了这样三种角色划分:leader、follower、observer分别对应着总统、议员和观察者。

  总统(leader):负责进行投票的发起和决议,更新系统状态。
  议员(follower):用于接收客户端请求并向客户端返回结果以及在选举过程中参与投票。
  观察者(observer):也可以接收客户端连接,将写请求转发给leader节点,但是不参与投票过程,只同步leader的状态。通常对查询操作做负载。

  3. 所以,为什么ZooKeeper的集群节点一定要是奇数呢?

  众所周知,在每台节点机数据保持一致的情况下zookeeper集群在面对客户端查询时,均都能返回同样的结果

  但当众多的客户端同时发起对数据的删除,修改等操作时,集群中那么多台机器,你修改你的,我修改我的,最后该返回集群中哪台机器的更改结果呢 ?

  所以,为防止这种“无政府”的状态,我们需要“民主”(实际则由ZooKeeper的选举机制来决定)推举出一个领导人leader,在其的内阁成员follower们的帮助下,来最终决策众多客户端在更改数据时的优先性和同步性。

  即只有leader节点才有权利发起修改数据的操作,而follower节点即使接收到了客户端发起的修改操作,也要将其转交给leader来处理,leader接收到修改数据的请求后,会向所有follower广播一条消息,让他们执行某项操作,follower 执行完后,便会向 leader 回复执行完毕。当 leader 收到半数以上的 follower 的确认消息,便会判定该操作执行完毕,然后向所有 follower 广播该操作已经生效 。

  因此,leader是zookeeper集群中必不可少的部分 ,而leader就是 由所有follower节点选举产生 ,讲民主嘛,且leader节点仅能有一个,毕竟一个国家不能有多个总统。

  让我们重回话题,那么,为什么 zookeeper 节点数是奇数?

  ①、容错率:

  首先从容错率来说明:(是为保证集群选举时能有半数进行投票

  2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉,但是相对于 单节点服务器,2台服务器还有两个单点故障,所以直接排除了。
  3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉
  4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉
  5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉

  …
  依次类推,在有更多ZooKeeper集群时均遵守半数规则

  ②、防脑裂

  脑裂集群的脑裂通常是发生在节点之间通信不可达的情况下,集群会分裂成不同的小集群,小集群各自选出自己的leader节点,导致原有的集群出现多个leader节点的情况,这就是脑裂。

  3台服务器,投票选举半数为1.5,一台服务裂开,和另外两台服务器无法通行,这时候2台服务器的集群(2票大于半数1.5票),所以可以选举出leader,而 1 台服务器的集群无法选举。
  4台服务器,投票选举半数为2,可以分成 1,3两个集群或者2,2两个集群,对于 1,3集群,3集群可以选举;对于2,2集群,则不能选择,造成没有leader节点。
  5台服务器,投票选举半数为2.5,可以分成1,4两个集群,或者2,3两集群,这两个集群分别都只能选举一个集群,满足zookeeper集群搭建数目。

  通过以上分析,我们从容错率以及防止脑裂两方面说明了,3台服务器是搭建集群的最少数目,偶数台时则会造成脑裂,导致没有leader节点的状态出现 而在这本文中,我们是采用5台机器来搭建ZooKeeper集群的,为6台时的Hadoop高可用集群做准备。

  好啦,通过如上的讲解,相信你已明白我们此行的目的了,哈哈。接下来是正式搭建ZooKeeper集群!!

  附:
  若仍有小伙伴对ZooKeeper的选举机制不了解,可以点击这里进一步学习了解:Zookeeper Leader 选举原理

  4. ZK集群搭建:

  首先,解压已下载的ZooKeeper的正确安装包到Linux的第三方软件习惯性文件夹/opt下:

#	mkdir /opt/zookeeper && tar zxf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/zookeeper # 解压到指定的文件夹下

#	cd /opt/zookeeper/apache-zookeeper-3.6.3-bin/ && ls	# 查阅
    
#	mkdir zkData && touch ./zkData/myid	 # 创建zkData文件夹做为ZooKeeper服务器存储快照文件的目录;而在zkData下创建myid文件是为了作ZooKeeper集群的启动编号。

	由于博主已安装和搭建过了就不在展示该过程了,请自行完成。


  操作无误后,修改conf下的zoo_sample.cfg文件:

#	mv zoo_sample.cfg zoo.cfg	# 首先是重命名;
#	vim zoo.cfg		# 打开该文件。

  由于zoo.cfg是ZooKeeper集群启动方式的配置文件,所以,我们需要合理的修改它!!

  初次查阅zoo.cfg配置文档,我们首先要清楚的是每项配置的含义:

  ①、tickTime:基本事件单元,这个时间是作为ZooKeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳;最小的session过期时间为2倍tickTime

  ②、dataDir:存储内存中数据库快照的位置,除非另有说明,否则指向数据库更新的事务日志。注意:应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。 所以,尽量给事物日志输出dataLogDir目录分配单独的磁盘或挂载点,这将极大的提升ZK性能!

  ③、client:监听客户端连接的端口。

  ④、initLimit:允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

  ⑤、syncLimit:表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

  ⑥、server.A=B:C:D

  A 是一个数字,表示这个是第几号服务器;
  B 是这个服务器的IP地址;
  C 是这个服务器与集群中的Leader服务器交换信息的端口;
  D 是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

  如无特殊需求,我们仅修改其中两项即可。

  1. 重新指定存储快照文件snapshot的目录,即修改上图中dataDire这行;
  2. 其次,配置ZK集群的各启动点信息,即补填各节点server.A=B:C:D的信息。

  由于我们在此事先创建了zkData文件夹,所以,引入即可:

dataDir=/opt/zookeeper/apache-zookeeper-3.6.3/zkData

  ZK集群各节点信息,因为博主是小组六人,所以配了5台服务器:

#######################cluster##########################
server.0=192.168.43.163:2888:3888
server.1=192.168.43.4  :2888:3888
server.2=192.168.43.187:2888:3888
server.3=193.168.43.178:2888:3888
server.4=192.168.43.244:2888:3888
  需特别说明:
zookeeper 的三个端口作用

	1. 2181 : 对 client 端提供服务
	2. 2888 : 集群内机器通信使用
	3. 3888 : 选举 leader 使用

即 server.id = ip:port:port

  哈哈哈,想必细心的朋友已经发现了这其中的端倪了,是的,像图中标记出的这行,在网络解析的时候是会出错的,因为ip地址和2888集群集群通信端口间加了无效的空格!!
  害,我这该死的强迫症,DHCP分配的ip为4,其他ip分配了三位数,为了看起来整齐就加了空格,导致ZK集群启动时出错,查阅了logs日志才晓得报错的原因,笑哭:
ERROR[main:QuorumPeerMain@98]-Invalid config,exiting abnormally

修改
server.1=192.168.43.4  :2888:3888
为
server.1=192.168.43.4:2888:3888
  当然啦,你也可以使用hostname来代替ip:
#######################cluster##########################
server.0=20180804******master1:2888:3888
server.1=20180804******master2:2888:3888
server.2=20180804******slave2:2888:3888
server.3=20180804******slave3:2888:3888
server.4=20180804******slave4:2888:3888
  但最好是直接使用ip地址。

  配置ZK的启动编号:

#	echo 0 >> /opt/zookeeper/apache-zookeeper-3.6.3-bin/zkData/myid

  完成ZK基础配置后,打包传送:

进入Zookeeper安装目录
#	cd /opt
打包
#	tar -zcf /opt/ZK.tar.gz ./zookeeper/	
传输给其他节点
#	scp /opt/ZK.tar.gz 20180804******master2:/opt && scp /opt/ZK.tar.gz 20180804******slave1:/opt && scp /opt/ZK.tar.gz 20180804******slave3:/opt && scp /opt/ZK.tar.gz 20180804******slave4:/opt	
注意,此时还在master1节点执行。

  在其他节点中解压并修改启动编号:

	#	cd /opt
	#	tar zxf ZK.tar.gz	# 解压缩
  修改myid为各自的启动编号:
在master2机中:
#	echo 1 > /opt/zookeeper/apache-zookeeper-3.6.3-bin/zkData/myid
在slave1机中:
#	echo 2 > /opt/zookeeper/apache-zookeeper-3.6.3-bin/zkData/myid
在slave3机中:
#	echo 3 > /opt/zookeeper/apache-zookeeper-3.6.3-bin/zkData/myid
# 当然还有slave4机:
#	echo 4 > /opt/zookeeper/apache-zookeeper-3.6.3-bin/zkData/myid

  没错,细心的朋友可能已注意到了,我们的ZooKeeper集群是6台Hadoop高可用组群中除了slave2的其他5台。

  为了接下来执行命令方便,我们在所有ZK节点中把ZooKeeper加入环境变量:
#	vim ~/.bashrc

  添加:

#zookeeper
export ZOOKEEPER_HOME=/opt/zookeeper/apache-zookeeper-3.6.3-bin
export PATH=$ZOOKEEPER_HOME/bin:$PATH

  执行生效:

#	sourc ~/.bashrc
  当然,读者也可根据自己的喜好程度加入Kali的/etc下:/bash.bashrc 、profile或environment 的任一全局环境变量文件中 。

  5. 启动ZK集群:

  当然,在启动ZK集群前别忘记关闭防火墙哦!
  由于,我们是Kali Linux ,所以,在Kali中是可以使用 ufw ( 简单防火墙 Uncomplicated FireWall ) 来关闭防火墙的,可能会有熟悉iptables命令和其规则的小伙们质疑了,为什么不用iptables防火墙呢?想必,在你提出这样的困惑时也曾想到了,正是因为iptables的强大和复杂,我们才不建议在Debian系Linux中使用的,操作不慎可导致通讯的异常,且难以排查恢复。而ufw却能很好的简化和替代iptables,方便操作,避免失误,何乐而不为呢?

  Kali中默认是无ufw服务的,需安装:

#	apt install ufw	(kali 安装防火墙)

#	ufw disable	(关闭防火墙)
#	systemctl disable ufw.service (关闭ufw防火墙服务)

#	ufw status	(查看防火墙状态)	
#	systemctl status ufw.service	(查阅ufw服务器状态)


  在关闭了所服务器的防火墙后,开启ZK集群,分别在5台服务器共同中执行:

#	zkServer.sh start	# 启动ZK集群

#	zkServer.sh status	# 查询启动结果

  可以看到,ZooKeeper集群推举出了一位 leader领导:

  其他均为 follower 议员机:

  如果顺利的话,到此为止,你的ZK集群就算搭建完成了 !!


  当然,相信也有朋友在这样搭建后,在启动的过程时,遇到了拒绝连接的报错:

  “ Cannot open channel to … at election address /192.168. …:3888
  java.net.ConnectException: 拒绝连接 (Connection refused)”
2021-06-10 16:13:58,359 [myid:0] - WARN  [QuorumConnectionThread-[myid=0]-2:QuorumCnxManager@400] - Cannot open channel to 2 at election address /192.168.43.187:3888
java.net.ConnectException: 拒绝连接 (Connection refused)
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:457)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
2021-06-10 16:13:58,359 [myid:0] - WARN  [QuorumConnectionThread-[myid=0]-1:QuorumCnxManager@400] - Cannot open channel to 1 at election address /192.168.43.4:3888
java.net.ConnectException: 拒绝连接 (Connection refused)
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:457)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
2021-06-10 16:13:58,359 [myid:0] - WARN  [QuorumConnectionThread-[myid=0]-4:QuorumCnxManager@400] - Cannot open channel to 4 at election address /192.168.43.244:3888
java.net.ConnectException: 拒绝连接 (Connection refused)
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
	at java.base/java.net.Socket.connect(Socket.java:609)

	......
	......
	......	(省略大量的执行消息)
	
		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
2021-06-10 16:17:59,828 [myid:0] - INFO  [WorkerReceiver[myid=0]:FastLeaderElection$Messenger$WorkerReceiver@389] - Notification: my state:LOOKING; n.sid:0, n.state:LOOKING, n.leader:4, n.round:0x1, n.peerEpoch:0x0, n.zxid:0x0, message format version:0x2, n.config version:0x0
2021-06-10 16:17:59,828 [myid:0] - INFO  [WorkerReceiver[myid=0]:FastLeaderElection$Messenger$WorkerReceiver@389] - Notification: my state:LOOKING; n.sid:4, n.state:LOOKING, n.leader:4, n.round:0x1, n.peerEpoch:0x0, n.zxid:0x0, message format version:0x2, n.config version:0x0
2021-06-10 16:17:59,829 [myid:0] - WARN  [QuorumConnectionThread-[myid=0]-6:QuorumCnxManager@400] - Cannot open channel to 2 at election address /192.168.43.187:3888
java.net.ConnectException: 拒绝连接 (Connection refused)
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:457)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)
2021-06-10 16:18:04,834 [myid:0] - WARN  [QuorumConnectionThread-[myid=0]-5:QuorumCnxManager@400] - Cannot open channel to 3 at election address /193.168.43.178:3888
java.net.SocketTimeoutException: connect timed out
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
	at java.base/java.net.Socket.connect(Socket.java:609)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.initiateConnection(QuorumCnxManager.java:383)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager$QuorumConnectionReqThread.run(QuorumCnxManager.java:457)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.lang.Thread.run(Thread.java:834)


  博主在查阅过 stackoverflow 的解答 和 ZooKeeper官方文档的介绍后,明白了,是ZooKeeper集群 zoo.cfg 配置文件中的当前IP节点配置错误导致,解决方式如下:

  修改每一台节点机的 zoo.cfg 配置文件,将 "server.A=B:C:D"的自身IP地址为 0.0.0.0 ,用来监听本机上的其他 ip节点。"server.A=B:C:D"中的其他非自身节点 ip 不做修改!
#	vim  /opt/zookeeper/apache-zookeeper-3.6.3-bin/conf/zoo.cfg
  master1节点:
#######################cluster##########################
server.0=0.0.0.0:2888:3888
server.1=192.168.43.4 :2888:3888
server.2=192.168.43.187:2888:3888
server.3=193.168.43.178:2888:3888
server.4=192.168.43.244:2888:3888
  master2节点:
#######################cluster##########################
server.0=192.168.43.163:2888:3888
server.1=0.0.0.0:2888:3888
server.2=192.168.43.187:2888:3888
server.3=193.168.43.178:2888:3888
server.4=192.168.43.244:2888:3888
  slave1节点:
#######################cluster##########################
server.0=192.168.43.163:2888:3888
server.1=192.168.43.4 :2888:3888
server.2=0.0.0.0:2888:3888
server.3=193.168.43.178:2888:3888
server.4=192.168.43.244:2888:3888
  slave3节点:
#######################cluster##########################
server.0=192.168.43.163:2888:3888
server.1=192.168.43.4 :2888:3888
server.2=192.168.43.187:2888:3888
server.3=0.0.0.0:2888:3888
server.4=192.168.43.244:2888:3888
  slave4节点:
#######################cluster##########################
server.0=192.168.43.163:2888:3888
server.1=192.168.43.4:2888:3888
server.2=192.168.43.187:2888:3888
server.3=193.168.43.178:2888:3888
server.4=0.0.0.0:2888:3888
  修改完毕后,在各节点删除已生成无效了的启动文件,以免对执行造成影响。同理,倘若,在配置无误却无法正常启动时,也可尝试先删除之前无效了的执行文件,再尝试重启!
#	cd /opt/zookeeper/apache-zookeeper-3.6.3-bin/	(先进入zookeeper目录夹)
#	rm -r zkData/version-2/ zkData/zookeeper_server.pid logs/*	(删除错误日志和失效文件)

  如上所示修改后,分别在各节点重启:
#	zkServer.sh start	# 启动ZK集群

#	zkServer.sh status	# 查询启动结果
  执行和查询结果分别如下:





  好了,到目前为止,大数据期末作业中的ZooKeeper集群搭建就顺利完成了!!希望对你有帮助哦。哈哈哈,博主也只是抽空断断续续的写的,如有不准确的地方,还请及时指正,谢谢!

以上是关于Kali Linux2020设置中文超详细文字教程的主要内容,如果未能解决你的问题,请参考以下文章

2023年最新Kali安装教程(超详细,手把手教你下载安装kali虚拟机)

kali linux一系列问题,看详细介绍!

kali虚拟机安装教程(超详细)

kali安装ARL灯塔教程(超详细)

Kali Linux利用MSF入侵安卓手机(小白版超详细)

Kali Linux利用MSF入侵安卓手机(小白版超详细)