Сайн уу! Курсын ажлынхаа хүрээнд би дотоодын үүлэн платформын чадавхийг судалсан
Та юу хүлээж авахыг хүсч байна вэ?
Вэб сервертэй виртуал машин ажиллуулсны дараа та түүний хост руу очиж үзэсгэлэнтэй UI авах, мэдээллийн санг цаашдын ажлын эх сурвалж болгон зааж өгөх, хяналтын самбар, график үүсгэх боломжтой.
Үндсэн хувилбар нь нэг чухал сул талтай - энэ нь алдааг огт тэсвэрлэдэггүй. Өөрөөр хэлбэл, програмын бүх функц нь нэг виртуал машины амьдрах чадвараас хамаарна. Хэрэв энэ нь татгалзвал эсвэл 10 хүн UI-г нэгэн зэрэг нээвэл асуудал үүснэ.
Тэдгээрийг энгийнээр шийдэж болно: та зүгээр л ... вэб сервертэй ижил төстэй олон виртуал машинуудыг байрлуулж, L3 тэнцвэржүүлэгчийн доор байрлуулах хэрэгтэй. Гэхдээ энд бүх зүйл тийм ч тодорхой биш байна. Grafana нь хэрэглэгчийн тохиргоог (өгөгдлийн сангийн зам, хяналтын самбар, график гэх мэт) виртуал машиныхаа дискэн дээр шууд хадгалдаг. Тиймээс, хэрэв бид UI-ийн зарим тохиргоог өөрчлөх юм бол эдгээр өөрчлөлтүүд зөвхөн тэнцвэржүүлэгчийн бидэнд илгээсэн виртуал машин дээр тусгагдах болно. Энэ нь манай аппликейшнд нийцэхгүй тохиргоонд хүргэж, эхлүүлэх, ашиглахад асуудал үүсгэх болно.
Энд өөр мэдээллийн сан аврах ажилд ирнэ, жишээлбэл, MySQL эсвэл түүнтэй адилтгах. Бид Графана-д хэрэглэгчийн тохиргоог энэ "нөөц" мэдээллийн санд хадгалах ёстой гэж хэлдэг. Дараа нь энэ мэдээллийн санд хүрэх замыг машин бүр дээр нэг удаа зааж өгөхөд хангалттай бөгөөд бусад бүх хэрэглэгчийн тохиргоог виртуал машинуудын аль нэг дээр засварлах болно; тэдгээр нь бусад руу шилжих болно.
Энд эцсийн хэрэглээний дэд бүтцийн диаграмм байна:
Гараараа өргөж сурцгаая
MySQL болон ClickHouse
Ийм програмыг нэг товчлуур дээр дарж байрлуулахын өмнө түүний бүрэлдэхүүн хэсэг бүрийг хэрхэн зохицуулж, бие биетэйгээ нэгтгэж сурах шаардлагатай байв.
Энд Yandex.Cloud бидэнд туслах болно, энэ нь L3 тэнцвэржүүлэгч, ClickHouse болон MySQL-г удирддаг үйлчилгээ болгон өгдөг. Хэрэглэгч зөвхөн параметрүүдийг зааж өгөх хэрэгтэй бөгөөд платформ бүх зүйлийг хэвийн байдалд оруулах хүртэл хүлээх хэрэгтэй.
Би бүртгүүлж, үүл болон төлбөрийн данс үүсгэсэн. Үүний дараа би үүлэн дээр очиж MySQL болон ClickHouse кластеруудыг хамгийн бага тохиргоотойгоор тохируулсан. Би тэднийг идэвхтэй болох хүртэл хүлээсэн.
Та мөн кластер бүрт өгөгдлийн сан үүсгэж, нэвтрэх, нууц үг ашиглан нэвтрэх тохиргоогоо хийхээ санах хэрэгтэй. Би энд дэлгэрэнгүй ярихгүй - интерфейс дээр бүх зүйл тодорхой харагдаж байна.
Тодорхой бус нарийн зүйл бол эдгээр мэдээллийн сан нь алдааг тэсвэрлэх чадварыг баталгаажуулдаг олон хосттой байдаг. Гэсэн хэдий ч, Grafana нь ажилладаг мэдээллийн сан бүрдээ яг нэг хост шаарддаг. Удаан унших c-<cluster_id>.rw.mdb.yandexcloud.net
харгалзах ID-тай кластерын одоогийн идэвхтэй мастер хост руу зурагдсан. Үүнийг бид Графанад өгөх болно.
вэб сервер
Одоо вэб сервер дээр байна. Линукс бүхий ердийн виртуал машиныг суулгаж, 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 портыг зааж өгч, үзэсгэлэнтэй Grafana UI-г харах боломжтой.
Гэхдээ яарах хэрэггүй, та Grafana-г тохируулахаасаа өмнө тохиргоогоо хадгалахын тулд 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-г DataSource болгон зааж өгөх болно.
Би дараах тохиргоонуудын тусламжтайгаар ажлын тохиргоонд хүрч чадсан:
Би URL гэж заасан https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Бүгд! Бидэнд CH болон MySQL-д холбогдсон вэб сервер бүхий нэг виртуал машин ажиллаж байна. Та аль хэдийн өгөгдлийн багцыг ClickHouse-д байршуулж, хяналтын самбар үүсгэх боломжтой. Гэвч бид зорилгодоо хүрч чадаагүй, дэд бүтцээ бүрэн суулгаагүй байна.
Пакер
Yandex.Cloud нь одоо байгаа виртуал машины дискний дүрсийг үүсгэх боломжийг олгодог бөгөөд үүний үндсэн дээр бие биетэйгээ ижил тооны машинууд байдаг. Үүнийг бид яг ашиглах болно. Зургийг эвтэйхэн угсрахын тулд багажийг аваарай
Манай 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 үе шатанд хуваагдана. Эхний шатанд туслах лавлах үүсгэх энгийн скриптийг гүйцэтгэдэг.
Preparat-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) systemctl доор Grafana-г ажиллуулаад 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;
Одоо зөвхөн Packer-ийг ажиллуулж, заасан хэсэгт байрлуулсан гаралтын зургийг авах л үлдлээ. Виртуал машин үүсгэх үед та үүнийг ачаалах диск болгон сонгох боломжтой бөгөөд ажиллуулсны дараа та бэлэн Grafana вэб сервер хүлээн авах болно.
Жишээ бүлэг ба тэнцвэржүүлэгч
Бид олон ижил Grafana вэб серверүүдийг үүсгэх боломжийг олгодог дискний дүрстэй болмогц бид жишээний бүлгийг үүсгэж болно. Yandex.Cloud платформ дээр энэ нэр томъёо нь ижил шинж чанартай виртуал машинуудын нэгдлийг хэлдэг. Жишээ бүлэг үүсгэх үед энэ бүлгийн бүх машинуудын прототипийг тохируулж, дараа нь тухайн бүлгийн шинж чанарыг (жишээлбэл, идэвхтэй машинуудын хамгийн бага ба хамгийн их тоо) тохируулдаг. Хэрэв одоогийн дугаар нь эдгээр шалгуурыг хангаагүй бол жишээний бүлэг өөрөө шаардлагагүй машинуудыг устгах эсвэл өөрийн дүр төрхөөр шинээр үүсгэх болно.
Даалгаврынхаа нэг хэсэг болгон бид өмнө нь үүсгэсэн дискний зургаас үүсгэгдэх вэб серверүүдийн бүлгийг үүсгэх болно.
Хамгийн гайхалтай нь хамгийн сүүлчийн бүлгийн тохиргоо юм. Ачаалал тэнцвэржүүлэгчтэй нэгтгэсэн зорилтот бүлэг нь хэд хэдэн товчлуур дээр дарж энэ бүлгийн виртуал машинууд дээр L3 тэнцвэржүүлэгчийг тохируулахад тусална.
Тэнцвэржүүлэгчийг тохируулахдаа би хоёр чухал зүйлийг хэрэгжүүлсэн.
- Би тэнцвэржүүлэгчийг 80-р порт дээрх хэрэглэгчийн урсгалыг хүлээн зөвшөөрч, Графанагийн амьдардаг виртуал машинуудын 3000-р порт руу чиглүүлэв.
- Би машинуудын амьдрах чадварыг шалгахын тулд 3000 порт руу залгах замаар тохируулсан.
Бяцхан хураангуй
Эцэст нь бид хүссэн хэрэглээний дэд бүтцийг гараар байрлуулж чадсан бөгөөд одоо бид өндөр тэсвэртэй Grafana үйлчилгээтэй боллоо. Та өгөгдлийн багцыг ачаалахын тулд програм руу нэвтрэх цэг болон ClickHouse кластерын хост болох тэнцвэржүүлэгчийн IP хаягийг л мэдэх хэрэгтэй.
Энэ нь ялалт юм шиг санагдаж байна уу? Тийм ээ, ялалт. Гэхдээ нэг зүйл намайг төөрөгдүүлсээр байна. Дээрх бүх үйл явц нь маш олон гарын авлагын алхмуудыг шаарддаг бөгөөд огт өргөжүүлэх боломжгүй; боломжтой бол би үүнийг автоматжуулахыг хүсч байна. Энэ бол дараагийн хэсгийг зориулах болно.
Терраформын нэгдэл
Бид 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 - програмыг байрлуулах хэсгийн танигч
үйлчилгээний_бүртгэлийн_id — үүлний харгалзах хэсэгт үйлчилгээний дансны таниулбар.
зургийн_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-г нь мэдсэнийхээ дараа шаардлагатай тохиргоотой дискний дүрсийг цуглуулж, кластерт хостыг зааж өгсөн. Гэхдээ одоо бид Terraform-ийг эхлүүлэхийн өмнө, тэр дундаа зураг бүтээх үед кластер 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
Intance group ба тэнцвэржүүлэгч
Шинэ дискний дүрсийг сэргээсний дараа бид 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
. Эдгээр нь виртуал машиныг эхлүүлэх үед гаргаж аваад Grafana тохиргоонд оруулах болно.
Энэ нь тэнцвэржүүлэгчээс хамаарна.
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
}
}
}
}
Бага зэрэг элсэн чихэр
Жаахан л үлдлээ. Дэд бүтцийг байрлуулсны дараа та Grafana 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 хаяг болон 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 платформ дээр байрлуулж болно. Пакер, Терраформ зэрэг HashiCorp-ийн ашигтай хэрэгслүүд танд үүнийг хийхэд тусална. Энэ нийтлэлийг хэн нэгэнд хэрэгтэй гэж найдаж байна :)
Жич Доор би энэ нийтлэлд өгсөн Пакер ба Терраформд зориулсан бэлэн жорыг олох боломжтой репозиторын холбоосыг хавсаргана.
Эх сурвалж: www.habr.com