Helo pawb! Fel rhan o fy ngwaith cwrs, roeddwn yn ymchwilio i bosibiliadau platfform cwmwl domestig mor
Beth ydych chi eisiau ei dderbyn?
Ar ôl cychwyn peiriant rhithwir gyda gweinydd gwe, gallwch fynd at ei westeiwr a chael UI hardd, nodi cronfeydd data fel ffynonellau ar gyfer gwaith pellach, creu dangosfyrddau a graffiau.
Mae gan y fersiwn sylfaenol un anfantais sylweddol - nid yw'n goddef bai o gwbl. Hynny yw, mae perfformiad cyfan y cais yn dibynnu ar hyfywedd un peiriant rhithwir. Os bydd hi'n gwrthod neu os bydd 10 o bobl yn agor yr UI ar yr un pryd, yna bydd problemau'n codi.
Maent yn cael eu datrys yn syml: does ond angen i chi ddefnyddio llawer o beiriannau rhithwir union yr un fath â gweinydd gwe a'u gosod o dan gydbwysedd L3. Ond nid yw popeth mor glir yma. Mae Grafana yn storio gosodiadau defnyddwyr (llwybrau i gronfeydd data, dangosfyrddau, graffeg, ac ati) yn uniongyrchol ar ddisg ei beiriant rhithwir. Felly, os byddwch chi'n newid rhai gosodiadau yn yr UI, yna bydd y newidiadau hyn yn cael eu harddangos ar y peiriant rhithwir lle anfonodd y balans atom ni yn unig. Bydd hyn yn arwain at osodiadau anghyson ar gyfer ein cais, problemau gyda lansio a defnyddio.
Yma bydd cronfa ddata arall yn dod i'r adwy, er enghraifft, MySQL neu'r hyn sy'n cyfateb iddo. Rydyn ni'n dweud wrth Grafana y dylai hi storio gosodiadau defnyddwyr yn y gronfa ddata "sbâr" hon. Ar ôl hynny, bydd yn ddigon i nodi'r llwybr i'r gronfa ddata hon ar bob peiriant unwaith, a golygu'r holl leoliadau defnyddiwr eraill ar unrhyw un o'r peiriannau rhithwir, byddant yn tyfu ar y gweddill.
Dyma ddiagram o seilwaith y cais terfynol:
Dysgwch sut i godi gyda'ch dwylo
MySQL a ClickHouse
Cyn defnyddio cymhwysiad o'r fath gyda chlicio botwm, roedd angen dysgu sut i godi pob un o'i gydrannau â dolenni a'u hintegreiddio â'i gilydd.
Bydd Yandex.Cloud yn ein helpu ni yma, sy'n darparu balanswyr L3, ClickHouse a MySQL fel gwasanaethau a reolir. Nid oes ond angen i'r defnyddiwr nodi'r paramedrau ac aros nes bod y platfform yn dod â phopeth i gyflwr gweithio.
Fe wnes i gofrestru, creu cwmwl a chyfrif bilio i mi fy hun. Ar ôl hynny, es i mewn i'r cwmwl a chodi clystyrau MySQL a ClickHouse gyda gosodiadau lleiaf posibl. Arhoswch nes iddynt ddod yn actif.
Mae angen i chi hefyd gofio creu cronfa ddata ym mhob clwstwr a ffurfweddu mynediad iddi trwy fewngofnodi a chyfrinair. Nid af i fanylion yma - mae popeth yn eithaf amlwg yn y rhyngwyneb.
Y manylion anamlwg oedd bod gan y cronfeydd data hyn lawer o westeion sy'n darparu eu goddefgarwch o ddiffygion. Fodd bynnag, mae Grafana yn gofyn am un gwesteiwr yn union ar gyfer pob cronfa ddata y mae'n gweithio gyda hi. Darlleniad hir c-<cluster_id>.rw.mdb.yandexcloud.net
Mapiau i'r prif westeiwr clwstwr gweithredol cyfredol gyda'r ID cyfatebol. Dyna a roddwn i Grafana.
Gweinydd gwe
Nawr mae i fyny i'r gweinydd gwe. Gadewch i ni godi peiriant rhithwir rheolaidd gyda Linux a sefydlu Grafana arno gyda'n dwylo ni.
Gadewch i ni gysylltu trwy ssh a gosod y pecynnau angenrheidiol.
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
Ar ôl hynny, byddwn yn cychwyn Grafana o dan systemctl ac yn gosod yr ategyn ar gyfer gweithio gyda ClickHouse (ie, nid yw'n cael ei gyflenwi yn y pecyn sylfaenol).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Popeth ar ôl hynny gyda gorchymyn syml
sudo service grafana-server start
byddwn yn cychwyn y gweinydd gwe. Nawr bydd yn bosibl gyrru yn y cyfeiriad IP allanol y peiriant rhithwir yn y porwr, nodi porthladd 3000 a gweld y grafana UI hardd.
Ond peidiwch â rhuthro, cyn sefydlu Grafana, rhaid i chi beidio ag anghofio nodi'r llwybr i MySQL er mwyn iddo storio'r gosodiadau yno.
Mae cyfluniad cyfan gweinydd gwe Grafana yn y ffeil /etc/grafana/grafana.ini
. Mae'r llinell ofynnol yn edrych fel hyn:
;url =
Rydyn ni'n datgelu'r gwesteiwr i'r clwstwr MySQL. Mae'r un ffeil yn cynnwys y mewngofnodi a'r cyfrinair ar gyfer cyrchu Grafana yn y llun uchod, sydd ill dau yn gyfartal yn ddiofyn admin
.
Gallwch ddefnyddio gorchmynion 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
Mae'n bryd ailgychwyn y gweinydd gwe!
sudo service grafana-server restart
Nawr yn y Grafana UI, byddwn yn nodi ClickHouse fel y Ffynhonnell Data.
Llwyddais i gyflawni cyfluniad gweithio gyda'r gosodiadau canlynol:
Rwyf wedi rhoi fel URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
I gyd! Mae gennym un peiriant rhithwir sy'n gweithio gyda gweinydd gwe wedi'i gysylltu â CH a MySQL. Gallwch eisoes uwchlwytho'r set ddata i ClickHouse ac adeiladu dangosfyrddau. Fodd bynnag, nid ydym wedi cyrraedd ein nod eto ac nid ydym wedi defnyddio seilwaith llawn.
Packer
Mae Yandex.Cloud yn caniatáu ichi greu delwedd ddisg o beiriant rhithwir sy'n bodoli eisoes, ac yn seiliedig arno, gallwch greu cymaint o beiriannau union yr un fath ag y dymunwch. Dyma'n union beth fyddwn ni'n ei ddefnyddio. I gydosod y ddelwedd yn gyfleus, cymerwch yr offeryn
Bydd ein ffeil json yn cynnwys dau floc: adeiladwyr a darparwyr. Mae'r bloc cyntaf yn disgrifio paramedrau'r ddelwedd ei hun fel endid, ac mae'r ail yn disgrifio'r cyfarwyddiadau ar gyfer ei llenwi â'r cynnwys angenrheidiol.
adeiladwyr
{
"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"
}
],
...
}
Yn y templed hwn, mae angen i chi osod dynodwr yr adran yn y cwmwl lle rydych chi am greu delwedd, yn ogystal â'r llwybr i'r ffeil gyda'r allweddi o'r cyfrif gwasanaeth a grëwyd yn flaenorol yn yr adran hon. Gallwch ddarllen mwy am greu cyfrifon gwasanaeth ac allweddi ar ffurf ffeil yn yr adran gyfatebol.
Mae'r cyfluniad hwn yn dweud y bydd delwedd y ddisg yn cael ei hadeiladu yn seiliedig ar y platfform ubuntu-1804-lts
, wedi'i osod yn yr adran defnyddiwr priodol yn y teulu delwedd GRAFANA
dan yr enw grafana-{{timestamp}}
.
Darpariaethwyr
Nawr am ran fwy diddorol y cyfluniad. Bydd yn disgrifio'r dilyniant o gamau gweithredu y bydd angen eu perfformio ar beiriant rhithwir cyn rhewi ei gyflwr i ddelwedd disg.
{
...,
"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"
]
}
]
}
Yma, rhennir yr holl gamau gweithredu yn 3 cham. Yn y cam cyntaf, gweithredir sgript syml sy'n creu cyfeiriadur ategol.
paratoi-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Yn y cam nesaf, rydyn ni'n gosod sgript yn y cyfeiriadur hwn, y bydd angen ei redeg yn syth ar ôl cychwyn y peiriant rhithwir. Bydd y sgript hon yn rhoi'r newidynnau defnyddiwr i'w gosod yng nghyfluniad Grafana ac yn ailgychwyn y gweinydd gwe.
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
Ar ôl hynny, mae 3 pheth i'w gwneud:
1) gosod pecynnau
2) cychwyn Grafana o dan systemctl a gosod yr ategyn ClickHouse
3) rhowch y sgript setup.sh yn y ciw i redeg yn syth ar ôl troi ar y peiriant rhithwir.
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
rhedeg-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;
Nawr mae'n aros i redeg Packer a chael y ddelwedd allbwn wedi'i gosod yn y rhaniad penodedig. Wrth greu peiriant rhithwir, gallwch ei ddewis fel disg cychwyn ac, ar ôl dechrau, cael gweinydd gwe Grafana parod.
Grŵp enghraifft a chydbwysedd
Unwaith y bydd delwedd ddisg sy'n eich galluogi i greu llawer o weinyddion gwe Grafana union yr un fath, gallwn greu grŵp enghreifftiau. Ar blatfform Yandex.Cloud, mae'r term hwn yn cyfeirio at undeb peiriannau rhithwir sydd â'r un nodweddion. Wrth greu grŵp enghraifft, mae prototeip yr holl beiriannau yn y grŵp hwn yn cael ei ffurfweddu, ac yna nodweddion y grŵp ei hun (er enghraifft, y nifer lleiaf ac uchaf o beiriannau gweithredol). Os nad yw'r rhif presennol yn bodloni'r maen prawf hwn, yna bydd y grŵp enghreifftiau ei hun yn cael gwared ar beiriannau diangen neu'n creu rhai newydd yn y ddelwedd a'r tebygrwydd.
Fel rhan o'n tasg, byddwn yn creu grŵp enghreifftiol o weinyddion gwe a fydd yn cael eu silio o'r ddelwedd ddisg a grëwyd yn flaenorol.
Mae'r gosodiad grŵp enghraifft olaf yn wirioneddol nodedig. Bydd y grŵp targed mewn integreiddio â Load Balancer yn eich helpu i sefydlu cydbwysedd L3 ar ben peiriannau rhithwir y grŵp hwn trwy wasgu cwpl o fotymau.
Wrth sefydlu'r balancer, rhoddais ddau bwynt pwysig ar waith:
- Fe'i gwnes fel bod y balancer yn derbyn traffig defnyddwyr ar borthladd 80, a'i ailgyfeirio i borthladd 3000 o beiriannau rhithwir, yn union lle mae Grafana yn byw.
- Sefydlu gwiriadau iechyd peiriannau trwy eu pingio ar borthladd 3000.
mini-gyfanswm
Yn olaf, roeddem yn gallu defnyddio'r seilwaith cymwysiadau dymunol â llaw, ac yn awr mae gennym wasanaeth Grafana hynod wydn. Nid oes ond angen gwybod cyfeiriad IP y cydbwyseddwr fel y pwynt mynediad i'r cais a gwesteiwr y clwstwr ClickHouse er mwyn llwytho'r set ddata i mewn iddo.
Byddai'n ymddangos yn fuddugoliaeth? Ie, buddugoliaeth. Ond mae rhywbeth yn fy mhoeni o hyd. Mae'r broses gyfan uchod yn gofyn am lawer o gamau gweithredu â llaw ac nid yw'n graddio o gwbl, rwyf am ei awtomeiddio os yn bosibl. Dyma fydd ffocws yr adran nesaf.
Integreiddio gyda Terraform
Unwaith eto byddwn yn defnyddio teclyn o HashiCorp o'r enw
Mae'r holl waith gyda Terraform yn dibynnu ar ysgrifennu ffeil ffurfweddu (*.tf
) a chreu seilwaith yn seiliedig arno.
Newidynnau
Ar ddechrau'r ffeil, byddwn yn dileu'r newidynnau sy'n pennu ble a sut y bydd y seilwaith yn y dyfodol yn cael ei ddefnyddio.
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>"
}
Bydd y broses gyfan o ddefnyddio cais yn dibynnu ar adeiladu delwedd disg a gosod y newidynnau hyn. Gadewch imi egluro beth maen nhw'n gyfrifol amdano:
oauth_tocyn — tocyn mynediad i'r cwmwl. Gellir ei gael gan
cwmwl_id - dynodwr y cwmwl lle byddwn yn defnyddio'r cymhwysiad
ffolder_id — dynodwr yr adran lle byddwn yn defnyddio'r cais
gwasanaeth_cyfrif_id — dynodwr y cyfrif gwasanaeth yn adran gyfatebol y cwmwl.
delwedd_id - dynodwr y ddelwedd ddisg a gafwyd gan ddefnyddio Packer
enw defnyddiwr и cyfrinair - enw defnyddiwr a chyfrinair i gael mynediad i'r ddwy gronfa ddata a gweinydd gwe Grafana
dbenw - enw cronfa ddata y tu mewn i glystyrau CH a MySQL
llwybr_allwedd_cyhoeddus - y llwybr i'r ffeil gyda'ch allwedd ssh cyhoeddus, y gallwch chi gysylltu â hi o dan yr enw ubuntu
i beiriannau rhithwir gyda gweinyddwyr gwe
Gosodiad darparwr
Nawr mae angen i chi ffurfweddu'r darparwr Terraform - yn ein hachos ni, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Gallwch weld ein bod ni'n defnyddio'r newidynnau a ddiffinnir uchod yma.
Rhwydwaith a chlystyrau
Nawr, gadewch i ni greu rhwydwaith lle bydd elfennau o'n seilwaith yn cyfathrebu, tri is-rwydwaith (un ym mhob rhanbarth) ac yn codi'r clystyrau CH a 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
}
}
Fel y gallwch weld, mae pob un o'r ddau glwstwr wedi'i adeiladu i fod yn weddol oddefgar o ddiffygion trwy gael eu gosod mewn tri Pharth Argaeledd.
Gweinyddwyr gwe
Mae'n ymddangos y gallwch chi barhau yn yr un ysbryd, ond rhedais i anhawster. Cyn hynny, codais y clwstwr MySQL yn gyntaf a dim ond ar ôl hynny, gan wybod ei ID, casglais ddelwedd ddisg gyda'r cyfluniad a ddymunir, lle nodais y gwesteiwr i'r clwstwr. Ond nawr nid ydym yn gwybod ID y clwstwr cyn lansio Terraform, gan gynnwys ar adeg adeiladu'r ddelwedd. Felly roedd yn rhaid i mi droi at y canlynol
Gan ddefnyddio'r gwasanaeth metadata o Amazon, byddwn yn trosglwyddo rhai paramedrau i'r peiriant rhithwir, y bydd yn ei dderbyn a'i brosesu. Mae angen i'r peiriant fynd i'r metadata ar gyfer gwesteiwr MySQL y clwstwr ac ar gyfer yr enw defnyddiwr-cyfrinair a nododd y defnyddiwr yn y ffeil Terraform ar ôl cychwyn. Newidiwch gynnwys y ffeil ychydig setup.sh
, sy'n rhedeg pan fydd y peiriant rhithwir yn cael ei droi ymlaen.
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
Inance group a balancer
Ar ôl ailadeiladu'r ddelwedd ddisg newydd, gallwn o'r diwedd ychwanegu ein ffeil ar gyfer Terraform.
Rydym yn nodi ein bod am ddefnyddio delwedd disg sy'n bodoli eisoes:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Nawr, gadewch i ni greu grŵp enghraifft:
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"
}
}
Mae'n werth talu sylw i sut y gwnaethom drosglwyddo i'r metadata cluster_uri
, username
и password
. Eu peiriant rhithwir fydd yn ei gael wrth gychwyn a'i roi yn y ffurfwedd Grafana.
Mae'n ymwneud â'r balancer.
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
}
}
}
}
Ychydig o siwgr
Ychydig iawn oedd ar ôl. Ar ôl i'r seilwaith gael ei ddefnyddio, bydd yn rhaid i chi fynd i UI Grafana ac ychwanegu'r clwstwr CH â llaw (y mae angen i chi ei gael o hyd) fel Ffynhonnell Data. Ond mae Terraform yn gwybod ID y clwstwr. Gadewch i ni ei gael i orffen y swydd.
Gadewch i ni ychwanegu darparwr newydd - Grafana, a llithro'r IP balancer fel gwesteiwr. Bydd yr holl newidiadau y mae Terraform yn eu gwneud ar y peiriant lle mae ei gydbwysydd yn penderfynu yn tyfu yn MySQL, ac felly ar bob peiriant arall.
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"
}
Gadewch i ni cribo
Arddangos cydbwyseddwr IP a gwesteiwr clwstwr 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"
}
Gall redeg
I gyd! Mae ein ffeil ffurfweddu yn barod a gallwn, trwy osod newidynnau, ddweud wrth Terraform i godi popeth a ddisgrifiwyd gennym uchod. Cymerodd y broses gyfan tua 15 munud i mi.
Ar y diwedd, gallwch weld neges hyfryd:
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
Ac yn y cwmwl, bydd elfennau o'r seilwaith uwch yn weladwy:
Crynhoi
Nawr, gan ddefnyddio enghraifft Grafana, gall pob un ohonoch ddefnyddio cymwysiadau gyda phensaernïaeth cwmwl gwasgaredig ar blatfform Yandex.Cloud. Gall offer defnyddiol gan HashiCorp fel Packer a Terraform eich helpu gyda hyn. Rwy'n gobeithio y bydd yr erthygl hon yn ddefnyddiol i rywun 🙂
PS Isod byddaf yn atodi dolen i'r ystorfa, lle gallwch ddod o hyd i ryseitiau parod ar gyfer Packer a Terraform, darnau y cyfeiriais atynt yn yr erthygl hon.
Ffynhonnell: hab.com