په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

سلام و ټولو ته! زما د کورس کار د یوې برخې په توګه، زه د داسې کورني بادل پلیټ فارم امکانات څیړم Yandex.Cloud. پلیټ فارم د عملي ستونزو حل کولو لپاره مختلف خدمات وړاندې کوي. په هرصورت، ځینې وختونه دا اړینه ده چې ستاسو د کلاوډ غوښتنلیک د دې خدماتو پر بنسټ د پراخې زیربناوو سره تنظیم کړئ. پدې مقاله کې ، زه غواړم د داسې غوښتنلیک پلي کولو تجربه شریک کړم.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

تاسو څه ترلاسه کول غواړئ؟

ګرافانا - د هر سیسټم تحلیلي ستونزو حل کولو یا د څارنې ستونزې حل کولو لپاره قوي وسیله. په خپل لومړني ترتیب کې، دا د ګرافانا ویب سرور سره یو مجازی ماشین دی، په بیله بیا یو ډیټابیس (کلک هاؤس، انفلوکس ډی بی، او نور) د ډیټاسیټ سره چې د تحلیلونو جوړولو لپاره به کارول کیږي.

د ویب سرور سره د مجازی ماشین پیل کولو وروسته، تاسو کولی شئ د هغې کوربه ته لاړ شئ او یو ښکلی UI ترلاسه کړئ، ډیټابیس د نورو کار لپاره د سرچینو په توګه مشخص کړئ، ډشبورډونه او ګرافونه جوړ کړئ.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

اصلي نسخه یو مهم نیمګړتیا لري - دا په هیڅ ډول د غلطۍ زغم نه دی. دا دی، د غوښتنلیک ټول فعالیت د یو مجازی ماشین په وړتیا پورې اړه لري. که هغه انکار وکړي یا که 10 کسان په ورته وخت کې UI خلاص کړي ، نو ستونزې به رامینځته شي.

دوی په ساده ډول حل شوي: تاسو اړتیا لرئ ډیری ورته مجازی ماشینونه د ویب سرور سره ځای په ځای کړئ او د L3 بیلانس لاندې یې ځای په ځای کړئ. مګر دلته هرڅه دومره روښانه ندي. ګرافانا د کارونکي تنظیمات (د ډیټابیسونو ، ډشبورډونو ، ګرافیکونو او نورو ته لارې) په مستقیم ډول د خپل مجازی ماشین ډیسک کې ذخیره کوي. پدې توګه ، که تاسو په UI کې ځینې تنظیمات بدل کړئ ، نو دا بدلونونه به یوازې په مجازی ماشین کې ښکاره شي چیرې چې بیلانسر موږ ته لیږلی. دا به زموږ د غوښتنلیک لپاره متضاد تنظیمات رامینځته کړي ، د لانچ او کارولو ستونزې.

دلته یو بل ډیټابیس به د ژغورنې لپاره راشي، د بیلګې په توګه، MySQL یا د هغې مساوي. موږ ګرافانا ته وایو چې هغه باید په دې "اضافي" ډیټابیس کې د کارونکي تنظیمات ذخیره کړي. له هغې وروسته، دا به کافي وي چې دې ډیټابیس ته لاره په هر ماشین کې یو ځل مشخص کړئ، او په هر یو مجازی ماشین کې د کاروونکي نور ټول ترتیبات ایډیټ کړئ، دوی به په پاتې برخه کې وده وکړي.

دلته د وروستي غوښتنلیک زیربنا یو ډیاګرام دی:

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

د خپلو لاسونو پورته کول زده کړئ

MySQL او ClickHouse

مخکې له دې چې د تڼۍ په کلیک کولو سره دا ډول اپلیکیشن نصب کړئ، دا اړینه وه چې زده کړئ چې څنګه د هغې هرې برخې د لاسونو سره پورته کړئ او یو بل سره یوځای کړئ.

Yandex.Cloud به موږ سره دلته مرسته وکړي، کوم چې د L3 بیلانس، ClickHouse او MySQL د مدیریت خدماتو په توګه چمتو کوي. کارونکي یوازې اړتیا لري چې پیرامیټونه مشخص کړي او تر هغه پورې انتظار وکړئ چې پلیټ فارم هرڅه په کاري حالت کې راوړي.

ما راجستر کړ، د ځان لپاره بادل او د بلینګ حساب جوړ کړم. له هغې وروسته، زه بادل ته لاړم او د MySQL او ClickHouse کلسترونه یې د لږترلږه ترتیباتو سره پورته کړل. انتظار وکړئ تر هغه چې دوی فعال شي.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سرهپه Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

تاسو باید په یاد ولرئ چې په هر کلستر کې ډیټابیس رامینځته کړئ او د ننوتلو او پټنوم له لارې ورته لاسرسی تنظیم کړئ. زه به دلته توضیحاتو ته لاړ نه شم - هرڅه په انٹرفیس کې خورا څرګند دي.

