文章目录
1. 清空Selinux / 防火墙firewalld
关闭Linux的防火墙是每个Linux用户管理系统安全时不可忽视的一步,这是一个保护Linux系统免受攻击必不可少的一项措施。
有两种常见的Linux防火墙:防火墙服务
FirewallD
和iptables
。下面,我们将介绍如何关闭Linux系统的防火墙以及为什么必须关闭防火墙:
- 如果您使用的是
FirewallD
,首先要停用它:# 关闭 Firewalld 防火墙 $ sudo systemctl stop firewalld $ sudo systemctl disable firewalld $ sudo systemctl status firewalld
- 如果您在Linux系统中运行
iptables
,请使用以下命令将其关闭:# 清空规则 $ sudo iptables -F $ sudo iptables -L
- 除了禁用防火墙服务之外,您还需要禁用
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环境
$ 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
# 执行结果如下图:
# 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
# 将配置分别添加在配置文件中,如下图所示:
# 5. 查看zk单节点状态
$ /home/appview/program/zookeeper/bin/zkServer.sh status
# 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集群状态 (自动投票选举成功)
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
# 执行结果如图所示:
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
# 执行效果如下图所示:
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的环境变量
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: