Linux-notes(updating......),以纯"字符”的形式操


一、Linux基础命令

一、Linux的目录结构

1、目录结构

  • Linux的目录结构是一个树型结构
  • Windows系统可以拥有多个顶级目录,即各个盘符,如C盘、D盘、E盘
  • Linux没有盘符这个概念,只有一个顶级目录/,称之为:根目录,所有文件都在它下面

2、Linux路径的描述方式

  • 在Linux系统中,路径之间的层级关系,使用:/来表示
  • 在Windows系统中,路径之间的层级关系,使用:\来表示

二、Linux命令入门

1、命令基础

什么是命令、命令行

  • 命令行:即Linux终端(Terminal),是一种命令提示符页面。以纯"字符”的形式操作系统,可以使用各种字符化命令对系统发出操作指令
  • 命令:即Linux程序,一个命令就是一个Linux的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈

Linux命令基础格式

无论是什么命令,用于什么用途,在Linux中,命令有其通用的格式:

command [-options] [parameter]
语法中的[],表示可选的意思
  • command:命令本身
  • -options:[可选,非必填]命令的一些选项,可以通过选项控制命令的行为细节
  • parameter:[可选,非必填]命令的参数,多数用于命令的指向目标等

2、ls命令入门

  • ls命令的作用是列出目录下的内容,语法细节如下:

ls [-a -l -h] [Linux路径]

  • -a -l -h是可选的选项

  • Linux路径是此命令可选的参数

当不使用选项和参数,直接使用ls命令本体,表示:以平铺形式,列出当前工作目录下的内容

①ls命令的作用是?
在命令行中,以平铺的形式,展示当前工作目录(默认HOME目录)下的内容(文件或文件夹)
②HOME目录是?
每一个用户在Linux系统的专属目录,默认在:/home/用户名
③当前工作目录?
Linux命令行在执行命令的时候,需要一个工作目录,打开命令行程序(终端)默认设置工作目录在用户的HOME目录

3、ls命令的参数和选项

ls命令的-a选项

  • -a选项,表示all的意思,即列出全部文件(包含隐藏的文件/文件夹)

  • 图中以.开头的,表示是Linux系统的隐藏文件/文件夹(只要以.开头,就能自动隐藏)
  • 只有通过-a选项,才能看到这些隐藏的文件/文件夹

ls命令的-l选项

  • -l选项,表示:以列表形式展示内容,并展示更多信息

ls命令的-h选项

  • -h表示以易于阅读的形式,列出文件大小,如K、M、G
  • -h选项必须要搭配 -l一起使用

总结

  • ls命令的参数的作用
    可以指定要查看的文件夹(目录)的内容,如果不给定参数,就查看当前工作目录的内容

  • ls命令的选项:

    • -a选项,可以展示出隐藏的内容

      • 以.开头的文件或文件夹默认被隐藏,需要-a才能显示出来
    • -l选项,以列表的形式展示内容,并展示更多细节

    • -h选项,需要和-l选项搭配使用,以更加人性化的方式显示文件的大小单位

  • 命令的选项组合使用

    • 命令的选项是可以组合使用的,比如:ls-lah,等同于ls -a-l-h

三、目录切换相关命令

1、cd 切换工作目录

当Linux终端(命令行)打开的时候,会默认以用户的HOME目录作为当前的工作目录
我们可以通过cd命令,更改当前所在的工作目录。
cd命令来自英文:Change Directory
语法:cd [Linux路径]

  • cd命令无需选项,只有参数,表示要切换到哪个目录下
  • cd命令直接执行,不写参数,表示回到用户的HOME目录

2、pwd查看当前工作目录

通过ls来验证当前的工作目录,其实是不恰当的。
我们可以通过pwd命令,来查看当前所在的工作目录。
pwd命令来自:Print Work Directory
语法:pwd

  • pwd命令,无选项,无参数,直接输入pwd即可

四、相对路径、绝对路径和特殊路径符

  • 绝对路径:以根目录为起点,描述路径的一种写法,路径描述以/开头

  • 相对路径:以当前目录为起点,描述路径的一种写法,路径描述无需以/开头

  • 特殊路径符:

符号 描述
. 表示当前目录,比如cd./Desktop表示切换到当前目录下的Desktop目录内,和cd Desktop效果一致
.. 表示上一级目录,比如:cd..即可切换到上一级目录,cd../..切换到上二级的目录
~ 表示HOME目录,比如:cd~ 即可切换到HOME目录或cd~/Desktop,切换到HOME内的Desktop目录

五、创建目录(mkdir)和删除目录(rmdir)

通过mkdir命令可以创建新的目录(文件夹)
mkdir来自英文:Make Directory
语法:mkdir [-p] Linux路径

  • 参数必填,表示Linux路径,即要创建的文件夹的路径,相对路径或绝对路径均可
  • -p选项可选,表示自动创建不存在的父目录,适用于创建连续多层级的目录

通过rmdir命令可以删除目录(文件夹)
mkdir来自英文:remove Directory
语法:rmdir [-p] Linux路径

  • 参数:-p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除

六、文件操作命令part1(touch、cat、more、stat、sed)

1、touch创建文件

语法: touch Linux路径

  • touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用

2、cat查看文件内容

语法:cat Linux路径

  • cat同样没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用

3、more命令查看文件内容

more命令同样可以查看文件内容,同cat不同的是:

  • cat是直接将内容全部显示出来

  • more支持翻页,如果文件内容过多,可以一页页的展示

    语法:more Linux路径

  • 同样没有选项,只有必填参数,参数表示:被查看的文件路径,相对、绝对、特殊路径符都可以使用

Linux系统内置有一个文件,路径为:/etc/services,可以使用more命令查看
more /etc/services

  • 在查看的过程中,通过空格翻页
  • 通过q退出查看

4、stat查看文件/文件夹相关信息

语法:stat 目录名|文件名

5、sed命令获取指定位置信息

语法:sed -n '/参数1/,/参数2/p' 文件名

参数1、参数2:文件中的信息

6、du命令查看文件大小

语法:du -h 文件|文件夹

注意:查看文件夹大小需要用绝对路径,pwd可以查看当前路径

七、文件操作命令part2(cp、mv、rm)

1、cp命令复制文件夹

cp命令可以用于复制文件\文件夹,cp命令来自英文单词:copy
语法:cp [-r] 参数1 参数2

  • -r选项,可选,用于复制文件夹使用,表示递归
  • 参数1,Linux路径,表示被复制的文件或文件夹
  • 参数2,Linux路径,表示要复制去的地方

2、mv命令可以用于移动文件/文件夹

mv命令来自英文单词move

语法:mv参数1 参数2

  • 参数1,Linux路径,表示被移动的文件或文件夹
  • 参数2,Linux路径,表示要移动去的地方,如果目标不存在,则进行改名,确保目标存在

3、rm删除文件/文件夹

rm命令可用于删除文件、文件夹
rm命令来自英文单词:remove
语法:rm [-r-f] 参数1参数2……参数N

  • 同cp命令一样,-r选项用于删除文件夹
  • -f表示force,强制删除(不会弹出提示确认信息)
    • 普通用户删除内容不会弹出提示,只有root管理员用户删除内容会有提示
    • 所以一般普通用户用不到-f选项
  • 参数1、参数2、....、参数N表示要删除的文件或文件夹路径,按照空格隔开

通配符

rm命令支持通配符*,用来做模糊匹配

  • 符号*表示通配符,即匹配任意内容(包含空),示例:
  • test*,表示匹配任何以test开头的内容
  • *test,表示匹配任何以test结尾的内容
  • *test *,表示匹配任何包含test的内容

八、查找命令(which、find)

1、which命令

我们可以通过which命令,查看所使用的一系列命令的程序文件存放在哪里
语法:which 要查找的命令

2、find命令

  • 按文件名查找文件(支持使用通配符*来做模糊查询)

在Linux系统中,我们可以通过find命令去搜索指定的文件
语法:find起始路径 -name “被查找文件名”

  • 按文件大小查找文件

语法:find 起始路径 -size +|-n[kMG]

  • +、-表示大于和小于
  • n表示大小数字
  • kMG表示大小单位,k表示kb,M表示MB,G表示GB

九、grep、wc和管道符

1、grep命令

可以通过grep命令,从文件中通过关键字过滤文件行
语法:grep[-n]关键字 文件路径

  • 选项-n,可选,表示在结果中显示匹配的行的行号。
  • 参数,关键字,必填,表示过滤的关键字,带有空格或其它特殊符号,建议使用””将关键字包围起来
  • 参数,文件路径,必填,表示要过滤内容的文件路径,可作为内容输入端口

2、wc命令

可以通过wc命令统计文件的行数、单词数量等
语法:wc [-c -m -l -w] 文件路径

  • 选项,-c,统计bytes数量
  • 选项,-m,统计字符数量
  • 选项,-l,统计行数
  • 选项,-w,统计单词数量
  • 参数,文件路径,被统计的文件,可作为内容输入端口

3、管道符|

含义:将管道符|左边命令的结果,作为右边命令的输入

十、echo和重定向符tail和head

1、echo命令

可以使用echo命令在命令行内输出指定内容
语法:echo 输出的内容

  • 无需选项,只有一个参数,表示要输出的内容,复杂内容可以用””包围

  • 在终端显示:hello world

  • 带有空格或\等特殊符号,建议使用双引号包围

2、反引号`

  • 被 ` 包围的内容,会被作为命令执行,而非普通字符

3、重定向符>和>>

  • >,将左侧命令的结果,覆盖写入到符号右侧指定的文件中

  • >>,将左侧命令的结果,追加写入到符号右侧指定的文件中

4、tail命令

使用tail命令,可以查看文件尾部内容,跟踪文件的最新更改

语法:tail [-f|-n -|+num] Linux路径

  • 参数,Linux路径,表示被跟踪的文件路径
  • 选项,-f,表示持续跟踪
  • 选项,-num,表示,查看尾部多少行,不填默认10行
  • 选项,+num,表示,从多少行开始查看(需要配合-n使用)

5、head命令

使用head命令,可以查看文件尾部内容

语法:head [-|+num] Linux路径

  • 选项,-num,表示,查看到尾部第多少行
  • 选项,+num,表示,查看头部多少行(需要配合-n使用)

十一、vi/vim编辑器

  • 什么是vi/vim编辑器

    • vi\vim是visual interface的简称,是Linux中最经典的文本编辑器

    • vi\vim编辑器,就是命令行模式下的文本编辑器,用来编辑文件

    • vim是vi的升级版,一般用vim即可,包含全部vi功能

  • 基础命令
    - vi 文件路径

    • vim文件路径
  • 运行模式

    • 命令模式,默认的模式,可以通过键盘快捷键控制文件内容
    • 输入模式,通过命令模式进入,可以输入内容进行编辑,按esc退回命令模式
    • 底线命令模式,通过命令模式进入,可以对文件进行保存、关闭等操作

  • 命令模式快捷键
模式 命令 描述
命令模式 i 在当前光标位置进入输入模式
命令模式 a 在当前光标位置之后进入输入模式
命令模式 I 在当前行的开头,进入输入模式
命令模式 A 在当前行的结尾,进入输入模式
命令模式 o 在当前光标下一行进入输入模式
命令模式 O 在当前光标上一行进入输入模式
输入模式 esc 任何情况下输入esc都能回到命令模式
模式 命令 描述
命令模式 键盘上、键盘k 向上移动光标
命令模式 键盘下、键盘j 向下移动光标
命令模式 键盘左、键盘h 向左移动光标
命令模式 键盘右、键盘l 向右移动光标
命令模式 0 移动光标到当前行的开头
命令模式 $ 移动光标到当前行的结尾
命令模式 pageup 向上翻页
命令模式 pagedown 向下翻页
命令模式 / 进入搜索模式
命令模式 n 向下继续搜索
命令模式 N 向上继续搜索
命令模式 dd 删除光标所在行的内容
命令模式 ndd n是数字,表示删除当前光标向下n行
命令模式 yy 复制当前行
命令模式 nyy n是数字,复制当前行和下面的n行
命令模式 p 粘贴复制的内容
命令模式 u 撤销修改
命令模式 ctrl+r 反向撤销修改
命令模式 gg 跳到首行
命令模式 G 跳到行尾
命令模式 dG 从当前行开始,向下全部删除
命令模式 dgg 从当前行开始,向上全部删除
命令模式 d$ 从当前光标开始,删除到本行的结尾
命令模式 d0 从当前光标开始,删除到本行的开头
  • 底线命令模式

