วิธีสร้างไฮบริดคลาวด์โดยใช้ Kubernetes ที่สามารถแทนที่ DBaaS ได้

ฉันชื่อ Petr Zaitsev เป็น CEO และผู้ก่อตั้ง เพอร์โคนา และฉันอยากจะบอกคุณว่า:

  • เรามาจากโซลูชั่นโอเพ่นซอร์สสู่ฐานข้อมูลในรูปแบบบริการได้อย่างไร
  • มีวิธีใดบ้างในการปรับใช้ฐานข้อมูลในระบบคลาวด์
  • Kubernetes สามารถแทนที่ DBaaS ได้อย่างไร ลดการพึ่งพาผู้ขาย และรักษาความเรียบง่ายของ DBMS ในฐานะบริการ

บทความนี้จัดทำขึ้นตามรายงานที่ @Databases Meetup โดย Mail.ru Cloud Solutions & Tarantool ไม่อยากอ่านก็รับชมได้:


เรามาจากโอเพ่นซอร์สสู่ฐานข้อมูลในรูปแบบบริการในระบบคลาวด์ได้อย่างไร

ฉันทำงานในโอเพ่นซอร์สมาตั้งแต่ปลายยุค 90 เมื่อยี่สิบปีที่แล้ว การใช้โอเพ่นซอร์ส เช่น ฐานข้อมูล ไม่ใช่เรื่องง่าย จำเป็นต้องดาวน์โหลดซอร์สโค้ด แพตช์ คอมไพล์ จากนั้นจึงใช้งานเท่านั้น

จากนั้นโอเพ่นซอร์สต้องผ่านการลดความซับซ้อนหลายอย่าง:

  • แหล่งข้อมูล Tar.gz และ INSTALL ที่จำเป็นต้องรวบรวม
  • แพ็คเกจที่มีการขึ้นต่อกันเช่น .deb และ .rpm โดยคุณจะต้องติดตั้งชุดแพ็คเกจเท่านั้น
  • ที่เก็บแพ็กเกจเช่น APT และ YUM ซึ่งการติดตั้งจะเป็นไปโดยอัตโนมัติ
  • โซลูชันเช่น Docker และ Snap ซึ่งช่วยให้คุณรับแพ็คเกจโดยการติดตั้งโดยไม่ต้องพึ่งพาภายนอก

ส่งผลให้การใช้ซอฟต์แวร์โอเพ่นซอร์สง่ายขึ้น และยังช่วยลดอุปสรรคในการเข้าสู่การพัฒนาแอปพลิเคชันดังกล่าวอีกด้วย

ในขณะเดียวกัน ต่างจากสถานการณ์เมื่อ 20 ปีที่แล้ว เมื่อทุกคนเป็นผู้เชี่ยวชาญด้านการประกอบ ตอนนี้นักพัฒนาส่วนใหญ่ไม่สามารถสร้างเครื่องมือที่พวกเขาใช้จากแหล่งที่มาได้

อันที่จริงสิ่งนี้ก็ไม่เลวเพราะ:

  1. เราสามารถใช้ซอฟต์แวร์ที่ซับซ้อนมากขึ้นแต่ใช้งานง่ายมากขึ้น ตัวอย่างเช่น เบราว์เซอร์ใช้งานได้สะดวก แต่มีส่วนประกอบโอเพ่นซอร์สมากมาย และไม่สะดวกที่จะสร้างตั้งแต่ต้น
  2. ผู้คนจำนวนมากขึ้นสามารถเป็นนักพัฒนาซอฟต์แวร์โอเพ่นซอร์สและซอฟต์แวร์อื่นๆ ได้ ธุรกิจต่างๆ มีการใช้ซอฟต์แวร์มากขึ้น และมีความต้องการซอฟต์แวร์มากขึ้น

ข้อเสียคือขั้นตอนต่อไปในการลดความซับซ้อนเกี่ยวข้องกับการใช้โซลูชันระบบคลาวด์ และสิ่งนี้นำไปสู่การล็อคอินของผู้ขายบางราย นั่นคือ การผูกมัดกับซัพพลายเออร์รายเดียว เราใช้โซลูชันที่เรียบง่ายและผู้ให้บริการใช้ส่วนประกอบโอเพ่นซอร์ส แต่จริงๆ แล้ว พวกเขาติดอยู่กับหนึ่งในคลาวด์ขนาดใหญ่ นั่นคือ วิธีที่ง่ายและรวดเร็วที่สุดในการปรับใช้โอเพ่นซอร์ส (และซอฟต์แวร์ที่เข้ากันได้กับโอเพ่นซอร์ส) อยู่ในระบบคลาวด์โดยใช้ API ที่เป็นกรรมสิทธิ์

เมื่อพูดถึงฐานข้อมูลในระบบคลาวด์ มีสองแนวทาง:

  1. ประกอบโครงสร้างพื้นฐานฐานข้อมูลเช่นเดียวกับในศูนย์ข้อมูลทั่วไป นั่นคือ ใช้ Building Block มาตรฐาน เช่น คำนวณ พื้นที่เก็บข้อมูล และอื่นๆ ติดตั้ง Linux และฐานข้อมูล และกำหนดค่า
  2. ใช้ Database as a Service โดยที่ผู้ให้บริการนำเสนอฐานข้อมูลสำเร็จรูปภายในคลาวด์

DBaaS เป็นตลาดที่เติบโตอย่างรวดเร็วในขณะนี้ เนื่องจากช่วยให้นักพัฒนาสามารถทำงานกับฐานข้อมูลได้โดยตรง และลดการทำงานประจำให้เหลือน้อยที่สุด ผู้ให้บริการรับรองว่ามีความพร้อมใช้งานสูงและปรับขนาดได้ง่าย การแพตช์ฐานข้อมูล การสำรองข้อมูล และการปรับแต่งประสิทธิภาพ

ฐานข้อมูลสองประเภทเป็นบริการที่ใช้โอเพ่นซอร์สและอีกทางเลือกหนึ่งในรูปแบบของ Kubernetes

Database as a Service สำหรับฐานข้อมูลแบบเปิดมีสองประเภท:

  1. ผลิตภัณฑ์โอเพ่นซอร์สมาตรฐานที่รวมอยู่ในแบ็กเอนด์การดูแลระบบเพื่อการปรับใช้และการจัดการที่ง่ายดาย
  2. โซลูชันเชิงพาณิชย์ขั้นสูงพร้อมส่วนเสริมที่หลากหลาย เข้ากันได้กับโอเพ่นซอร์ส

ทั้งสองตัวเลือกลดความเป็นไปได้ในการย้ายระหว่างคลาวด์และลดการพกพาข้อมูลและแอปพลิเคชัน ตัวอย่างเช่น แม้ว่าคลาวด์ประเภทต่างๆ จะรองรับ MySQL มาตรฐานเดียวกัน แต่ก็มีความแตกต่างที่สำคัญระหว่างคลาวด์เหล่านั้น เช่น ในการทำงาน ประสิทธิภาพ การสำรองข้อมูล และอื่นๆ การย้ายจากคลาวด์หนึ่งไปยังอีกคลาวด์หนึ่งอาจเป็นเรื่องที่ท้าทาย โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันที่ซับซ้อน

และนี่คือคำถามที่เกิดขึ้น - เป็นไปได้ไหมที่จะได้รับความสะดวกจาก Database as a Service แต่เป็นโซลูชันโอเพ่นซอร์สธรรมดา?

ข่าวร้ายก็คือ น่าเสียดายที่ยังไม่มีวิธีแก้ปัญหาดังกล่าวในตลาด ข่าวดีก็คือมี Kubernetes ซึ่งช่วยให้คุณสามารถใช้โซลูชันดังกล่าวได้

Kubernetes เป็นระบบปฏิบัติการสำหรับคลาวด์หรือศูนย์ข้อมูลที่ช่วยให้คุณสามารถปรับใช้และจัดการแอปพลิเคชันบนเซิร์ฟเวอร์หลายเครื่องในคลัสเตอร์ แทนที่จะอยู่บนโฮสต์เดียว

