پیکربندی شبکه خوشه خانه خود: یک راهنمای کامل

این یک یادداشت بازسازی شده است.
امروزه بسیاری از ما به جای ساختن یک خوشه خود مدیریت شده ، از خوشه ابر لذت خواهیم برد ، زیرا این امر کمتر مدیریت ، در دسترس بودن بالا ، ایمن تر ، پرداخت-به عنوان شما و تمام مزایایی است که می توانید در مورد محاسبات ابری فکر کنید. با این حال ، اگر به طور تصادفی چندین رایانه قدیمی را در اختیار دارید ، و نمی خواهید آنها را بفروشید/انتقال دهید و نمی دانید چگونه با آنها برخورد کنید ، یک خوشه با مدیریت خانگی انتخاب خوبی خواهد بود. یک خوشه خود مدیریت شده بسیار سرگرم کننده است.
معماری
بیایید معماری خود را در اینجا تعریف کنیم: 4 گره: 1 استاد/کارگر ، 3 کارگر
1. گره اصلی
پیکربندی رابط شبکه ETH0 و ETH1
# Configure public interface (assumes DHCP from institute network)
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
TYPE=Ethernet
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
# Request static IP from our institute's DHCP server if possible
# This makes routing more reliable
DHCP_CLIENT_ID=cluster-master
EOF
# Configure private cluster network
cat > /etc/sysconfig/network-scripts/ifcfg-eth1 << EOF
TYPE=Ethernet
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.10.1
NETMASK=255.255.255.0
ONBOOT=yes
EOF
# Apply new network configuration
systemctl restart network
خلوت
# Enable IP forwarding persistently
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# Enable connection tracking timeout optimization for HPC workloads
echo "net.netfilter.nf_conntrack_tcp_timeout_established = 86400" >> /etc/sysctl.conf
echo "net.netfilter.nf_conntrack_max = 131072" >> /etc/sysctl.conf
# Apply sysctl changes
sysctl -p
# Set up NAT with higher connection limits
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADE
آخرین فرمان مهم است ، زیرا به ترافیک بازگشت کمک می کند. بعداً توضیح خواهیم داد.
فایروال را تنظیم کنید
# Clear existing rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Set default policies
iptables -P INPUT DROP
iptables -P FORWARD DROP # We'll explain this choice
iptables -P OUTPUT ACCEPT
# Allow loopback
iptables -A INPUT -i lo -j ACCEPT
# Allow established and related connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow SSH from institute network
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# Allow all traffic from the cluster's private network
iptables -A INPUT -i eth1 -s 192.168.10.0/24 -j ACCEPT
# Allow forwarding from cluster to internet
iptables -A FORWARD -i eth1 -s 192.168.10.0/24 -o eth0 -j ACCEPT
# Allow HTTP/HTTPS for package downloads
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
# Set up local package caching repository later (optional)
iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
# Save iptables rules
iptables-save > /etc/sysconfig/iptables
من خط مشی پیش فرض رو به جلو را به دلایل امنیتی تنظیم کردم:
-
این مانع از عبور ترافیک غیرمجاز از گره اصلی می شود
-
این یک موضع پیش فرض و دن
-
اگر یک گره به خطر بیفتد ، از حرکت جانبی بالقوه جلوگیری می کند
2. گره های کارگر
پیکربندی
# Worker node 1 (192.168.10.2)
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF
TYPE=Ethernet
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.10.2
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DNS1=8.8.8.8
ONBOOT=yes
EOF
# here GATEWAY will auto generate the route rule in table
# Worker node 2 (192.168.10.3)
# Change IPADDR=192.168.10.3 on the second worker node
# Worker node 3 (192.168.10.4)
# Change IPADDR=192.168.10.4 on the third worker node
# Restart network service on each worker node
systemctl restart network
پیکربندی مسیریابی برای گره های کارگر
همانطور که از گره اصلی استفاده می کنیم eth1
(192.168.10.1
) به عنوان دروازه گره های کاری (GATEWAY=192.168.10.1
) ، تنظیم بالاتر یک مسیر پیش فرض را در هر گره کارگر ایجاد می کند که تمام ترافیکی را که برای شبکه محلی (192.168.10.0/24) به دست نمی آید به گره اصلی (192.168.10.1) ارسال می کند.
$ route -n
# see the result: (send all traffic (0.0.0.0/0) to gateway 192.168.10.1)
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
فرمان دستی
استفاده از دستور دستی نیز می تواند به همان نتیجه برسد.
route add -net 0.0.0.0 gw 192.168.10.1
این به صورت دستی یک مسیر پیش فرض را به جدول مسیریابی فعلی اضافه می کند. این همان اثر فوری را با تنظیم پرونده پیکربندی دارد ، اما موقتی است و پس از راه اندازی مجدد راه اندازی مجدد یا سرویس شبکه از بین می رود.
تفاوت در درجه اول در پایداری و هنگامی که پیکربندی اتفاق می افتد است. استفاده از فایل پیکربندی شبکه روش استاندارد برای تنظیم مسیرهای دائمی در سیستم های CentOS/RHEL است.
دیوار آتش
# Clear existing rules
iptables -F
iptables -X
# Set default policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Allow loopback
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow SSH from cluster nodes only
iptables -A INPUT -p tcp --dport 22 -s 192.168.10.0/24 -j ACCEPT
# HPC/MPI Communication - comprehensive approach
# Allow all TCP/UDP between cluster nodes for parallel computing
# this is optinal if you don't want do parallel computing
iptables -A INPUT -s 192.168.10.0/24 -p tcp -j ACCEPT
iptables -A INPUT -s 192.168.10.0/24 -p udp -j ACCEPT
# Save iptables rules
iptables-save > /etc/sysconfig/iptables
systemctl enable iptables
3. مدیریت بسته
3.1 repo yum محلی
-
از آنجا که گره کارگر دسترسی به اینترنت نخواهد داشت ، ما آنها را در داخل خصوصی نگه می داریم ، بنابراین ، برای نصب بسته ، به روزرسانی ، باید راهی برای حل این موارد پیدا کنیم.
-
ما می خواهیم بسته های موجود در yum repo خود را مشخص کنیم
بنابراین در اینجا ما یک repo yum محلی ایجاد می کنیم
# On master node
# Install required packages
yum install -y createrepo nginx
# Create repository directory
mkdir -p /var/www/html/centos-repo
# Configure Nginx
cat > /etc/nginx/conf.d/repo.conf << EOF
server {
listen 80;
server_name _;
root /var/www/html;
location / {
autoindex on;
}
}
EOF
# Start and enable Nginx
systemctl enable nginx
systemctl start nginx
# Download packages to repository
yum install -y yum-utils
repotrack -p /var/www/html/centos-repo
# Repeat for packages we need
# Create repository metadata
createrepo /var/www/html/centos-repo
# Configure worker nodes to use this repository
cat > /etc/yum.repos.d/cluster-local.repo << EOF
[cluster-local]
name=Cluster Local Repository
baseurl=http://192.168.10.1/centos-repo
enabled=1
gpgcheck=0
EOF
3.2 اختیاری برای مدیریت بسته
به منظور تحقق
-
به روزرسانی بسته گره کارگر
-
بسته های خود مدیریت شده
ما همچنین می توانیم از SCP برای انتقال بسته از Master Node استفاده کنیم.
# On master node, download and transfer RPM
yum install -y yum-utils
yumdownloader
scp .rpm 192.168.10.1:/tmp/
# On worker node
sudo rpm -ivh /tmp/.rpm
3.3 گره کارگر را مستقیماً به اینترنت هدایت کنید
اگر به امنیت بالایی احتیاج نداریم ، می توانیم خوشه خصوصی را به اینترنت عمومی باز کنیم. که جدول روتر را پیکربندی می کند و ما در اینجا بحث نمی کنیم.
4. نصب های دیگر
پیکربندی SSH
# On master node, generate SSH key
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""
# Copy the key to all nodes (including itself)
for i in {1..4}; do
ssh-copy-id -i ~/.ssh/id_rsa.pub 10.10.10.$i
done
# Do the same on each worker node to allow any-to-any communication
# (Run similar commands on each worker node)
مانیتور شبکه و ورود به سیستم iptables
# Install tools
yum install -y tcpdump nmap iftop
# Set up automatic monitoring with fail2ban to prevent brute force attacks
yum install -y fail2ban
cat > /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 5
bantime = 3600
EOF
# Start and enable fail2ban
systemctl enable fail2ban
systemctl start fail2ban
# Add logging rules before the final DROP rules
iptables -A INPUT -j LOG --log-prefix "IPTables-Input-Dropped: " --log-level 4
iptables -A FORWARD -j LOG --log-prefix "IPTables-Forward-Dropped: " --log-level 4
# Save iptables rules
iptables-save > /etc/sysconfig/iptables
پیکربندی محاسبات موازی اختیاری
# On all nodes (master and workers)
# Install OpenMPI
yum install -y openmpi openmpi-devel
# Configure environment in /etc/profile.d/
cat > /etc/profile.d/mpi.sh << EOF
export PATH=\$PATH:/usr/lib64/openmpi/bin
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/lib64/openmpi/lib
EOF
# Source the new environment
source /etc/profile.d/mpi.sh
# Test MPI communication
# Create a hostfile
cat > /home/username/hostfile << EOF
192.168.10.1 slots=128
192.168.10.2 slots=128
192.168.10.3 slots=128
192.168.10.4 slots=128
EOF
# Run a simple MPI test
mpirun -np 4 --hostfile /home/username/hostfile hostname
گشتاور/PBS
# Install Torque on master node
yum install -y torque-server torque-scheduler torque-client
# Configure server nodes file
cat > /var/torque/server_priv/nodes << EOF
192.168.10.1 np=128
192.168.10.2 np=128
192.168.10.3 np=128
192.168.10.4 np=128
EOF
# Start Torque server
systemctl enable pbs_server
systemctl start pbs_server
# Install Torque on worker nodes
for i in {2..4}; do
ssh 192.168.10.$i "yum install -y torque-mom torque-client; systemctl enable pbs_mom; systemctl start pbs_mom"
done
5. جریان ترافیک:
جریان ترافیک زنجیره ای رو به جلو در هر دو جهت
وقتی زنجیره رو به جلو را ایجاد می کنیم ، iptables -A FORWARD -i eth1 -s 192.168.10.0/24 -o eth0 -j ACCEPT
، این دستور اجازه می دهد تا ترافیک وارد شود eth1
می تواند به جلو باشد eth0
، این به معنای ترافیک از گره های کارگر به گره های استاد است و گره های اصلی آن را برای ایجاد اینترنت به جلو می برد. در اینجا سوال مطرح می شود ، جریان عقب کجاست؟
iptables -A FORWARD -i eth1 -s 192.168.10.0/24 -o eth0 -j ACCEPT
بیایید ببینیم که چگونه ترافیک ابتدا جریان می یابد.
ترافیک برون مرزی (کارگر → اینترنت)
قانون فوق به بسته ها اجازه می دهد تا از گره های کارگر حرکت کنند (روشن می شوند eth1
) برای ارسال به شبکه موسسه (از طریق eth0
). این نیمه اول هرگونه اتصال را که درخواست برون مرزی است ، کنترل می کند.
ترافیک بازگشت (اینترنت → کارگر)
برای ترافیک بازگشت ، به طور معمول فکر خواهیم کرد که به آنچه نیاز داریم:
iptables -A FORWARD -i eth0 -d 192.168.10.0/24 -o eth1 -j ACCEPT
با این حال ، اگر از نزدیک به پیکربندی اصلی نگاه کنیم ، این دستور است:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
این قانون در حال رسیدگی به ترافیک بازگشت است ، زیرا:
-
هنگامی که یک گره کارگر یک اتصال را آغاز می کند ، بسته برون مرزی ورودی را در جدول ردیابی اتصال ایجاد می کند (ایجاد یک اتصال مستقر)
-
هر بسته برگشتی مرتبط با آن اتصال ، مشخص شده است
-
قانون فوق بدون در نظر گرفتن رابط ، تمام اتصالات تعیین شده را از طریق آن اجازه می دهد
این امن تر از صریح و صریح است که به همه ترافیک اجازه می دهد eth0
به eth1
، زیرا فقط امکان ترافیک بازگشت برای اتصالات را که از داخل خوشه ما آغاز شده است ، امکان پذیر است.
اگر این قانون ردیابی دولت وجود نداشت ، ما کاملاً به قانون ترافیک عقب مانده نیاز داریم. بدون هیچ رویکردی ، اتصالات فقط یک طرفه کار می کنند ، این بدان معنی است که گره های کارگر می توانند درخواست ارسال کنند ، اما هرگز پاسخ دریافت نمی کنند …
جریان اتصال
بیایید یک درخواست وب را از یک گره کارگر ردیابی کنیم:
- کارگر (192.168.10.2) سعی می کند به Google.com دسترسی پیدا کند
- سفرهای بسته: کارگر → استاد
eth1
- چک های استاد به جلو زنجیره ای ، مسابقات
-i eth1 -s 192.168.10.0/24 -o eth0
قاعده - استاد اجرا می کند خلوتبا تغییر IP منبع به IP عمومی خود
- بسته های بسته بندی شده
eth0
برای ایجاد شبکه - Google به IP عمومی استاد پاسخ می دهد
- بسته به استاد می رسد
eth0
- جدول ردیابی اتصال را بررسی می کند ، می بیند که این یک پاسخ است
- بسته به عنوان مشخص شده است مستقر
- چک های استاد به جلو زنجیره ای ، با قانون تعیین شده مطابقت دارد
- Master NAT معکوس را انجام می دهد و مقصد را به IP کارگر تغییر می دهد
- بسته از طریق ETH1 به کارگر می رود
- کارگر پاسخ دریافت می کند
جزئیات بیشتر
جزئیات بیشتر می تواند پست را قبل از اینجا بررسی کند.