Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

ሰላም ሁላችሁም! እንደ የኮርስ ስራዬ፣ እንደ የሀገር ውስጥ የደመና መድረክ አቅምን መርምሬያለሁ Yandex.Cloud. መድረኩ ተግባራዊ ችግሮችን ለመፍታት የተለያዩ አገልግሎቶችን ይሰጣል። ሆኖም፣ አንዳንድ ጊዜ በእነዚህ አገልግሎቶች ላይ ተመስርተው በተገቢው ሰፊ መሠረተ ልማት የራስዎን የደመና መተግበሪያ ማዘጋጀት ያስፈልግዎታል። በዚህ ጽሑፍ ውስጥ እንዲህ ዓይነቱን መተግበሪያ በማሰማራት ረገድ ያለኝን ልምድ ማካፈል እፈልጋለሁ.

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

ምን መቀበል ይፈልጋሉ?

ግራፋና - የትንታኔ ችግሮችን ለመፍታት ወይም የማንኛውንም ስርዓቶች ችግሮችን ለመቆጣጠር ኃይለኛ መሳሪያ። በመሠረታዊ አወቃቀሩ ውስጥ፣ ይህ የግራፋና ድር አገልጋይ ያለው ቨርቹዋል ማሽን፣ እንዲሁም ዳታቤዝ (ክሊክ ሃውስ፣ ኢንፍሉክስዲቢ፣ ወዘተ) ትንታኔዎች የሚመሰረቱበት ዳታ ስብስብ ነው።

ቨርቹዋል ማሽንን ከድር አገልጋይ ጋር ከጀመርክ በኋላ ወደ አስተናጋጁ ሄደህ የሚያምር UI ማግኘት ትችላለህ፣ የውሂብ ጎታዎችን ለቀጣይ ስራ እንደ ምንጭ መግለፅ፣ ዳሽቦርዶችን እና ግራፎችን መፍጠር ትችላለህ።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

የመሠረታዊው ስሪት አንድ ጉልህ ጉድለት አለው - በጭራሽ ስህተትን የሚቋቋም አይደለም። ያም ማለት የመተግበሪያው አጠቃላይ ተግባር በአንድ ምናባዊ ማሽን ላይ የተመሰረተ ነው. እምቢ ካለ ወይም 10 ሰዎች በተመሳሳይ ጊዜ UI ን ከከፈቱ ችግሮች ይከሰታሉ።

በቀላሉ ሊፈቱ ይችላሉ፡ እርስዎ ብቻ... ብዙ ተመሳሳይ ምናባዊ ማሽኖችን ከድር አገልጋይ ጋር ማሰማራት እና በ L3 ሚዛን ስር ማስቀመጥ ያስፈልግዎታል። ግን እዚህ ሁሉም ነገር ግልጽ አይደለም. ግራፋና የተጠቃሚ ቅንብሮችን (ወደ ዳታቤዝ ዱካዎች፣ ዳሽቦርዶች፣ ግራፎች፣ ወዘተ) በቀጥታ በቨርቹዋል ማሽኑ ዲስክ ላይ ያከማቻል። ስለዚህ በዩአይ ውስጥ አንዳንድ ቅንብሮችን ከቀየርን እነዚህ ለውጦች ሚዛኑ በላከልንበት ምናባዊ ማሽን ላይ ብቻ ይንጸባረቃሉ። ይህ ለመተግበሪያችን ወጥነት የሌላቸው ቅንብሮችን ያመጣል፣ በማስጀመር እና አጠቃቀም ላይ ችግር ይፈጥራል።