غیر څرګند توضیحات دا وو چې دا ډیټابیسونه ډیری کوربه لري چې د دوی غلط زغم چمتو کوي. په هرصورت ، ګرافانا د هر ډیټابیس لپاره دقیقا یو کوربه ته اړتیا لري چې ورسره کار کوي. اوږده لوستل اسناد ورېځې مې يوې پرېکړې ته راوبللې. دا معلومه شوه چې د فارم کوربه c-<cluster_id>.rw.mdb.yandexcloud.net د اړونده ID سره اوسني فعال کلستر ماسټر کوربه ته نقشه. دا هغه څه دي چې موږ به ګرافانا ته ورکړو.

ویب سرور

اوس دا د ویب سرور پورې اړه لري. راځئ چې د لینکس سره یو منظم مجازی ماشین پورته کړو او په خپلو لاسونو یې ګرافانا تنظیم کړو.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

راځئ چې د 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

موږ به ویب سرور پیل کړو. اوس به دا ممکنه وي چې په براوزر کې د مجازی ماشین بهرني IP پتې کې موټر چل کړئ ، پورټ 3000 مشخص کړئ او ښکلی UI ګرافانا وګورئ.
په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

مګر بیړه مه کوئ ، د ګرافانا تنظیم کولو دمخه ، تاسو باید هیر نکړئ چې مای ایس کیو ایل ته لاره مشخص کړئ ترڅو هلته تنظیمات ذخیره کړئ.

د ګرافانا ویب سرور ټول ترتیب په فایل کې دی /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 د ډاټا سرچینې په توګه مشخص کړو.

ما د لاندې ترتیباتو سره د کاري ترتیب ترلاسه کولو اداره وکړه:

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

ما د URL په توګه ورکړ https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

ټول! موږ یو کاري مجازی ماشین لرو چې د ویب سرور سره CH او MySQL سره وصل دی. تاسو کولی شئ دمخه ډیټاسیټ کلیک هاؤس ته اپلوډ کړئ او ډشبورډونه جوړ کړئ. په هرصورت، موږ لاهم خپل هدف ته نه یو رسیدلي او یو بشپړ زیربنا مو نه ده ځای پرځای کړې.

بسته

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

په بل پړاو کې، موږ په دې لارښود کې یو سکریپټ ځای په ځای کوو، کوم چې د مجازی ماشین پیل کولو وروسته سمدستي چلولو ته اړتیا لري. دا سکریپټ به د کاروونکي متغیرات د ګرافانا په ترتیب کې تنظیم کړي او ویب سرور بیا پیل کړي.

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

له هغې وروسته، درې شیان باید ترسره شي:
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;

اوس دا پاتې ده چې پیکر چل کړئ او د محصول عکس ترلاسه کړئ چې په ټاکل شوي برخه کې ځای په ځای شوي. کله چې یو مجازی ماشین رامینځته کړئ ، تاسو کولی شئ دا د بوټ ډیسک په توګه وټاکئ او د پیل کولو وروسته ، چمتو شوی ګرافانا ویب سرور ترلاسه کړئ.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره
په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

د مثال ګروپ او توازن کونکی

یوځل چې د ډیسک عکس شتون ولري چې تاسو ته اجازه درکوي ډیری ورته ګرافانا ویب سرورونه رامینځته کړئ ، موږ کولی شو د مثال ګروپ رامینځته کړو. په Yandex.Cloud پلیټ فارم کې، دا اصطلاح د مجازی ماشینونو اتحادیې ته اشاره کوي چې ورته ځانګړتیاوې لري. کله چې د مثال ګروپ رامینځته کړئ ، پدې ګروپ کې د ټولو ماشینونو پروټوټایپ ترتیب شوی ، او بیا پخپله د ډلې ځانګړتیاوې (د مثال په توګه ، د فعال ماشینونو لږترلږه او اعظمي شمیر). که اوسنی شمیر دا معیار پوره نکړي، نو د مثال ګروپ به پخپله غیر ضروري ماشینونه لیرې کړي یا په عکس او ورته والی کې نوي رامینځته کړي.

زموږ د دندې د یوې برخې په توګه، موږ به د ویب سرورونو یوه بیلګه ډله جوړه کړو چې د مخکې جوړ شوي ډیسک عکس څخه به تولید شي.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

د وروستي مثال ګروپ ترتیب واقعیا د پام وړ دی. د لوډ بیلانسر سره په ادغام کې د هدف ګروپ به تاسو سره د یو څو تڼیو په فشارولو سره د دې ډلې مجازی ماشینونو په سر کې د L3 بیلانس تنظیم کولو کې مرسته وکړي.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

