డూ-ఇట్-మీరే బేర్-మెటల్ ప్రొవిజనింగ్, లేదా స్క్రాచ్ నుండి సర్వర్‌ల స్వయంచాలక తయారీ

హలో, నేను డెనిస్ మరియు X5 వద్ద మౌలిక సదుపాయాల పరిష్కారాలను అభివృద్ధి చేయడం అనేది నా కార్యకలాపాలలో ఒకటి. ఈ రోజు నేను పబ్లిక్‌గా అందుబాటులో ఉన్న టూల్స్ ఆధారంగా ఆటోమేటిక్ సర్వర్ ప్రిపరేషన్ సిస్టమ్‌ని ఎలా అమలు చేయవచ్చో మీతో పంచుకోవాలనుకుంటున్నాను. నా అభిప్రాయం ప్రకారం, ఇది ఆసక్తికరమైన, సరళమైన మరియు సౌకర్యవంతమైన పరిష్కారం.

డూ-ఇట్-మీరే బేర్-మెటల్ ప్రొవిజనింగ్, లేదా స్క్రాచ్ నుండి సర్వర్‌ల స్వయంచాలక తయారీ

తయారీ ద్వారా మన ఉద్దేశ్యం: బాక్స్ వెలుపల కొత్త సర్వర్‌ను OSతో పూర్తిగా కాన్ఫిగర్ చేసిన సర్వర్‌గా మార్చడం. Linux లేదా ESXi హైపర్‌వైజర్‌తో (Windows సర్వర్‌ల విస్తరణ ఈ వ్యాసంలో చర్చించబడలేదు).

నిబంధనలు:

  • సర్వర్లు - కాన్ఫిగర్ చేయవలసిన సర్వర్లు.
  • ఇన్‌స్టాలేషన్ సర్వర్ అనేది నెట్‌వర్క్‌లో మొత్తం తయారీ ప్రక్రియను అందించే ప్రధాన సర్వర్.

ఆటోమేషన్ ఎందుకు అవసరం?

ఒక పని ఉందని చెప్పండి: మొదటి నుండి సర్వర్‌లను భారీగా సిద్ధం చేయడం, గరిష్టంగా - రోజుకు 30. వేర్వేరు తయారీదారులు మరియు నమూనాల సర్వర్‌లు, వివిధ ఆపరేటింగ్ సిస్టమ్‌లు వాటిపై ఇన్‌స్టాల్ చేయబడి ఉండవచ్చు మరియు హైపర్‌వైజర్‌ను కలిగి ఉండకపోవచ్చు.

సెటప్ ప్రాసెస్‌లో ఏ ఆపరేషన్లు చేర్చబడ్డాయి (ఆటోమేషన్ లేకుండా):

  • కీబోర్డ్, మౌస్, మానిటర్‌ను సర్వర్‌కు కనెక్ట్ చేయండి;
  • BIOS, RAID, IPMIలను కాన్ఫిగర్ చేయండి;
  • నవీకరణ భాగం ఫర్మ్వేర్;
  • ఫైల్ సిస్టమ్ ఇమేజ్‌ని అమర్చండి (లేదా హైపర్‌వైజర్‌ను ఇన్‌స్టాల్ చేయండి మరియు వర్చువల్ మిషన్‌లను కాపీ చేయండి);

గమనిక. ప్రత్యామ్నాయంగా, ఆటో-రెస్పాన్స్ ఫైల్‌తో ఇన్‌స్టాలేషన్ ద్వారా OS విస్తరణ సాధ్యమవుతుంది. కానీ ఇది వ్యాసంలో చర్చించబడదు. ఈ ఫంక్షనాలిటీని జోడించడం కష్టం కాదని మీరు క్రింద చూసినప్పటికీ.

  • OS పారామితులను కాన్ఫిగర్ చేయండి (హోస్ట్ పేరు, IP, మొదలైనవి).

ఈ విధానంతో, ప్రతి సర్వర్‌లో ఒకే సెట్టింగ్‌లు వరుసగా నిర్వహించబడతాయి. అటువంటి పని యొక్క సామర్థ్యం చాలా తక్కువగా ఉంటుంది.

ఆటోమేషన్ యొక్క సారాంశం సర్వర్ తయారీ ప్రక్రియ నుండి మానవ భాగస్వామ్యాన్ని తొలగించడం. ఎంత వీలైతే అంత.

ఆటోమేషన్ ఆపరేషన్‌ల మధ్య పనికిరాని సమయాన్ని తగ్గిస్తుంది మరియు బహుళ సర్వర్‌లను ఏకకాలంలో అందించడాన్ని సాధ్యం చేస్తుంది. మానవ కారణాల వల్ల లోపాల సంభావ్యత కూడా బాగా తగ్గుతుంది.

డూ-ఇట్-మీరే బేర్-మెటల్ ప్రొవిజనింగ్, లేదా స్క్రాచ్ నుండి సర్వర్‌ల స్వయంచాలక తయారీ

