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:表示一次获取上次执行结果的一个值xargssudo 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 shellnon-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.对您的环境进行自定义更改,如下所示
将防止在未来的更新中合并。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/41031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 11 新特性 学习笔记

1、字符串原始字面量 R“()”用于取消转义&#xff0c;可用于路径表示 运行成功 这两个RawValue起到描述作用&#xff08;可以不写&#xff09;&#xff0c;并不参与输出 注意&#xff0c;这里输出中文乱码 2、nullptr NULL在C中表示0&#xff0c;在非C中表示万能指针 nullpt…

Vue3 使用json编辑器

安装 npm install json-editor-vue3 main中引入 main.js 中加入下面代码 import "jsoneditor";不然会有报错&#xff0c;如jsoneditor does not provide an export named ‘default’。 图片信息来源-github 代码示例 <template><json-editor-vue class…

SQL | 分组数据

10-分组数据 两个新的select子句&#xff1a;group by子句和having子句。 10.1-数据分组 上面我们学到了&#xff0c;使用SQL中的聚集函数可以汇总数据&#xff0c;这样&#xff0c;我们就能够对行进行计数&#xff0c;计算和&#xff0c;计算平均数。 目前为止&#xff0c…

ESP-C3入门21. I2C接口点亮1306驱动的OLED屏

ESP-C3入门21. 点亮1306驱动的OLED屏 一、Espressif/ssd1306 驱动简介1. 驱动介绍2. OLED充电泵概念 二、I2C 通讯步骤1. 初始化 I2C 总线 (i2c_master_init()函数)&#xff1a;2. 创建 I2C 命令句柄 (i2c_cmd_handle_t cmd i2c_cmd_link_create())&#xff1a;3. 发送启动信号…

【C#】获取电脑CPU、内存、屏幕、磁盘等信息

通过WMI类来获取电脑各种信息&#xff0c;参考文章&#xff1a;WMI_04_常见的WMI类的属性_wmi scsilogicalunit_fantongl的博客-CSDN博客 自己整理了获取电脑CPU、内存、屏幕、磁盘等信息的代码 #region 系统信息/// <summary>/// 电脑信息/// </summary>public p…

flinksql报错 Cannot determine simple type name “org“

flink版本 1.15 报错内容 2023-08-17 15:46:02 java.lang.RuntimeException: Could not instantiate generated class WatermarkGenerator$0at org.apache.flink.table.runtime.generated.GeneratedClass.newInstance(GeneratedClass.java:74)at org.apache.flink.table.runt…

低功耗、5Mbps、RS-422 接口电路MS2583/MS2583M

MS2583/MS2583M 是一款低功耗、 5Mbps 、高 ESD 能力的 RS422 通讯接口电路。 在接收状态下&#xff0c;其功耗仅为 0.3mA 左右。 A/B 端 ESD 耐压可达 15kV &#xff0c;且无自激现象。当输出短路发生大电 流导致电路温度过高时&#xff0c;开启内部过温保护电路&…

go 使用 make 初始化 slice 切片使用注意

go 使用 make 初始化 slice 切片 时指定长度和不指定长度的情况 指定长度 package mainimport "fmt"func main() {s1 : make([]int, 5)data : []int{1, 2, 3}for _, v : range data {s1 append(s1, v)}fmt.Println(s1) }// 以上代码会输出 // [0 0 0 0 0 1 2 3] //…

vue中的路由缓存和解决方案

路由缓存的原因 解决方法 推荐方案二&#xff0c;使用钩子函数beforeRouteUpdate&#xff0c;每次路由更新前执行

手写spring笔记