کله چې د توازن تنظیم کول، ما دوه مهم ټکي پلي کړل:

  1. ما دا رامینځته کړی ترڅو توازن کونکي د 80 په پورټ کې د کارونکي ترافیک ومني ، او دا یې د مجازی ماشینونو 3000 پورټ ته لیږلی ، یوازې چیرې چې ګرافانا ژوند کوي.
  2. په پورټ 3000 کې د پینګ کولو له لارې د ماشین روغتیا چیکونه تنظیم کړئ.

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

کوچنی مجموعه

په نهایت کې ، موږ وکولی شو په لاسي ډول د مطلوب غوښتنلیک زیربنا ځای په ځای کړو ، او اوس موږ د ګرافانا خورا انعطاف وړ خدمت لرو. دا یوازې اړینه ده چې د بیلانسر IP پته د غوښتنلیک ته د ننوتلو نقطه او د کلیک هاوس کلستر کوربه په توګه وپیژنئ ترڅو ډیټاسیټ پکې بار کړئ.

دا به بریا ښکاري؟ هو، بریا. مګر یو څه لاهم ما ځوروي. پورته ټوله پروسه ډیری لاسي کړنو ته اړتیا لري او په هیڅ ډول اندازه نه کوي، زه غواړم چې دا د امکان په صورت کې اتومات کړم. دا به د راتلونکې برخې تمرکز وي.

د Terraform سره یوځای کول

موږ به بیا د 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>"
}

د غوښتنلیک پلي کولو ټوله پروسه به د ډیسک عکس رامینځته کولو او د دې متغیرونو تنظیم کولو ته راشي. اجازه راکړئ تشریح کړم چې دوی د څه لپاره مسؤل دي:

oauth_token - بادل ته د لاسرسي لپاره نښه. لخوا ترلاسه کیدی شي مخونه.
cloud_id - د بادل پیژندونکی چیرې چې موږ به غوښتنلیک ځای په ځای کړو
فولډر_id - د برخې پیژندونکی چیرې چې موږ به غوښتنلیک ځای په ځای کړو
service_account_id - د کلاوډ په اړونده برخه کې د خدماتو حساب پیژندونکی.
image_id - د پیکر په کارولو سره ترلاسه شوي ډیسک عکس پیژندونکی
کارن نوم и رمز - دواړه ډیټابیسونو او د ګرافانا ویب سرور ته لاسرسي لپاره کارن نوم او پټنوم
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 کلستر پورته کړ او یوازې له هغې وروسته، د دې ID په پوهیدو سره، ما د مطلوب ترتیب سره د ډیسک انځور راټول کړ، چیرته چې ما کلستر ته کوربه مشخص کړ. مګر اوس موږ د ټیرفارم لانچ کولو دمخه د کلستر ID نه پوهیږو ، پشمول د عکس جوړولو په وخت کې. نو ما باید لاندې ته لاره هواره کړه چال.

د ایمیزون څخه د میټاډاټا خدمت کارولو سره، موږ به ځینې پیرامیټونه مجازی ماشین ته انتقال کړو، کوم چې دا به یې ومني او پروسس کړي. موږ ماشین ته اړتیا لرو چې د کلستر د 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 کلستر اضافه کړئ (د کوم ID چې تاسو لاهم اړتیا لرئ ترلاسه کړئ) د ډیټا سرچینې په توګه. مګر Terraform د کلستر ID پیژني. راځئ چې هغه د کار پای ته ورسوي.

راځئ چې یو نوی چمتو کونکی اضافه کړو - ګرافانا، او د کوربه په توګه د بیلانس IP ټوټه ټوټه کړئ. ټول بدلونونه چې Terraform په ماشین کې رامینځته کوي چیرې چې د دې بیلانس ټاکي په 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"
}

راځئ کنگھه وکړو

د بیلانس IP او د کلیک هاوس کلستر کوربه ښکاره کړئ

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

او په بادل کې، د پورته شوي زیربنا عناصر به لیدل کیږي:

په Yandex.Cloud کې د توزیع شوي خدماتو ځای پرځای کول د مثال په توګه د Grafana په کارولو سره

راځئ چې پایلې راټیټ کړو

اوس ، د ګرافانا مثال په کارولو سره ، تاسو هر یو کولی شئ د Yandex.Cloud پلیټ فارم کې د پراخه کلاوډ جوړښت سره غوښتنلیکونه ځای په ځای کړئ. د HashiCorp څخه ګټور وسیلې لکه پیکر او ټیرفارم کولی شي پدې کې ستاسو سره مرسته وکړي. زه امید لرم چې دا مقاله به د یو چا لپاره ګټوره وي 🙂

PS لاندې به زه د ذخیره کولو لینک سره ضمیمه کړم ، چیرې چې تاسو کولی شئ د پیکر او ټیرفارم لپاره چمتو شوي ترکیبونه ومومئ ، هغه ټوټې چې ما پدې مقاله کې حواله کړې.

ذخیره

سرچینه: www.habr.com

Add a comment