సర్వర్లు స్వయంచాలకంగా ఎలా కాన్ఫిగర్ చేయబడతాయి?

అన్ని దశలను వివరంగా విశ్లేషిద్దాం.

మీరు PXE ఇన్‌స్టాలేషన్ సర్వర్‌గా ఉపయోగించే Linux సర్వర్‌ని కలిగి ఉన్నారు. సేవలు ఇన్‌స్టాల్ చేయబడ్డాయి మరియు దానిపై కాన్ఫిగర్ చేయబడ్డాయి: DHCP, TFTP.

కాబట్టి, మేము PXE ద్వారా సర్వర్‌ను (కాన్ఫిగర్ చేయబడాలి) బూట్ చేస్తాము. ఇది ఎలా పని చేస్తుందో గుర్తుంచుకోండి:

  • సర్వర్‌లో నెట్‌వర్క్ బూట్ ఎంపిక చేయబడింది.
  • సర్వర్ నెట్‌వర్క్ కార్డ్ యొక్క PXE-ROMను లోడ్ చేస్తుంది మరియు నెట్‌వర్క్ చిరునామాను పొందేందుకు DHCP ద్వారా ఇన్‌స్టాలేషన్ సర్వర్‌ను సంప్రదిస్తుంది.
  • DHCP ఇన్‌స్టాలేషన్ సర్వర్ చిరునామాను, అలాగే PXE ద్వారా మరింత డౌన్‌లోడ్ చేయడానికి సూచనలను జారీ చేస్తుంది.
  • సర్వర్ PXE ద్వారా ఇన్‌స్టాలేషన్ సర్వర్ నుండి నెట్‌వర్క్ బూట్‌లోడర్‌ను లోడ్ చేస్తుంది, PXE కాన్ఫిగరేషన్ ఫైల్ ప్రకారం తదుపరి లోడింగ్ జరుగుతుంది.
  • అందుకున్న పారామితులు (కెర్నల్, initramfs, మౌంట్ పాయింట్లు, squashfs చిత్రం మొదలైనవి) ఆధారంగా బూట్ జరుగుతుంది.

గమనిక. వ్యాసం BIOS మోడ్ ద్వారా PXE ద్వారా బూట్ చేయడాన్ని వివరిస్తుంది. ప్రస్తుతం, తయారీదారులు UEFI బూట్‌మోడ్‌ను చురుకుగా అమలు చేస్తున్నారు. PXE కోసం, వ్యత్యాసం DHCP సర్వర్ యొక్క కాన్ఫిగరేషన్ మరియు అదనపు బూట్‌లోడర్ ఉనికిలో ఉంటుంది.

PXE సర్వర్ కాన్ఫిగరేషన్ (pxelinux మెను) యొక్క ఉదాహరణను చూద్దాం.

ఫైల్ pxelinux.cfg/default:

default menu.c32
prompt 0
timeout 100
menu title X5 PXE Boot Menu
LABEL InstallServer Menu
	MENU LABEL InstallServer
	KERNEL menu.c32
	APPEND pxelinux.cfg/installserver
LABEL VMware Menu
	MENU LABEL VMware ESXi Install
	KERNEL menu.c32
	APPEND pxelinux.cfg/vmware
LABEL toolkit // меню по умолчанию
	MENU LABEL Linux Scripting Toolkits
	MENU default
	KERNEL menu.c32
	APPEND pxelinux.cfg/toolkit // переход на следующее меню

ఫైల్ pxelinux.cfg/toolkit:

prompt 0
timeout 100
menu title X5 PXE Boot Menu
label mainmenu
    menu label ^Return to Main Menu
    kernel menu.c32
    append pxelinux.cfg/default
label x5toolkit-auto // по умолчанию — автоматический режим
        menu label x5 toolkit autoinstall
        menu default
        kernel toolkit/tkcustom-kernel
        append initrd=toolkit/tk-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh CMDIS2=”…”
label x5toolkit-shell // для отладки - консоль
        menu label x5 toolkit shell
        kernel toolkit/tkcustom-kernel
        append initrd=toolkit/tkcustom-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot/toolkit nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash CMDIS2=”…”

ఈ దశలో కెర్నల్ మరియు initramfలు ఒక ఇంటర్మీడియట్ Linux ఇమేజ్, దీని సహాయంతో సర్వర్ యొక్క ప్రధాన తయారీ మరియు ఆకృతీకరణ జరుగుతుంది.

మీరు చూడగలిగినట్లుగా, బూట్‌లోడర్ అనేక పారామితులను కెర్నల్‌కు పంపుతుంది. ఈ పారామితులలో కొన్ని కెర్నల్ ద్వారా ఉపయోగించబడతాయి. మరియు మనం కొన్నింటిని మన స్వంత ప్రయోజనాల కోసం ఉపయోగించవచ్చు. ఇది తరువాత చర్చించబడుతుంది, కానీ ప్రస్తుతానికి మీరు పాస్ చేసిన అన్ని పారామితులు /proc/cmdline ద్వారా ఇంటర్మీడియట్ Linux ఇమేజ్‌లో అందుబాటులో ఉంటాయని గుర్తుంచుకోవచ్చు.