እዚህ ሌላ የውሂብ ጎታ ለማዳን ይመጣል፣ ለምሳሌ፣ MySQL ወይም ተመሳሳይ። ለግራፋና የተጠቃሚ ቅንጅቶችን በዚህ "መለዋወጫ" የውሂብ ጎታ ውስጥ ማከማቸት እንዳለባት እንነግራለን። ከዚያ በኋላ በእያንዳንዱ ማሽን ላይ ወደዚህ ዳታቤዝ የሚወስደውን መንገድ አንድ ጊዜ መጥቀስ በቂ ይሆናል፣ እና ሁሉንም የተጠቃሚ መቼቶች በማንኛውም ቨርቹዋል ማሽኖች ላይ ያርትዑ፤ ወደሌሎቹም ይዘልቃሉ።

የመጨረሻው የትግበራ መሠረተ ልማት ንድፍ ይኸውና:

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

በእጃችን ማንሳትን እንማር

MySQL እና ClickHouse

እንዲህ ዓይነቱን መተግበሪያ በአንድ ቁልፍ ጠቅ ከማድረግዎ በፊት እያንዳንዱን አካላት እንዴት እንደሚይዙ እና እርስ በእርስ እንዴት እንደሚዋሃዱ መማር አስፈላጊ ነበር።

እዚህ Yandex.Cloud ይረዳናል, እሱም L3 balancers, ClickHouse እና MySQL እንደ የሚተዳደሩ አገልግሎቶች ያቀርባል. ተጠቃሚው መለኪያዎቹን ብቻ መግለጽ እና የመሳሪያ ስርዓቱ ሁሉንም ነገር ወደ ሥራው እስኪያመጣ ድረስ መጠበቅ አለበት.

ተመዝግቤያለሁ፣ ደመና እና የክፍያ መለያ ፈጠርኩ። ከዚያ በኋላ ወደ ደመናው ሄጄ MySQL እና ClickHouse ስብስቦችን በትንሹ ቅንጅቶች አዘጋጀሁ። ንቁ እስኪሆኑ ድረስ ጠብቄአለሁ።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋትGrafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

እንዲሁም በእያንዳንዱ ክላስተር ውስጥ የውሂብ ጎታ መፍጠር እና የመግቢያ እና የይለፍ ቃል በመጠቀም የእሱን መዳረሻ ማዋቀር እንዳለቦት ማስታወስ ያስፈልግዎታል። እዚህ ወደ ዝርዝሮች አልገባም - በበይነገጹ ውስጥ ሁሉም ነገር በጣም ግልፅ ነው።

ግልጽ ያልሆነው ዝርዝር እነዚህ የውሂብ ጎታዎች ብዙ አስተናጋጆች አሏቸው ይህም የእነሱን ጥፋት መቻቻል ያረጋግጣል። ሆኖም ግራፋና ለሚሰራው እያንዳንዱ ዳታቤዝ በትክክል አንድ አስተናጋጅ ይፈልጋል። ረጅም ንባብ ሰነድ ደመናው ወደ ውሳኔ አመጣኝ። የዝርያውን አስተናጋጅ ተለወጠ c-<cluster_id>.rw.mdb.yandexcloud.net ከተዛማጁ መታወቂያ ጋር አሁን ላለው የክላስተር ዋና አስተናጋጅ ካርታ ተዘጋጅቷል። ለግራፋና የምንሰጠው ይህ ነው።

የድር አገልጋይ

አሁን የድረ-ገጽ አገልጋይ ነው። መደበኛ ቨርቹዋል ማሽንን ከሊኑክስ ጋር እናሳድግ እና ግራፋናንን በእሱ ላይ እናዋቅር።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

በ ssh በኩል እንገናኝ እና አስፈላጊዎቹን ጥቅሎች እንጭን.

sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

ከዚያ በኋላ Grafanaን በ systemctl ስር እናስኬድ እና ከ ClickHouse ጋር ለመስራት ተሰኪውን እንጭን (አዎ በመሠረታዊ ጥቅል ውስጥ አልቀረበም)።

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

ያ ነው ፣ ከዚያ በኋላ በቀላል ትእዛዝ

sudo service grafana-server start

