機器部署
集群規劃
我們準備三臺服務器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.對您的環境進行自定義更改,如下所示
將防止在未來的更新中合并。