ตอนนี้ Kubernetes เป็นผู้นำในประเภทของซอฟต์แวร์ดังกล่าว มีวิธีแก้ไขปัญหาดังกล่าวที่แตกต่างกันมากมาย แต่กลายเป็นมาตรฐาน บริษัทหลายแห่งที่เคยมุ่งเน้นไปที่โซลูชันทางเลือก ปัจจุบันมุ่งเน้นไปที่การปรับผลิตภัณฑ์ของตนเพื่อรองรับ Kubernetes

นอกจากนี้ Kubernetes ยังเป็นโซลูชันสากลที่ได้รับการสนับสนุนในระบบคลาวด์ส่วนตัว สาธารณะ และไฮบริดของผู้จำหน่ายหลายราย เช่น AWS, Google Cloud, Microsoft Azure, Mail.ru โซลูชั่นคลาวด์.

Kubernetes ทำงานร่วมกับฐานข้อมูลอย่างไร

เดิมที Kubernetes ได้รับการออกแบบมาสำหรับแอปพลิเคชันไร้สัญชาติที่ประมวลผลข้อมูล แต่ไม่ได้จัดเก็บข้อมูลใดๆ เช่น ไมโครเซอร์วิสหรือเว็บแอปพลิเคชัน ฐานข้อมูลอยู่อีกด้านหนึ่งของสเปกตรัม กล่าวคือ เป็นแอปพลิเคชันที่มีสถานะ และ Kubernetes เดิมทีไม่ได้มีไว้สำหรับแอปพลิเคชันดังกล่าว

อย่างไรก็ตาม มีฟีเจอร์ที่ปรากฏใน Kubernetes เมื่อเร็วๆ นี้ที่อนุญาตให้ใช้ฐานข้อมูลและแอปพลิเคชัน stateful อื่นๆ ได้:

  1. แนวคิด StatefulSet คือชุดดั้งเดิมทั้งหมดสำหรับการประมวลผลเหตุการณ์เกี่ยวกับการหยุดการทำงานของพ็อดและการนำ Graceful Shutdown ไปใช้ (การปิดแอปพลิเคชันที่คาดการณ์ได้)
  2. Persistent Volumes คือพื้นที่จัดเก็บข้อมูลที่เกี่ยวข้องกับพ็อด ซึ่งเป็นออบเจ็กต์การจัดการ Kubernetes
  3. Operator Framework - นั่นคือความสามารถในการสร้างส่วนประกอบสำหรับจัดการฐานข้อมูลและแอปพลิเคชัน stateful อื่นๆ ที่กระจายไปยังหลายโหนด

ขณะนี้ในระบบคลาวด์สาธารณะมีฐานข้อมูลขนาดใหญ่ในรูปแบบบริการ ซึ่งแบ็กเอนด์คือ Kubernetes เช่น CockroachCloud, InfluxDB, PlanetScale นั่นคือฐานข้อมูลบน Kubernetes ไม่เพียงแต่เป็นสิ่งที่เป็นไปได้ในทางทฤษฎีเท่านั้น แต่ยังเป็นสิ่งที่ใช้ได้ผลในทางปฏิบัติอีกด้วย

Percona มีโซลูชันโอเพ่นซอร์สสองรายการสำหรับ Kubernetes:

  1. ตัวดำเนินการ Kubernetes สำหรับเซิร์ฟเวอร์ Percona สำหรับ MongoDB
  2. Kubernetes Operator สำหรับ XtraDB CLUSTER เป็นบริการที่เข้ากันได้กับ MySQL และให้ความพร้อมใช้งานและความสม่ำเสมอสูง คุณยังสามารถใช้โหนดเดียวได้หากไม่ต้องการความพร้อมใช้งานสูง เช่น สำหรับฐานข้อมูล dev

ผู้ใช้ Kubernetes สามารถแบ่งออกเป็นสองกลุ่ม บางคนใช้ Kubernetes Operators โดยตรง ซึ่งส่วนใหญ่เป็นผู้ใช้ขั้นสูงที่มีความเข้าใจที่ดีเกี่ยวกับวิธีการทำงานของเทคโนโลยี คนอื่นเรียกใช้บนแบ็กเอนด์ - ผู้ใช้ดังกล่าวสนใจบางอย่างเช่น Database as a Service พวกเขาไม่ต้องการเจาะลึกถึงความแตกต่างของ Kubernetes สำหรับผู้ใช้กลุ่มที่สอง เรามีโซลูชันโอเพ่นซอร์สอื่น - Percona DBaaS CLI Tool นี่เป็นโซลูชันทดลองสำหรับผู้ที่ต้องการรับ DBaaS แบบโอเพ่นซอร์สที่ใช้ Kubernetes โดยไม่มีความเข้าใจอย่างลึกซึ้งเกี่ยวกับเทคโนโลยี