నేను వాటిని ఎక్కడ పొందగలను, కెర్నల్ మరియు initramfs?
ప్రాతిపదికగా, మీరు ఏదైనా Linux పంపిణీని ఎంచుకోవచ్చు. ఎంచుకునేటప్పుడు మనం ఏమి శ్రద్ధ వహిస్తాము:

  • బూట్ ఇమేజ్ తప్పనిసరిగా సార్వత్రికంగా ఉండాలి (డ్రైవర్ల లభ్యత, అదనపు వినియోగాలను వ్యవస్థాపించే సామర్థ్యం);
  • చాలా మటుకు, మీరు initramfsని అనుకూలీకరించవలసి ఉంటుంది.

X5 కోసం మా పరిష్కారంలో ఇది ఎలా జరుగుతుంది? CentOS 7 ప్రాతిపదికగా ఎంపిక చేయబడింది. కింది ట్రిక్‌ని ప్రయత్నిద్దాం: భవిష్యత్ చిత్ర నిర్మాణాన్ని సిద్ధం చేసి, దానిని ఆర్కైవ్‌లో ప్యాక్ చేసి, initramfsని సృష్టించండి, దాని లోపల మన ఫైల్ సిస్టమ్ ఆర్కైవ్ ఉంటుంది. చిత్రాన్ని లోడ్ చేస్తున్నప్పుడు, ఆర్కైవ్ సృష్టించబడిన tmpfs విభజనకు విస్తరించబడుతుంది. ఈ విధంగా మనకు అవసరమైన అన్ని యుటిలిటీలతో కనిష్టమైన, ఇంకా పూర్తి స్థాయి లైవ్ లైనక్స్ ఇమేజ్‌ని పొందుతాము, ఇందులో కేవలం రెండు ఫైల్‌లు మాత్రమే ఉంటాయి: vmkernel మరియు initramfs.

#создаем директории: 

mkdir -p /tftpboot/toolkit/CustomTK/rootfs /tftpboot/toolkit/CustomTK/initramfs/bin

#подготавливаем структуру:

yum groups -y install "Minimal Install" --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y install nfs-utils mariadb ntpdate mtools syslinux mdadm tbb libgomp efibootmgr dosfstools net-tools pciutils openssl make ipmitool OpenIPMI-modalias rng-tools --installroot=/tftpboot/toolkit/CustomTK/rootfs/
yum -y remove biosdevname --installroot=/tftpboot/toolkit/CustomTK/rootfs/

# подготавливаем initramfs:

wget https://busybox.net/downloads/binaries/1.31.0-defconfig-multiarch-musl/busybox-x86_64 -O /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
chmod a+x /tftpboot/toolkit/CustomTK/initramfs/bin/busybox
cp /tftpboot/toolkit/CustomTK/rootfs/boot/vmlinuz-3.10.0-957.el7.x86_64 /tftpboot/toolkit/tkcustom-kernel

# создаем /tftpboot/toolkit/CustomTK/initramfs/init (ниже содержание скрипта):

#!/bin/busybox sh
/bin/busybox --install /bin
mkdir -p /dev /proc /sys /var/run /newroot
mount -t proc proc /proc
mount -o mode=0755 -t devtmpfs devtmpfs /dev
mkdir -p /dev/pts /dev/shm /dev/mapper /dev/vc
mount -t devpts -o gid=5,mode=620 devpts /dev/pts
mount -t sysfs sysfs /sys
mount -t tmpfs -o size=4000m tmpfs /newroot
echo -n "Extracting rootfs... "
xz -d -c -f rootfs.tar.xz | tar -x -f - -C /newroot
echo "done"
mkdir -p /newroot/dev /newroot/proc /newroot/sys
mount --move /sys  /newroot/sys
mount --move /proc /newroot/proc
mount --move /dev  /newroot/dev
exec switch_root /newroot /sbin/init

# упаковываем rootfs и initramfs:

cd /tftpboot/toolkit/CustomTK/rootfs
tar cJf /tftpboot/toolkit/CustomTK/initramfs/rootfs.tar.xz --exclude ./proc --exclude ./sys --exclude ./dev .
cd /tftpboot/toolkit/CustomTK/initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > /tftpboot/toolkit/tkcustom-initramfs-new.gz

కాబట్టి మేము లోడ్ చేయవలసిన కెర్నల్ మరియు initramfలను పేర్కొన్నాము. ఫలితంగా, ఈ దశలో, PXE ద్వారా ఇంటర్మీడియట్ లైనక్స్ చిత్రాన్ని లోడ్ చేయడం ద్వారా, మేము OS కన్సోల్‌ను అందుకుంటాము.

గ్రేట్, కానీ ఇప్పుడు మేము మా "ఆటోమేషన్" కు నియంత్రణను బదిలీ చేయాలి.

ఇది ఇలా చేయవచ్చు.

