CentOS 7 — MySQL 8 установка

По умолчанию в CentOS используется MariaDB, для установки MySQL нужно добавить репозиторий:

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

 

Смотрим список репозиториев:

sudo yum repolist

 

Устанавливаем:

sudo yum install mysql-community-server

FIX ERROR — MySQL: Your password does not satisfy the current policy requirements

При попытке задать пароль пользователю mysql, возникает следующая ошибка:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

Эта ошибка появляется, если ваш пароль не соответствует следующим требованиям, для "validate_password.policy" в режиме "MEDIUM" это:

  • Минимальная длина 8 символов
  • Минимум одна цифра
  • Минимум одна буква верхнего регистра
  • Минимум один спецсимвол

 

Решение:

1. Задать пароль, который соответствует требованиям безопасности к паролям.

2. Или понизить уровень требования безопасности пароля:

 

Если вам подходит второй вариант, то логинимся в mysql и смотрим текущее значение:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

 

И понижаем уровень:

SET GLOBAL validate_password.policy=LOW;

MySQL — Сброс root пароля

Останавливаем сервис mysqld и запускаем со следующими ключами:

sudo mysqld --skip-grant-tables --user=mysql &

 

Логинимся уже без пароля:

mysql -u root

 

И выполняем:

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOUR_NEW_ROOT_PASSWORD';
\q;

 

Теперь службу mysqld запущенную в фоне нужно остановить. Смотрим ID процесса:

sudo ps aux | grep mysql

 

Убиваем процесс:

sudo kill 12345

 

И запускаем сервис mysqld:

sudo systemctl start mysqld

Kubernetes — Пример манифеста для RabbitMQ

 

Пример манифеста для создания конфигмапа, деплоймента и сервиса для RabbitMQ

manifest.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: rabbitmq-config
  namespace: staging
  labels:
    app: rabbitmq
data:
  RABBITMQ_DEFAULT_USER: "user"
  RABBITMQ_DEFAULT_PASS: "password"
  RABBITMQ_DEFAULT_VHOST: "vhost"

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: rabbitmq
  namespace: staging
  labels:
    app: rabbitmq-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rabbitmq-app
  strategy:
    type: RollingUpdate
  progressDeadlineSeconds: 300
  template:
    metadata:
      labels:
        app: rabbitmq-app
    spec:
      containers:
      - image: rabbitmq:3
        name: rabbitmq
        imagePullPolicy: "IfNotPresent"
        envFrom:
          - configMapRef:
              name: rabbitmq-config
        ports:
          - containerPort: 5672
        volumeMounts:
          - mountPath: /var/lib/rabbitmq
            subPath: data/rabbitmq
            name: persistent-storage
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: persistent-storage

---

apiVersion: v1
kind: Service
metadata:
  name: rabbitmq-svc
  namespace: staging
spec:
  ports:
  - port: 5672
    targetPort: 5672
  selector:
    app: rabbitmq-app

Kubernetes — Пример манифеста для Postgres

 

Пример манифеста для создания деплоймента и сервиса для PostgreSQL

manifest.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  namespace: staging
  labels:
    app: postgres-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres-app
  strategy:
    type: RollingUpdate
  progressDeadlineSeconds: 300
  template:
    metadata:
      labels:
        app: postgres-app
    spec:
      containers:
      - image: postgres:11
        name: postgres
        imagePullPolicy: "IfNotPresent"
        ports:
          - containerPort: 5432
        volumeMounts:
          - mountPath: /var/lib/postgresql/data
            subPath: data/postgres/data
            name: persistent-storage
      volumes:
      - name: persistent-storage
        persistentVolumeClaim:
          claimName: persistent-storage

---

apiVersion: v1
kind: Service
metadata:
  name: postgres-svc
  namespace: staging
spec:
  ports:
  - port: 5432
    targetPort: 5432
  selector:
    app: postgres-app

GKE — PersistentVolumeClaim

pvc.yml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: persistent-storage
  namespace: staging
spec:
  accessModes:
    - ReadOnlyMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 30Gi
  storageClassName: standard

 

Создаем PVC:

kubectl create -f pvc.yml

 

Проверяем:

kubectl get pvc -n staging
NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistent-storage   Bound    pvc-bd856312-9be4-11e9-bb1d-42010a9c01f3   30Gi       ROX            standard       17s

Jenkins — Libvirt Slaves Plugin + MacOS

 

Пример того, как используя плагин Libvirt Slaves Plugin для Jenkins'а подключить воркеров OSX запущенных на QEMU/Virsh, которые могут работать On-demend.

 

Этап настройки MacOS как Jenkins как такового упущена.

Первое что нужно, это установить Libvirt Slaves плагин. Переходим в конфигурацию Jenkins'а и находим "Управление плагинами"

 

 

