0001 -- Zookeeper

1. 清空Selinux / 防火墙firewalld

关闭Linux的防火墙是每个Linux用户管理系统安全时不可忽视的一步,这是一个保护Linux系统免受攻击必不可少的一项措施。

有两种常见的Linux防火墙:防火墙服务FirewallDiptables

下面,我们将介绍如何关闭Linux系统的防火墙以及为什么必须关闭防火墙:

  1. 如果您使用的是FirewallD,首先要停用它:
# 关闭 Firewalld 防火墙
$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld
$ sudo systemctl status firewalld
  1. 如果您在Linux系统中运行iptables,请使用以下命令将其关闭:
# 清空规则
$ sudo iptables -F
$ sudo iptables -L
  1. 除了禁用防火墙服务之外,您还需要禁用SELinux,用以更好地保护系统:

SeLinux有以下三种工作模式:

 1. `enforcing`:强制模式,违反SELinux规则的行为将被阻止并记录到日志中。

 2. `permissive`:宽容模式,违反SELinux规则的行为只会记录到日志中。一般为调试用。SELinux Permissive模式主要用于审核当前的SELinux策略规则;它还能用于测试新应用程序,将SELinux策略规则应用到程序时会有什么效果;以及用于解决某一特定服务或应用程序在SELinux下不再正常工作的故障。

 3. `disabled`:关闭SELinux。
# 禁用 Selinux 机制
# 临时关闭
$ sudo setenforce 0
# 永久关闭
$ sudo sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
# 修改配置需要重启
$ sudo init 6
$ sudo getenforce

关闭Linux防火墙是必要的,因为它们限制了网络上可以进行的活动,同时也会降低系统的性能、可用性和安全性。另外,当您在Linux系统中运行特定应用程序或服务时,可能还需要手动配置更多的iptables规则,以确保其正常运行。

正确的关闭Linux防火墙可以确保您的系统有效攻击,并帮助您获得最佳的性能和安全性。虽然关闭Linux防火墙可能是一个困难的任务,但如果您恰当地完成,它就能保护您的系统免受攻击。


2. 安装JDK环境

下载 JKD 8 安装包

$ java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

$ wget -P /home/appview/download/ https://mirrors.huaweicloud.com/java/jdk/8u192-b12/jdk-8u192-linux-x64.tar.gz
$ cd /home/appview/download
$ tar xf jdk-8u192-linux-x64.tar.gz -C /home/appview/app/

$ cd /home/appview/app/
$ ln -s /home/appview/app/jdk1.8.0_192 /home/appview/program/jdk8 

$ sed -i.ori '$a export JAVA_HOME=/home/appview/program/jdk8\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' ~/.bash_profile

$ tail -3 ~/.bash_profile
export JAVA_HOME=/home/appview/program/jdk8
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

$ source ~/.bash_profile

$ java -version
java version "1.8.0_192"
Java(TM) SE Runtime Environment (build 1.8.0_192-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.192-b12, mixed mode)

3. 单机安装 zk

下载 apache-zookeeper-3.9.0-bin.tar.gz 这个包,自带所需要的各种jar包,不用再安装了

不使用 zookeeper-3.9.0/apache-zookeeper-3.9.0.tar.gz ,还需要安装maven,然后再运行mvn clean install 和mvn javadoc:aggregate,前一个命令会下载安装好多jar包

# 0. 先将JDK环境准备好(依赖Java环境)

# 1.下载Zookeeper安装包
# 创建程序软连接目录program,应用目录app,下载目录download
$ mkdir program app download
$ wget -P /home/appview/download/ https://archive.apache.org/dist/zookeeper/zookeeper-3.9.0/apache-zookeeper-3.9.0-bin.tar.gz

# 2.解压,创建软连接
$ cd /home/appview/download
$ tar xf apache-zookeeper-3.9.0-bin.tar.gz -C /home/appview/app/
$ ln -s /home/appview/app/apache-zookeeper-3.9.0-bin/ /home/appview/program/zookeeper

# 3.增加配置文件
$ cd /home/appview/program/zookeeper/conf
$ cp zoo_sample.cfg zoo.cfg

# 4.创一个自定义Zookeeper的数据目录
$ mkdir /home/appview/program/zookeeper/zkData -p

$ sed -i '/^dataDir=/s/\/tmp\/zookeeper/\/home\/appview\/program\/zookeeper\/zkData/' /home/appview/program/zookeeper/conf/zoo.cfg
# 或者手动修改配置文件都可以(二选一)
$ vim /home/appview/program/zookeeper/conf/zoo.cfg

$ grep 'dataDir' /home/appview/program/zookeeper/conf/zoo.cfg
dataDir=/home/appview/program/zookeeper/zkData
# The number of snapshots to retain in dataDir