చిత్రాన్ని లోడ్ చేసిన తర్వాత మేము నియంత్రణను mount.sh స్క్రిప్ట్‌కు బదిలీ చేయాలని ప్లాన్ చేస్తున్నాము అని అనుకుందాం.
mount.sh స్క్రిప్ట్‌ను autorunలో చేర్చుదాం. దీన్ని చేయడానికి మీరు initramfలను సవరించాలి:

  • initramfsని అన్‌ప్యాక్ చేయండి (మేము పై initramfs ఎంపికను ఉపయోగిస్తే, ఇది అవసరం లేదు)
  • స్టార్టప్‌లో కోడ్‌ని చేర్చండి, అది /proc/cmdline ద్వారా పంపబడిన పారామితులను విశ్లేషిస్తుంది మరియు నియంత్రణను మరింత బదిలీ చేస్తుంది;
  • initramfలను ప్యాక్ చేయండి.

గమనిక. X5 టూల్‌కిట్ విషయంలో, లోడింగ్ నియంత్రణ స్క్రిప్ట్‌కి బదిలీ చేయబడుతుంది /opt/x5/toolkit/bin/hook.sh с помощью override.conf в getty tty1 (ExecStart=…)

కాబట్టి, చిత్రం లోడ్ చేయబడింది, దీనిలో mount.sh స్క్రిప్ట్ autorun వద్ద ప్రారంభమవుతుంది. తరువాత, mount.sh స్క్రిప్ట్ అమలు సమయంలో ఆమోదించబడిన పారామితులను (script_cmd=) విశ్లేషిస్తుంది మరియు అవసరమైన ప్రోగ్రామ్/స్క్రిప్ట్‌ను ప్రారంభిస్తుంది.

లేబుల్ టూల్‌కిట్-కారు
కెర్నల్...
append...nfs_toolkit_script=scripts/mount.sh script_cmd=master-install.sh

లేబుల్ టూల్‌కిట్-షెల్
కెర్నల్...
append...nfs_toolkit_script=scripts/mount.sh script_cmd=/bin/bash

డూ-ఇట్-మీరే బేర్-మెటల్ ప్రొవిజనింగ్, లేదా స్క్రాచ్ నుండి సర్వర్‌ల స్వయంచాలక తయారీ

ఇక్కడ ఎడమ వైపున PXE మెను ఉంది, కుడి వైపున నియంత్రణ బదిలీ రేఖాచిత్రం ఉంది.

మేము నియంత్రణ బదిలీని కనుగొన్నాము. PXE మెను ఎంపికపై ఆధారపడి, ఆటో-కాన్ఫిగరేషన్ స్క్రిప్ట్ లేదా డీబగ్గింగ్ కన్సోల్ ప్రారంభించబడుతుంది.

ఆటోమేటిక్ కాన్ఫిగరేషన్ విషయంలో, అవసరమైన డైరెక్టరీలు ఇన్‌స్టాలేషన్ సర్వర్ నుండి మౌంట్ చేయబడతాయి, వీటిలో ఇవి ఉంటాయి:

  • స్క్రిప్ట్‌లు;
  • వివిధ సర్వర్‌ల కోసం సేవ్ చేయబడిన BIOS/UEFI టెంప్లేట్‌లు;
  • ఫర్మ్వేర్;
  • సర్వర్ యుటిలిటీస్;
  • చిట్టాలు

తరువాత, mount.sh స్క్రిప్ట్ నియంత్రణను స్క్రిప్ట్ డైరెక్టరీ నుండి master-install.sh స్క్రిప్ట్‌కి బదిలీ చేస్తుంది.

స్క్రిప్ట్ ట్రీ (అవి ప్రారంభించబడిన క్రమం) ఇలా కనిపిస్తుంది:

  • మాస్టర్-ఇన్‌స్టాల్
  • భాగస్వామ్య విధులు (భాగస్వామ్య విధులు)
  • సమాచారం (సమాచార అవుట్‌పుట్)
  • నమూనాలు (సర్వర్ మోడల్ ఆధారంగా ఇన్‌స్టాలేషన్ పారామితులను అమర్చడం)
  • సిద్ధం_యుటిల్స్ (అవసరమైన యుటిలిటీల ఇన్‌స్టాలేషన్)
  • fwupdate (ఫర్మ్‌వేర్ నవీకరణ)
  • డయాగ్ (ఎలిమెంటరీ డయాగ్నస్టిక్స్)
  • బయోస్కాన్ఫ్ (BIOS/UEFI సెట్టింగ్‌లు)
  • క్లాక్‌ఫిక్స్ (మదర్‌బోర్డ్‌లో సమయాన్ని సెట్ చేయడం)
  • srmconf (రిమోట్ ఇంటర్‌ఫేస్ ఇంటర్‌ఫేస్ కాన్ఫిగరేషన్)
  • raidconf (లాజికల్ వాల్యూమ్‌లను కాన్ఫిగర్ చేయడం)

