در بخش قبلی مراحل ساخت کلاستر به صورت کامل توضیح داده شد. در این بخش قصد داریم تا بر روی کلاستر ایجاد شده یک دیتابیس mysql پیاده سازی کنیم. مهمترین نکته در راه اندازی هر دیتابیسی حفظ دیتای ذخیره شده در دیتابیس است. در صورتی که سرویس ما روی چندین نود قابل پیاده سازی باشد، با هر بار پیاده سازی دیتابیس در یک نود متفاوت اجرا میشود، که این مساله باعث از دست رفتن دیتا میشود.

برای حل این مساله باید محیط ذخیره دیتای دیتابیس یک جای ثابت و مشخص باشد. یک راه، پیاده سازی دیتابیس در یک نود ثابت و مشخص است. برای این کار میتوان با استفاده از قابلیت affinity در کوبرنتیز دیتابیس را همیشه در یک نود مشخص اجرا کرد تا دیتای دیتابیس از بین نرود.

راه حل دیگر استفاده از یک فضای ذخیره سازی مجزا است. در این روش یک ماشین مجزا برای ذخیره سازی طراحی میشود و تمام داده ها در آن ذخیره میشود. از مزایای دیگر استفاده از سرویس NFS برای ذخیره سازی داده این است که داده ها مستقل از نرم افزارها هستند و برای بکاپ گیری، تنها بکاپ گیری از ماشین ذخیره سازی کافی است و نیازی به بکاپ گیری از سایر نودهای پیاده سازی نیست.

در پست قبلی نحوه راه اندازی این ماشین توضیح داده شد. در این پست قصد دارم تا نحوه استفاده از این فضا در پیاده سازی دیتابیس mysql را آموزش بدهم.

برای این کار یک فایل کانفیگ mysql.yaml به صورت زیر ایجاد کنید.

apiVersion: v1
kind: ConfigMap
metadata: 
  name: db-env
data:   
  MYSQL_ROOT_PASSWORD: root_password
  MYSQL_DATABASE: mydatabase
  MYSQL_USER: db_user
  MYSQL_PASSWORD: db_password
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-deployment
spec:
  serviceName: mysql
  replicas: 1    
  selector:
    matchLabels:
      component: mysql
  template:
    metadata:
      labels:
        component: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:5.7
          ports:
            - containerPort: 3306
              name: exposed-port
          envFrom:
            - configMapRef:
                name: db-env                 
          livenessProbe:
            exec:
              command:
              - sh
              - -c
              - "mysqladmin ping -u root -p${MYSQL_ROOT_PASSWORD}"
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
            
          volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
                          
      volumes:
        - name: mysql-data
          nfs:
            path: /data/nfs1/mysql-data
            server: 192.168.68.157
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-cluster
spec:
  type: ClusterIP
  selector:
    component: mysql
  ports:
    - port: 3306
      targetPort: exposed-port

توضیح مختصری در خصوص کانفیگ بالا داده خواهد شد.

در بخش اول ابتدا متغیرهای محیطی mysql شامل پسورد دیتابیس، نام دیتابیس و غیره تنظیم شده است. در بخش بعدی تنظیمات مربوط به پیاده سازی mysql ایجاد شده است. در اینجا کانفیگ ایجاد شده در بخش اول توسط کانفیگ envFrom فراخوانی شده است. بخش اصلی مورد نظر ما بخش volumes و volumeMounts است. همانطور که مشاهده میکنید در بخش volumes، نوع volume از نوع nfs تعریف شده است. برای این نوع والیوم باید آدرس سرور مشخص شود. همانطور که در آموزش بخش 2 توضیح داده شد، آی پی ماشین ذخیره سازی 192.168.68.157 است، و محل ذیره سازی داده data/nfs1/ است. در بخش آخر هم کانفیگ دسترسی به دیتابیس پیاده سازی شده است.

حال با دستور زیر سرویس مورد نظر را اجرا کنید.

kubectl apply -f  mysql.yaml

همانطور که مشاهده میکنید با استفاده از یک سرویس Network File Storage میتوان بدون دغدغه از محل ذخیره سازی داده ها سرویس مورد نظر خود را راه اندازی کنید بدون اینکه دیتای شما از دست برود.

اشتراک گذاری

Leave a Comment

Your email address will not be published. Required fields are marked *

five + 8 =