集群节点文件共享-Node02更新系统
node2
的系统崩溃了,需要安装新系统,决定更换成ubuntu
,但是替换后的兼容稳定性,运算效率等都是未知数,并且我没有配置集群的经验。这次使用node02
实践一下,争取可以形成生产力
配置和选型
- 集群系统: node00, node01, node03, node04
CentOS release 6.7 (Final)
- node02 新系统:ubuntu 20.04 LTS (待加入集群)
- 权限:超级用户
- 集群主节点
node00
: 共享主目录,磁盘挂载节点 - 登录节点
node01
: 登录节点,NIS通信服务器 - SSD Samsung 870 EVO SATA 2.5 1TB
系统安装和配置
这里准备了官网下载的ubuntu 20.04 LTS
桌面版,使用rufus-3.18.1877
制作U盘启动:<点击查看大图>
插入node02
,开机,按DEL
进入启动选项-> boot ->U盘启动。
安装系统,选择新系统安装,覆盖掉原来的引导选项,分区大小如下
100G / |
这些信息回被写入/etc/fstab
,你也可以使用lsblk
命令查看磁盘的分区。
系统初始化登录时填写机器名为node02
,这个操作实际上是将其写入/etc/hostname
,这个别名设置会在后续节点通讯的别名设置中用到。
初始的高级权限用户可以是lirui
,并设置密码;进入系统以后,为root
账户设置密码,创建用户,安装vim
:
lirui@node02:~ $ sudo passwd root |
网络设置
按照目前的网络架构,一个网卡enp6s0
连入校园网,具有公网IP地址;另一个网卡enp7s0
链接局域网路由器,其包括node00~node05以及两个磁盘阵列共八台机器组成的局域网。
安装net-tools
并查看网络信息:
lirui@node02:~/桌面$ sudo apt update |
可以看到,enp6s0
已自动获取公网IP 222.146.88.88
<这里为了安全,我虚构了IP>。enp7s0
则是无法连接状态。此时,需要配置网络和固定公网IP和局域网IP,直接在桌面上打开网络设置:
enp6s0
配置
直接把自动获取的ip地址进行固定即可,更换ip会导致联网失败:
IPv4方式 | 地址 | 子网掩码 | 网关<ip末字段改成254即可> | DNS服务器<科大使用的DNS服务器> |
---|---|---|---|---|
手动 | 222.146.88.88 | 255.255.255.0 | 222.146.88.254 | 202.38.64.56, 202.38.64.17 |
enp7s0
配置
这个网卡连接局域网,按照集群结构,node02节点的局域网ip为192.168.1.102
<这个是本节点机器的网络身份,各节点通过在/etc/hosts
进行别名定义来使用别名互相访问>:
IPv4方式 | 地址 | 子网掩码 | 网关 | DNS服务器 |
---|---|---|---|---|
手动 | 192.168.1.102 | 255.255.255.0 | 192.168.1.1 | 192.168.1.1 |
这样网络就设置好了,使用ifconfig
查看:
enp6s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 |
或者,此处的配置也可以在/etc/netplan/01-network-manager-all.yaml
中进行修改并使用sudo netplan apply
命令生效。
开启远程服务
安装openssh
服务:
root@node02:/etc# apt install ssh |
可以使用ssh user@ip
来访问其他服务器。节点间登录可以使用局域网ip和公网ip,但是外部登录必须使用公网ip:
<访问node01> |
集群中各节点在局域网中都有自己的ip地址,如192.168.1.101
,可以使用ssh命令登录到对应的ip来实现切换。但是节点间每次切换都需要输入ip,较为不方便,所以需要设置别名访问。
节点别名通信
设置别名的原理就是,每个节点都保留一个清单,约定好每台机器的别名和对应的ip地址,做法如下:
每台机器给自己取号名字,放在/etc/hostname
中,比如node01
、node02
、node05
、dataserver1
,这个不是必须,但是决定了当前节点命令行的显示,如[hjh@node02]
,[rootrui@node02]
,[user@dataserver2]
;
每台机器需要知道其他机器的别名,设置如下的别名列表,并各自保存在/etc/hosts
:
[hjh@node02] ~ $ cat /etc/hosts |
这个方法,你甚至可以将非局域网内的服务器加进去,进行别名访问。
从此,无论是互相登录,文件系统的共享,还是用户信息通讯,都可使用node02
这样的别名来代替IP地址
<访问node01> |
文件系统挂载,节点磁盘共享
这一步的目的是在node02
上也可以访问替他节点的磁盘,需要设置文件共享系统。
安装nfs-kernel-server
服务:
$su root |
作为客户端的文件共享设置
nfs-kernel-server
服务也是S/C模式,这里只使用客户端配置,需要挂载来自node00
和磁盘阵列的文件系统。
超级权限编辑/etc/fstab
,文末追加如下内容
### nfs mount infos |
这里计划挂载了两个磁盘阵列和三个来自node00的磁盘。
创建挂载点sudo mkdir /data00 /data01 /data02 /data03 /data04
。
使用命令sudo mount -a
生效,查看磁盘挂载情况:
$df -h |
作为服务器的文件共享设置
本实践只涉及到挂载其他节点的共享文件系统,如果需要将本节点的文件系统共享出去,需要做如下设置:
修改exportfs配置文件/etc/exports
,这里使用dataserver2节点(磁盘阵列)作为展示:
user@user-RS540-E9-RS36-E:~$ cat /etc/exports |
这里的意思是将dataserver2
节点挂载在/home/d1
下的300TB磁盘阵列共享出去,后面是网关/掩模(权限设置)。
使用sudo exportfs -ra
命令执行生效,即可用上述的方法在其他节点挂载这个共享资源。
详细可以参考从零开始挂载磁盘阵列的操作实践。
注意:以下关于NIS的内容已经不再适用,请移步集群节点用户系统同步-NIS处查阅。— 2023-11-18
以下内容可以忽略
NIS用户同步
在完成集群节点间的通信和/home
主目录共享以后,发现为在本节点(node02
)上注册的用户,无法通过其他节点登录进来,或者无法再本节点切换到该用户下:报错: su: 用户 qyliu 不存在
这是因为,node02作为分子节点,虽然已经挂载了主节点node00的主目录,但是管理用户信息的如/etc/passwd
等配置文件并没有同步,在node00下注册的用户无法登陆node02节点。
这里要使用NIS服务来进行用户信息的共享,使得宿主节点(node00
)用户即使不存在子节点(如node02
)的/etc/passwd
文件信息上,也可以登录进来。
NIS是使用S/C模式实现,也就是宿主和客户端模式:
NIS服务的应用结构分为NIS服务端和NIS客户端两种角色,NIS服务端集中维护用户的帐号信息(数据库)供NIS客户机进行查询,用户登录任何一台NIS客户端设备都会从NIS服务端进行登录认证,可实现用户帐号的集中管理。
在本案例中,node00
做我NIS服务器,node01/node03/node04
都已经完成了NIS通信,所以仅对新加入的node02
进行NIS客户端安装和配置,也就是客户端的配置。
别问我怎么知道大师兄怎么配置的,不听的百度+去老系统里面翻配置文件,才确定了他10年前的做法。
node02
联科大校园网:bashhjh@node02 /etc$ wget --post-data="name=user&password=passwd&cmd=set&type=1&exp=0" http://wlt.ustc.edu.cn/cgi-bin/ip -O -
安装NIS相关服务:
bashhjh@node02 /etc$ su root
root@node02 /etc# apt install nis会弹出图形界面,此处作为客户端需要填写server的domian为
lirui
,这个操作是新建/etc/defaultdomian
并写入lirui。
如果没有图形界面弹出,则手动添加:plaintext#echo lirui>/etc/defaultdomain
在
/etc/yp.conf
中追加:domain lirui server node01
:plaintext#echo domain lirui server node01>>/etc/yp.conf
修改/etc/default/nis
,做如下修改:
# Are we a NIS server and if so what kind (values: false, slave, master)? |
- 做如下修改:
备份/etc/nsswitch.conf
,修改内容如下:plaintext#passwd: files systemd
passwd: files nis
#group: files systemd
group: files nis
#shadow: files
shadow: files nis
gshadow: files
#hosts: files mdns4_minimal [NOTFOUND=return] dns
hosts: files dns nis
重启ypserv
服务:
# service ypbind restart |
发现qyliu
已经可以登录node02
了,
如果在node01
上ssh node02
提示 NASTY警告,删除/home/qyliu/.ssh/known_hosts
文件中的node02
的过期指纹,重新登录会提示保留指纹,ok
主目录共享
登录node02
以后会提示找不到/home/qyliu
主目录,因为node02
挂载了本地磁盘分区作为/home
目录:df -h
查看挂载信息:
/dev/sdb3 1.9G 251M 1.5G 15% /boot |
这时需要共享主目录操作,超级权限编辑/etc/fstab
······ |
命令行执行sudo mount -a
df -h
发现已经挂载了node00:/home
:
/dev/sdb3 1.9G 251M 1.5G 15% /boot |
登出用户,重新进入node02
[qyliu@node01] ~ $ ssh node02 |
发现qyliu
在node02
下面可以直接进入node01
的主目录,实际上都是node00:/home
的内容,这些节点都会对其同步修改。
至此,已经全部完成了节点的文件挂载、共享和用户信息通信。
生产环境
安装netcdf
,hdf5-helpers
,NCL
:
# apt install netcdf-bin |
以下内容可以忽略
使用的NCL来自于node01 用户主目录下的NCL,直接运行会报错,提示共享出问题,缺少SSL相关依赖libssl.so.10
:
[qyliu@node02] ~ $which ncl |
查看 Linux Ubuntu 20.04LTS 自带 openssl 的版本为 1.1.1f:
[qyliu@node02] ~ $openssl |
下载安装 libssl-dev
即可解决 (最简单推荐此方法,不会对系统本身依赖openssl产生任何影响)
root@node02:/home/hjh# apt install libssl-dev |
踩坑
在没有设置好网络的情况下,卸载了本地/home, 远程修改了
/etc/netplan/0*.xml
网络配置文件,导致网络中断,无法共享远程/home,本地也无法登录桌面
解决办法是登录界面按ALT+CTRL+F2
进如命令行模式,挂载本地的/home
,即可登录本地,进一步设好网络。
教训:一定要先设置好网络再进行各项操作,远程不要修改网络相关设置。完成最后一步,在修改
libssl.so.10
依赖时,系统崩了,之前就各种提示内核转储,这下彻底登不上了,从安装系统开始。
经验:系统坏了没办法,我也不会修复,找新蓝科的来试图修复,连recovery模式都进不去。我自己重装了系统,避免以后爆雷,我自己安装的系统十分顺畅。
参考资源
- 基于Ubuntu 12.04搭建NIS Slave服务
- 集群并行环境配置——NIS服务配置
- 在Ubuntu上配置NIS帐号
- 【Linux缺失库】libssl.so.10
- 通过NIS+NFS实现/home文件夹的共享(集群服务器共享文件节点) (很详细,但是没用到)
- NIS用户同步 (很详细,也没用到,学习一下NIS的原理)
- 从零开始挂载磁盘阵列