ఒకటి:

  • ప్రీఇన్‌స్టాల్ (ESXi వంటి OS ​​లేదా హైపర్‌వైజర్ ఇన్‌స్టాలర్‌కు నియంత్రణను బదిలీ చేయడం)
  • విలీనం-ఇన్‌స్టాల్ (చిత్రాన్ని అన్‌ప్యాక్ చేయడం వెంటనే ప్రారంభం)

ఇప్పుడు మనకు తెలుసు:

  • PXE ద్వారా సర్వర్‌ను ఎలా బూట్ చేయాలి;
  • మీ స్వంత స్క్రిప్ట్‌కి నియంత్రణను ఎలా బదిలీ చేయాలి.


ముందుకు సాగిద్దాము. కింది ప్రశ్నలు సంబంధితంగా మారాయి:

  • మేము సిద్ధం చేస్తున్న సర్వర్‌ను ఎలా గుర్తించాలి?
  • ఏ వినియోగాలు మరియు సర్వర్‌ను ఎలా కాన్ఫిగర్ చేయాలి?
  • నిర్దిష్ట సర్వర్ కోసం సెట్టింగ్‌లను ఎలా పొందాలి?

మేము సిద్ధం చేస్తున్న సర్వర్‌ను ఎలా గుర్తించాలి?

ఇది చాలా సులభం - DMI:

dmidecode –s system-product-name
dmidecode –s system-manufacturer
dmidecode –s system-serial-number

మీకు కావలసిందల్లా ఇక్కడ ఉన్నాయి: విక్రేత, మోడల్, క్రమ సంఖ్య. ఈ సమాచారం అన్ని సర్వర్‌లలో ఉందని మీకు ఖచ్చితంగా తెలియకపోతే, మీరు వారి MAC చిరునామా ద్వారా వాటిని గుర్తించవచ్చు. లేదా ఒకే సమయంలో రెండు విధాలుగా, సర్వర్ విక్రేతలు భిన్నంగా ఉంటే మరియు కొన్ని మోడళ్లలో సీరియల్ నంబర్ గురించి సమాచారం లేదు.

అందుకున్న సమాచారం ఆధారంగా, నెట్‌వర్క్ ఫోల్డర్‌లు ఇన్‌స్టాలేషన్ సర్వర్ నుండి మౌంట్ చేయబడతాయి మరియు అవసరమైన ప్రతిదీ లోడ్ చేయబడుతుంది (యుటిలిటీస్, ఫర్మ్‌వేర్ మొదలైనవి).

ఏ వినియోగాలు మరియు సర్వర్‌ను ఎలా కాన్ఫిగర్ చేయాలి?

నేను కొంతమంది తయారీదారుల కోసం Linux కోసం యుటిలిటీలను అందిస్తాను. అన్ని యుటిలిటీలు విక్రేతల అధికారిక వెబ్‌సైట్‌లలో అందుబాటులో ఉన్నాయి.

డూ-ఇట్-మీరే బేర్-మెటల్ ప్రొవిజనింగ్, లేదా స్క్రాచ్ నుండి సర్వర్‌ల స్వయంచాలక తయారీ

ఫర్మ్‌వేర్‌తో, ప్రతిదీ స్పష్టంగా ఉందని నేను భావిస్తున్నాను. అవి సాధారణంగా ప్యాక్ చేయబడిన ఎక్జిక్యూటబుల్ ఫైల్స్ రూపంలో వస్తాయి. ఎక్జిక్యూటబుల్ ఫైల్ ఫర్మ్‌వేర్ నవీకరణ ప్రక్రియను నియంత్రిస్తుంది మరియు రిటర్న్ కోడ్‌ను నివేదిస్తుంది.

BIOS మరియు IPMI సాధారణంగా టెంప్లేట్‌ల ద్వారా కాన్ఫిగర్ చేయబడతాయి. అవసరమైతే, డౌన్‌లోడ్ చేయడానికి ముందు టెంప్లేట్‌ను సవరించవచ్చు.

కొంతమంది విక్రేతల నుండి RAID యుటిలిటీలను కూడా టెంప్లేట్ ఉపయోగించి కాన్ఫిగర్ చేయవచ్చు. ఇది సందర్భం కాకపోతే, మీరు కాన్ఫిగరేషన్ స్క్రిప్ట్‌ను వ్రాయవలసి ఉంటుంది.

RAIDని సెటప్ చేసే విధానం చాలా తరచుగా క్రింది విధంగా ఉంటుంది:

  • మేము ప్రస్తుత కాన్ఫిగరేషన్‌ను అభ్యర్థిస్తున్నాము.
  • ఇప్పటికే లాజికల్ శ్రేణులు ఉంటే, మేము వాటిని చెరిపివేస్తాము.
  • భౌతిక డిస్క్‌లు ఏవి ఉన్నాయి మరియు ఎన్ని ఉన్నాయో చూద్దాం.
  • కొత్త తార్కిక శ్రేణిని సృష్టించండి. లోపం సంభవించినప్పుడు మేము ప్రక్రియకు అంతరాయం కలిగిస్తాము.