# 4.1 配置文件注解
$ grep '^[a-z]' /home/appview/program/zookeeper/conf/zoo.cfg 
tickTime=2000  # zk服务器和客户端通信,心跳时间,毫秒
initLimit=10   # leader > follower 初始连接时,能容忍的tickTIme的数量,也就是总时间
syncLimit=5    # leader > follower 之间通信时间,如果超过 syncLimit * tickTime,Leader认为F挂了
dataDir=/home/appview/program/zookeeper/zkData  # 数据目录
clientPort=2181  # 客户端连接端口

# 5.启动Zookeeper服务
$ cd /home/appview/program/zookeeper/bin
$ /home/appview/program/zookeeper/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/appview/program/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 6.查看进程
$ ps -ef | grep zookeeper

# 7.查看端口
$ netstat -tunlp | grep java
tcp6       0      0 :::35125                :::*                    LISTEN      3354/java           
tcp6       0      0 :::2181                 :::*                    LISTEN      3354/java           
tcp6       0      0 :::8080                 :::*                    LISTEN      3354/java   

# 8.检查状态
# SSL安全机制未开启: "Client SSL: false"
$ /home/appview/program/zookeeper/bin/zkServer.sh  status
ZooKeeper JMX enabled by default
Using config: /home/appview/program/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone

3.1开启SSL安全认证机制

Zookeeper需要开启SSL安全机制 Client SSL: false.

# 尚未解决,日后再补充!

4. 集群安装 zk

4.1 环境准备(服务器地址)

Zookeeper集群环境准备:(至少三台服务器)

Zookeeper1:192.168.75.34

Zookeeper2:192.168.75.35

Zookeeper3:192.168.75.36

4.2 安装集群

4.2.1 安装且修改配置

# 1. 先按照Zookeeper单机安装在3台服务器全部执行一遍

# 2. 创建服务器编号文件,得在数据目录下,zk源码要求文件名是myid,机器区别开就好。就是每个机器的唯一标识
# 创建zookeeper集群,leader选择根据myid数值越大来分配,数字越大优先级越高

# Zookeeper1:192.168.75.34机器上执行
$ echo '1' > /home/appview/program/zookeeper/zkData/myid
# Zookeeper2:192.168.75.35机器上执行
$ echo '2' > /home/appview/program/zookeeper/zkData/myid
# Zookeeper3:192.168.75.36机器上执行
$ echo '3' > /home/appview/program/zookeeper/zkData/myid

# 3. 检查3台服务器myid文件
$ ls -l /home/appview/program/zookeeper/zkData/myid

# 执行结果如下图:

image-20230909170409075

# 4. 继续修改zoo.cfg配置文件,添加集群信息
# 固定语法格式:server.节点ID=ip:数据同步端口:选举端口
# 节点ID:服务id手动指定1至125之间的数字,并写到对应服务节点的 {dataDir}/myid 文件中。
# IP地址:节点的远程IP地址
# 数据同步端口:主从同步数据复制端口,follower和leader交换数据
# 远举端口:主节点挂了,选举新的主节点的通信端口。leader挂了需要选举新的主节点,通信端口。

$ vim /home/appview/program/zookeeper/conf/zoo.cfg
$ tail -3 zoo.cfg 
server.1=192.168.75.34:2888:3888
server.2=192.168.75.35:2888:3888
server.3=192.168.75.36:2888:3888

# 将配置分别添加在配置文件中,如下图所示:

image-20230909172550747

# 5. 查看zk单节点状态
$ /home/appview/program/zookeeper/bin/zkServer.sh status

image-20230909173025570

# 6. 启动zk服务集群
$ /home/appview/program/zookeeper/bin/zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /home/appview/program/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /home/appview/program/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /home/appview/program/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

# 7. 查看zk集群状态 (自动投票选举成功)

image-20230909173350439

5. 节点管理 zk

5.1 配置zk免密登录

$ sudo yum install sshpass -y

$ mkdir logs tools
$ cd tools/
$ vim ssh_pass.sh
$ cat ssh_pass.sh
#!/bin/bash
# author: Edon

# 1. 创建公私钥
echo "正在创建公私钥..."
if [ -f /home/appview/.ssh/id_rsa ]
then
  echo "密钥对已经存在,请检查!"
else
  ssh-keygen -f /home/appview/.ssh/id_rsa -N '' > /home/appview/logs/create_ssh.log 2>&1
fi

# 2. 管理机自动分发公钥到备管理机
echo "正在分发公钥中...分发的机器列表是{34,35,36}"
for ip in {
   34,35,36}