የድር አገልጋይ እንጀምራለን. አሁን በአሳሹ ውስጥ የቨርቹዋል ማሽኑን ውጫዊ አይፒ አድራሻ አስገብተው ወደብ 3000 ይግለጹ እና የ Grafana UI ን ይመልከቱ።
Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

ግን አይቸኩሉ፣ ግራፋናን ከማቀናበርዎ በፊት፣ ቅንብሮቹን እዚያ ለማከማቸት ወደ MySQL የሚወስደውን መንገድ መንገርዎን ማስታወስ አለብዎት።

የግራፋና ድር አገልጋይ አጠቃላይ ውቅር በፋይሉ ውስጥ አለ። /etc/grafana/grafana.ini. የሚፈለገው መስመር ይህን ይመስላል።

;url =

አስተናጋጁን ወደ MySQL ዘለላ አዘጋጅተናል። ያው ፋይል ከላይ በምስሉ ላይ ግራፋናን ለማግኘት መግቢያ እና የይለፍ ቃል ይዟል፣ በነባሪ ሁለቱም እኩል ናቸው። admin.

የ sed ትዕዛዞችን መጠቀም ይችላሉ:

sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini

የድር አገልጋዩን እንደገና ለመጀመር ጊዜው አሁን ነው!

sudo service grafana-server restart

አሁን በ Grafana UI ውስጥ ClickHouseን እንደ ዳታ ምንጭ እንገልፃለን።

በሚከተሉት ቅንጅቶች የስራ ውቅር ማሳካት ችያለሁ፡-

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

እንደ URL ገለጽኩት https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

ሁሉም! ከCH እና MySQL ጋር የተገናኘ የድር አገልጋይ ያለው አንድ የሚሰራ ምናባዊ ማሽን አለን። አስቀድመው የመረጃ ቋቱን ወደ ClickHouse መስቀል እና ዳሽቦርዶችን መገንባት ይችላሉ። ነገር ግን እስካሁን አላማችንን አላሳካንም እና የተሟላ መሠረተ ልማት አልዘረጋንም።

አሻጊ

Yandex.Cloud አሁን ያለውን ምናባዊ ማሽን የዲስክ ምስል እንዲፈጥሩ ይፈቅድልዎታል, እና በእሱ መሰረት - እርስ በርስ የሚመሳሰሉ ማሽኖች ብዛት. በትክክል የምንጠቀመው ይህንን ነው። ምስሉን በሚመች ሁኔታ ለመሰብሰብ, መሳሪያውን ይውሰዱ አሻጊ ከ HashiCorp. ምስሉን ለመሰብሰብ መመሪያዎችን የያዘ json ፋይል እንደ ግብዓት ይወስዳል።

የእኛ json ፋይል ሁለት ብሎኮችን ያካትታል፡ ግንበኞች እና አቅራቢዎች። የመጀመሪያው ብሎክ የምስሉን ግቤቶች እንደ አንድ አካል ይገልፃል, ሁለተኛው እገዳ ደግሞ አስፈላጊውን ይዘት ለመሙላት መመሪያዎችን ይገልፃል.

ገንቢዎች

{
"builders": [
    {
      "type": "yandex",
      "endpoint": "{{user `endpoint`}}",
      "folder_id": "<folder_id>",
      "subnet_id": "{{user `subnet_id`}}",
      "zone": "{{user `zone`}}",
      "labels": {},
      "use_ipv4_nat": true,
      "use_internal_ip": false,
      "service_account_key_file": "<service_account_key_file>",
      "image_name": "grafana-{{timestamp}}",
      "image_family": "grafana",
      "image_labels": {},
      "image_description": "GRAFANA",
      "source_image_family": "ubuntu-1804-lts",
      "disk_size_gb": 3,
      "disk_type": "network-hdd",
      "ssh_username": "ubuntu"
    }
  ],
...
}