నిర్దిష్ట సర్వర్ కోసం సెట్టింగ్‌లను ఎలా పొందాలి?

అన్ని సర్వర్‌ల సెట్టింగ్‌లు ఇన్‌స్టాలేషన్ సర్వర్‌లో నిల్వ చేయబడతాయని అనుకుందాం. ఈ సందర్భంలో, మా ప్రశ్నకు సమాధానం ఇవ్వడానికి, మేము ముందుగా సెట్టింగులను ఇన్‌స్టాలేషన్ సర్వర్‌కు ఎలా బదిలీ చేయాలో నిర్ణయించుకోవాలి.

మొదట, మీరు టెక్స్ట్ ఫైల్‌లతో పొందవచ్చు. (భవిష్యత్తులో, మీరు సెట్టింగ్‌లను బదిలీ చేయడానికి ఫాల్‌బ్యాక్ పద్ధతిగా టెక్స్ట్ ఫైల్‌ని ఉపయోగించాలనుకోవచ్చు.)

మీరు ఇన్‌స్టాలేషన్ సర్వర్‌లో టెక్స్ట్ ఫైల్‌ను "షేర్" చేయవచ్చు. మరియు దాని మౌంట్‌ని mount.sh స్క్రిప్ట్‌కు జోడించండి.

పంక్తులు, ఉదాహరణకు, ఇలా కనిపిస్తాయి:

ఈ పంక్తులు ఇంజనీర్ తన పని యంత్రం నుండి ఫైల్‌కి బదిలీ చేయబడతాయి. ఆపై, సర్వర్‌ను సెటప్ చేసినప్పుడు, నిర్దిష్ట సర్వర్ కోసం పారామితులు ఫైల్ నుండి చదవబడతాయి.

కానీ, దీర్ఘకాలికంగా, సర్వర్ ఇన్‌స్టాలేషన్‌ల సెట్టింగ్‌లు, స్టేట్‌లు మరియు లాగ్‌లను నిల్వ చేయడానికి డేటాబేస్ను ఉపయోగించడం మంచిది.

వాస్తవానికి, డేటాబేస్ మాత్రమే సరిపోదు మరియు మీరు డేటాబేస్కు బదిలీ చేయబడే సెట్టింగుల సహాయంతో క్లయింట్ భాగాన్ని సృష్టించాలి. టెక్స్ట్ ఫైల్‌తో పోలిస్తే ఇది అమలు చేయడం చాలా కష్టం, కానీ వాస్తవానికి, ప్రతిదీ కనిపించేంత కష్టం కాదు. క్లయింట్ యొక్క కనిష్ట సంస్కరణను వ్రాయడం చాలా సాధ్యమే, అది మీ స్వంత డేటాబేస్కు డేటాను బదిలీ చేస్తుంది. మరియు భవిష్యత్తులో క్లయింట్ ప్రోగ్రామ్‌ను ఉచిత మోడ్‌లో మెరుగుపరచడం సాధ్యమవుతుంది (నివేదికలు, ప్రింటింగ్ లేబుల్‌లు, నోటిఫికేషన్‌లను పంపడం మొదలైనవి గుర్తుకు వస్తాయి).

డేటాబేస్కు నిర్దిష్ట అభ్యర్థన చేయడం మరియు సర్వర్ క్రమ సంఖ్యను పేర్కొనడం ద్వారా, మేము సర్వర్‌ను కాన్ఫిగర్ చేయడానికి అవసరమైన పారామితులను అందుకుంటాము.

అదనంగా, మేము టెక్స్ట్ ఫైల్‌లో లాగా ఏకకాల యాక్సెస్ కోసం లాక్‌లను రూపొందించాల్సిన అవసరం లేదు.

మేము అన్ని దశలలో డేటాబేస్కు కాన్ఫిగరేషన్ లాగ్‌ను వ్రాయవచ్చు మరియు తయారీ దశల ఈవెంట్‌లు మరియు ఫ్లాగ్‌ల ద్వారా ఇన్‌స్టాలేషన్ ప్రక్రియను నియంత్రించవచ్చు.

ఇప్పుడు మనకు ఎలా తెలుసు:

  • PXE ద్వారా సర్వర్‌ను బూట్ చేయండి;
  • మా స్క్రిప్ట్‌కు నియంత్రణను బదిలీ చేయండి;
  • దాని క్రమ సంఖ్య ద్వారా సిద్ధం చేయవలసిన సర్వర్‌ను గుర్తించండి;
  • తగిన వినియోగాలను ఉపయోగించి సర్వర్‌ను కాన్ఫిగర్ చేయండి;
  • క్లయింట్ భాగాన్ని ఉపయోగించి ఇన్‌స్టాలేషన్ సర్వర్ డేటాబేస్‌కు సెట్టింగ్‌లను బదిలీ చేయండి.

మేము ఎలా కనుగొన్నాము:

  • వ్యవస్థాపించిన సర్వర్ డేటాబేస్ నుండి అవసరమైన సెట్టింగులను అందుకుంటుంది;
  • అన్ని తయారీ పురోగతి డేటాబేస్‌లో నమోదు చేయబడుతుంది (లాగ్‌లు, ఈవెంట్‌లు, స్టేజ్ ఫ్లాగ్‌లు).

