Diskless 无盘linux集群搭建
搭建无盘 linux 系统需要3种服务(器),
NFS服务器作为文件服务器,存放系统内核等文件
TFTP服务器也作为文件服务器,存放引导文件
DHCP服务器用来分配机器的IP
对于高可用的生产环境,将3种服务器分别放置于不同的物理机/虚拟机/docker中,降低耦合度
一、centos安装DHCP服务器
1.安装服务
yum -y install dhcp
2.开启服务
systemctl enable dhcpd --now
3.配置
编辑 /etc/dhcp/dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
log-facility local7;
# 万兆内网
subnet 10.100.69.0 netmask 255.255.255.0 { #指定为那个网段分配网络参数
range 10.100.69.60 10.100.69.200; #设置准备为客户端分配的IP地址范围
option domain-name-servers 10.100.69.1; #设置分配给客户端的DNS服务器地址
option routers 10.100.69.1; #设置分配给客户端的网关地址。
default-lease-time 315360000; # 地址租赁时间 600秒后失效
max-lease-time 2147483647;
next-server 10.100.69.51; # 下一个要访问的地址,就是tftp地址。
filename "pxelinux.0"; #要访问tftp上哪一个文件。
host login01 {hardware ethernet 18:66:DA:59:C2:6D;fixed-address 10.100.69.60;}
host node01 {hardware ethernet 74:a4:b5:00:e6:18;fixed-address 10.100.69.101;}
host node02 {hardware ethernet 74:a4:b5:00:fb:1c;fixed-address 10.100.69.102;}
host node03 {hardware ethernet 74:A4:B5:00:EA:2E;fixed-address 10.100.69.103;}
}
我们的网络有两个网段,万兆和千兆,配置按照自己实际情况编辑
4.防火墙
firewall-cmd --permanent --add-service=dhcp
firewall-cmd --reload
二、centos安装NFS服务器
服务端
1.安装服务
yum -y install nfs-utils nfs-utils-lib rpcbind
2.创建共享目录
mkdir /public
chmod 777 /public
3.配置
/public 10.249.1.0/24(rw,sync,no_root_squash)
解释:将/public 目录共享给10.249.1.0 网段下的所有机器
参数含义: rw 表示设置目录可读写 sync 表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。 no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限 no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限
4.及时生效
exportfs -r
5.配置防火墙
修改 /etc/sysconfig/nfs ,绑定下面的服务的端口
RQUOTAD_PORT=1001
LOCKD_TCPPORT=30001
LOCKD_UDPPORT=30002
MOUNTD_PORT=1002
将上面端口加入防火墙
firewall-cmd --zone=public --add-port=111/tcp --add-port=111/udp --add-port=2049/tcp --add-port=2049/udp --add-port=1001/tcp --add-port=1001/udp --add-port=1002/tcp --add-port=1002/udp --add-port=30001/tcp --add-port=30002/udp --permanent
firewall-cmd --reload
6.启动服务
systemctl start rpcbind
systemctl start nfs
service nfslock start
开机启动
systemctl enable rpcbind
systemctl enable nfs
客户端
1.安装服务
yum install nfs-utils -y
2.检查
[root@test ~]# showmount 10.249.1.23
Hosts on 10.249.1.23:
3.挂载
mount 10.249.1.23:/public /public
三、centos安装TFTP服务器
1.安装服务
yum -y install tftp-server xinetd
2.配置
编辑 /etc/xinetd.d/tftp
protocol = udp # TFTP默认使用UDP协议
wait = no # no表示客户机可以多台一起连接,yes表示客户机只能一台一台连接
server_args = -s /var/lib/tftpboot # 指定TFTP根目录(引导文件的存储路径)
disable = no # no表示开启TFTP服务
3.启动服务
systemctl start tftp
systemctl enable tftp
systemctl start xinetd
systemctl enable xinetd
4.配置防火墙
firewall-cmd --permanent --add-service=tftp
firewall-cmd --reload
四、构建系统盘
1.禁用selinux
编辑 /etc/sysconfig/selinux, 修改 SELINUX=disabled , 重启系统
2.设置环境变量
export NFSROOT=/home/nfsroot
mkdir ${NFSROOT}
3.安装基础环境
yum -y groupinstall Base --installroot=${NFSROOT} --releasever=/
yum -y install kernel nfs-utils kernel-devel vim git tree make cmake gcc gcc-gfortran gcc-c++ python3 python3-pip patch net-tools --installroot=${NFSROOT} --releasever=/
4.配置自动挂载
$NFSROOT/etc/fstab
none /tmp tmpfs defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
5.配置hostname
$NFSROOT/etc/hosts
127.0.0.1 localhost
192.168.0.100 nfsserver
hostname ip 对应按照自己实际情况编辑
6.配置whereami
$NFSROOT/bin/whereami
#!/bin/bash
# finds node's hostname based on matching IP in /etc/hosts
PATH=/sbin:/bin:/usr/sbin:/usr/bin
IP=`ifconfig | egrep 'inet.*broadcast' \
| sed -e 's/.*inet \(.*\).*netmask.*/\1/'`
grep $IP /etc/hosts | /usr/bin/awk '{print $2}'
执行命令:
chmod +x ${NFSROOT}/bin/whereami
7.配置 rc.loca
$NFSROOT/etc/rc.local
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# set hostname
hostname `/bin/whereami`
touch /var/lock/subsys/local
执行命令:
chmod +x ${NFSROOT}/etc/rc.local
8.配置root用户
依次执行命令
chroot ${NFSROOT}
passwd root
exit
其中第二条命令输入密码后如果报错认证失败,那是因为2.1 的操作未做/未生效
9.创建 基于ram的引导内核
依次执行命令
echo 'add_dracutmodules+="nfs"' >> $NFSROOT/etc/dracut.conf
chroot $NFSROOT
dracut --no-hostonly --nolvmconf -m "nfs network base" --xz /boot/initramfs.pxe-$(uname -r) $(uname -r)
chmod ugo+r /boot/initramfs.pxe-$(uname -r)
exit
注意dracut生产pxe引导文件需要kernel一致,否则无法成功引导
五、PXE配置
1.准备 PXE 引导程序
yum -y install syslinux
cp /usr/share/syslinux/* /var/lib/tftpboot/
2.复制内核和系统文件
将$NFSROOT目录下的文件 通过rsync 命令(保留权限、用户信息、软连接等全部文件属性,cp无法做到)拷贝到nfs服务器下
rsync -av ${NFSROOT}/ root@nfsserver:/public/centos7
将引导文件和内核文件拷贝到 tftp服务器下 ,查看刚才生成的引导文件和内核
# cd ${NFSROOT}/boot && ls
config-3.10.0-1160.83.1.el7.x86_64 symvers-3.10.0-1160.83.1.el7.x86_64.gz
grub System.map-3.10.0-1160.83.1.el7.x86_64
initramfs-3.10.0-1160.83.1.el7.x86_64.img vmlinuz-3.10.0-1160.83.1.el7.x86_64
initramfs.pxe-3.10.0-1160.el7.x86_64
scp initramfs.pxe-3.10.0-1160.el7.x86_64 vmlinuz-3.10.0-1160.83.1.el7.x86_64 tftpserver:/var/lib/tftpboot
3.创建pxecfg
mkdir /var/lib/tftpboot/pxelinux.cfg
# vim /var/lib/tftpboot/pxelinux.cfg/default # 在pxelinux.cfg目录下创建default并编辑配置文件
# boot centos7 with tftp&nfs
default menu.c32
prompt 10
menu title CentOS diskless
ontimeout master
timeout 50
label master
menu label master
kernel vmlinuz-3.10.0-1160.90.1.el7.x86_64
append netboot=nfs initrd=initramfs.pxe-3.10.0-1160.90.1.el7.x86_64 bond=bond0:eno1,eno2:mode=802.3ad,lacp_rate=1,miimon=100,xmit_hash_policy=layer2+3 ip=:::::bond0:dhcp root=nfs:10.100.69.51:/home/master rw selinux=0 panic=60 ipv6.disable=1
label node
menu label node
kernel vmlinuz-3.10.0-1160.90.1.el7.x86_64
append netboot=nfs initrd=initramfs.pxe-3.10.0-1160.90.1.el7.x86_64 bond=bond0:enp10s0f0,enp10s0f1:mode=802.3ad,lacp_rate=1,miimon=100,xmit_hash_policy=layer2+3 ip=:::::bond0:dhcp root=nfs:10.100.69.51:/home/node rw selinux=0 panic=60 ipv6.disable=1
label memtest
menu label memtest
kernel memtest86+
重启TFTP服务
systemctl restart tftp