编辑模式没有什么特殊的,进入编辑模式后,任何快捷键都没有作用,就是正常输入文本而已。
唯一需要记住的,就是:通过esc,可以退回到命令模式中即可。

在命令模式内,输入:,即可进入底线命令模式,支持如下命令:

模式 命令 描述
底线命令模式 :wq 保存并退出
底线命令模式 :q 仅退出
底线命令模式 :q! 强制退出
底线命令模式 :w 仅保存
底线命令模式 :set nu 显示行号
底线命令模式 :set paste 设置粘贴模式

二、Linux权限管控

一、Linux的root用户

1、su和exit命令

su命令就是用于账户切换的系统命令,其来源英文单词:Switch User
语法:su [-] [用户名]

  • -符号是可选的,表示是否在切换用户后加载环境变量,建议带上
  • 参数:用户名,表示要切换的用户,用户名也可以省略,省略表示切换到root
  • 切换用户后,可以通过exit命令退回上一个用户,也可以使用快捷键:ctrl+d
  • 使用普通用户,切换到其它用户需要输入密码,如切换到root用户
  • 使用root用户切换到其它用户,无需密码,可以直接切换

这里一定要分清 useradd 命令和 usermod 命令的区别,前者用于添加用户,当然,添加用户时可以对用户信息进行定制;后者针对与已存在的用户,使用该命令可以修改它们的信息

usermod命令 描述
-c 修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段
-d 修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径
-e 修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段
-g 修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID)
-u 修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID)
-G 修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件
-l 修改用户名称
-L 临时锁定用户(Lock)
-U 解锁用户(Unlock),和 -L 对应
-s 修改用户的登录 Shell,默认是 /bin/bash
//创建普通用户aaa
①进入root用户
sudo su
②创建用户
useradd -m aaa
③设置密码(掩码形式显示在控制台)
passwd
④确认密码
⑤设置该用户使用的shell
usermod -s/bin/bash aaa
⑥用户绑定
chown -R aaa:aaa /home/aaa

//切换用户
su - aaa
//切换root用户
sudo su
//退回原用户
exit或logout或ctrl+d

2、sudo命令

在我们得知root密码的时候,可以通过su命令切换到root得到最大权限。
但是我们不建议长期使用root用户,避免带来系统损坏。
我们可以使用sudo命令,为普通的命令授权,临时以root身份执行。
语法: sudo 其它命令

  • 在其它命令之前,带上sudo,即可为这一条命令临时赋予root授权
  • 但是并不是所有的用户,都有权利使用sudo,我们需要为普通用户配置sudo认证

为普通用户配置sudo认证

  • 切换到root用户,执行visudo命令,会自动通过vi编辑器打开:/etc/sudoers
  • 在文件最后添加:

  • wq保存

二、用户和用户组

Linux系统中可以:

  • 配置多个用户
  • 配置多个用户组
  • 用户可以加入多个用户组中

Linux中关于权限的管控级别有2个级别,分别是:

  • 针对用户的权限控制
  • 针对用户组的权限控制

1、用户组管理

以下命令需root用户执行

  • 创建用户组

groupadd 用户组名

  • 删除用户组

groupdel 用户组名

  • 修改用户所属组

    usermod -aG 用户组 用户名,将指定用户加入指定用户组

  • 用户加入/退出用户组

    gpasswd -a|-d 用户名 用户组名

2、用户管理

以下命令需root用户执行

  • 创建用户

    useradd [-g -d] 用户名

    • 选项:-g指定用户的组,不指定-g,会创建同名组并自动加入,指定-g需要组已经存在,如已存在同名组,必须使用-g
    • 选项:-d指定用户HOME路径,不指定,HOME目录默认在:/home/用户名
  • 删除用户

    userdel [-r] 用户名

    • 选项:-r,删除用户的HOME目录,不使用-r,删除用户时,HOME目录保留
  • 查看用户所属组

    id [用户名]

    • 参数:用户名,被查看的用户,如果不提供则查看自身

3、getent命令

  • 查看当前系统中有哪些用户

语法:getent passwd

共有7份信息,分别是:
用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)

  • 查看当前系统中有哪些用户组

语法:getent group

包含3份信息,组名称:组认证(显示为x):组ID

三、查看权限控制信息

认知权限信息

  • 序号1,表示文件、文件夹的权限控制信息
  • 序号2,表示文件、文件夹所属用户
  • 序号3,表示文件、文件夹所属用户组

序号 描述
1 -表示文件,d表示文件夹,l表示软链接
2 所属用户权限
3 所属用户组权限
4 其它用户权限

rwx含义

  • r表示读权限
  • w表示写权限
  • x表示执行权限

针对文件、文件夹的不同,rwx的含义有细微差别

  • r,针对文件可以查看文件内容

    • 针对文件夹,可以查看文件夹内容,如ls命令
  • w,针对文件表示可以修改此文件

    • 针对文件夹,可以在文件夹内:创建、删除、改名等操作
  • x,针对文件表示可以将文件作为程序执行

    • 针对文件夹,表示可以更改工作目录到此文件夹,即cd进入

四、查看权限控制

1、chmod

使用chmod命令,修改文件、文件夹的权限信息
注意,只有文件、文件夹的所属用户或root用户可以修改
语法:chmod [-R] 权限 文件或文件夹

  • 选项:-R,对文件夹内的全部内容应用同样的操作

例:

  • chmod u=rwx,g=rx,o=x test.txt,将文件权限修改为:rwxr-x- -x

    • 其中:u表示user所属用户权限,g表示group组权限,o表示other其它用户权限
  • chmod -R u=rwx,g=rx,o=x test,将文件夹test及文件夹全部内容权限设置为:rwxr-x- -x

  • 除此之外,还有快捷写法:chmod 751 test.txt

    • 751表示rwx(7)r-x(5)- -x(1)
  • 权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限

权限的数字序号 描述
0 无任何权限,即- - -
1 仅有x权限,即- - x
2 仅有w权限,即-w-
3 有w和x权限,即-wx
4 仅有r权限,即r- -
5 有r和x权限,即r-w
6 有r和w权限,即rw-
7 有全部权限,即rwx

2、chown

使用chown命令,可以修改文件、文件夹的所属用户和用户组
普通用户无法修改所属为其它用户或组,所以此命令只适用于root用户执行

语法:chown [-R] [用户] [:] [用户组] 文件或文件夹

  • 选项,-R,同chmod,对文件夹内全部内容应用相同规则
  • 选项,用户,修改所属用户
  • 选项,用户组,修改所属用户组
  • :用于分隔用户和用户组

三、Linux实用操作

一、小技巧及快捷键

快捷键或命令 描述
Ctrl+c 强制停止
Ctrl+d 退出(不能用于退出vi/vim)
history 查看历史输入过的命令
!命令前缀 自动执行上一次匹配前缀的命令
Ctrl+r 输入内容去匹配历史命令
Ctrl+a 跳到命令开头
Ctrl+e 跳到命令结尾
Ctrl+键盘左键 向左跳一个单词
Ctrl+键盘右键 向右跳一个单词
Ctrl+l、clear 清空终端内容

二、软件安装

1、CentOS系统

yum自动化安装管理器

yum:RPM包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题
语法:yum [-y] [install | remove | search] 软件名称

  • 选项:-y,自动确认,无需手动确认安装或卸载过程
  • install:安装
  • remove:卸载
  • search:搜索

yum命令需要root权限,可以su切换到root,或使用sudo提权
yum命令需要联网

2、Ubuntu系统

apt自动化安装管理器

apt:DEB包软件管理器,用于自动化安装配置Linux软件,并可以自动解决依赖问题

语法:apt [-y] [install | remove | search] 软件名称

apt命令也需要root权限,与yum一样

CentOS系统与Ubuntu系统只有安装软件时略有不同,其它功能一样

三、systemctl控制软件启动关闭

systemctl命令

Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动、停止、开机自启
能够被systemctl管理的软件,一般也称之为:服务

语法:systemctl start | stop | status | enable | disable 服务名

选项 语法
start 启动
stop 关闭
status 查看状态
enable 开启开机自启
disable 关闭开机自启

系统内置的服务比较多,比如:

  • NetworkManager,主网络服务
  • network,副网络服务
  • firewalld,防火墙服务
  • sshd,ssh服务(FinalShell远程登录Linux使用的就是这个服务)

除了内置的服务以外,部分第三方软件安装后也可以以systemctl进行控制

  • yum install -y ntp,安装ntp软件
    可以通过ntpd服务名,配合systemctl进行控制
  • yum install -y httpd,安装apache服务器软件
    可以通过httpd服务名,配合systemctl进行控制
  • 部分软件安装后没有自动集成到systemctl中,我们可以手动添加

四、软链接

ln命令创建软链接

在系统中创建软链接,可以将文件、文件夹链接到其它位置
类似windows系统中的 快捷方式
语法:ln -s 参数1 参数2

  • -s选项,创建软连接
  • 参数1:被链接的文件或文件夹
  • 参数2:要链接去的目的地

  • 文件夹也同样如此创建

五、日期和时区

1、date命令

通过date命令可以在命令行中查看系统的时间
语法:date [-d] [+格式化字符串]

  • -d按照给定的字符串显示日期,一般用于日期计算
  • 格式化字符串:通过特定的字符串标记,来控制显示的日期格式
格式 描述
%Y
%y 年份后两位
%m 月份(01~12)
%d 日(01~31)
%H 小时(00~23)
%M 分钟(00~59)
%S 秒(00~60)
%s 时间戳

  • 由于中间带有空格,所以使用双引号包围格式化字符串,作为整体

2、-d选项进行日期加减

  • -d选项,可以按照给定的字符串显示日期,一般用于日期计算

  • 其中支持的时间标记为:

    • year年
    • Month月
    • day天
    • hou小时
    • minute分钟
    • second秒
  • -d选项可以和格式化字符串配合一起使用

3、修改Linux时区

使用root权限,执行如下命令,修改时区为东八区时区

//将系统自带的localtime文件删除
rm -f /etc/localtime

//将/usr/share/zoneinfo/Asia/Shanghai文件链接为localtime文件即可
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4、ntp程序

①ntp程序自动校准系统时间
安装ntp:yum -y install ntp
启动并设置开机自启:

  • systemctl start ntpd
  • systemctl enable ntpd

当ntpd启动后会定期的帮助我们联网校准系统的时间

②手动校准(需root权限):ntpdate -u ntp.aliyun.com

通过阿里云提供的服务网址配合ntpdate(安装ntp后会附带这个命令)命令自动校准

六、IP地址和主机名

1、IP地址

IP地址是联网计算机的网络地址,用于在网络中进行定位
IP地址主要有2个版本,V4版本和V6版本(V6很少用,暂不涉及)
IPv4版本的地址格式是:a.b.c.d,其中abcd表示0~255的数字,如192.168.88.101就是一个标准的IP地址

可以通过命令:ifconfig,查看本机的ip地址,如无法使用ifconfig命令,可以安装:yum -y install net-tools

特殊IP地址

  • 127.0.0.1
    • 用于指代本机
  • 0.0.0.0
    • 可以用于指代本机
    • 可以在端口绑定中用来确定绑定关系
    • 在一些IP地址限制中,表示所有IP的意思,如放行规则设置为0.0.0.0,表示允许任意IP访问