మీరు ఇన్‌స్టాల్ చేసిన వివిధ రకాల సాఫ్ట్‌వేర్‌ల గురించి ఏమిటి? హైపర్‌వైజర్‌ను ఇన్‌స్టాల్ చేయడం, VMని కాపీ చేయడం మరియు అన్నింటినీ కాన్ఫిగర్ చేయడం ఎలా?

హార్డ్‌వేర్‌కు ఫైల్ సిస్టమ్ ఇమేజ్ (linux)ని అమలు చేసే విషయంలో, ప్రతిదీ చాలా సులభం:

  • అన్ని సర్వర్ భాగాలను సెటప్ చేసిన తర్వాత, మేము చిత్రాన్ని అమలు చేస్తాము.
  • grub బూట్‌లోడర్‌ను ఇన్‌స్టాల్ చేయండి.
  • మేము అవసరమైన ప్రతిదాన్ని క్రోట్ చేసి కాన్ఫిగర్ చేస్తాము.

OS ఇన్‌స్టాలర్‌కు నియంత్రణను ఎలా బదిలీ చేయాలి (ESXiని ఉదాహరణగా ఉపయోగించడం).

  • మేము ఆటోమేటిక్ రెస్పాన్స్ ఫైల్ (కిక్‌స్టార్ట్) ఉపయోగించి మా స్క్రిప్ట్ నుండి హైపర్‌వైజర్ ఇన్‌స్టాలర్‌కి నియంత్రణ బదిలీని నిర్వహిస్తాము:
  • మేము డిస్క్‌లోని ప్రస్తుత విభజనలను తొలగిస్తాము.
  • 500MB పరిమాణంతో విభజనను సృష్టించండి.
  • మేము దానిని బూటబుల్‌గా గుర్తించాము.
  • FAT32కి ఫార్మాట్ చేయండి.
  • మేము ESXi ఇన్‌స్టాలేషన్ ఫైల్‌లను రూట్‌కి కాపీ చేస్తాము.
  • syslinuxని ఇన్‌స్టాల్ చేస్తోంది.
  • syslinux.cfgని /syslinux/కి కాపీ చేయండి

default esxi
prompt 1
timeout 50
label esxi
kernel mboot.c32
append -c boot.cfg

  • mboot.c32ని /syslinuxకి కాపీ చేయండి.
  • boot.cfgలో kernelopt=ks=ftp:///ks_esxi.cfg ఉండాలి
  • సర్వర్‌ని రీబూట్ చేయండి.

సర్వర్ రీబూట్ అయిన తర్వాత, ESXi ఇన్‌స్టాలర్ సర్వర్ హార్డ్ డ్రైవ్ నుండి డౌన్‌లోడ్ అవుతుంది. అవసరమైన అన్ని ఇన్‌స్టాలర్ ఫైల్‌లు మెమరీలోకి లోడ్ చేయబడతాయి మరియు పేర్కొన్న ఆటో-రెస్పాన్స్ ఫైల్ ప్రకారం ESXi ఇన్‌స్టాలేషన్ ప్రారంభమవుతుంది.

స్వీయ స్పందన ఫైల్ ks_esxi.cfg నుండి ఇక్కడ కొన్ని పంక్తులు ఉన్నాయి:

%firstboot --interpreter=busybox
…
# получаем серийный номер

SYSSN=$(esxcli hardware platform get | grep Serial | awk -F " " '{print $3}')

# получаем IP

IPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F " " '{print $2}')
LAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')

# подключаем NFS инсталл-сервера

esxcli storage nfs add -H is -s /srv/nfs_share -v nfsshare1

# копируем временные настройки ssh, для использования ssh-клиента

mv /etc/ssh /etc/ssh.tmp
cp -R /vmfs/volumes/nfsshare1/ssh /etc/
chmod go-r /etc/ssh/ssh_host_rsa_key

# копируем ovftool, для развертывания ВМ сейчас, плюс возможно пригодится позже

cp -R /vmfs/volumes/nfsshare1/ovftool /vmfs/volumes/datastore1/

# развертываем ВМ

/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM1 /vmfs/volumes/nfsshare1/VM_T/VM1.ova vi://root:[email protected]
/vmfs/volumes/datastore1/ovftool/tools/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM2 /vmfs/volumes/nfsshare1/VM_T/VM2.ova vi://root:[email protected]

# получаем строку с настройками нашего сервера

ssh root@is "mysql -h'192.168.0.1' -D'servers' -u'user' -p'secretpassword' -e "SELECT ... WHERE servers.serial='$SYSSN'"" | grep -v ^$ | sed 's/NULL//g' > /tmp/servers
...
# генерируем скрипт настройки сети