วิธีรัน DBaaS ของ Percona บน Google Kubernetes Engine

ในความคิดของฉัน Google Kubernetes Engine เป็นหนึ่งในการนำเทคโนโลยี Kubernetes ไปใช้อย่างมีประสิทธิภาพมากที่สุด มีให้บริการในหลายภูมิภาคของโลกและมี Command Line Tool (SDK) ที่ง่ายและสะดวก ซึ่งช่วยให้คุณสร้างสคริปต์แทนที่จะจัดการแพลตฟอร์มด้วยตนเอง

เพื่อให้ DBaaS ของเราทำงานได้ เราจำเป็นต้องมีส่วนประกอบต่อไปนี้:

  1. คิวเบคเทิล.
  2. Google Cloud SDK
  3. เพอร์โคนา DBaaS CLI

ติดตั้ง kubectl

เราติดตั้งแพ็คเกจสำหรับระบบปฏิบัติการของคุณ เราจะดูตัวอย่างของ Ubuntu รายละเอียดเพิ่มเติม ที่นี่.

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

การติดตั้ง Google Cloud SDK

เราติดตั้งแพ็คเกจซอฟต์แวร์ในลักษณะเดียวกัน รายละเอียดเพิ่มเติม ที่นี่.

# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] 
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk

การติดตั้ง Percona DBaaS CLI

ติดตั้งจากที่เก็บ Percona เครื่องมือ Percona DBaaS CLI ยังคงเป็นผลิตภัณฑ์ทดลอง ดังนั้นจึงอยู่ในพื้นที่เก็บข้อมูลทดลอง ซึ่งจะต้องเปิดใช้งานแยกต่างหาก แม้ว่าคุณจะติดตั้งที่เก็บ Percona ไว้แล้วก็ตาม

ขึ้น ที่นี่.

อัลกอริทึมการติดตั้ง:

  1. ตั้งค่าที่เก็บ Percona โดยใช้เครื่องมือ percona-release ก่อนอื่นคุณต้องดาวน์โหลดและติดตั้งแพ็คเกจ percona-release อย่างเป็นทางการจาก Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. เปิดใช้งานส่วนประกอบที่เก็บเครื่องมือทดลองดังต่อไปนี้:
    sudo percona-release enable tools experimental
    
  3. ติดตั้งแพ็คเกจ percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

การตั้งค่าการทำงานของส่วนประกอบ

ข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า ที่นี่.

ก่อนอื่นคุณต้องลงชื่อเข้าใช้บัญชี Google ของคุณ นอกจากนี้ Google Cloud ยังอนุญาตให้ผู้ใช้รายหนึ่งมีโปรเจ็กต์อิสระจำนวนมาก ดังนั้นคุณจึงต้องระบุโปรเจ็กต์ที่ใช้งานได้โดยใช้โค้ดสำหรับโปรเจ็กต์นี้:

gcloud auth login
gcloud config set project hidden-brace-236921

ต่อไปเราจะสร้างคลัสเตอร์ สำหรับการสาธิต ฉันได้สร้างคลัสเตอร์ Kubernetes ที่มีโหนดเพียงสามโหนดเท่านั้น ซึ่งเป็นคลัสเตอร์ขั้นต่ำที่จำเป็นสำหรับความพร้อมใช้งานสูง:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

คำสั่ง kubectl ต่อไปนี้ให้สิทธิ์ที่ต้องการแก่ผู้ใช้ปัจจุบันของเรา:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

จากนั้นเราสร้างเนมสเปซและทำให้มันใช้งานได้ เนมสเปซก็เหมือนกับโปรเจ็กต์หรือสภาพแวดล้อมเช่นกัน แต่อยู่ในคลัสเตอร์ Kubernetes แล้ว มันเป็นอิสระจากโครงการ Google Cloud:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