በዚህ አብነት ውስጥ, ምስሉን ለመፍጠር በሚፈልጉበት ደመና ውስጥ ያለውን ክፍል ለዪ, እንዲሁም በዚህ ክፍል ውስጥ ቀደም ሲል ከተፈጠረ የአገልግሎት መለያ ቁልፎች ጋር ወደ ፋይሉ የሚወስደውን መንገድ ማዘጋጀት ያስፈልግዎታል. የአገልግሎት መለያዎችን እና ቁልፎችን በፋይል መልክ ስለመፍጠር በሚዛመደው ክፍል ውስጥ የበለጠ ማንበብ ይችላሉ። ሰነድ.

ይህ ውቅረት የዲስክ ምስሉ በመድረክ ላይ ተመስርቶ እንደሚገነባ ይናገራል ubuntu-1804-lts, በምስሉ ቤተሰብ ውስጥ በተገቢው የተጠቃሚ ክፍል ውስጥ ተቀምጧል GRAFANA በስሙ ስር grafana-{{timestamp}}.

አቅራቢዎች

አሁን ይበልጥ አስደሳች የሆነው የማዋቀሪያው ክፍል ይመጣል. ሁኔታውን ወደ ዲስክ ምስል ከማስቀመጥዎ በፊት በምናባዊው ማሽን ላይ መከናወን ያለባቸውን የእርምጃዎች ቅደም ተከተል ይገልጻል።

{
...,
"provisioners": [
    {
            "type": "shell",
            "pause_before": "5s",
            "scripts": [
                "prepare-ctg.sh"
            ]
        },
    {
            "type": "file",
            "source": "setup.sh",
            "destination": "/opt/grafana/setup.sh"
        },
        {
            "type": "shell",
        "execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
            "pause_before": "5s",
            "scripts": [
                "install-packages.sh",
                "grafana-setup.sh",
                "run-setup-at-reboot.sh"
        ]
        }
  ]
}

እዚህ ሁሉም ድርጊቶች በ 3 ደረጃዎች ይከፈላሉ. በመጀመሪያው ደረጃ, ረዳት ማውጫን የሚፈጥር ቀላል ስክሪፕት ይፈጸማል.

አዘጋጅ-ctg.sh:

#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana

በሚቀጥለው ደረጃ, በዚህ ማውጫ ውስጥ ስክሪፕት እናስቀምጣለን, ይህም ቨርቹዋል ማሽኑን ከጀመረ በኋላ ወዲያውኑ መጀመር ያስፈልገዋል. ይህ ስክሪፕት በ Grafana ውቅር ውስጥ መመዝገብ ያለባቸውን የተጠቃሚ ተለዋዋጮች ያስቀምጣቸዋል እና የድር አገልጋዩን እንደገና ያስጀምራል።

setup.sh:

#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

ከዚህ በኋላ 3 ነገሮች ይቀራሉ፡-
1) ፓኬጆችን ይጫኑ
2) Grafanaን በ systemctl ስር ያሂዱ እና የ ClickHouse ተሰኪን ይጫኑ
3) ቨርቹዋል ማሽኑን ካበሩ በኋላ ወዲያውኑ የ setup.sh ስክሪፕት በማስጀመሪያ ወረፋ ውስጥ ያስቀምጡ።

install-packages.sh:

#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

grafana-setup.sh:

#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

run-setup-at-reboot.sh፡

#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;

አሁን የቀረው ፓከርን ማስኬድ እና የውጤት ምስል በተጠቀሰው ክፍል ውስጥ እንዲቀመጥ ማድረግ ነው። ቨርቹዋል ማሽን ሲፈጥሩ እንደ ቡት ዲስክ መምረጥ ይችላሉ እና ከተነሳ በኋላ ዝግጁ የሆነ የግራፋና ድር አገልጋይ ይደርሰዎታል።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት
Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

የአብነት ቡድን እና ሚዛናዊ