Во вкладке "Доступные" ищем Libvirt Slaves и устанавливаем.

 

 

После чего в настройках Jenkins'а в самом низу появится блок "Cloud". Тут необходимо подключить наш гипервизор. В данном примере используется QEMU, который работает на удаленном сервере.

Поэтому для начала необходимо на Jenkins сервере установить "libvirt" пакет.

Для Ubuntu:

apt install apt install libvirt

 

Так же закрытый SSH ключ пользователя "jenkins" добавляем в "authorized_keys" пользователя "root" на гипервизоре.

 

Добавляем наш гипервизор в Jenkins

 

И проверяем "Test connection"

Так же в "Расширенные" можно указать нестандартный SSH порт и выбрать SSH ключ.

Параметр "Concurrent Slaves Capacity" задаем максимальное количество запущенных виртуальных машин на гипервизоре одновременно, "0" — неограниченное количество, но с этой переменной может возникнуть баг, который так и не пофиксили. Может виртуальная машина не запускаться, из-за ошибки что вы достигли максимального количества виртуалок, хотя вы его не привешали, для запуска нужно открыть настройки и поменять значение на любое другое и применить.

 

Теперь можем добавлять "Node"

 

Сразу после создания узла, список виртуальных машин у меня был пуст, хотя на гипервизоре было запущенно 4 виртуальных машины.

 

Мне помогло следующее, сразу сохранить данный узел и открыть его на редактирование.

 

 

Так как MacOS использует OVMF файлы, то мы не сможем использовать "Snapshot", мой способ для "revert" будет ниже.

 

В данной конфигурации Slave будет использоваться только при использовании лейбла.

 

Параметр "Availability" задает доступность агента, если задать только по запросу, то агент будет выключать виртуальную машину, и при необходимости будет сам ее запускать.

 

Переменную "VM_NAME" я использую для "обнуления" виртуальной машины после каждой сборки. Для этого, на гипервизоре создадим скрипт со следующим содержимым:

kvm_image_revert.sh

#!/bin/bash

VM_NAME="$1"
VM_PATH="/var/lib/kvm/vm_images"
VIRSH="/usr/bin/virsh"

sleep 30

$VIRSH define $VM_PATH/$VM_NAME/$VM_NAME.xml
$VIRSH snapshot-delete --domain $VM_NAME --metadata pure_system
rm $VM_PATH/$VM_NAME/mac_hdd.pure_system
$VIRSH destroy $VM_NAME
$VIRSH snapshot-create-as --domain $VM_NAME --name pure_system --disk-only
$VIRSH start $VM_NAME

 

Для работы скрипта нужен один аргумент, это имя виртуальной машины. Это же имя у меня соответствует путям к образам виртуальных машин.

В XML файле в качестве диска должен быть указан оригинальный образ диска, а не снапшот. Тем самым при "define" мы переключаемся на него. Затем удаляем снапшот с именем "pure_system" и удаляем его диск. Если снапшота на момент запуска скрипта не было, ничего страшного, в конце скрипта он создастся. После удаления снапшота выключается виртуальная машина, создается снапшот и запускается виртуальная машина со снапшота. Тем самым все изменения будут проходить в снапшоте, и при каждом запуске скрипта будет создаваться новой на основе оригинального диска, в данном примере это "mac_hdd.img"

 

Так как состояние виртуальной машины будет всегда сбрасываться, то будем лог сборки и ipa файл будем архивировать в артефакты. И последним пунктом обращаемся со сборщика на гипервизор на запуск скрипта в фоне на "обнуление" виртуальной машины. Для этого SSH ключ сборщика должен быть добавлен на гипервизор.

Jenkinsfile:

stage ('iOS. Make artifacts') {
    steps {
        echo "Making Artifacts..."
    }
    post {
        always {
            archiveArtifacts artifacts: "ios_build/*.ipa", onlyIfSuccessful: false
            archiveArtifacts artifacts: "/Users/admin/Library/Logs/gym/*.log", onlyIfSuccessful: false
            sh "rm -rf $WORKSPACE/ios_build"
        }
    }
}
stage ('Revert VM image') {
    steps {
        script {
            sh "ssh -i /Users/admin/.ssh/kvm_server [email protected] \"nohup /scripts/kvm_image_revert.sh $VM_NAME > /dev/null 2>&1 &\""
        }
    }
}

Unix — I/O test

 

Fio

Random read/write performance

fio --randrepeat=1 --ioengine=posixaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

Random read performance

fio --randrepeat=1 --ioengine=posixaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread

Random write performance

fio --randrepeat=1 --ioengine=posixaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite

(On MacOS we must use posixaio ioengine. If you are on running some different flavour of Unix just replace –ioengine=posixaio with eg. –ioengine=libaio for Ubuntu)