กำลังเริ่มต้นคลัสเตอร์

เมื่อเราทำตามขั้นตอนเหล่านี้แล้ว เราก็สามารถเริ่มต้นคลัสเตอร์แบบ XNUMX โหนดได้ด้วยคำสั่งง่ายๆ นี้:

# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              Nt9YZquajW7nfVXTTrP
Status:            ready

วิธีเชื่อมต่อกับคลัสเตอร์

โดยค่าเริ่มต้น จะใช้ได้เฉพาะภายใน Kubernetes เท่านั้น นั่นคือไม่สามารถเข้าถึงได้จากเซิร์ฟเวอร์นี้ซึ่งคุณรันคำสั่ง "สร้าง" เพื่อให้สามารถใช้งานได้ เช่น สำหรับการทดสอบกับไคลเอนต์ คุณต้องส่งต่อพอร์ตผ่านการแมปพอร์ต:

kubectl port-forward svc/example-proxysql 3306:3306 $

จากนั้นเราจะเชื่อมต่อไคลเอนต์ MySQL ของคุณ:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

คำสั่งการจัดการคลัสเตอร์ขั้นสูง

ฐานข้อมูลบน IP สาธารณะ

หากคุณต้องการโซลูชันที่ถาวรมากขึ้นสำหรับความพร้อมใช้งานของคลัสเตอร์ คุณสามารถรับที่อยู่ IP ภายนอกได้ ในกรณีนี้จะสามารถเข้าถึงฐานข้อมูลได้จากทุกที่ วิธีนี้มีความปลอดภัยน้อยกว่า แต่มักจะสะดวกกว่า สำหรับ IP ภายนอกเราใช้คำสั่งต่อไปนี้:

# percona-dbaas mysql create-db exposed 
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     exposed
Resource Endpoint: 104.154.133.197
Port:              3306
User:              root
Pass:              k0QVxTr8EVfgyCLYse
Status:            ready

To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse

ตั้งรหัสผ่านอย่างชัดเจน

แทนที่จะให้ระบบสุ่มสร้างรหัสผ่าน คุณสามารถตั้งรหัสผ่านได้อย่างชัดเจน:

# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              mypassword
Status:            ready

ฉันกำลังแสดงผลลัพธ์ของสคริปต์ในรูปแบบที่มนุษย์สามารถอ่านได้ แต่ก็รองรับรูปแบบ JSON เช่นกัน

กำลังปิดความพร้อมใช้งานสูง

ด้วยคำสั่งต่อไปนี้ คุณสามารถปิดใช้งานความพร้อมใช้งานสูงเพื่อปรับใช้โหนดเดียวได้:

# percona-dbaas mysql create-db singlenode 
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              22VqFD96mvRnmPMGg
Status:            ready

นี่คือโซลูชันสำหรับการทดสอบงานเพื่อให้ MySQL ใช้งานได้อย่างรวดเร็วและง่ายดายที่สุดเท่าที่จะเป็นไปได้ ทดสอบแล้วปิดระบบหรือใช้เพื่อการพัฒนา

เครื่องมือ Percona DBaaS CLI ช่วยให้คุณได้รับโซลูชันที่คล้ายกับ DBaaS บน Kubernetes ในเวลาเดียวกัน เรายังคงพัฒนาฟังก์ชันและการใช้งานต่อไป

รายงานนี้ถูกนำเสนอครั้งแรกที่ @การพบปะฐานข้อมูล โดย Mail.ru Cloud Solutions&Tarantool ดู วีดีโอ การแสดงอื่น ๆ และสมัครรับประกาศกิจกรรมบน Telegram เกี่ยวกับ Kubernetes ที่ Mail.ru Group.

มีอะไรให้อ่านอีกในหัวข้อ:

  1. ฐานข้อมูลในแพลตฟอร์ม IIoT ที่ทันสมัย
  2. วิธีเลือกฐานข้อมูลสำหรับโครงการเพื่อให้คุณไม่ต้องเลือกอีก

ที่มา: will.com

เพิ่มความคิดเห็น