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.渐增式与非渐增式各有何优、缺点?为什么通常采用渐增式? 非渐增式是将所有的模块一次连接起来,简单、易行、节省机时,但测试过程难于排错,发现错误也很难定位,测试效率低;渐增式是将模块一个…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...