2、主机名

每一台电脑除了对外联络地址(IP地址)以外,也可以有一个名字,称之为主机名,无论是Windows或Linux系统,都可以给系统设置主机名

  • Windows系统主机名

  • Linux系统主机名

    输入hostname

修改主机名(需root)

语法:hostnamectl set-hostname 新主机名

3、域名解析(主机名映射)

配置主机名映射

只需要在Windows系统的:C:\Windows\System32\drivers\etc\hosts文件中配置记录即可(以管理员身份打开)

  • 保存之后,就可以通过主机名而非IP地址访问了

七、网络请求和下载

1、ping命令

可以通过ping命令,检查指定的网络服务器是否是可联通状态
语法:ping [-c num] ip或主机名

  • 选项:-c,检查的次数,不使用-c选项,将无限次数持续检查
  • 参数:ip或主机名,被检查的服务器的ip地址或主机名地址

2、wget命令

wget是非交互式的文件下载器,可以在命令行内下载网络文件
语法:wget [-b] url

  • 选项:-b,可选,后台下载,会将日志写入到当前工作目录的wget-log文件

  • 参数:url,下载链接

  • 通过tail命令可以监控后台下载进度:tail -f wget-log

注意:无论下载是否完成,都会生成要下载的文件,如果下载未完成,请及时清理未完成的不可用文件

  • 通过命令行输入rm -f 下载文件清理文件

3、curl命令

curl可以发送http网络请求,可用于:下载文件、获取信息等
语法:curl [-O] url

  • 选项:-O,用于下载文件,当url是下载链接时,可以使用此选项保存文件
  • 参数:url,要发起请求的网络地址
  • hadoop-3.3.0下载链接:https://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz

八、端口

端口,是设备与外界通讯交流的出入口。端口可以分为;物理端口和虚拟端口两类

  • 物理端口:又可称之为接口,是可见的端口,如USB接口,RJ45网口,HDMI端口等
  • 虚拟端口:是指计算机内部的端口,是不可见的,是用来操作系统和外部进行交互使用的

计算机程序(如QQ微信)之间的通讯,通过IP只能锁定计算机,但是无法锁定具体的程序。
通过端口可以锁定计算机上具体的程序,确保程序之间进行沟通

IP地址相当于小区地址,在小区内可以有许多住户(程序),而门牌号(端口)就是各个住户(程序)的联系地址

Linux系统是一个超大号小区,可以支持65535个端口,这6万多个端口分为3类进行使用:

  • 公认端口:1~1023,通常用于一些系统内置或知名程序的预留使用,如SSH服务的22端口,HTTPS服务的443端口,非特殊需要,不要占用这个范围的端口
  • 注册端口:1024~49151,通常可以随意使用,用于松散的绑定一些程序\服务
  • 动态端口:49152~65535,通常不会固定绑定程序,而是当程序对外进行网络链接时,用于临时使用

查看端口占用

1、nmap命令

可以通过Linux命令去查看端口的占用情况

  • 使用nmap命令,安装nmap:yum -y install nmap

语法:nmap 被查看的IP地址

可以看到,本机(127.0.0.1)上有6个端口现在被程序占用了。
其中:

  • 22端口,一般是SSH服务使用,这里是workbench远程连接Linux所使用的端口

2、netstat命令

  • 可以通过netstat命令,查看指定端口的占用情况

语法:netstat -anp|grep 端口号,安装netstat:yum -y install net-tools

如图,可以看到当前系统111端口被程序(进程号1)占用了
其中,0.0.0.0:111,表示端口绑定在0.0.0.0这个IP地址上,表示允许外部访问

九、进程

程序运行在操作系统中,是被操作系统所管理的。
为管理运行的程序,每一个程序在运行的时候,便被操作系统注册为系统中的一个:进程
并会为每一个进程都分配一个独有的:进程ID(进程号)

1、查看进程

可以通过ps命令查看Linux系统中的进程信息
语法:ps [-e -f]
选项:-e,显示出全部的进程
选项:-f,以完全格式化的形式展示信息(展示全部信息)
一般来说,固定用法就是:ps -ef列出全部进程的全部信息

格式 描述
UID 进程所属的用户ID
PID 进程的进程号ID
PPID 进程的父ID(启动此进程的其它进程)
C 进程的CPU占用率(百分比)
STIME 进程的启动时间
TTY 启动此进程的终端序号,如显示?,表示非终端启动
TIME 进程占用CPU的时间
CMD 进程对应的名称或启动路径或启动命令

2、查看指定进程

语法:

ps -ef查看进程信息

ps -ef|grep 关键字过滤指定关键字进程信息

kill [-9] 进程号关闭指定进程号的进程

十、主机状态监控

1、查看系统资源占用

  • 可以通过top命令查看CPU、内存使用情况,类似Windows的任务管理器
  • 默认每5秒刷新一次,语法:直接输入top即可,按q或ctrl+c退出

选项 功能
-p 只显示某个进程的信息
-d 设置刷新时间,默认是5s
-c 显示产生进程的完整命令,默认是进程名
-n 指定刷新次数,比如top-n 3,刷新输出3次后退出
-b 以非交互非全屏模式运行,以批次的方式执行top,一般配合-n指定输出几次统计信息,将输出重定向到指定文件,比如 top -b -n 3> /tmp/top.tmp
-i 不显示任何闲置(idle)或无用(zombie)的进程
-u 查找特定用户启动的进程

top交互式选项

当top以交互式运行(非-b选项启动),可以用以下交互式命令进行控制

按键 功能
h键 按下h键,会显示帮助画面
c键 按下c键,会显示产生进程的完整命令,等同于-c参数,再次按下c键,变为默认显示
f键 按下f键,可以选择需要展示的项目
M键 按下M键,根据驻留内存大小(RES)排序
P键 按下P键,根据CPU使用百分比大小进行排序
T键 按下T键,根据时间/累计时间进行排序
E键 按下E键,切换顶部内存显示单位
e键 按下e键,切换进程内存显示单位
l键 按下l键,切换显示平均负载和启动时间信息
i键 按下i键,不显示闲置或无用的进程,等同于-i参数,再次按下,变为默认显示
t键 按下t键,切换显示CPU状态信息
m键 按下m键,切换显示内存信息

2、top命令内容详解

top 命令名称
12:41:58 当前系统时间
up 1 day 启动了1天
2 users 2个用户登录
load average 1、5、15分钟负载
tasks 217个进程
2 running 2个进程子在运行
215 sleeping 215个进程睡眠
0 stopped 0个停止进程
0 zombie 0个僵尸进程
%Cpu(s) CPU使用率
us 用户CPU使用率
sy 系统CPU使用率
ni 高优先级进程占用CPU时间百分比
id 空闲CPU率
wa IO等待CPU占有率
hi CPU硬件中断率
si CPU软件中断率
st 强制等待占用CPU率
Mib Mem 物理内存
total 总量
free 空闲
used 使用
buff/cache buff和cache占用
Mib Swap 虚拟内存(交换空间)
total 总量
free 空闲
used 使用
buff/cache buff/cache占用
PID 进程id
USER 进程所属用户
PR 进程优先级,越小越高
NI 负值表示高优先级,正表示低优先级
VIRI 进程使用虚拟内存,单位KB
RES 进程使用物理内存,单位KB
SHR 进程使用共享内存,单位KB
S 进程状态(S休眠,R运行,Z僵死状态,N负数优先级,I空闲状态)
%CPU 进程占用CPU率
%MEM 进程占用内存率
TIME 进程使用CPU时间总计,单位10毫秒
COMMAND 进程的命令或名称或程序文件路径

3、磁盘信息监控

  • 使用df命令,可以查看硬盘的使用情况

语法:df [-h]

选项:-h,以更加人性化的单位显示

  • 可以使用iostat查看CPU、磁盘的相关信息

语法:iostat [-x] [num1] [num2]

  • 选项:-x,显示更多信息
  • num1:数字,刷新间隔,num2:数字,刷新几次

设备 描述
rrqm/s 每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge,提高lO利用率,避免重复调用)
wrqm/s 每秒这个设备相关的写入请求有多少被Merge了
rsec/s 每秒读取的扇区数;sectors
wsec/ 每秒写入的扇区数
rkB/s 每秒发送到设备的读取请求数
wkB/s 每秒发送到设备的写入请求数
avgrq-sz 平均请求扇区的大小
avgqu-sz 平均请求队列的长度。毫无疑问,队列长度越短越好
await 每一个I0请求的处理的平均时间(单位是微秒毫秒)
svctm 表示平均每次设备l/O操作的服务时间(以毫秒为单位)
%util 磁盘利用率

4、网络状态监控

  • 可以使用sar命令查看网络的相关统计(sar命令非常复杂,这里仅简单用于统计网络)
    语法:sar -n DEV num1 num2
    选项:-n,查看网络,DEV表示查看网络接口
    num1:刷新间隔(不填就查看一次结束),num2:查看次数(不填无限次数)

名称 描述
IFACE 本地网卡接口的名称
rxpck/s 每秒钟接受的数据包
txpck/s 每秒钟发送的数据包
rxkB/S 每秒钟接受的数据包大小,单位为KB
txkB/S 每秒钟发送的数据包大小,单位为KB
rxcmp/s 每秒钟接受的压缩数据包
txcmp/s 每秒钟发送的压缩包
rxmcst/s 每秒钟接收的多播数据包

十一、环境变量

1、PATH

无论当前工作目录是什么,都能执行/usr/bin/cd这个程序,这个就是借助环境变量中:PATH这个项目的值来做到的

  • 当执行任何命令,都会按照顺序,从上述路径中搜索要执行的程序的本体
  • 比如执行cd命令,就从2目录中搜索到了cd命令,并执行

2、$符号

在Linux系统中,$ 符号被用于取”变量”的值
环境变量记录的信息,除了给操作系统自己使用外,如果我们想要取用,也可以使用
取得环境变量的值就可以通过语法:$ 环境变量名来取得

3、自行设置环境变量

Linux环境变量可以用户自行设置,其中分为:

  • 临时设置,语法:export 变量名 = 变量值

  • 永久生效

    • 针对当前用户生效,配置在当前用户的: ~/.bashrc文件中

    • 针对所有用户生效,配置在系统的:/etc/profile文件中

      并通过语法:source 配置文件,进行立刻生效

4、自定义环境变量PATH

修改PATH的值export PATH=$PATH:路径

十二、Linux文件的上传和下载

  • 图中的Linux系统为阿里云ECS实例(不支持rz和sz命令,需手动添加)

除了通过窗体进行文件的传输以外,也可以通过rz、sz命令进行文件传输

rz、sz命令需要安装,可以通过:yum -y install lrzsz,即可安装

  • rz命令,进行上传,语法:直接输入rz即可

  • sz命令进行下载,语法:sz 要下载的文件

文件会自动下载到桌面的:fsdownload文件夹中

十三、压缩和解压

1、压缩格式

市面上有非常多的压缩格式

  • zip格式:Linux、Windows、MacOS,常用
  • 7zip:Windows系统常用
  • rar:Windows系统常用
  • tar:Linux、MacOS常用
  • gzip:Linux、MacOS常用

2、tar命令

Linux和Mac系统常用有2种压缩格式,后缀名分别是:

  • .tar,称之为tarball,归档文件,即简单的将文件组装到一个.tar的文件内,并没有太多文件体积的减少,仅仅是简单的封装
  • .gz,也常见为.tar.gz,gzip格式压缩文件,即使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积