ብዙ ተመሳሳይ የግራፋና ዌብ ሰርቨሮችን ለመፍጠር የሚያስችል የዲስክ ምስል ካለን በኋላ የምሳሌ ቡድን መፍጠር እንችላለን። በ Yandex.Cloud መድረክ ላይ, ይህ ቃል ተመሳሳይ ባህሪያት ያላቸውን የቨርቹዋል ማሽኖችን አንድነት ያመለክታል. የምሳሌ ቡድንን በሚፈጥሩበት ጊዜ በዚህ ቡድን ውስጥ ያሉት ሁሉም ማሽኖች ፕሮቶታይፕ ተዋቅረዋል ፣ እና ከዚያ የቡድኑ ባህሪዎች (ለምሳሌ ፣ አነስተኛ እና ከፍተኛው የንቁ ማሽኖች ብዛት)። አሁን ያለው ቁጥር እነዚህን መመዘኛዎች የማያሟላ ከሆነ, የምሳሌው ቡድን እራሱ አላስፈላጊ ማሽኖችን ያስወግዳል ወይም በራሱ ምስል አዳዲስ ማሽኖችን ይፈጥራል.

እንደ ተግባራችን አካል፣ ቀደም ሲል ከተፈጠረው የዲስክ ምስል የሚመነጩ የዌብ ሰርቨሮች ምሳሌ ቡድን እንፈጥራለን።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

በጣም የሚያስደንቀው የመጨረሻው ቡድን ማዋቀር ነው። የዒላማው ቡድን ከ Load Balancer ጋር በመቀናጀት በዚህ ቡድን ቨርቹዋል ማሽኖች ላይ የኤል 3 ሚዛኑን እንዲያዋቅሩ ሁለት ቁልፎችን ጠቅ በማድረግ ይረዳዎታል።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

ሚዛኑን ሳዘጋጅ ሁለት አስፈላጊ ነጥቦችን ተግብሬአለሁ፡-

  1. ሚዛኑ የተጠቃሚውን ትራፊክ ወደብ 80 እንዲቀበል እና ግራፋና ወደሚኖርበት ወደ 3000 ቨርቹዋል ማሽኖች እንዲዞር አድርጌዋለሁ።
  2. የማሽኖቹን አዋጭነት በመፈተሽ ወደብ 3000 በማያያዝ አዘጋጀሁ።

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

አነስተኛ ማጠቃለያ

በመጨረሻም የተፈለገውን የመተግበሪያ መሠረተ ልማትን በእጅ ማሰማራት ችለናል፣ እና አሁን በጣም የሚቋቋም የግራፋና አገልግሎት አለን። የመረጃ ቋቱን ወደ ውስጥ ለመጫን የሂሳብ ሰጪውን የአይፒ አድራሻ እንደ የመተግበሪያው መግቢያ ነጥብ እና የ ClickHouse ክላስተር አስተናጋጅ ብቻ ማወቅ ያስፈልግዎታል።

ድል ​​ይመስላል? አዎ ድል። ነገር ግን አሁንም ግራ የሚያጋባኝ ነገር አለ። ከላይ ያለው አጠቃላይ ሂደት ብዙ በእጅ የሚወስዱ እርምጃዎችን የሚፈልግ እና በፍፁም ሊሰፋ የሚችል አይደለም፤ ከተቻለ አውቶማቲክ ማድረግ እፈልጋለሁ። የሚቀጥለው ክፍል ለዚህ ነው.

የቴራፎርም ውህደት

እንደገና ከ HashiCorp የተባለ መሳሪያ እንጠቀማለን Terraform. በተጠቃሚው በሚተላለፉ በርካታ ተለዋዋጮች ላይ በመመስረት አንድ አዝራር ጠቅ በማድረግ ሙሉውን የመተግበሪያ መሠረተ ልማት ለማሰማራት ይረዳዎታል. በተለያዩ የተጠቃሚዎች ክፍሎች ውስጥ ብዙ ጊዜ ሊሰራ የሚችል የምግብ አሰራርን እንፃፍ።