do
  sshpass -p '777888' ssh-copy-id 192.168.75.${ip} -o StrictHostKeyChecking=no > /home/appview/logs/create_ssh.log 2>&1
  echo "正在验证免密登录结果中...."
  echo "远程获取到主机名: $(ssh 192.168.75.${
     ip} hostname)"
done

# 给脚本执行权限,并执行脚本
$ chmod +x ssh_pass.sh
$ sh ssh_pass.sh

# 执行结果如图所示:

image-20230909182657806

5.2 跳扳机管理zk脚本

$ vim /home/appview/tools/admin.sh
$ chmod +x admin.sh
$ cat /home/appview/tools/admin.sh
#!/bin/bash
# author: Edon

case $1 in 
"start"){
   
    for i in {
   34,35,36}
        do
            echo "--zk 192.168.75.$i 启动中..."
            ssh 192.168.75.$i "source ~/.bash_profile;/home/appview/program/zookeeper/bin/zkServer.sh start"
            echo
            echo  
        done
}
;;
"stop"){
   
    for i in {
   34,35,36}
        do
            echo "--zk 192.168.75.$i 关闭中..."
            ssh 192.168.75.$i "source ~/.bash_profile;/home/appview/program/zookeeper/bin/zkServer.sh stop"
            echo
            echo  
        done
}
;;
"status"){
   
    for i in {
   34,35,36}
        do
            echo "--zk 192.168.75.$i 状态查看---"
            ssh 192.168.75.$i "source ~/.bash_profile;/home/appview/program/zookeeper/bin/zkServer.sh status"
            echo
            echo  
        done
}
;;
esac

# 执行脚本,可以批量执行三台Zookeeper节点
$ sh admin.sh start

# 执行效果如下图所示:

image-20230909182247755

5.3 配置zk环境变量

$ vim ~/.bash_profile
$ tail -2 ~/.bash_profile
export ZK_HOME=/home/appview/program/zookeeper
export PATH=$ZK_HOME/bin:$PATH

$ source ~/.bash_profile

# 尾部两行为zk的环境变量

image-20230909195756196

6. zk 客户端操作 (增删改查)

6.1 客户端命令

# 登录指定zk服务
$ zkCli.sh -server 192.168.75.35:2181
# 链接本地zk服务端,已连接
WATCHER::

WatchedEvent state:SyncConnected type:None path:null zxid: -1
[zk: 192.168.75.35:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 192.168.75.35:2181(CONNECTED) 1] ls -s /
[zookeeper]
cZxid = 0x0							   # 创建节点时的一个事务id
ctime = Thu Jan 01 08:00:00 CST 1970   # 创建节点的时间
mZxid = 0x0							   # 最后更新的事务
mtime = Thu Jan 01 08:00:00 CST 1970   # 最后一次修改节点的时间
pZxid = 0x0							   # 最后更新的子节点事务id
cversion = -1						   # 子节点变化的次数
dataVersion = 0						   # 节点变化号(记录更改次数)
aclVersion = 0						   # 节点访问控制变化号
ephemeralOwner = 0x0		  		   # 如果是临时节点,就是session id ,非临时节点就是0
dataLength = 0						   # 统计字符数	
numChildren = 1						   # 表示节点下有几个节点	

# 基础环境,没有任何数据
[zk: 192.168.75.35:2181(CONNECTED) 2] ls /zookeeper
[config, quota]
[zk: 192.168.75.35:2181(CONNECTED) 3] ls /zookeeper/quota
[]
[zk: 192.168.75.35:2181(CONNECTED) 4] ls /zookeeper/config
[]

6.2 znode管理命令

6.2.1 创建node

create:持久化创建数据

create -e:临时化创建数据

create -s:递增添加序号,并且是持久化的节点,以及数据

[zk: 192.168.75.35:2181(CONNECTED) 14] create /testdata
Created /testdata
[zk: 192.168.75.35:2181(CONNECTED) 16] create /testdata/dir1
Created /testdata/dir1

[zk: 192.168.75.35:2181(CONNECTED) 17] create -e /testdata/dir2
Created /testdata/dir2

# 创建顺序节点,用参数-s,递增添加序号,并且是持久化的节点,以及数据
[zk: 192.168.75.35:2181(CONNECTED) 2] create
create [-s] [-e] [-c] [-t ttl] path [data] [acl]

[zk: 192.168.75.35:2181(CONNECTED) 4] create -s /testdata test888
Created /testdata0000000001
[zk: 192.168.75.35:2181(CONNECTED) 5] create -s /testdata test888
Created /testdata0000000002
[zk: 192.168.75.35:2181(CONNECTED) 6] create -s /testdata test888
Created /testdata0000000003
[zk: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值