针对这两种格式,使用tar命令均可以进行压缩和解压缩的操作
语法:tar [-c -v -x -f -z -C] 参数1 参数2 ... 参数N

  • -c,创建压缩文件,用于压缩模式

  • -v,显示压缩、解压过程,用于查看进度

  • -x,解压模式

  • -f,要创建的文件,或要解压的文件,-f 选项必须在所有选项中位置处于最后一个

  • -z,gzip模式,不使用-z就是普通的tarball格式,-z 一般处于选项第一个

  • -C,选择解压的目的地,用于解压模式

  • 首先创建3个txt文件

  • cvf格式没有太多的体积压缩效果,只有简单的封装效果(解压用xvf)

  • zcvf格式用于体积压缩(解压用zxvf)

3、zip、gzip、bzip2命令

1、zip

zip命令压缩文件

可以使用zip命令,压缩文件为zip压缩包
语法:zip [-r] 参数1 参数2...参数N

  • -r,被压缩的包含文件夹的时候,需要使用-r选项,和rm、cp等命令的-r效果一致

unzip命令解压文件

使用unzip命令,可以方便的解压zip压缩包
语法:unzip [-d] 参数

  • -d,指定要解压去的位置,同tar的-C选项
  • 参数,被解压的zip压缩包文件

2、gzip和bzip2

用法与zip一致,解压方法分别为gunzip和bunzip2

  • 不管是gzip还是bzip2解压,原文件不存在,zip解压后原文件依旧存在

  • gzip与bzip2不可以压缩目录,zip既可以压缩文件也可以压缩目录

  • gzip与bzip2可以同时压缩多个文件,gunzip与bunzip2也可以同时解压多个文件

十四、关机命令

语法:shutdown -h|-r|-c 时间节点

  • 参数:-h关机命令,-r重启命令,-c取消关机命令

十五、系统信息命令

  • arch/uname -m 显示处理器架构
  • uname -a 显示使用的内核版本
  • getconf Long_BIT 显示操作系统位数
  • cat /proc/cpuinfo 显示cpu信息
  • cat /proc/version 显示内核版本
  • cat /proc/net/dev 显示网络适配器信息
  • cat /etc/redhat-release 查看CentOS版本
  • date 显示系统日期
  • cal 2022 打印2022年的日历表 -y打印当前年份日历表
  • date 041217002022.00 设置日期时间-月日时分年.秒
  • ifconfig eth0 显示以太网卡的配置
  • ifconfig eth0 down 禁用一个eth0网络设备
  • netstat 显示网络状态
  • netstat -r|-w-|groups 查看路由器信息|当前上机者详细资料|某人的组
  • history 查看历史命令
  • kill -9 pid 强制杀死进程
  • ps -aux 显示某一瞬间所有进程状态
  • top 动态显示当前系统资源耗费最多的进程
  • free -m 查看内存有多少MB
  • shutdown -h now 或者 halt 关闭系统
  • reboot 重启
  • service iptables stop 关闭防火墙

十六、shell脚本

如果脚本名字为test.sh,则执行它的命令是./test.sh

#!/bin/bash
echo "Hello World!"

//for循环
#!/bin/bash
for skill in c语言 python java php;do
echo "i good at ${skill}"
done

//带参数
#!/bin/bash
yourname="xl"
echo $yourname

//带元组
#!/bin/bash
myname=(张三 李四 王五)
echo "${myname[0]}";
echo "${myname[1]}";
echo "${myname[2]}";

四、Linux各类软件部署

注意:安装操作需要root权限,通过sudo su- ,切换到root用户

MySQL安装部署

一、MySQL5.7版本在CentOS系统安装

安装

1、配置yum仓库

#更新密明
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 

#安装MySQL5.x版本 yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

由于MySQL并不在CentOS的官方仓库中,所以我们通过上述rpm命令:

  • 导入MySQL仓库的密钥
  • 配置MySQL的yum仓库

2、使用yum安装MySQL

#yum安装MySQL
yum -y install mysql-community-server

3、安装完成后,启动MySQL并配置开机自启动

#启动
systemctl start mysqld
#开机自启
systemctl enable mysqld

MySQL安装完成后,会自动配置为名称叫做:mysqld的服务,可以被systemctl所管理

4、检查MySQL的运行状态

systemctl status mysqld

配置

主要配置管理员用户root的密码以及配置允许远程登录的权限

1、获取MySQL的初始密码
#通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
cat /var/log/mysqld.log | grep 'temporary password'

2、登录MySQL数据库系统
#执行
mysqld -uroot -p
#-u,登陆的用户,MySQL数据库的管理员用户同Linux一样,是root
#-p,表示使用密码登陆

#执行完毕后输入刚刚得到的初始密码,即可进入MySQL数据库

3、修改root用户密码
#在MySQL控制台内执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '密码';  
#密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
4、[扩展],配置root的简单密码
#如果你想设置简单密码,需要降低Mysql的密码安全级别

#密码安全级别低
set global validate_password_policy=LOW; 
#密码长度最低4位即可
set global validate_password_length=4;

#然后就可以用简单密码了(这里设为root了)
ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码';
5、[扩展],配置root运行远程登录

默认情况下,root用户是不运行远程登录的,只允许在MySQL所在的Linux服务器登陆MySQL系统
请注意,允许root远程登录会带来安全风险

#授权root远程登录
grant all privileges on *.* to root@"IP地址" identified by '密码' with grant option;
#IP地址即允许登陆的IP地址,也可以填写%,表示允许任何地址
#密码表示给远程登录独立设置密码,和本地登陆的密码可以不同

#刷新权限,生效
flush privileges;
6、退出MySQL控制台页面
#退出命令
exit

#快捷键:Ctrl + d
7、检查端口

MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态

netstat -anp | grep 3306

二、MySQL8.0版本在CentOS系统安装

安装

1、配置yum仓库

#更新密明
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 

#安装MySQL5.x版本 yum库
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm

2、使用yum安装MySQL

#yum安装MySQL
yum -y install mysql-community-server

3、安装完成后,启动MySQL并配置开机自启动

#启动
systemctl start mysqld
#开机自启
systemctl enable mysqld

4、检查MySQL的运行状态

systemctl status mysqld

配置

1、获取MySQL的初始密码
#通过grep命令,在/var/log/mysqld.log文件中,过滤temporary password关键字,得到初始密码
grep 'temporary password' /var/log/mysqld.log 
2、登录MySQL数据库系统
#执行
mysql -uroot -p
#-u,登陆的用户,MySQL数据库的管理员用户同Linux一样,是root
#-p,表示使用密码登陆

#执行完毕后输入刚刚得到的初始密码,即可进入MySQL数据库
3、修改root用户密码
#在MySQL控制台内执行
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';  
#密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
4、[扩展],配置root的简单密码(与5.x略有不同)
#密码安全级别低
set global validate_password.policy=0; 
#密码长度最低4位即可
set global validate_password.length=4;
5、允许root远程登录,并设置远程登录密码
#第一次设置root远程登录,并配置远程密码使用如下SQL命令
create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码!';
#密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc

#后续修改密码使用如下SQL命令
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
6、退出MySQL控制台页面
#退出命令
exit

#快捷键:Ctrl + d
7、检查端口

MySQL默认绑定了3306端口,可以通过端口占用检查MySQL的网络状态

netstat -anp | grep 3306

三、MySQL5.7版本在Ubuntu(WSL环境)系统安装

课程中配置的WSL环境是最新的Ubuntu22.04版本,这个版本的软件商店内置的MySQL是8.0版本
所以我们需要额外的步骤才可以安装5.7版本的MySQL

1、下载apt仓库文件

#下载apt仓库的安装包,Ubuntu的安装包是.deb文件
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb

2、配置apt仓库

#使用dpkg命令安装仓库
dpkg -i mysql-apt-config_0.8.12-1_all.deb

弹出框中选择:ubuntu bionic (Ubuntu18.04系统的代号是bionic,选择18.04的版本库用来安装)

3、更新apt仓库的信息

#首先导入仓库的密钥信息
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 467B942D3A79BD29
#更新仓库信息
apt update

4、检查是否成功配置NySQL5.7的仓库

apt-cache policy mysql-server

5、安装MySQL5.7

#使用apt安装mysql客户端和mysql服务端
apt install -f -y mysql-client=5.7* mysql-community-server=5.7*

6、启动MySQL

#启动
/etc/init.d/mysql start
#停止
/etc/init.d/mysql stop
#查看状态
/etc/init.d/mysql status

7、对MySQL进行初始化

#执行如下命令,此命令是MySQL安装后自带的配置程序
mysql_secure_installation
#可以通过which命令查看到这个自带程序所在的位置
root@DESKTOP-Q89USRE:~# which mysql_secure_installation
/usr/bin/mysql_secure_installation

①输入密码

②是否开启密码验证插件,如果需要增强密码安全性,输入y并回车,不需要直接回车(图中选择直接回车)

③是否更改root密码,需要输入y回车,不需要直接回车(图中不更改)

④是否移除匿名用户,移除输入y回车,不移除直接回车(图中选择移除)

⑤是否进制root用户远程登录,禁止输入y回车,不禁止直接回车(图中选择不禁止)

⑥是否移除自带的测试数据库,移除输入y回车,不移除直接回车(图中选择不移除)

⑦是否刷新权限,刷新输入y回车,不刷新直接回车(图中选择刷新)

8、登录MySQL

mysql -uroot -p
#输入密码即可登录

四、MySQL5.7版本在Ubuntu(WSL环境)系统安装

如果已经安装过MySQL5.7版本,需要卸载仓库信息

#卸载MySQL5.7版本
apt remove -y mysql-client=5.7* mysql-community-server=5.7*
#卸载5.7的仓库信息
dpkg -l | grep mysql | awk '{print $2}' | xargs dpkg -P

1、更新apt仓库信息

apt update

2、安装mysql

apt install -y mysql-server

3、启动MySQL

#启动
/etc/init.d/mysql start
#停止
/etc/init.d/mysql stop
#查看状态
/etc/init.d/mysql status

4、登录MySQL设置密码

#直接执行:mysql
mysql

5、设置密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

6、退出MySQL控制台

exit

7、对MySQL进行初始化

#执行如下命令,此命令是MySQL安装后自带的配置程序
mysql_secure_installation
#可以通过which命令查看到这个自带程序所在的位置
root@DESKTOP-Q89USRE:~# which mysql_secure_installation
/usr/bin/mysql_secure_installation

①输入密码

②是否开启密码验证插件,如果需要增强密码安全性,输入y并回车,不需要直接回车

③是否更改root密码,需要输入y回车,不需要直接回车

④是否移除匿名用户,移除输入y回车,不移除直接回车

⑤是否进制root用户远程登录,禁止输入y回车,不禁止直接回车

⑥是否移除自带的测试数据库,移除输入y回车,不移除直接回车

⑦是否刷新权限,刷新输入y回车,不刷新直接回车

8、重新登录MySQL

mysql -uroot -p

Tomcat安装部署

简介

Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等

简单来说,Tomcat是一个WEB应用程序的托管平台,可以让用户编写的WEB应用程序,被Tomcat所托管,并提供网站服务

即让用户开发的WEB应用程序,变成可以被访问的网页

安装

Tomcat的安装非常简单,主要分为2部分:
1、安装JDK环境
2、解压并安装Tomcat

本次安装使用Tomcat版本是:10.0.27版本,需要Java(JDK)版本最低为JDK8或更高版本

课程中使用的JDK版本是:JDK8u351版本

安装JDK环境

  1. 下载JDK软件

    https://www.oracle.com/java/technologies/downloads

    在页面下方找到:

    下载jdk-8u351-linux-x64.tar.gz

    在弹出的页面中输入Oracle的账户密码即可下载(如无账户,请自行注册,注册是免费的)

  2. 登陆Linux系统,切换到root用户

  3. 通过FinalShell,上传下载好的JDK安装包

  4. 创建文件夹,用来部署JDK,将JDK和Tomcat都安装部署到:/export/server 内

    mkdir -p /export/server
    
  5. 解压缩JDK安装文件

    tar -zxvf jdk-8u351-linux-x64.tar.gz -C /export/server
    
  6. 配置JDK的软链接

    ln -s /export/server/jdk1.8.0_351 /export/server/jdk
    
  7. 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中

    # 编辑/etc/profile文件
    export JAVA_HOME=/export/server/jdk
    export PATH=$PATH:$JAVA_HOME/bin
    
  8. 生效环境变量

    source /etc/profile
    
  9. 配置java执行程序的软链接

    # 删除系统自带的java程序
    rm -f /usr/bin/java
    # 软链接我们自己安装的java程序
    ln -s /export/server/jdk/bin/java /usr/bin/java
    
  10. 执行验证:

    java -version
    javac -version
    

解压并部署Tomcat

Tomcat建议使用非Root用户安装并启动

可以创建一个用户:tomcat用以部署

  1. 首先,放行tomcat需要使用的8080端口的外部访问权限

    CentOS系统默认开启了防火墙,阻止外部网络流量访问系统内部

    所以,如果想要Tomcat可以正常使用,需要对Tomcat默认使用的8080端口进行放行

    放行有2种操作方式:

    1. 关闭防火墙
    2. 配置防火墙规则,放行端口
    # 以下操作2选一即可
    # 方式1:关闭防火墙
    systemctl stop firewalld		# 关闭防火墙
    systemctl disable firewalld		# 停止防火墙开机自启
    
    # 方式2:放行8080端口的外部访问
    firewall-cmd --add-port=8080/tcp --permanent		# --add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效
    firewall-cmd --reload								# 重新载入防火墙规则使其生效
    

    方便起见,建议同学们选择方式1,直接关闭防火墙一劳永逸

    防火墙的配置非常复杂,后面会视情况独立出一集防火墙配置规则的章节。

  2. 以root用户操作,创建tomcat用户

    # 使用root用户操作
    useradd tomcat
    # 可选,为tomcat用户配置密码
    passwd tomcat
    
  3. 下载Tomcat安装包

    # 使用root用户操作
    wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
    # 如果出现https相关错误,可以使用--no-check-certificate选项
    wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
    

    如果Linux内下载过慢,可以复制下载链接在Windows系统中使用迅雷等软件加速下载然后上传到Linux内即可

    或者使用课程资料中提供的安装包

  4. 解压Tomcat安装包

    # 使用root用户操作,否则无权限解压到/export/server内,除非修改此文件夹权限
    tar -zxvf apache-tomcat-10.0.27.tar.gz -C /export/server
    
  5. 创建Tomcat软链接

    # 使用root用户操作
    ln -s /export/server/apache-tomcat-10.0.27 /export/server/tomcat
    
  6. 修改tomcat安装目录权限

    # 使用root用户操作,同时对软链接和tomcat安装文件夹进行修改,使用通配符*进行匹配
    chown -R tomcat:tomcat /export/server/*tomcat*
    
  7. 切换到tomcat用户

    su - tomcat
    
  8. 启动tomcat

    /export/server/tomcat/bin/startup.sh
    
  9. tomcat启动在8080端口,可以检查是否正常启动成功

    netstat -anp | grep 8080
    

  10. 打开浏览器,输入:

    http://centos:8080或http://192.168.88.130:8080

    使用主机名(需配置好本地的主机名映射)或IP地址访问Tomcat的WEB页面

至此,Tomcat安装配置完成。

Nginx安装部署【简单】

简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

同Tomcat一样,Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务,同时也可以作为流量代理服务器,控制流量的中转。

Nginx在WEB开发领域,基本上也是必备组件之一了。

安装

Nginx同样需要配置额外的yum仓库,才可以使用yum安装

安装Nginx的操作需要root身份

  1. 安装yum依赖程序

    # root执行
    yum install -y yum-utils
    
  2. 手动添加,nginx的yum仓库

    yum程序使用的仓库配置文件,存放在:/etc/yum.repo.d内。

    # root执行
    # 创建文件使用vim编辑
    vim /etc/yum.repos.d/nginx.repo
    # 填入如下内容并保存退出
    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    

    通过如上操作,我们手动添加了nginx的yum仓库

  3. 通过yum安装最新稳定版的nginx

    # root执行
    yum install -y nginx
    
  4. 启动

    # nginx自动注册了systemctl系统服务
    systemctl start nginx		# 启动
    systemctl stop nginx		# 停止
    systemctl status nginx		# 运行状态
    systemctl enable nginx		# 开机自启
    systemctl disable nginx		# 关闭开机自启
    
  5. 配置防火墙放行

    nginx默认绑定80端口,需要关闭防火墙或放行80端口

    # 方式1(推荐),关闭防火墙
    systemctl stop firewalld		# 关闭
    systemctl disable firewalld		# 关闭开机自启
    
    # 方式2,放行80端口
    firewall-cmd --add-port=80/tcp --permanent		# 放行tcp规则下的80端口,永久生效
    firewall-cmd --reload							# 重新加载防火墙规则
    
  6. 启动后浏览器输入Linux服务器的IP地址或主机名即可访问

    http://192.168.88.130 或 http://centos

    ps:80端口是访问网站的默认端口,所以后面无需跟随端口号

    显示的指定端口也是可以的比如:

    • http://192.168.88.130:80
    • http://centos:80

至此,Nginx安装配置完成。

RabbitMQ安装部署【简单】

简介

RabbitMQ一款知名的开源消息队列系统,为企业提供消息的发布、订阅、点对点传输等消息服务。

RabbitMQ在企业开发中十分常见,课程为大家演示快速搭建RabbitMQ环境。

安装

rabbitmq在yum仓库中的版本比较老,所以我们需要手动构建yum仓库

  1. 准备yum仓库

    # root执行
    # 1. 准备gpgkey密钥
    rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
    rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
    
    # 2. 准备仓库文件
    vim /etc/yum.repos.d/rabbitmq.repo
    # 填入如下内容
    ##
    ## Zero dependency Erlang
    ##
    
    [rabbitmq_erlang]
    name=rabbitmq_erlang
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    [rabbitmq_erlang-source]
    name=rabbitmq_erlang-source
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    ##
    ## RabbitMQ server
    ##
    
    [rabbitmq_server]
    name=rabbitmq_server
    baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
           https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
    [rabbitmq_server-source]
    name=rabbitmq_server-source
    baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    
  2. 安装RabbitMQ

    # root执行
    yum install erlang rabbitmq-server -y
    
    Installed:
      erlang.x86_64 0:23.3.4.11-1.el7           rabbitmq-server.noarch 0:3.10.0-1.el7
    
  3. 启动

    # root执行
    # 使用systemctl管控,服务名:rabbitmq-server
    systemctl enable rabbitmq-server		# 开机自启
    systemctl disable rabbitmq-server		# 关闭开机自启
    systemctl start rabbitmq-server			# 启动
    systemctl stop rabbitmq-server			# 关闭
    systemctl status rabbitmq-server		# 查看状态
    
  4. 放行防火墙,RabbitMQ使用5672、15672、25672 3个端口

    # 方式1(推荐),关闭防火墙
    systemctl stop firewalld		# 关闭
    systemctl disable firewalld		# 关闭开机自启
    
    # 方式2,放行5672 25672端口
    firewall-cmd --add-port=5672/tcp --permanent		# 放行tcp规则下的5672端口,永久生效
    firewall-cmd --add-port=15672/tcp --permanent		# 放行tcp规则下的15672端口,永久生效
    firewall-cmd --add-port=25672/tcp --permanent		# 放行tcp规则下的25672端口,永久生效
    firewall-cmd --reload								# 重新加载防火墙规则
    
  5. 启动RabbitMQ的WEB管理控制台

    rabbitmq-plugins enable rabbitmq_management
    
  6. 添加admin用户,并赋予权限

    rabbitmqctl add_user admin 'Itheima66^'
    rabbitmqctl set_permissions -p "/" "admin" ".*" ".*" ".*"
    rabbitmqctl set_user_tags admin administrator
    
  7. 浏览器打开管理控制台

    http://192.168.88.130:15672

至此,RabbitMQ已经安装完成了。

Redis安装部署【简单】

简介

redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。

redis的特点就是:,可以基于内存存储数据并提供超低延迟、超快的检索速度

一般用于在系统中提供快速缓存的能力。

安装

  1. 配置EPEL仓库

    EPEL 的全称叫 Extra Packages for Enterprise Linux 。EPEL是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上了 EPEL之后,就相当于添加了一个第三方源。EPEL则为服务器版本提供大量的rpm包(yum程序所使用的程序安装包,类似Windows的exe),而且大多数rpm包在官方 repository 中是找不到的。

    # root执行
    yum install -y epel-release
    
  2. 安装redis

    # root执行
    yum install -y redis
    
  3. 启动redis

    # root执行
    # 使用systemctl管控,服务名:redis
    systemctl enable redis		# 开机自启
    systemctl disable redis		# 关闭开机自启
    systemctl start redis		# 启动
    systemctl stop redis		# 关闭
    systemctl status redis		# 查看状态
    
  4. 放行防火墙,redis使用端口6379

    # 方式1(推荐),关闭防火墙
    systemctl stop firewalld		# 关闭
    systemctl disable firewalld		# 关闭开机自启
    
    # 方式2,放行6379端口
    firewall-cmd --add-port=6379/tcp --permanent		# 放行tcp规则下的6379端口,永久生效
    firewall-cmd --reload	
    
  5. 进入redis服务

    # 执行redis-cli
    [root@centos ~]# redis-cli
    127.0.0.1:6379> set mykey hello
    OK
    127.0.0.1:6379> get mykey
    "hello"
    127.0.0.1:6379> 
    

至此,redis安装完成。

ElasticSearch安装部署

简介

全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 es)是目前全文搜索引擎的首选。

它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。

Elasticsearch简称es,在企业内同样是一款应用非常广泛的搜索引擎服务。

很多服务中的搜索功能,都是基于es来实现的。

安装

  1. 添加yum仓库

    # root执行
    # 导入仓库密钥
    rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    # 添加yum源
    # 编辑文件 
    vim /etc/yum.repos.d/elasticsearch.repo
    
    [elasticsearch-7.x]
    name=Elasticsearch repository for 7.x packages
    baseurl=https://artifacts.elastic.co/packages/7.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md
    
    
    # 更新yum缓存
    yum makecache
    
  2. 安装es

    yum install -y elasticsearch
    
  3. 配置es

    vim /etc/elasticsearch/elasticsearch.yml
    
    # 17行,设置集群名称
    cluster.name: my-cluster
    
    # 23行,设置节点名称
    node.name: node-1
    
    # 56行,允许外网访问
    network.host: 0.0.0.0
    
    # 74行,配置集群master节点
    cluster.initial_master_nodes: ["node-1"]
    
  4. 启动es

    systemctl start | stop | status | enable | disable elasticsearch
    
  5. 关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld
    
  6. 测试

    浏览器打开:http://ip:9200/?pretty

集群化环境前置准备

介绍

在前面,我们所学习安装的软件,都是以单机模式运行的。

后续,我们将要学习大数据相关的软件部署,所以后续我们所安装的软件服务,大多数都是以集群化(多台服务器共同工作)模式运行的。

所以,在当前小节,我们需要完成集群化环境的前置准备,包括创建多台虚拟机,配置主机名映射,SSH免密登录等等。

部署

配置多台Linux虚拟机

安装集群化软件,首要条件就是要有多台Linux服务器可用。

我们可以使用VMware提供的克隆功能,将我们的虚拟机额外克隆出3台来使用。

  1. 首先,关机当前CentOS系统虚拟机(可以使用root用户执行init 0来快速关机)

  2. 新建文件夹

    文件夹起名为:虚拟机集群

  3. 克隆

  4. 同样的操作克隆出:node2和node3

  5. 开启node1,修改主机名为node1,并修改固定ip为:192.168.88.131

    # 修改主机名
    hostnamectl set-hostname node1
    
    # 修改IP地址
    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    IPADDR="192.168.88.131"
    
    # 重启网卡
    systemctl stop network
    systemctl start network
    # 或者直接
    systemctl restart network
    
  6. 同样的操作启动node2和node3,

    修改node2主机名为node2,设置ip为192.168.88.132

    修改node2主机名为node3,设置ip为192.168.88.133

  7. 配置FinalShell,配置连接到node1、node2、node3的连接

    为了简单起见,建议配置root用户登录

准备主机名映射

  1. 在Windows系统中修改hosts文件,填入如下内容:

    如果同学们使用MacOS系统,请:

    1. sudo su -,切换到root
    2. 修改/etc/hosts文件
    192.168.88.131 node1
    192.168.88.132 node2
    192.168.88.133 node3
    
  2. 在3台Linux的/etc/hosts文件中,填入如下内容(3台都要添加

    192.168.88.131 node1
    192.168.88.132 node2
    192.168.88.133 node3
    

配置SSH免密登录

简介

SSH服务是一种用于远程登录的安全认证协议。

我们通过FinalShell远程连接到Linux,就是使用的SSH服务。

SSH服务支持:

  1. 通过账户+密码的认证方式来做用户认证
  2. 通过账户+秘钥文件的方式做用户认证

SSH可以让我们通过SSH命令,远程的登陆到其它的主机上,比如:

在node1执行:ssh root@node2,将以root用户登录node2服务器,输入密码即可成功登陆

或者ssh node2,将以当前用户直接登陆到node2服务器。

SSH免密配置

后续安装的集群化软件,多数需要远程登录以及远程执行命令,我们可以简单起见,配置三台Linux服务器之间的免密码互相SSH登陆

  1. 在每一台机器都执行:ssh-keygen -t rsa -b 4096,一路回车到底即可

  2. 在每一台机器都执行:

    ssh-copy-id node1
    ssh-copy-id node2
    ssh-copy-id node3
    
  3. 执行完毕后,node1、node2、node3之间将完成root用户之间的免密互通

配置JDK环境

后续的大数据集群软件,多数是需要Java运行环境的,所以我们为每一台机器都配置JDK环境。

JDK配置参阅:Tomcat安装部署环节。

关闭防火墙和SELinux

集群化软件之间需要通过端口互相通讯,为了避免出现网络不通的问题,我们可以简单的在集群内部关闭防火墙。

在每一台机器都执行

systemctl stop firewalld
systemctl disable firewalld

Linux有一个安全模块:SELinux,用以限制用户和程序的相关权限,来确保系统的安全稳定。

SELinux的配置同防火墙一样,非常复杂,课程中不多涉及,后续视情况可以出一章SELinux的配置课程。

在当前,我们只需要关闭SELinux功能,避免导致后面的软件运行出现问题即可,

在每一台机器都执行

vim /etc/sysconfig/selinux

# 将第七行,SELINUX=enforcing 改为
SELINUX=disabled
# 保存退出后,重启虚拟机即可,千万要注意disabled单词不要写错,不然无法启动系统

添加快照

为了避免后续出现问题,在完成上述设置后,为每一台虚拟机都制作快照,留待使用。

补充命令 - scp

后续的安装部署操作,我们将会频繁的在多台服务器之间相互传输数据。

为了更加方面的互相传输,我们补充一个命令:scp

scp命令是cp命令的升级版,即:ssh cp,通过SSH协议完成文件的复制。

其主要的功能就是:在不同的Linux服务器之间,通过SSH协议互相传输文件。

只要知晓服务器的账户和密码(或密钥),即可通过SCP互传文件。

语法:

scp [-r] 参数1 参数2
- -r选项用于复制文件夹使用,如果复制文件夹,必须使用-r
- 参数1:本机路径 或 远程目标路径
- 参数2:远程目标路径 或 本机路径

如:
scp -r /export/server/jdk root@node2:/export/server/
将本机上的jdk文件夹, 以root的身份复制到node2的/export/server/内
同SSH登陆一样,账户名可以省略(使用本机当前的同名账户登陆)

如:
scp -r node2:/export/server/jdk /export/server/
将远程node2的jdk文件夹,复制到本机的/export/server/内


# scp命令的高级用法
cd /export/server
scp -r jdk node2:`pwd`/    # 将本机当前路径的jdk文件夹,复制到node2服务器的同名路径下
scp -r jdk node2:$PWD      # 将本机当前路径的jdk文件夹,复制到node2服务器的同名路径下

Zookeeper集群安装部署

简介

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

除了为Hadoop和HBase提供协调服务外,Zookeeper也被其它许多软件采用作为其分布式状态一致性的依赖,比如Kafka,又或者一些软件项目中,也经常能见到Zookeeper作为一致性协调服务存在。

Zookeeper不论是大数据领域亦或是其它服务器开发领域,涉及到分布式状态一致性的场景,总有它的身影存在。

安装

Zookeeper是一款分布式的集群化软件,可以在多台服务器上部署,并协同组成分布式集群一起工作。

  1. 首先,要确保已经完成了集群化环境前置准备环节的全部内容

  2. 【node1上操作】下载Zookeeper安装包,并解压

    # 下载
    wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz
    
    # 确保如下目录存在,不存在就创建
    mkdir -p /export/server
    
    # 解压
    tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
    
  3. 【node1上操作】创建软链接

    ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
    
  4. 【node1上操作】修改配置文件

    vim /export/server/zookeeper/conf/zoo.cfg
    
    tickTime=2000
    # zookeeper数据存储目录
    dataDir=/export/server/zookeeper/data
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=node1:2888:3888
    server.2=node2:2888:3888
    server.3=node3:2888:3888
    
  5. 【node1上操作】配置myid

    # 1. 创建Zookeeper的数据目录
    mkdir /export/server/zookeeper/data
    
    # 2. 创建文件,并填入1
    vim /export/server/zookeeper/data/myid
    # 在文件内填入1即可
    
  6. 【在node2和node3上操作】,创建文件夹

    mkdir -p /export/server
    
  7. 【node1上操作】将Zookeeper 复制到node2和node3

    cd /export/server
    
    scp -r apache-zookeeper-3.5.9 node2:`pwd`/
    scp -r apache-zookeeper-3.5.9 node3:`pwd`/
    
  8. 【在node2上操作】

    # 1. 创建软链接
    ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
    
    # 2. 修改myid文件
    vim /export/server/zookeeper/data/myid
    # 修改内容为2
    
  9. 【在node3上操作】

    # 1. 创建软链接
    ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
    
    # 2. 修改myid文件
    vim /export/server/zookeeper/data/myid
    # 修改内容为3
    
  10. 【在node1、node2、node3上分别执行】启动Zookeeper

    # 启动命令
    /export/server/zookeeper/bin/zkServer.sh start		# 启动Zookeeper
    
  11. 【在node1、node2、node3上分别执行】检查Zookeeper进程是否启动

    jps
    
    # 结果中找到有:QuorumPeerMain 进程即可
    
  12. 【node1上操作】验证Zookeeper

    /export/server/zookeeper/zkCli.sh
    
    # 进入到Zookeeper控制台中后,执行
    ls /
    
    # 如无报错即配置成功
    

至此Zookeeper安装完成

Kafka集群安装部署

简介

Kafka是一款分布式的、去中心化的、高吞吐低延迟、订阅模式的消息队列系统。

同RabbitMQ一样,Kafka也是消息队列。不过RabbitMQ多用于后端系统,因其更加专注于消息的延迟和容错。

Kafka多用于大数据体系,因其更加专注于数据的吞吐能力。

Kafka多数都是运行在分布式(集群化)模式下,所以课程将以3台服务器,来完成Kafka集群的安装部署。

安装

  1. 确保已经跟随前面的视频,安装并部署了JDK和Zookeeper服务

    Kafka的运行依赖JDK环境和Zookeeper请确保已经有了JDK环境和Zookeeper

  2. 【在node1操作】下载并上传Kafka的安装包

    # 下载安装包
    wget http://archive.apache.org/dist/kafka/2.4.1/kafka_2.12-2.4.1.tgz
    
  3. 【在node1操作】解压

    mkdir -p /export/server			# 此文件夹如果不存在需先创建
    
    # 解压
    tar -zxvf kafka_2.12-2.4.1.tgz -C /export/server/
    
    # 创建软链接
    ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
    
  4. 【在node1操作】修改Kafka目录内的config目录内的server.properties文件

    cd /export/server/kafka/config
    # 指定broker的id
    broker.id=1
    # 指定 kafka的绑定监听的地址
    listeners=PLAINTEXT://node1:9092
    # 指定Kafka数据的位置
    log.dirs=/export/server/kafka/data
    # 指定Zookeeper的三个节点
    zookeeper.connect=node1:2181,node2:2181,node3:2181
    
  5. 【在node1操作】将node1的kafka复制到node2和node3

    cd /export/server
    
    # 复制到node2同名文件夹
    scp -r kafka_2.12-2.4.1 node2:`pwd`/
    # 复制到node3同名文件夹
    scp -r kafka_2.12-2.4.1 node3:$PWD
    
  6. 【在node2操作】

    # 创建软链接
    ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
    
    cd /export/server/kafka/config
    # 指定broker的id
    broker.id=2
    # 指定 kafka的绑定监听的地址
    listeners=PLAINTEXT://node2:9092
    # 指定Kafka数据的位置
    log.dirs=/export/server/kafka/data
    # 指定Zookeeper的三个节点
    zookeeper.connect=node1:2181,node2:2181,node3:2181
    
  7. 【在node3操作】

    # 创建软链接
    ln -s /export/server/kafka_2.12-2.4.1 /export/server/kafka
    
    cd /export/server/kafka/config
    # 指定broker的id
    broker.id=3
    # 指定 kafka的绑定监听的地址
    listeners=PLAINTEXT://node3:9092
    # 指定Kafka数据的位置
    log.dirs=/export/server/kafka/data
    # 指定Zookeeper的三个节点
    zookeeper.connect=node1:2181,node2:2181,node3:2181
    
  8. 启动kafka

    # 请先确保Zookeeper已经启动了
    
    # 方式1:【前台启动】分别在node1、2、3上执行如下语句
    /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties
    
    # 方式2:【后台启动】分别在node1、2、3上执行如下语句
    nohup /export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties 2>&1 >> /export/server/kafka/kafka-server.log &
    
  9. 验证Kafka启动

    # 在每一台服务器执行
    jps
    

测试Kafka能否正常使用

  1. 创建测试主题
# 在node1执行,创建一个主题
/export/server/kafka_2.12-2.4.1/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 3 --topic test
  1. 运行测试,请在FinalShell中打开2个node1的终端页面
# 打开一个终端页面,启动一个模拟的数据生产者
/export/server/kafka_2.12-2.4.1/bin/kafka-console-producer.sh --broker-list node1:9092 --topic test
# 再打开一个新的终端页面,在启动一个模拟的数据消费者
/export/server/kafka_2.12-2.4.1/bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning

大数据集群(Hadoop生态)安装部署

简介

1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
2)主要解决,海量数据的存储和海量数据的分析计算问题。

Hadoop HDFS 提供分布式海量数据存储能力

Hadoop YARN 提供分布式集群资源管理能力

Hadoop MapReduce 提供分布式海量数据计算能力

前置要求

  • 请确保完成了集群化环境前置准备章节的内容
  • 即:JDK、SSH免密、关闭防火墙、配置主机名映射等前置操作

Hadoop集群角色

Hadoop生态体系中总共会出现如下进程角色:

  1. Hadoop HDFS的管理角色:Namenode进程(仅需1个即可(管理者一个就够)
  2. Hadoop HDFS的工作角色:Datanode进程(需要多个(工人,越多越好,一个机器启动一个)
  3. Hadoop YARN的管理角色:ResourceManager进程(仅需1个即可(管理者一个就够)
  4. Hadoop YARN的工作角色:NodeManager进程(需要多个(工人,越多越好,一个机器启动一个)
  5. Hadoop 历史记录服务器角色:HistoryServer进程(仅需1个即可(功能进程无需太多1个足够)
  6. Hadoop 代理服务器角色:WebProxyServer进程(仅需1个即可(功能进程无需太多1个足够)
  7. Zookeeper的进程:QuorumPeerMain进程(仅需1个即可(Zookeeper的工作者,越多越好)

角色和节点分配

角色分配如下:

  1. node1:Namenode、Datanode、ResourceManager、NodeManager、HistoryServer、WebProxyServer、QuorumPeerMain
  2. node2:Datanode、NodeManager、QuorumPeerMain
  3. node3:Datanode、NodeManager、QuorumPeerMain

安装

调整虚拟机内存

如上图,可以看出node1承载了太多的压力。同时node2和node3也同时运行了不少程序

为了确保集群的稳定,需要对虚拟机进行内存设置。

请在VMware中,对:

  1. node1设置4GB或以上内存
  2. node2和node3设置2GB或以上内存

大数据的软件本身就是集群化(一堆服务器)一起运行的。

现在我们在一台电脑中以多台虚拟机来模拟集群,确实会有很大的内存压力哦。

Zookeeper集群部署

Hadoop集群部署

  1. 下载Hadoop安装包、解压、配置软链接

    # 1. 下载
    wget http://archive.apache.org/dist/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
    
    # 2. 解压
    # 请确保目录/export/server存在
    tar -zxvf hadoop-3.3.0.tar.gz -C /export/server/
    
    # 3. 构建软链接
    ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
    
  2. 修改配置文件:hadoop-env.sh

    Hadoop的配置文件要修改的地方很多,请细心

    cd 进入到/export/server/hadoop/etc/hadoop,文件夹中,配置文件都在这里

    修改hadoop-env.sh文件

    此文件是配置一些Hadoop用到的环境变量

    这些是临时变量,在Hadoop运行时有用

    如果要永久生效,需要写到/etc/profile中

    # 在文件开头加入:
    # 配置Java安装路径
    export JAVA_HOME=/export/server/jdk
    # 配置Hadoop安装路径
    export HADOOP_HOME=/export/server/hadoop
    # Hadoop hdfs配置文件路径
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    # Hadoop YARN配置文件路径
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    # Hadoop YARN 日志文件夹
    export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
    # Hadoop hdfs 日志文件夹
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
    
    # Hadoop的使用启动用户配置
    export HDFS_NAMENODE_USER=root
    export HDFS_DATANODE_USER=root
    export HDFS_SECONDARYNAMENODE_USER=root
    export YARN_RESOURCEMANAGER_USER=root
    export YARN_NODEMANAGER_USER=root
    export YARN_PROXYSERVER_USER=root
    
  3. 修改配置文件:core-site.xml

    如下,清空文件,填入如下内容

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    
    <!-- Put site-specific property overrides in this file. -->
    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
        <description></description>
      </property>
    
      <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
        <description></description>
      </property>
    </configuration>
    
  4. 配置:hdfs-site.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
        <property>
            <name>dfs.datanode.data.dir.perm</name>
            <value>700</value>
        </property>
    
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/nn</value>
        <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>
      </property>
    
      <property>
        <name>dfs.namenode.hosts</name>
        <value>node1,node2,node3</value>
        <description>List of permitted DataNodes.</description>
      </property>
    
      <property>
        <name>dfs.blocksize</name>
        <value>268435456</value>
        <description></description>
      </property>
    
    
      <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
        <description></description>
      </property>
    
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/dn</value>
      </property>
    </configuration>
    
  5. 配置:mapred-env.sh文件

    # 在文件的开头加入如下环境变量设置
    export JAVA_HOME=/export/server/jdk
    export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
    export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA
    
  6. 配置:mapred-site.xml文件

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    
    <!-- Put site-specific property overrides in this file. -->
    
    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description></description>
      </property>
    
      <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
        <description></description>
      </property>
    
    
      <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
        <description></description>
      </property>
    
    
      <property>
        <name>mapreduce.jobhistory.intermediate-done-dir</name>
        <value>/data/mr-history/tmp</value>
        <description></description>
      </property>
    
    
      <property>
        <name>mapreduce.jobhistory.done-dir</name>
        <value>/data/mr-history/done</value>
        <description></description>
      </property>
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    </property>
    </configuration>
    
  7. 配置:yarn-env.sh文件

    # 在文件的开头加入如下环境变量设置
    export JAVA_HOME=/export/server/jdk
    export HADOOP_HOME=/export/server/hadoop
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_LOG_DIR=$HADOOP_HOME/logs/yarn
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs
    
  8. 配置:yarn-site.xml文件

    <?xml version="1.0"?>
    <!--
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License. See accompanying LICENSE file.
    -->
    <configuration>
    
    <!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://node1:19888/jobhistory/logs</value>
        <description></description>
    </property>
    
      <property>
        <name>yarn.web-proxy.address</name>
        <value>node1:8089</value>
        <description>proxy server hostname and port</description>
      </property>
    
    
      <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
        <description>Configuration to enable or disable log aggregation</description>
      </property>
    
      <property>
        <name>yarn.nodemanager.remote-app-log-dir</name>
        <value>/tmp/logs</value>
        <description>Configuration to enable or disable log aggregation</description>
      </property>
    
    
    <!-- Site specific YARN configuration properties -->
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
        <description></description>
      </property>
    
      <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
        <description></description>
      </property>
    
      <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/data/nm-local</value>
        <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
      </property>
    
    
      <property>
        <name>yarn.nodemanager.log-dirs</name>
        <value>/data/nm-log</value>
        <description>Comma-separated list of paths on the local filesystem where logs are written.</description>
      </property>
    
    
      <property>
        <name>yarn.nodemanager.log.retain-seconds</name>
        <value>10800</value>
        <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>
      </property>
    
    
    
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>Shuffle service that needs to be set for Map Reduce applications.</description>
      </property>
    </configuration>
    
  9. 修改workers文件

    # 全部内容如下
    node1
    node2
    node3
    
  10. 分发hadoop到其它机器

# 在node1执行
cd /export/server

scp -r hadoop-3.3.0 node2:`pwd`/
scp -r hadoop-3.3.0 node2:`pwd`/
  1. 在node2、node3执行

    # 创建软链接
    ln -s /export/server/hadoop-3.3.0 /export/server/hadoop
    
  2. 创建所需目录

    • 在node1执行:

      mkdir -p /data/nn
      mkdir -p /data/dn
      mkdir -p /data/nm-log
      mkdir -p /data/nm-local
      
    • 在node2执行:

      mkdir -p /data/dn
      mkdir -p /data/nm-log
      mkdir -p /data/nm-local
      
    • 在node3执行:

      mkdir -p /data/dn
      mkdir -p /data/nm-log
      mkdir -p /data/nm-local
      
  3. 配置环境变量

    在node1、node2、node3修改/etc/profile

    export HADOOP_HOME=/export/server/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    

    执行source /etc/profile生效

  4. 格式化NameNode,在node1执行

    hadoop namenode -format
    

    hadoop这个命令来自于:$HADOOP_HOME/bin中的程序

    由于配置了环境变量PATH,所以可以在任意位置执行hadoop命令哦

  5. 启动hadoop的hdfs集群,在node1执行即可

    start-dfs.sh
    
    # 如需停止可以执行
    stop-dfs.sh
    

    start-dfs.sh这个命令来自于:$HADOOP_HOME/sbin中的程序

    由于配置了环境变量PATH,所以可以在任意位置执行start-dfs.sh命令哦

  6. 启动hadoop的yarn集群,在node1执行即可

    start-yarn.sh
    
    # 如需停止可以执行
    stop-yarn.sh
    
  7. 启动历史服务器

    mapred --daemon start historyserver
    
    # 如需停止将start更换为stop
    
  8. 启动web代理服务器

    yarn-daemon.sh start proxyserver
    
    # 如需停止将start更换为stop
    
验证Hadoop集群运行情况
  1. 在node1、node2、node3上通过jps验证进程是否都启动成功

  2. 验证HDFS,浏览器打开:http://node1:9870

    创建文件test.txt,随意填入内容,并执行:

    hadoop fs -put test.txt /test.txt
    
    hadoop fs -cat /test.txt
    
  3. 验证YARN,浏览器打开:http://node1:8088

    执行:

    # 创建文件words.txt,填入如下内容
    itheima itcast hadoop
    itheima hadoop hadoop
    itheima itcast
    
    # 将文件上传到HDFS中
    hadoop fs -put words.txt /words.txt
    
    # 执行如下命令验证YARN是否正常
    hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount -Dmapred.job.queue.name=root.root /words.txt /output
    

大数据NoSQL数据库HBase集群部署

简介

HBase 是一种分布式、可扩展、支持海量数据存储的 NoSQL 数据库。

和Redis一样,HBase是一款KeyValue型存储的数据库。

不过和Redis设计方向不同

  • Redis设计为少量数据,超快检索
  • HBase设计为海量数据,快速检索

HBase在大数据领域应用十分广泛,现在我们来在node1、node2、node3上部署HBase集群。

安装

  1. HBase依赖Zookeeper、JDK、Hadoop(HDFS),请确保已经完成前面

    • 集群化软件前置准备(JDK)
    • Zookeeper
    • Hadoop
    • 这些环节的软件安装
  2. 【node1执行】下载HBase安装包

    # 下载
    wget http://archive.apache.org/dist/hbase/2.1.0/hbase-2.1.0-bin.tar.gz
    
    # 解压
    tar -zxvf hbase-2.1.0-bin.tar.gz -C /export/server
    
    # 配置软链接
    ln -s /export/server/hbase-2.1.0 /export/server/hbase
    
  3. 【node1执行】,修改配置文件,修改conf/hbase-env.sh文件

    # 在28行配置JAVA_HOME
    export JAVA_HOME=/export/server/jdk
    # 在126行配置:
    # 意思表示,不使用HBase自带的Zookeeper,而是用独立Zookeeper
    export HBASE_MANAGES_ZK=false
    # 在任意行,比如26行,添加如下内容:
    export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
    
  4. 【node1执行】,修改配置文件,修改conf/hbase-site.xml文件

    # 将文件的全部内容替换成如下内容:
    <configuration>
            <!-- HBase数据在HDFS中的存放的路径 -->
            <property>
                <name>hbase.rootdir</name>
                <value>hdfs://node1:8020/hbase</value>
            </property>
            <!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
            <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
            </property>
            <!-- ZooKeeper的地址 -->
            <property>
                <name>hbase.zookeeper.quorum</name>
                <value>node1,node2,node3</value>
            </property>
            <!-- ZooKeeper快照的存储位置 -->
            <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/export/server/apache-zookeeper-3.6.0-bin/data</value>
            </property>
            <!--  V2.1版本,在分布式情况下, 设置为false -->
            <property>
                <name>hbase.unsafe.stream.capability.enforce</name>
                <value>false</value>
            </property>
    </configuration>
    
  5. 【node1执行】,修改配置文件,修改conf/regionservers文件

    # 填入如下内容
    node1
    node2
    node3
    
  6. 【node1执行】,分发hbase到其它机器

    scp -r /export/server/hbase-2.1.0 node2:/export/server/
    scp -r /export/server/hbase-2.1.0 node3:/export/server/
    
  7. 【node2、node3执行】,配置软链接

    ln -s /export/server/hbase-2.1.0 /export/server/hbase
    
  8. 【node1、node2、node3执行】,配置环境变量

    # 配置在/etc/profile内,追加如下两行
    export HBASE_HOME=/export/server/hbase
    export PATH=$HBASE_HOME/bin:$PATH
    
    source /etc/profile
    
  9. 【node1执行】启动HBase

    请确保:Hadoop HDFS、Zookeeper是已经启动了的

    start-hbase.sh
    
    # 如需停止可使用
    stop-hbase.sh
    

    由于我们配置了环境变量export PATH=$PATH:$HBASE_HOME/bin

    start-hbase.sh即在$HBASE_HOME/bin内,所以可以无论当前目录在哪,均可直接执行

  10. 验证HBase

    浏览器打开:http://node1:16010,即可看到HBase的WEB UI页面

  11. 简单测试使用HBase

    【node1执行】

    hbase shell
    
    # 创建表
    create 'test', 'cf'
    
    # 插入数据
    put 'test', 'rk001', 'cf:info', 'itheima'
    
    # 查询数据
    get 'test', 'rk001'
    
    # 扫描表数据
    scan 'test'
    

分布式内存计算Spark环境部署

注意

本小节的操作,基于:大数据集群(Hadoop生态)安装部署环节中所构建的Hadoop集群

如果没有Hadoop集群,请参阅前置内容,部署好环境。

简介

Spark是一款分布式内存计算引擎,可以支撑海量数据的分布式计算。

Spark在大数据体系是明星产品,作为最新一代的综合计算引擎,支持离线计算和实时计算。

在大数据领域广泛应用,是目前世界上使用最多的大数据分布式计算引擎。

我们将基于前面构建的Hadoop集群,部署Spark Standalone集群。

安装

  1. 【node1执行】下载并解压

    wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz
    
    # 解压
    tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /export/server/
    
    # 软链接
    ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
    
  2. 【node1执行】修改配置文件名称

    # 改名
    cd /export/server/spark/conf
    mv spark-env.sh.template spark-env.sh
    mv slaves.template slaves
    
  3. 【node1执行】修改配置文件,spark-env.sh

    ## 设置JAVA安装目录
    JAVA_HOME=/export/server/jdk
    
    ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
    HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
    YARN_CONF_DIR=/export/server/hadoop/etc/hadoop
    
    ## 指定spark老大Master的IP和提交任务的通信端口
    export SPARK_MASTER_HOST=node1
    export SPARK_MASTER_PORT=7077
    
    SPARK_MASTER_WEBUI_PORT=8080
    SPARK_WORKER_CORES=1
    SPARK_WORKER_MEMORY=1g
    
  4. 【node1执行】修改配置文件,slaves

    node1
    node2
    node3
    
  5. 【node1执行】分发

    scp -r spark-2.4.5-bin-hadoop2.7 node2:$PWD
    scp -r spark-2.4.5-bin-hadoop2.7 node3:$PWD
    
  6. 【node2、node3执行】设置软链接

    ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
    
  7. 【node1执行】启动Spark集群

    /export/server/spark/sbin/start-all.sh
    
    # 如需停止,可以
    /export/server/spark/sbin/stop-all.sh
    
  8. 打开Spark监控页面,浏览器打开:http://node1:8081

  9. 【node1执行】提交测试任务

    /export/server/spark/bin/spark-submit --master spark://node1:7077 --class org.apache.spark.examples.SparkPi /export/server/spark/examples/jars/spark-examples_2.11-2.4.5.jar
    

分布式内存计算Flink环境部署

注意

本小节的操作,基于:大数据集群(Hadoop生态)安装部署环节中所构建的Hadoop集群

如果没有Hadoop集群,请参阅前置内容,部署好环境。

简介

Flink同Spark一样,是一款分布式内存计算引擎,可以支撑海量数据的分布式计算。

Flink在大数据体系同样是明星产品,作为最新一代的综合计算引擎,支持离线计算和实时计算。

在大数据领域广泛应用,是目前世界上除去Spark以外,应用最为广泛的分布式计算引擎。

我们将基于前面构建的Hadoop集群,部署Flink Standalone集群

Spark更加偏向于离线计算而Flink更加偏向于实时计算。

安装

  1. 【node1操作】下载安装包

    wget https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz
    
    # 解压
    tar -zxvf flink-1.10.0-bin-scala_2.11.tgz -C /export/server/
    
    # 软链接
    ln -s /export/server/flink-1.10.0 /export/server/flink
    
  2. 【node1操作】修改配置文件,conf/flink-conf.yaml

    # jobManager 的IP地址
    jobmanager.rpc.address: node1
    # JobManager 的端口号
    jobmanager.rpc.port: 6123
    # JobManager JVM heap 内存大小
    jobmanager.heap.size: 1024m
    # TaskManager JVM heap 内存大小
    taskmanager.heap.size: 1024m
    # 每个 TaskManager 提供的任务 slots 数量大小
    taskmanager.numberOfTaskSlots: 2
    #是否进行预分配内存,默认不进行预分配,这样在我们不使用flink集群时候不会占用集群资源
    taskmanager.memory.preallocate: false
    # 程序默认并行计算的个数
    parallelism.default: 1
    #JobManager的Web界面的端口(默认:8081)
    jobmanager.web.port: 8081
    
  3. 【node1操作】,修改配置文件,conf/slaves

    node1
    node2
    node3
    
  4. 【node1操作】分发Flink安装包到其它机器

    cd /export/server
    scp -r flink-1.10.0 node2:`pwd`/
    scp -r flink-1.10.0 node3:`pwd`/
    
  5. 【node2、node3操作】

    # 配置软链接
    ln -s /export/server/flink-1.10.0 /export/server/flink
    
    
  6. 【node1操作】,启动Flink

    /export/server/flink/bin/start-cluster.sh
    
  7. 验证Flink启动

    # 浏览器打开
    http://node1:8081
    
  8. 提交测试任务

    【node1执行】

    /export/server/flink/bin/flink run /export/server/flink-1.10.0/examples/batch/WordCount.jar
    

运维监控Zabbix部署

简介

Zabbix 由 Alexei Vladishev 创建,目前由其成立的公司—— Zabbix SIA 积极的持续开发更新维护, 并为用户提供技术支持服务。

Zabbix 是一个企业级分布式开源监控解决方案

Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。

安装

安装整体步骤:

  1. 准备Linux 服务器(虚拟机)
  2. 安装Mysql
  3. 安装zabbix( 包含 server agent web)
  4. 配置 mysql, 为zabbix创建表结构
  5. 配置zabbix server
  6. 启动并开启开机自启动

安装前准备 - Mysql

安装ZabbixServer需要先安装好Mysql数据库

课程使用Mysql 5.7

安装步骤:

# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

# yum安装Mysql
yum -y install mysql-community-server

# 启动Mysql设置开机启动
systemctl start mysqld
systemctl enable mysqld

# 检查Mysql服务状态
systemctl status mysqld

# 第一次启动mysql,会在日志文件中生成root用户的一个随机密码,使用下面命令查看该密码
grep 'temporary password' /var/log/mysqld.log

# 修改root用户密码
mysql -u root -p -h localhost
Enter password:
 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root!@#$';

# 如果你想设置简单密码,需要降低Mysql的密码安全级别
set global validate_password_policy=LOW; # 密码安全级别低
set global validate_password_length=4;	 # 密码长度最低4位即可

# 然后就可以用简单密码了(课程中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
mysql> grant all privileges on *.* to root@'%' identified by 'root';

安装Zabbix Server 和 Zabbix Agent

初始安装,我们先安装ZabbixServer以及在Server本机安装Agent。

打开官网下载页面:https://www.zabbix.com/download?zabbix=4.0&os_distribution=centos&os_version=7&db=mysql

选择对应的版本,然后再下面官网给出了具体的安装命令,使用rpmyum来进行安装。

需要有网络。

以下内容来自官方页面

a. 安装Zabbix yum库

documentation

rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
yum clean all
b. 安装Zabbix Server、前端、Agent
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
# 如果只需要安装Agent的话
yum -y install zabbix-agent
c. 初始化Mysql数据库

documentation

在Mysql中操作

# 登录Mysql 数据库
mysql -uroot -pYourPassword
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
# 或者: grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
mysql> quit;

测试在Zabbix Server服务器上能否远程登录Mysql,如果可以登录继续向下走。

Import initial schema and data. You will be prompted to enter your newly created password.

# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
d. 为Zabbix Server配置数据库

Edit file /etc/zabbix/zabbix_server.conf

DBPassword=password
DBHost=mysql-host-ip-or-hostname
e. 配置Zabbix的PHP前端

Edit file /etc/httpd/conf.d/zabbix.conf, uncomment and set the right timezone for you.# php_value date.timezone Asia/Shanghai

Start Zabbix server and agent processes and make it start at system boot:

systemctl restart zabbix-server zabbix-agent httpd # 启动、重启
systemctl enable zabbix-server zabbix-agent httpd  # 开机自启

Now your Zabbix server is up and running!

配置zabbix 前端(WEB UI)

打开:http://192.168.88.131/zabbix

即可进入Zabbix页面,在首次打开的时候,会进入设置页面,如图:

点击下一步,会检查相应的设置是否都正常

如果一切正常,点击下一步。

配置DB连接

按具体情况填写即可

配置Server细节

具体配置即可,Name表示这个Zabbix服务的名字,这里起名叫ITHEIMA-TEST

安装前总结预览

检查确认没有问题就下一步

配置完成

初始管理员账户Admin密码zabbix

输入账户密码后,就能进入zabbix页面了。

如下图:

现在是一个崭新的zabbix等待我们去探索。

运维监控Grafana部署

简介

安装

部署形式

Grafana支持两种部署形式

  1. 自行部署, 可以部署在操作系统之上. 自行提供服务器, 域名等.
  2. Grafana官方托管. 无需安装, 在线注册即可得到一个专属于自己的Grafana, 但是要花钱的. 是一种SaaS服务

我们课程选择方式1

安装

Grafana支持常见的绝大多数操作系统, 如windows mac linux 同时也支持部署在docker中.

大多数情况下, Grafana都是部署在linux服务器之上. 所以本课程也是基于Linux系统来讲解.

windows mac系统 或 docker部署有兴趣的同学, 请参考: https://grafana.com/grafana/download

我们部署Grafana可以使用YUM来进行部署.

# 创建一个文件
vim /etc/yum.repos.d/grafana.repo

# 将下面的内容复制进去
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

# 最后安装
yum install grafana

配置说明

grafana-server具有许多配置选项,这些选项可以在.ini配置文件中指定,也可以使用环境变量指定。

Note. Grafana needs to be restarted for any configuration changes to take effect.

配置文件注释

;符号在.ini文件中全局表示注释 ()

配置文件路径

如果是自己解压安装, 或者自行编译的方式安装, 配置文件在:

  • 默认: $WORKING_DIR/conf/defaults.ini
  • 自定义:$WORKING_DIR/conf/custom.ini
  • 自定义配置文件路径可以被参数--config覆盖

对于YUM RPM 安装的方式, 配置文件在: /etc/grafana/grafana.ini

使用环境变量

可以使用以下语法使用环境变量来覆盖配置文件中的所有选项:

GF_<SectionName>_<KeyName>

其中SectionName是方括号内的文本。一切都应为大写,.应替换为_ 例如,给定以下配置设置:

# default section
instance_name = ${HOSTNAME}

[security]
admin_user = admin

[auth.google]
client_secret = 0ldS3cretKey

Then you can override them using:

export GF_DEFAULT_INSTANCE_NAME=my-instance
export GF_SECURITY_ADMIN_USER=true	# GF_ 固定 SECURITY 是SectionName ADMIN_USER 是配置的key 转大写 . 转 _
export GF_AUTH_GOOGLE_CLIENT_SECRET=newS3cretKey

开始配置

Grafana支持使用Sqlite3 Postgresql Mysql这三种数据库作为其元数据的存储.

我们课程使用Mysql. 和zabbix的元数据mysql共用一个实例

只需要配置如下内容即可:

并登陆mysql, 执行:

create database grafana CHARACTER SET utf8 COLLATE utf8_general_ci;

创建Grafana使用的数据库作为元数据存储.

启动

systemctl daemon-reload
systemctl start grafana-server
systemctl enable grafana-server

浏览器打开:http://node1:3000

默认账户密码:admin/admin

相关内容

    暂无相关文章