ሁሉም ከቴራፎርም ጋር የሚሰሩት የማዋቀሪያ ፋይልን ለመፃፍ ይወርዳሉ (*.tf) እና በእሱ ላይ የተመሰረተ መሠረተ ልማት መፍጠር.

ተለዋዋጮች

በፋይሉ መጀመሪያ ላይ የወደፊቱ መሠረተ ልማት የት እና እንዴት እንደሚሰማሩ የሚወስኑ ተለዋዋጮችን እናካትታለን።

variable "oauth_token" {
    type = string
    default = "<oauth-token>"
}
variable "cloud_id" {
    type = string
    default = "<cloud-id>"
}
variable "folder_id" {
    type = string
    default = "<folder_id>"
}
variable "service_account_id" {
    type = string
    default = "<service_account_id>"
}
variable "image_id" {
    type = string
    default = "<image_id>"
}
variable "username" {
    type = string
    default = "<username>"
}
variable "password" {
    type = string
    default = "<password>"
}
variable "dbname" {
    type = string
    default = "<dbname>"
}
variable "public_key_path" {
    type = string
    default = "<path to ssh public key>"
}

የዲስክ ምስልን ለመገንባት እና እነዚህን ተለዋዋጮች ለማዘጋጀት አጠቃላይው የመተግበሪያ ማሰማራት ሂደት ይወርዳል። ምን ተጠያቂ እንደሆኑ ላብራራ።

ኦውት_ቶከን - ደመናውን ለመድረስ ምልክት። በ ማግኘት ይቻላል። ማያያዣ.
የደመና_መታወቂያ - መተግበሪያውን የምናሰማራበት የደመና መለያ
አቃፊ_መታወቂያ - ማመልከቻውን የምናሰማራበት ክፍል መለያ
የአገልግሎት_መለያ_መታወቂያ - የአገልግሎት መለያ መለያ በደመናው ክፍል ውስጥ።
ምስል_መታወቂያ - ፓከርን በመጠቀም የተገኘውን የዲስክ ምስል መለያ
የተጠቃሚ ስም и የይለፍ ቃል ሁለቱንም የውሂብ ጎታዎች እና የግራፋና ድር አገልጋይን ለመድረስ የተጠቃሚ ስም እና የይለፍ ቃል
dbname - የውሂብ ጎታ ስም በ CH እና MySQL ስብስቦች ውስጥ
የህዝብ_ቁልፍ_መንገድ — ወደ ፋይሉ የሚወስደው መንገድ በአደባባይ ssh ቁልፍህ፣ በስሙ ለመገናኘት ልትጠቀምበት ትችላለህ ubuntu ከድር አገልጋዮች ጋር ወደ ምናባዊ ማሽኖች

የአቅራቢ ማዋቀር

አሁን የ Terraform አቅራቢውን ማዋቀር ያስፈልግዎታል - በእኛ ሁኔታ Yandex:

provider "yandex" {
  token     = var.oauth_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-a"
}

እዚህ ከላይ የተገለጹትን ተለዋዋጮች እየተጠቀምን መሆኑን ያስተውላሉ።

አውታረ መረብ እና ስብስቦች

አሁን የመሠረተ ልማት ክፍሎቻችን የሚግባቡበት ኔትወርክ እንፈጥራለን፣ ሶስት ንኡስ ኔትወርኮች (በእያንዳንዱ ክልል አንድ) እና CH እና MySQL ዘለላዎችን ከፍ እናደርጋለን።


resource "yandex_vpc_network" "grafana_network" {}

resource "yandex_vpc_subnet" "subnet_a" {
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.1.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_b" {
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.2.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_c" {
  zone           = "ru-central1-c"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.3.0.0/24"]
}

resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
  name        = "grafana-clickhouse"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id

  clickhouse {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
  }

  zookeeper {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 10
    }
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
    }
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
  name        = "grafana_mysql"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id
  version     = "8.0"

  resources {
    resource_preset_id = "s2.micro"
    disk_type_id       = "network-ssd"
    disk_size          = 16
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
      roles         = ["ALL"]
    }
  }

  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }
  host {
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }
  host {
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

እንደምታየው፣ እያንዳንዳቸው ሁለቱ ዘለላዎች በሦስት የተደራሽነት ዞኖች ውስጥ በመገኘታቸው ስህተትን የሚታገሡ ናቸው።

የድር አገልጋዮች

በተመሳሳይ መንፈስ መቀጠል የምንችል ይመስለኝ ነበር፣ ግን ችግር ውስጥ ገባሁ። ከዚህ በፊት፣ መጀመሪያ የ MySQL ክላስተር አነሳሁ እና ከዚያ በኋላ ብቻ መታወቂያውን አውቄ፣ አስፈላጊውን ውቅር ያለው የዲስክ ምስል ሰበሰብኩ፣ እዚያም አስተናጋጁን ወደ ክላስተር ገለጽኩ። አሁን ግን ምስሉን በሚሠራበት ጊዜ ጨምሮ Terraformን ከመጀመርዎ በፊት የክላስተር መታወቂያውን አናውቅም። ስለዚህ ወደሚከተለው ነገር መሄድ ነበረብኝ ብልሃት.

የአማዞን ሜታዳታ አገልግሎትን በመጠቀም የተወሰኑ መለኪያዎችን ወደ ቨርቹዋል ማሽኑ እናስተላልፋለን፣ እሱም ተቀብሎ ያስኬዳል። ማሽኑ ከ MySQL ክላስተር አስተናጋጅ እና የተጠቃሚ ስም-ይለፍ ቃል ጀርባ ያለው ሜታዳታ መሄድ እንፈልጋለን፣ ተጠቃሚው ከጀመረ በኋላ በ Terraform ፋይል ውስጥ የተገለጸው። የፋይሉን ይዘት በትንሹ እንለውጠው setup.shቨርቹዋል ማሽኑ ሲበራ የሚሰራ።

setup.sh:

#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restart

የመግቢያ ቡድን እና ሚዛናዊ

አዲስ የዲስክ ምስል እንደገና ከገነባን፣ በመጨረሻ የእኛን ፋይል ለ Terraform ማከል እንችላለን።

አሁን ያለውን የዲስክ ምስል መጠቀም እንደምንፈልግ እንጠቁም፦

data "yandex_compute_image" "grafana_image" {
  image_id = var.image_id
}

አሁን የአብነት ቡድን እንፍጠር፡-

resource "yandex_compute_instance_group" "grafana_group" {
  name               = "grafana-group"
  folder_id          = var.folder_id
  service_account_id = var.service_account_id
  instance_template {
    platform_id = "standard-v1"
    resources {
      memory = 1
      cores  = 1
    }
    boot_disk {
      mode = "READ_WRITE"
      initialize_params {
        image_id = data.yandex_compute_image.grafana_image.id
        size     = 4
      }
    }
    network_interface {
      network_id = yandex_vpc_network.grafana_network.id
      subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
      nat = "true"
    }
    metadata = {
      mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
      username = var.username
      password = var.password
      ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
    }
    network_settings {
      type = "STANDARD"
    }
  }

  scale_policy {
    fixed_scale {
      size = 6
    }
  }

  allocation_policy {
    zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
  }

  deploy_policy {
    max_unavailable = 2
    max_creating    = 2
    max_expansion   = 2
    max_deleting    = 2
  }

  load_balancer {
    target_group_name = "grafana-target-group"
  }
}

ወደ ሜታዳታ እንዴት እንዳስተላለፍን ትኩረት መስጠት ተገቢ ነው። cluster_uri, username и password. እነዚህ ናቸው ቨርቹዋል ማሽኑ ጅምር ላይ አውጥቶ በግራፋና ውቅረት ውስጥ ያስቀምጣል።

ሚዛኑን የጠበቀ ነው።

resource "yandex_lb_network_load_balancer" "grafana_balancer" {
  name = "grafana-balancer"

  listener {
    name = "grafana-listener"
    port = 80
    target_port = 3000
    external_address_spec {
      ip_version = "ipv4"
    }
  }

  attached_target_group {
    target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id

    healthcheck {
      name = "healthcheck"
      tcp_options {
        port = 3000
      }
    }
  }
}

ትንሽ ስኳር

ትንሽ ብቻ ነው የቀረው። መሠረተ ልማቱ ከተዘረጋ በኋላ ወደ ግራፋና UI መሄድ እና የ CH ክላስተርን (መታወቂያው አሁንም ማግኘት ያለበት) እንደ የውሂብ ምንጭ እራስዎ ማከል አለብዎት። ነገር ግን ቴራፎርም የክላስተር መታወቂያውን ያውቃል። ጉዳዩን ወደ ፍጻሜ እንዲያደርስ አደራ እንስጠው።

አዲስ አቅራቢ እንጨምር - Grafana፣ እና እንደ አስተናጋጅ የሂሳብ ሰጪውን አይፒ አድራሻ እንስጣት። ቴራፎርም ሚዛኑ በሚወስንበት ማሽን ላይ የሚያደርጋቸው ለውጦች ሁሉ MySQL ውስጥ ያድጋሉ፣ እና ስለዚህ በሁሉም ሌሎች ማሽኖች ላይ።

provider "grafana" {
  url  = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
  auth = "${var.username}:${var.password}"
}

resource "grafana_data_source" "ch_data_source" {
  type          = "vertamedia-clickhouse-datasource"
  name          = "grafana"
  url           = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
  basic_auth_enabled = "true"
  basic_auth_username = var.username
  basic_auth_password = var.password
  is_default = "true"
  access_mode = "proxy"
}

ጸጉራችንን እንቦጭ

ሚዛኑን የጠበቀ የአይ ፒ አድራሻ እና የ ClickHouse ክላስተር አስተናጋጅ እናሳይ

output "grafana_balancer_ip_address" {
  value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}

output "clickhouse_cluster_host" {
  value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}

መሮጥ ትችላለህ

ሁሉም! የእኛ የማዋቀሪያ ፋይል ዝግጁ ነው እና ተለዋዋጮችን በማዘጋጀት Terraform ከላይ የገለፅነውን ሁሉ እንዲያሳድግ መንገር እንችላለን። አጠቃላይ ሂደቱ 15 ደቂቃ ያህል ወሰደኝ።
በመጨረሻ አንድ የሚያምር መልእክት ማየት ይችላሉ-

Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:

clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25

እና በደመናው ውስጥ ፣ የተነሱት መሠረተ ልማት አካላት ይታያሉ-

Grafanaን እንደ ምሳሌ በመጠቀም በ Yandex.Cloud ውስጥ የተከፋፈሉ አገልግሎቶችን መዘርጋት

ውጤቱን በአጠቃላይ እናጠቃልል

አሁን፣ Grafanaን እንደ ምሳሌ በመጠቀም እያንዳንዳችሁ በ Yandex.Cloud መድረክ ላይ በተንጣለለ የደመና አርክቴክቸር አፕሊኬሽኖችን ማሰማራት ትችላላችሁ። ከ HashiCorp እንደ ፓከር እና ቴራፎርም ያሉ አጋዥ መሳሪያዎች በዚህ ሊረዱዎት ይችላሉ። አንድ ሰው ይህ ጽሑፍ ጠቃሚ ሆኖ እንዳገኘው ተስፋ አደርጋለሁ :)

PS ከዚህ በታች በዚህ ጽሑፍ ውስጥ ያቀረብኳቸውን ቁርጥራጮች ለፓከር እና ቴራፎርም ዝግጁ የሆኑ የምግብ አዘገጃጀቶችን ወደ ማከማቻው የሚወስድ አገናኝ አያይዣለሁ።

ማከማቻ

ምንጭ: hab.com

አስተያየት ያክሉ