手写spring笔记 《Spring 手撸专栏》笔记 IoC部分 Bean初始化和属性注入 Bean的信息封装在BeanDefinition中 /*** 用于记录Bean的相关信息*/ public class BeanDefinition {/*** Bean对象的类型*/private Class beanClass;/*** Bean对象中的属性信息*/private PropertyVal…

MFC第三十天 通过CToolBar类开发文字工具栏和工具箱、GDI+边框填充以及基本图形的绘制方法、图形绘制过程的反色线模型和实色模型

文章目录 CControlBar通过CToolBar类开发文字工具栏和工具箱CMainFrame.hCAppCMainFrm.cppCMainView.hCMainView.cppCEllipse.hCEllipse.cppCLine.hCLine.cppCRRect .hCRRect .cpp CControlBar class AFX_NOVTABLE CControlBar : public CWnd{DECLARE_DYNAMIC(CControlBar)pro…

OC调用Swift编写的framework

一、前言 随着swift趋向稳定&#xff0c;越来越多的公司都开始用swift来编写苹果相关的业务了&#xff0c;关于swift的利弊这里就不多说了。这里详细介绍OC调用swift编写的framework库的步骤 二、制作framework 1、新建项目&#xff0c;选择framework 2、填写framework的名称…

AutoHotkey:定时删除目录下指定分钟以前的文件,带UI界面

删除指定目录下&#xff0c;所有在某个指定分钟以前的文件&#xff0c;可以用来清理经常生成很多文件的目录&#xff0c;但又需要保留最新的一部分文件 支持拖放目录到界面 能够记忆设置&#xff0c;下次启动后不用重新设置&#xff0c;可以直接开始 应用场景比如&#xff1a…

WinForm内嵌Unity3D

Unity3D可以C#脚本进行开&#xff0c;使用vstu2013.msi插件&#xff0c;可以实现在VS2013中的调试。在开发完成后&#xff0c;由于项目需要&#xff0c;需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、为了能够动态设置ax…

【boost网络库从青铜到王者】第五篇:asio网络编程中的同步读写的客户端和服务器示例

文章目录 1、简介2、客户端设计3、服务器设计3.1、session函数3.2、StartListen函数3、总体设计 4、效果测试5、遇到的问题5.1、服务器遇到的问题5.1.1、不用显示调用bind绑定和listen监听函数5.1.2、出现 Error occured!Error code : 10009 .Message: 提供的文件句柄无效。 [s…

Failed to execute goal org.apache.maven.plugins

原因&#xff1a; 这个文件D:\java\maven\com\ruoyi\pg-student\maven-metadata-local.xml出了问题 解决&#xff1a; 最简单的直接删除D:\java\maven\com\ruoyi\pg-student\maven-metadata-local.xml重新打包 或者把D:\java\maven\com\ruoyi\pg-student这个目录下所有文件…

性能测试场景设计

性能测试场景设计&#xff0c;是性能测试中的重要概念&#xff0c;性能测试场景设计&#xff0c;目的是要描述如何执行性能测试。 通常来讲&#xff0c;性能测试场景设计主要会涉及以下部分&#xff1a; 并发用户数是多少&#xff1f; 测试刚开始时&#xff0c;以什么样的速率…

Spring WebFlux 的详细介绍

Spring WebFlux 是基于响应式编程的框架&#xff0c;用于构建异步、非阻塞的 Web 应用程序。它是Spring框架的一部分&#xff0c;专注于支持响应式编程范式&#xff0c;使应用程序能够高效地处理大量的并发请求和事件。 以下是关于 Spring WebFlux 的详细介绍&#xff1a; 1. *…

go入门实践五-实现一个https服务

文章目录 前言生成证书申请免费的证书使用Go语言生成自签CA证书 https的客户端和服务端服务端代码客户端代码 tls的客户端和服务端服务端客户端 前言 在公网中&#xff0c;我想加密传输的数据。(1)很自然&#xff0c;我想到了把数据放到http的请求中&#xff0c;然后通过tls确…

2023年京东宠物食品行业数据分析(京东大数据)

宠物食品市场需求主要来自于养宠规模&#xff0c;近年来由于我国宠物数量及养宠人群的规模均在不断扩大&#xff0c;宠物相关产业和市场规模也在蓬勃发展&#xff0c;宠物食品市场也同样保持正向增长。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年1月-7月&am…