Pershendetje te gjitheve! Si pjesë e punës sime të kursit, unë hulumtova aftësitë e një platforme të tillë vendase cloud si
Çfarë dëshironi të merrni?
Pas nisjes së një makine virtuale me një server në internet, mund të shkoni te hosti i saj dhe të merrni një ndërfaqe të bukur, të specifikoni bazat e të dhënave si burime për punë të mëtejshme, të krijoni tabela dhe grafikë.
Versioni bazë ka një pengesë të rëndësishme - nuk është aspak tolerant ndaj gabimeve. Kjo do të thotë, i gjithë funksionaliteti i aplikacionit varet nga qëndrueshmëria e një makine virtuale. Nëse refuzon ose 10 persona hapin UI në të njëjtën kohë, atëherë do të shfaqen probleme.
Ato mund të zgjidhen thjesht: ju vetëm duhet... të vendosni shumë makina virtuale identike me një server në internet dhe t'i vendosni ato nën një balancues L3. Por jo gjithçka është kaq e thjeshtë këtu. Grafana ruan cilësimet e përdoruesit (rrugët drejt bazave të të dhënave, panelet e informacionit, grafikët, etj.) direkt në diskun e makinës së saj virtuale. Kështu, nëse ndryshojmë disa cilësime në UI, këto ndryshime do të pasqyrohen vetëm në makinën virtuale ku na ka dërguar balancuesi. Kjo do të çojë në cilësime jokonsistente për aplikacionin tonë, duke shkaktuar probleme me nisjen dhe përdorimin.
Këtu do të vijë në shpëtim një bazë tjetër e të dhënave, për shembull, MySQL ose ekuivalenti i tij. Ne i themi Grafanës se ajo duhet të ruajë cilësimet e përdoruesit në këtë bazë të dhënash "këmbë". Më pas, do të mjaftojë të specifikoni shtegun për në këtë bazë të dhënash një herë në secilën makinë dhe të redaktoni të gjitha cilësimet e tjera të përdoruesit në cilëndo nga makinat virtuale; ato do të shtrihen në të tjerat.
Këtu është një diagram i infrastrukturës përfundimtare të aplikimit:
Le të mësojmë të ngremë me duart tona
MySQL dhe ClickHouse
Përpara se të vendosnim një aplikacion të tillë me klikimin e një butoni, ishte e nevojshme të mësohej se si të trajtohej secili prej përbërësve të tij dhe t'i integronte ato me njëri-tjetrin.
Këtu do të na ndihmojë Yandex.Cloud, i cili ofron balancues L3, ClickHouse dhe MySQL si shërbime të menaxhuara. Përdoruesi duhet vetëm të specifikojë parametrat dhe të presë derisa platforma të sjellë gjithçka në gjendje pune.
U regjistrova, krijova një re dhe një llogari pagese. Pas kësaj, shkova në cloud dhe konfigurova grupet MySQL dhe ClickHouse me cilësime minimale. Prita derisa të aktivizoheshin.
Ju gjithashtu duhet të mbani mend të krijoni një bazë të dhënash në çdo grup dhe të konfiguroni aksesin në të duke përdorur një hyrje dhe fjalëkalim. Nuk do të hyj në detaje këtu - gjithçka është mjaft e qartë në ndërfaqe.
Detaji jo i dukshëm ishte se këto baza të të dhënave kanë shumë host, të cilët sigurojnë tolerancën e tyre ndaj gabimeve. Sidoqoftë, Grafana kërkon saktësisht një host për secilën bazë të dhënash me të cilën punon. Lexim i gjatë c-<cluster_id>.rw.mdb.yandexcloud.net
hartuar në hostin aktual kryesor aktiv të grupit me ID-në përkatëse. Këtë do t'i japim Grafanës.
ueb server
Tani i takon serverit të internetit. Le të krijojmë një makinë virtuale të rregullt me Linux dhe të konfigurojmë manualisht Grafana në të.
Le të lidhemi përmes ssh dhe të instalojmë paketat e nevojshme.
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
Pas kësaj, le të ekzekutojmë Grafana nën systemctl dhe të instalojmë shtojcën për të punuar me ClickHouse (po, nuk është dhënë në paketën bazë).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Kjo është ajo, pas kësaj me një komandë të thjeshtë
sudo service grafana-server start
do të nisim web serverin. Tani mund të futni adresën IP të jashtme të makinës virtuale në shfletues, të specifikoni portin 3000 dhe të shihni ndërfaqen e bukur të Grafana.
Por mos nxitoni, përpara se të konfiguroni Grafana, duhet të mbani mend t'i tregoni asaj rrugën drejt MySQL në mënyrë që të ruani cilësimet atje.
I gjithë konfigurimi i ueb serverit Grafana është në skedar /etc/grafana/grafana.ini
. Linja e kërkuar duket si kjo:
;url =
Ne e vendosëm hostin në grupin MySQL. I njëjti skedar përmban hyrjen dhe fjalëkalimin për të hyrë në Grafana në foton e mësipërme, të cilat si parazgjedhje janë të dyja të barabarta admin
.
Ju mund të përdorni komandat 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
Është koha për të rifilluar ueb serverin!
sudo service grafana-server restart
Tani në ndërfaqen e ndërfaqes së Grafana do të specifikojmë ClickHouse si burim të dhënash.
Unë arrita të arrij një konfigurim pune me cilësimet e mëposhtme:
Unë specifikova si URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Të gjitha! Ne kemi një makinë virtuale që funksionon me një server në internet të lidhur me CH dhe MySQL. Tashmë mund të ngarkoni grupin e të dhënave në ClickHouse dhe të ndërtoni panele kontrolli. Megjithatë, ne ende nuk e kemi arritur qëllimin tonë dhe nuk kemi vendosur një infrastrukturë të plotë.
Paketues
Yandex.Cloud ju lejon të krijoni një imazh të diskut të një makine virtuale ekzistuese, dhe mbi bazën e saj - çdo numër makinash identike me njëra-tjetrën. Kjo është pikërisht ajo që ne do të përdorim. Për të montuar me lehtësi imazhin, merrni mjetin
Skedari ynë json do të përbëhet nga dy blloqe: ndërtuesit dhe ofruesit. Blloku i parë përshkruan parametrat e vetë imazhit si një entitet, dhe blloku i dytë përshkruan udhëzimet për plotësimin e tij me përmbajtjen e nevojshme.
ndërtuesit
{
"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"
}
],
...
}
Në këtë shabllon, duhet të vendosni identifikuesin e seksionit në renë kompjuterike ku dëshironi të krijoni imazhin, si dhe shtegun drejt skedarit me çelësat nga llogaria e shërbimit të krijuar më parë në këtë seksion. Mund të lexoni më shumë rreth krijimit të llogarive dhe çelësave të shërbimit në formën e një skedari në seksionin përkatës
Ky konfigurim thotë se imazhi i diskut do të ndërtohet në bazë të platformës ubuntu-1804-lts
, vendosur në seksionin e duhur të përdoruesit në familjen e imazheve GRAFANA
nën emrin grafana-{{timestamp}}
.
Ofruesit
Tani vjen pjesa më interesante e konfigurimit. Ai do të përshkruajë sekuencën e veprimeve që do të duhet të kryhen në makinën virtuale përpara se të ngrijë gjendjen e saj në një imazh të diskut.
{
...,
"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"
]
}
]
}
Këtu të gjitha veprimet ndahen në 3 faza. Në fazën e parë, ekzekutohet një skript i thjeshtë që krijon një direktori ndihmëse.
përgatit-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Në fazën tjetër, ne vendosim një skript në këtë direktori, i cili do të duhet të lansohet menjëherë pas fillimit të makinës virtuale. Ky skript do të vendosë variablat e përdoruesit që duhet të regjistrohen në konfigurimin e Grafana dhe do të rifillojë serverin në internet.
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
Pas kësaj mbeten 3 gjëra për të bërë:
1) instaloni paketat
2) ekzekutoni Grafana nën systemctl dhe instaloni shtojcën ClickHouse
3) vendosni skriptin setup.sh në radhën e nisjes menjëherë pas ndezjes së makinës virtuale.
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;
Tani gjithçka që mbetet është të ekzekutoni Packer dhe të vendosni imazhin e daljes në seksionin e specifikuar. Kur krijoni një makinë virtuale, mund ta zgjidhni atë si një disk boot dhe pas nisjes do të merrni një server të gatshëm të internetit Grafana.
Grupi i shembullit dhe balancuesi
Pasi të kemi një imazh të diskut që na lejon të krijojmë shumë serverë identikë të internetit Grafana, ne mund të krijojmë një grup shembulli. Në platformën Yandex.Cloud, ky term i referohet bashkimit të makinave virtuale që kanë të njëjtat karakteristika. Kur krijoni një grup shembulli, konfigurohet prototipi i të gjitha makinave në këtë grup, dhe më pas karakteristikat e vetë grupit (për shembull, numri minimal dhe maksimal i makinave aktive). Nëse numri aktual nuk i plotëson këto kritere, atëherë vetë grupi i shembullit do të heqë makinat e panevojshme ose do të krijojë të reja sipas imazhit të tij.
Si pjesë e detyrës sonë, ne do të krijojmë një grup shembulli të serverëve në internet që do të gjenerohen nga imazhi i diskut i krijuar më parë.
Ajo që është vërtet e jashtëzakonshme është konfigurimi i grupit të shembullit të fundit. Grupi i synuar në integrim me Load Balancer do t'ju ndihmojë të konfiguroni një balancues L3 në krye të makinave virtuale të këtij grupi duke klikuar disa butona.
Kur konfigurova balancuesin, zbatova dy pika të rëndësishme:
- E bëra balancuesin të pranonte trafikun e përdoruesve në portin 80 dhe ta ridrejtoja në portin 3000 të makinave virtuale, pikërisht aty ku jeton Grafana.
- Kam vendosur të kontrolloj qëndrueshmërinë e makinerive duke i futur ato në portin 3000.
Mini përmbledhje
Më në fund, ne ishim në gjendje të vendosnim manualisht infrastrukturën e dëshiruar të aplikacionit dhe tani kemi një shërbim shumë elastik Grafana. Ju vetëm duhet të dini adresën IP të balancuesit si pika hyrëse në aplikacion dhe hosti i grupit ClickHouse në mënyrë që të ngarkoni grupin e të dhënave në të.
Do të duket si një fitore? Po, fitore. Por diçka ende më ngatërron. I gjithë procesi i mësipërm kërkon shumë hapa manualë dhe nuk është aspak i shkallëzueshëm; unë do të doja ta automatizoja nëse është e mundur. Kjo është ajo që pjesa tjetër do t'i kushtohet.
Integrimi Terraform
Ne do të përdorim përsëri një mjet nga HashiCorp të quajtur
E gjithë puna me Terraform zbret në shkrimin e një skedari konfigurimi (*.tf
) dhe krijimin e infrastrukturës në bazë të saj.
variabla
Në fillim të skedarit, ne do të përfshijmë variabla që përcaktojnë se ku dhe si do të vendoset infrastruktura e ardhshme.
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>"
}
I gjithë procesi i vendosjes së aplikacionit do të zbresë në ndërtimin e një imazhi të diskut dhe vendosjen e këtyre variablave. Më lejoni të shpjegoj se për çfarë ata janë përgjegjës:
oauth_token — një shenjë për të hyrë në re. Mund të merret nga
re_id — identifikuesi i cloud ku do të vendosim aplikacionin
folder_id — identifikuesi i seksionit ku do të vendosim aplikacionin
shërbimi_llogaria_id — identifikuesi i llogarisë së shërbimit në seksionin përkatës të resë kompjuterike.
image_id — identifikuesi i imazhit të diskut të marrë duke përdorur Packer
Emri i përdoruesit и Fjalëkalimi — emri i përdoruesit dhe fjalëkalimi për të hyrë në të dyja bazat e të dhënave dhe në serverin e internetit Grafana
dbname — emri i bazës së të dhënave brenda grupimeve CH dhe MySQL
shtegu_çelës_publik — shtegu i skedarit me çelësin tuaj publik ssh, të cilin mund ta përdorni për t'u lidhur nën emrin ubuntu
te makinat virtuale me serverë ueb
Konfigurimi i ofruesit
Tani ju duhet të konfiguroni ofruesin Terraform - në rastin tonë, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Do të vini re se këtu po përdorim variablat e përcaktuar më sipër.
Rrjeti dhe grupimet
Tani do të krijojmë një rrjet në të cilin elementët e infrastrukturës sonë do të komunikojnë, tre nënrrjeta (një në çdo rajon) dhe do të ngrenë grupet CH dhe 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
}
}
Siç mund ta shihni, secila prej dy grupeve është krijuar mjaft tolerante ndaj gabimeve duke u vendosur në tre zona disponueshmërie.
Web serverët
Dukej se mund të vazhdonim në të njëjtën frymë, por hasa në vështirësi. Para kësaj, unë fillimisht ngrita një grup MySQL dhe vetëm pas kësaj, duke ditur ID-në e tij, mblodha një imazh të diskut me konfigurimin e kërkuar, ku specifikova hostin në grup. Por tani ne nuk e dimë ID-në e grupit përpara se të lëshojmë Terraform, duke përfshirë edhe kohën e ndërtimit të imazhit. Prandaj, më duhej të drejtohesha në sa vijon
Duke përdorur shërbimin e meta të dhënave të Amazon, ne do t'i kalojmë disa parametra makinës virtuale, të cilat ajo do t'i pranojë dhe përpunojë. Ne kemi nevojë që makina të shkojë te metadata prapa hostit të grupit MySQL dhe fjalëkalimit të emrit të përdoruesit, të cilat përdoruesi i specifikoi në skedarin Terraform, pas fillimit. Le të ndryshojmë pak përmbajtjen e skedarit setup.sh
, i cili funksionon kur makina virtuale është e ndezur.
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
Grupi i instancave dhe balancuesi
Pasi të kemi rindërtuar një imazh të ri të diskut, më në fund mund të shtojmë skedarin tonë për Terraform.
Le të tregojmë se duam të përdorim një imazh ekzistues të diskut:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Tani le të krijojmë një grup shembulli:
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"
}
}
Vlen t'i kushtohet vëmendje mënyrës se si e kaluam atë në meta të dhëna cluster_uri
, username
и password
. Janë këto që makina virtuale do t'i nxjerrë në fillim dhe do t'i vendosë në konfigurimin Grafana.
Varet nga balancuesi.
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
}
}
}
}
Pak sheqer
Ka mbetur vetëm pak. Pasi të vendoset infrastruktura, do t'ju duhet të shkoni në ndërfaqen e përdoruesit të Grafana dhe të shtoni manualisht grupin CH (ID-ja e të cilit duhet ende të merret) si një Burim i të Dhënave. Por Terraform e di ID-në e grupit. Le t'i besojmë atij zbatimin e çështjes.
Le të shtojmë një ofrues të ri - Grafana, dhe t'i japim asaj adresën IP të balancuesit si host. Të gjitha ndryshimet që Terraform bën në makinën ku përcakton balancuesi i saj do të rriten në MySQL, dhe për rrjedhojë në të gjitha makinat e tjera.
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"
}
Le të krehim flokët
Le të shfaqim adresën IP të balancuesit dhe hostin e grupit 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"
}
Mund të vraposh
Të gjitha! Skedari ynë i konfigurimit është gati dhe ne, duke vendosur variablat, mund t'i themi Terraform-it të ngrejë gjithçka që përshkruam më sipër. I gjithë procesi më zgjati rreth 15 minuta.
Në fund mund të shihni një mesazh të bukur:
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
Dhe në re, elementët e infrastrukturës së ngritur do të jenë të dukshme:
Përmbledh
Tani, duke përdorur Grafana si shembull, secili prej jush mund të vendosë aplikacione me një arkitekturë të madhe cloud në platformën Yandex.Cloud. Mjetet e dobishme nga HashiCorp si Packer dhe Terraform mund t'ju ndihmojnë me këtë. Shpresoj që dikush ta gjejë të dobishëm këtë artikull :)
PS Më poshtë do të bashkangjit një lidhje me depon ku mund të gjeni receta të gatshme për Packer dhe Terraform, fragmente të të cilave kam dhënë në këtë artikull.
Burimi: www.habr.com