echo '#!/bin/sh' > /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip interface ipv4 set -i=vmk0 -t=static --ipv4=$IPADDR --netmask=$S_SUB || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
echo "esxcli network ip route ipv4 add -g=$S_GW -n=default || exit 1" >> /vmfs/volumes/datastore1/netconf.sh
chmod a+x /vmfs/volumes/datastore1/netconf.sh

# задаем параметр guestinfo.esxihost.id, указываем в нем серийный номер

echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM1/VM1.vmx
echo "guestinfo.esxihost.id = "$SYSSN"" >> /vmfs/volumes/datastore1/VM2/VM2.vmx
...
# обновляем информацию в базе

SYSNAME=$(esxcli hardware platform get | grep Product | sed 's/Product Name://' | sed 's/^ *//')
UUID=$(vim-cmd hostsvc/hostsummary | grep uuid | sed 's/ //g;s/,$//' | sed 's/^uuid="//;s/"$//')
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "UPDATE servers ... SET ... WHERE servers.serial='$SYSSN'""
ssh root@is "mysql -D'servers' -u'user' -p'secretpassword' -e "INSERT INTO events ...""

# возвращаем настройки SSH

rm -rf /etc/ssh
mv /etc/ssh.tmp /etc/ssh

# настраиваем сеть и перезагружаемся

esxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru
/vmfs/volumes/datastore1/netconf.sh
reboot

ఈ దశలో, హైపర్‌వైజర్ ఇన్‌స్టాల్ చేయబడింది మరియు కాన్ఫిగర్ చేయబడుతుంది మరియు వర్చువల్ మిషన్లు కాపీ చేయబడతాయి.

ఇప్పుడు వర్చువల్ మిషన్లను కాన్ఫిగర్ చేయడం ఎలా?

మేము కొంచెం మోసం చేసాము: ఇన్‌స్టాలేషన్ సమయంలో మేము VM1.vmx ఫైల్‌లో guestinfo.esxihost.id = "$SYSSN" పరామితిని సెట్ చేసాము మరియు దానిలోని ఫిజికల్ సర్వర్ యొక్క క్రమ సంఖ్యను సూచించాము.

ఇప్పుడు, ప్రారంభించిన తర్వాత, వర్చువల్ మిషన్ (vmware-టూల్స్ ప్యాకేజీ ఇన్‌స్టాల్ చేయబడి) ఈ పరామితిని యాక్సెస్ చేయగలదు:

ESXI_SN=$(vmtoolsd --cmd "info-get guestinfo.esxihost.id")

అంటే, VM తనను తాను గుర్తించగలుగుతుంది (ఇది భౌతిక హోస్ట్ యొక్క క్రమ సంఖ్యను తెలుసు), ఇన్‌స్టాలేషన్ సర్వర్ డేటాబేస్‌కు అభ్యర్థన చేసి మరియు కాన్ఫిగర్ చేయవలసిన పారామితులను స్వీకరించగలదు. ఇదంతా స్క్రిప్ట్‌గా కంపైల్ చేయబడింది, ఇది గెస్టోస్ vm ప్రారంభమైనప్పుడు స్వయంచాలకంగా ప్రారంభించబడుతుంది (కానీ ఒకసారి: RunOnce).

ఇప్పుడు మనకు ఎలా తెలుసు:

  • PXE ద్వారా సర్వర్‌ను బూట్ చేయండి;
  • మా స్క్రిప్ట్‌కు నియంత్రణను బదిలీ చేయండి;
  • దాని క్రమ సంఖ్య ద్వారా సిద్ధం చేయవలసిన సర్వర్‌ను గుర్తించండి;
  • తగిన వినియోగాలను ఉపయోగించి సర్వర్‌ను కాన్ఫిగర్ చేయండి;
  • క్లయింట్ భాగాన్ని ఉపయోగించి ఇన్‌స్టాలేషన్ సర్వర్ డేటాబేస్‌కు సెట్టింగ్‌లను బదిలీ చేయండి;
  • esxi హైపర్‌వైజర్‌ని అమలు చేయడం మరియు వర్చువల్ మిషన్‌లను కాన్ఫిగర్ చేయడంతో సహా వివిధ రకాల సాఫ్ట్‌వేర్‌లను కాన్ఫిగర్ చేయండి (అన్నీ స్వయంచాలకంగా).

మేము ఎలా కనుగొన్నాము:

  • వ్యవస్థాపించిన సర్వర్ డేటాబేస్ నుండి అవసరమైన సెట్టింగులను అందుకుంటుంది;
  • అన్ని తయారీ పురోగతి డేటాబేస్‌లో నమోదు చేయబడుతుంది (లాగ్‌లు, ఈవెంట్‌లు, స్టేజ్ ఫ్లాగ్‌లు).


బాటమ్ లైన్:

ఈ పరిష్కారం యొక్క ప్రత్యేకత దాని వశ్యత, సరళత, సామర్థ్యాలు మరియు బహుముఖ ప్రజ్ఞలో ఉందని నేను నమ్ముతున్నాను.

దయచేసి మీరు ఏమనుకుంటున్నారో వ్యాఖ్యలలో వ్రాయండి.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి