01-集群安装JDK(普通用户)
机器部署
集群规划
我们准备三台服务器kk01、kk02、kk03,内存4G、硬盘50G、处理器4核心2内核(总8)
kk01使用 192.168.188.128
kk02使用 192.168.188.129
kk03使用 192.168.188.130
模板机准备
我们先创建一台作为模板机,后续的两台采用完整克隆的方式
1)我们配置了模块机kk01的主机名为 kk01
2)配置了root用户的密码123456、创建了普通用户nhk、密码123456
3)使用vim 配置了模板机ip地址、网关、DNS等信息
# 2.配置静态ip (注意,我们这里刚开始需要使用root用户来修改)
[nhk@kk01 ~]$ su root
Password:
[root@kk01 nhk]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 做出如下修改BOOTPROTO=static # 改为静态
# 末尾添加如下内容
IPADDR=192.168.188.128
GATEWAY=192.168.188.2
NETMASK=255.255.255.0
DNS1=192.168.188.2
# 重启网卡
[root@kk01 nhk]# systemctl restart network.service
# 查看当前ip地址
[root@kk01 nhk]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.188.128 netmask 255.255.255.0 broadcast 192.168.188.255inet6 fe80::517f:78e:56fc:d924 prefixlen 64 scopeid 0x20<link>ether 00:0c:29:61:40:47 txqueuelen 1000 (Ethernet)
...
4)关闭模板机 kk01的防火墙
[root@kk01 nhk]# systemctl stop firewalld.service # 关闭当前防火墙
[root@kk01 nhk]# systemctl disable firewalld.service # 关闭防火墙开机自启动
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.# 查看防火墙状态,看到 inactive (dead) 则证明防火墙成功关闭
[root@kk01 nhk]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)
....
5)修改模板机kk01主机名
# 修改主机名
[root@kk01 nhk]# vim /etc/hostname # 这种修改方式需要重启系统,才生效
[root@kk01 nhk]# cat /etc/hostname
kk01
6)修改hosts文件
[root@kk01 nhk]# vim /etc/hosts192.168.188.128 kk01
192.168.188.129 kk02
192.168.188.130 kk03
7)配置普通用户(nhk)具有root权限
修改/etc/sudoers文件,在100多行左右,在%wheel下面添加一行内容,如下操作所示
# 配置普通用户(nhk)具有root权限,方便后期加sudo执行root权限的命令
# 注意:修改这个文件,即使是root用户也需要 :wq! 强制保存退出
[root@kk01 nhk]# vim /etc/sudoers
# 在%wheel这行下面添加一行 (大概是在100行左右位置)## Allow root to run any commands anywhere
root ALL=(ALL) ALL## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALLnhk ALL=(ALL) NOPASSWD: ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
注意:
nhk ALL=(ALL) NOPASSWD: ALL 这一行不要直接放到root行下面,因为所有用户都属于wheel组,你先配置了nhk具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码。所以nhk要放到%wheel这行下面。
8)创建统一工作目录
[root@kk01 nhk]# mkdir -p /opt/software/ # 软件安装目录、安装包存放目录
[root@kk01 nhk]# mkdir -p /opt/data/ # 数据存储路径
[root@kk01 nhk]#
[root@kk01 nhk]# ll /opt
total 0
drwxr-xr-x. 2 root root 6 Jun 16 15:51 data
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
drwxr-xr-x. 2 root root 6 Jun 16 15:51 software# 修改文件夹所有者和所属组 (如果是使用root用户搭建集群可以忽略)
[root@kk01 nhk]# chown nhk:nhk /opt/software
[root@kk01 nhk]# chown nhk:nhk /opt/data
[root@kk01 nhk]# ll /opt
total 0
drwxr-xr-x. 2 nhk nhk 6 Jun 16 15:51 data
drwxr-xr-x. 2 root root 6 Oct 31 2018 rh
drwxr-xr-x. 2 nhk nhk 6 Jun 16 15:51 software
克隆出其他机器
上述配置完以后,将模板机kk01关机,使用VMware的完整克隆方式,克隆出 kk02、kk03,并依次开机,修改kk02、kk03上的ip地址
kk02
# 修改ip
[nhk@kk01 ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
做出如下修改IPADDR=192.168.188.129# 重启网卡服务
[nhk@kk01 ~]$ sudo systemctl restart network
[nhk@kk01 ~]$ ifconfig # 查看ip
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.188.129 netmask 255.255.255.0 broadcast 192.168.188.255
...# 修改主机名
[nhk@kk01 ~]$ sudo hostnamectl set-hostname kk02 # 这种方式修改主机名无需重启即可生效
[nhk@kk01 ~]$ hostname # [nhk@kk01 ~]$ 这里还显示kk01是这个bash的原因,重新打开bash即可
kk02
kk03
# 修改ip
[nhk@kk01 ~]$ sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
做出如下修改IPADDR=192.168.188.130# 重启网卡服务
[nhk@kk01 ~]$ sudo systemctl restart network
[nhk@kk01 ~]$ ifconfig # 查看ip
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.188.130 netmask 255.255.255.0 broadcast 192.168.188.255
...# 修改主机名
[nhk@kk01 ~]$ sudo hostnamectl set-hostname kk03 # 这种方式修改主机名无需重启即可生效
[nhk@kk01 ~]$ hostname # [nhk@kk01 ~]$ 这里还显示kk01是这个bash的原因,重新打开bash即可
kk03
此致,3台机器准备完成
集群安装JDK
1)删除Linux系统自带JDK
如果安装的是最小化版本的Linux,则不需要执行此操作
# 需要在所有节点删除(我们使用的是nhk用户,必须加sudo)
[nhk@kk01 .ssh]$ sudo rpm -qa | grep -i java
java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
tzdata-java-2020a-1.el7.noarch
python-javapackages-3.4.1-11.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
[nhk@kk01 .ssh]$ sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[nhk@kk02 .ssh]$ sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps[nhk@kk03 ~]$ sudo rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps# 参数说明
(1)rpm -qa:表示查询所有已经安装的软件包
(2)grep -i:表示过滤时不区分大小写
(3)xargs -n1:表示一次获取上次执行结果的一个值xargs 将 sudo rpm -qa | grep -i java 的结果传递给 sudo rpm -e --nodeps-n1 表示将 sudo rpm -qa | grep -i java 的结果传递 一个一个传递给 sudo rpm -e --nodeps
(4)rpm -e --nodeps:表示卸载软件
2)上传压缩包
将 jdk压缩包 kk01 的 /opt/software 文件夹下面
[nhk@kk01 software]$ pwd
/opt/software
[nhk@kk01 software]$ rz[nhk@kk01 software]$ ll
total 185340
-rw-r--r--. 1 nhk nhk 189784266 Dec 25 2017 jdk-8u152-linux-x64.tar.gz
3)解压压缩包
解压 jdk 到指定目录 /opt/software
[nhk@kk01 software]$ tar -zxvf jdk-8u152-linux-x64.tar.gz -C /opt/software[nhk@kk01 software]$ ll
total 185340
drwxr-xr-x. 8 nhk nhk 255 Sep 14 2017 jdk1.8.0_152
-rw-r--r--. 1 nhk nhk 189784266 Dec 25 2017 jdk-8u152-linux-x64.tar.gz
4)配置普通用户环境变量
[nhk@kk01 software]$ sudo vim /etc/profile.d/my_env.sh
添加如下内容
# 配置JDK环境
export JAVA_HOME=/opt/software/jdk1.8.0_152 # 导入环境变量
export PATH=$PATH:$JAVA_HOME/bin # 将环境变量拼接到PATH中
让环境变量生效(重新载入环境变量)
[nhk@kk01 software]$ source /etc/profile.d/my_env.sh
5)测试jdk是否安装成功
能看到jdk相关的版本信息,则说明jdk安装成功
[nhk@kk01 software]$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)
6)分发JDK、分发环境
使用我们自定义的分发脚本 xsync
# 分发jdk
[nhk@kk01 software]$ xsync /opt/software/jdk1.8.0_152/# 普通用户使用 xsync 脚本分发环境变量时,必须加上脚本路径
#(分发环境时,需要使用sudo,因为/etc目录只有root用户才能操作,并且使用xsync脚本还需要加上绝对路径,因为我们使用sudo命令将权限切换到了root目录下,而root目录下没有xsync脚本)
# 如果不加会报错 failed: Permission denied (13)
[nhk@kk01 software]$ sudo /home/nhk/bin/xsync /etc/profile.d/my_env.sh
在集群的其他机器(kk02、kk03)刷新环境变量
[nhk@kk02 ~]$ source /etc/profile.d/my_env.sh
[nhk@kk03 ~]$ source /etc/profile.d/my_env.sh
如果我们没有自定义分发脚本,也可以使用 scp 或 rsync 命令代替,如下
scp -r /opt/software/jdk1.8.0_152/ kk02/opt/software/
scp -r /opt/software/jdk1.8.0_152/ kk03/opt/software/
7)注意事项
无论是基于root用户,还是基于普通用户nhk,大体上的命令都是相似的,只是在某些情况下普通用户权限不够,需要加上sudo来暂时提升权限
8)环境变量说明
Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,/.bashrc,/.bash_profile等,下面说明上述几个文件之间的关系和区别。
bash的运行模式可分为 login shell 和 non-login shell 。
例如,我们通过终端,输入用户名、密码,登录系统之后,得到就是一个login shell。而当我们执行以下命令ssh kk01 command,在kk01执行command的就是一个non-login shell。
登录 shell 与 非登录 shell 区别
登录shell
环境变量加载顺序
/etc/profile ~/.bash_profile ~/.bashrc ==> /etc/bashrc ==> /etc/profile.d/*.sh
非登录shell
环境变量加载顺序~/.bashrc ==> /etc/bashrc ==> /etc/profile.d/*.sh
注意:
如果把环境变量只放到 /etc/profile 中,non-login shell 模式会获取不到环境变量
这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载**/etc/profile,/.bash_profile,/.bashrc**。non-login shell启动时会加载**~/.bashrc**。
而在加载/.bashrc(实际是/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,
[nhk@kk03 etc]$ pwd
/etc
[nhk@kk03 etc]$ vim /etc/bashrc
# Only display echos from profile.d scripts if we are no login shell# and interactive - otherwise just process them to set envvarsfor i in /etc/profile.d/*.sh; doif [ -r "$i" ]; thenif [ "$PS1" ]; then. "$i"else. "$i" >/dev/nullfifidone
因此不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。
并且,/etc/profile文件中也告诉我们最好自己在 /etc/profile.d/ 创建一个自定义的环境变量,如下查看
[nhk@kk03 etc]$ vim /etc/profile# /etc/profile# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.系统范围的环境和启动程序,用于登录设置
函数和别名放在/etc/bashrc中修改这个文件不是一个好主意,除非你知道你要做什么
正在做什么。创建一个自定义对环境的更改脚本要好得多
/etc/profile.对您的环境进行自定义更改,如下所示
将防止在未来的更新中合并。
相关文章:
01-集群安装JDK(普通用户)
机器部署 集群规划 我们准备三台服务器kk01、kk02、kk03,内存4G、硬盘50G、处理器4核心2内核(总8) kk01使用 192.168.188.128 kk02使用 192.168.188.129 kk03使用 192.168.188.130 模板机准备 我们先创建一台作为模板机,后…...

小龟带你妙写排序之选择排序
选择排序 一. 原理二. 题目三. 思路分析四. 代码 一. 原理 选择排序(Selection-sort)是一种简单直观的排序算法。 工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未…...
深入解析 SOCKS5 代理及其在网络安全与爬虫中的应用
在当今数字化时代,网络安全和数据获取成为了互联网时代的重要课题。为了实现安全的网络连接和高效的数据采集,各种代理技术应运而生。本文将深入探讨 SOCKS5 代理及其在网络安全和爬虫领域的应用,同时比较其与其他代理方式的优势与劣势。 1.…...

day9 10-牛客67道剑指offer-JZ66、19、20、75、23、76、8、28、77、78
文章目录 1. JZ66 构建乘积数组暴力解法双向遍历 2. JZ19 正则表达式匹配3. JZ20 表示数值的字符串有限状态机遍历 4. JZ75 字符流中第一个不重复的字符5. JZ23 链表中环的入口结点快慢指针哈希表 6. JZ76 删除链表中重复的结点快慢指针三指针如果只保留一个重复结点 7. JZ8 二…...

气体检测仪语音报警芯片,可自行烧录的音频芯片,WT588F02B-8S
近年来,安全问题备受关注,特别是涉及气体泄漏的危险场景。 为了进一步增强气体检测仪的安全功能,市面上便研发出了一款有害气体报警器,并采用WT588F02B-8S语音提示芯片为元器件,为产品赋予更多声音,更多警示…...
gdb 调试汇编
starti 从第一条指令开始执行并停止. nexti 执行完当前指令; 当前指令可能是call一个函数, 但是仍然下一条指令才停止; stepi 下一条指令, 如果跳转也跟着跳转; 查看寄存器值 info registers 查看通用寄存器 info registers {register_name ...}指定寄存器的值 info reg…...

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制
WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlo…...
深入理解与运用Android Jetpack ViewModel
在Android开发中,数据与界面的分离一直是一项重要的挑战。为了解决这个问题,Google推出了Android Jetpack组件之一的ViewModel。ViewModel是一种用于管理UI相关数据的架构组件,它能够帮助开发者实现优雅的数据驱动和生命周期管理。本文将深入…...

【数据库】P0 创建数据库环境 MySQL + DataGrip
创建数据库环境 下载安装 MySQL下载安装 DataGrip 下载安装 MySQL Windows版本_MySQL 下载地址: https://dev.mysql.com/downloads/mysql/ 下载后依照默认顺序安装即可,本博文将讲述简约安装步骤; 如需详细安装步骤可见:https:/…...

js设置css变量控制页面一行展示指定个数的元素
前置知识: CSS变量之var()函数的应用——动态修改样式 & root的使用 flex相关知识 场景: 动态设置给父元素内子元素设置每行排列几个 通过 document.body.style.setProperty(--itemNum, 5)设置样式变量,然后通过给父元素设置display: f…...

4.0 Spring Boot入门
1. Spring Boot概述 Spring Boot介绍 Spring Boot是Pivotal团队在2014年推出的全新框架,主要用于简化Spring项目的开发过程,可以使用最少的配置快速创建Spring项目。 Spring Boot版本 2014年4月v1.0.0.RELEASE发布。 2.Spring Boot特性 约定优于配…...
[国产MCU]-BL602开发实例-I2C与总线设备地址扫描
I2C与总线设备扫描 文章目录 I2C与总线设备扫描1、I2C介绍2、I2C驱动API介绍3、I2C使用实例I2C (Inter-Intergrated Circuit)是一种串行通讯总线,使用多主从架构,用来连接低速外围装置。 每个器件都有一个唯一的地址识别,并且都可以作为一个发送器或接收器。每个连接到总线的…...

Python Opencv实践 - 图像平移
import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#图像平移 #cv.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) # M是仿射变换矩阵,对于平移来说M是一…...
易服客工作室:WordPress 6.3性能改进
随着WordPress 6.3发布,本文总结了该版本的性能改进。虽然WordPress 6.2显著提高了Core的加载时间性能,树立了很高的标准,但WordPress 6.3性能改进已经超越了这些结果:根据进行的性能基准测试,与WordPress 6.2相比&…...

LeetCode 周赛上分之旅 #39 结合中心扩展的单调栈贪心问题
⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…...

山东布谷科技直播软件开发WebRTC技术:建立实时通信优质平台
在数字化的时代,实时通信成为了人们远程交流的主要方式,目前市场上也出现了很多带有实时通信交流的软件,实时通信符合人们现在的需求,所以在直播软件开发过程中,开发者也运用了实时通信技术为直播软件加入了实时通信的…...

Golang-语言源码级调试器 Delve
前言 Go 目前的调试器有如下几种: GDB 最早期的调试工具,现在用的很少。LLDB macOS 系统推荐的标准调试工具,单 Go 的一些专有特性支持的比较少。Delve 专门为 Go 语言打造的调试工具,使用最为广泛。 本篇简单说明如何使用 Del…...

构建Docker容器监控系统(Cadvisor +InfluxDB+Grafana)
目录 案例概述 Cadvisor InfluxDBGrafana 1.1、 Cadvisor 1.2、InfluxDB 1.3、Grafana 1.4、监控组件架构 1.5、开始部署 安装docker-ce 阿里云镜像加速器 创建自定义网络 创建influxdb容器 案例概述 Docker作为目前十分出色的容器管理技术,得到大量企业…...

【Vue3】keep-alive 缓存组件
当在 Vue.js 中使用 <keep-alive> 组件时,它将会缓存动态组件,而不是每次渲染都销毁和重新创建它们。这对于需要在组件间快速切换并且保持组件状态的情况非常有用。 <keep-alive> 只能包含(或者说只能渲染)一个子组件…...
24成都信息工程大学809软件工程考研
1.渐增式与非渐增式各有何优、缺点?为什么通常采用渐增式? 非渐增式是将所有的模块一次连接起来,简单、易行、节省机时,但测试过程难于排错,发现错误也很难定位,测试效率低;渐增式是将模块一个…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...