برنامه نویسی

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

این یک یادداشت بازسازی شده است.

امروزه بسیاری از ما به جای ساختن یک خوشه خود مدیریت شده ، از خوشه ابر لذت خواهیم برد ، زیرا این امر کمتر مدیریت ، در دسترس بودن بالا ، ایمن تر ، پرداخت-به عنوان شما و تمام مزایایی است که می توانید در مورد محاسبات ابری فکر کنید. با این حال ، اگر به طور تصادفی چندین رایانه قدیمی را در اختیار دارید ، و نمی خواهید آنها را بفروشید/انتقال دهید و نمی دانید چگونه با آنها برخورد کنید ، یک خوشه با مدیریت خانگی انتخاب خوبی خواهد بود. یک خوشه خود مدیریت شده بسیار سرگرم کننده است.

معماری

بیایید معماری خود را در اینجا تعریف کنیم: 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 محلی

  1. از آنجا که گره کارگر دسترسی به اینترنت نخواهد داشت ، ما آنها را در داخل خصوصی نگه می داریم ، بنابراین ، برای نصب بسته ، به روزرسانی ، باید راهی برای حل این موارد پیدا کنیم.

  2. ما می خواهیم بسته های موجود در 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 اختیاری برای مدیریت بسته

به منظور تحقق

  1. به روزرسانی بسته گره کارگر

  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
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این قانون در حال رسیدگی به ترافیک بازگشت است ، زیرا:

  1. هنگامی که یک گره کارگر یک اتصال را آغاز می کند ، بسته برون مرزی ورودی را در جدول ردیابی اتصال ایجاد می کند (ایجاد یک اتصال مستقر)

  2. هر بسته برگشتی مرتبط با آن اتصال ، مشخص شده است

  3. قانون فوق بدون در نظر گرفتن رابط ، تمام اتصالات تعیین شده را از طریق آن اجازه می دهد

این امن تر از صریح و صریح است که به همه ترافیک اجازه می دهد eth0 به eth1، زیرا فقط امکان ترافیک بازگشت برای اتصالات را که از داخل خوشه ما آغاز شده است ، امکان پذیر است.

اگر این قانون ردیابی دولت وجود نداشت ، ما کاملاً به قانون ترافیک عقب مانده نیاز داریم. بدون هیچ رویکردی ، اتصالات فقط یک طرفه کار می کنند ، این بدان معنی است که گره های کارگر می توانند درخواست ارسال کنند ، اما هرگز پاسخ دریافت نمی کنند …

جریان اتصال

بیایید یک درخواست وب را از یک گره کارگر ردیابی کنیم:

  1. کارگر (192.168.10.2) سعی می کند به Google.com دسترسی پیدا کند
  2. سفرهای بسته: کارگر → استاد eth1
  3. چک های استاد به جلو زنجیره ای ، مسابقات -i eth1 -s 192.168.10.0/24 -o eth0 قاعده
  4. استاد اجرا می کند خلوتبا تغییر IP منبع به IP عمومی خود
  5. بسته های بسته بندی شده eth0 برای ایجاد شبکه
  6. Google به IP عمومی استاد پاسخ می دهد
  7. بسته به استاد می رسد eth0
  8. جدول ردیابی اتصال را بررسی می کند ، می بیند که این یک پاسخ است
  9. بسته به عنوان مشخص شده است مستقر
  10. چک های استاد به جلو زنجیره ای ، با قانون تعیین شده مطابقت دارد
  11. Master NAT معکوس را انجام می دهد و مقصد را به IP کارگر تغییر می دهد
  12. بسته از طریق ETH1 به کارگر می رود
  13. کارگر پاسخ دریافت می کند

جزئیات بیشتر

جزئیات بیشتر می تواند پست را قبل از اینجا بررسی کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا