MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách thiết lập sao chép MariaDB 10.3 bằng Ansible và Vagrant

Việc triển khai thủ công là phổ biến, nhưng chúng có thể chậm và đơn điệu, nếu bạn đã từng thử cài đặt Oracle RAC với thiết lập Data Guard trên nhiều hơn ba nút, bạn sẽ hiểu ý tôi là gì. Tùy thuộc vào số lượng nút, các bước triển khai có thể tốn thời gian và có khả năng xảy ra lỗi. Tất nhiên, có rất nhiều “cách thực hiện” tốt về cách thiết lập cụm cơ sở dữ liệu thủ công, tuy nhiên, với cách tiếp cận thủ công trên quy mô, có nhiều câu hỏi bổ sung cần giải quyết.

Các trường hợp khác trong môi trường của tôi có được thiết lập theo cách tương tự không? Hệ thống QA đó có được thiết lập giống như cách thức sản xuất không? Liệu những gì chúng tôi vừa triển khai đã sẵn sàng sản xuất chưa? Để giải quyết tất cả các câu hỏi đó, việc triển khai ngày càng được tự động hóa thông qua các công cụ quản lý cấu hình.

Các tài nguyên liên quan Tự động hóa cơ sở dữ liệu với Puppet:Triển khai MySQL &MariaDB Replication Cách tự động hóa triển khai MySQL Galera Cluster bằng s9s CLI và Chef Cách tự động di chuyển từ MySQL độc lập sang Galera Cluster bằng Ansible ClusterControl cho MariaDB

Các công cụ quản lý cấu hình phổ biến như Puppet, Chef và Ansible là những công nghệ đã được chứng minh trong việc triển khai các dịch vụ CNTT khác nhau. Chúng giúp loại bỏ công việc thủ công, giảm thiểu rủi ro do lỗi của con người và có thể triển khai nhanh chóng. Trong blog hôm nay, chúng ta sẽ xem xét một trong số chúng.

Ansible là một công cụ quản lý hệ thống mã nguồn mở để tập trung và tự động hóa việc quản lý cấu hình. Với Ansible, bạn có thể dễ dàng tự động hóa các triển khai cơ sở dữ liệu khác nhau và thực hiện các tác vụ quản trị đơn giản. Chúng tôi sẽ giới thiệu cách tự động cài đặt và cấu hình phần mềm như máy chủ MySQL trong môi trường có thể tái tạo. Trong blog này, chúng tôi sẽ tập trung vào sao chép MariaDB nhưng nếu bạn quan tâm đến các nhiệm vụ khác, vui lòng kiểm tra các blog khác của chúng tôi, nơi chúng tôi viết thêm về Ansible.

Vagrant, Virtualbox và Ansible

Ansible có thể giúp triển khai MySQL Cluster trên đám mây hoặc tại chỗ. Với mục đích của blog này, chúng tôi sẽ sử dụng thiết lập phổ biến để chạy các thử nghiệm khác nhau trên máy tính để bàn với Vagrant và Virtualbox.

Vagrant là một hệ thống cho phép bạn dễ dàng tạo và di chuyển môi trường phát triển từ máy này sang máy khác. Đơn giản chỉ cần xác định loại máy ảo bạn muốn trong một tệp có tên là Vagrantfile và sau đó kích hoạt chúng bằng một lệnh duy nhất. Nó tích hợp tốt với các nhà cung cấp máy ảo như VirtualBox, VMware và AWS và điều quan trọng đối với nhiệm vụ của chúng tôi là nó có sự hỗ trợ đắc lực của Ansible.

Vagrantfile của chúng tôi triển khai 2 phiên bản trên nền tảng VirtualBox, một phiên bản dành cho nút chính và nút phụ thứ hai. Sau đó, chúng tôi sẽ sử dụng Ansible để chạy cài đặt gói cần thiết và thực thi cấu hình của một chủ / tớ. Dưới đây là danh sách các nhiệm vụ mà chúng tôi sẽ thực hiện.

  • Cài đặt Vagrant và Virtualbox
  • Định cấu hình tệp mơ hồ và sách phát có thể đọc được
  • Khởi chạy các phiên bản
  • Tải xuống các hộp Vagrant và Vagrantfile có liên quan (việc này được thực hiện tự động)
  • Chạy playbook Ansible (việc này sẽ được thực hiện tự động)
  • Thêm cụm vào ClusterControl để thực hiện nhiệm vụ giám sát và quản lý (như sao lưu, bảo mật, quản lý người dùng, quản lý hiệu suất và nhiều nhiệm vụ khác).

Cài đặt Vagrant, Virtualbox và Ansible trên Ubuntu

Cài đặt gói

sudo apt-get install ansible vagrant virtualbox

Tạo tệp cấu hình cho Vagrant và Ansible

$ mkdir mariadbtest
$ vi Vagrantfile
VAGRANTFILE_API_VERSION = "2"
 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "maria.yml"
    ansible.sudo = true
  end
  config.vm.define "master" do |master|
    master.vm.hostname = "master"
    master.vm.network "forwarded_port", guest: 3306, host: 3336
    master.vm.network "private_network", ip: "192.168.10.2"        
  end
  config.vm.define "slave" do |slave|
    slave.vm.hostname = "slave"
    slave.vm.network "forwarded_port", guest: 3306, host: 3337
    slave.vm.network "private_network", ip: "192.168.10.3"                
  end
  config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 2
  end
end

Tệp vagrant trên sẽ tạo ra hai máy có cấu hình sau:

  • Chính:2 CPU, 1GB RAM, IP riêng:192.168.10.2 Cổng chuyển tiếp:3336
  • Slave:2CPU, 1GB RAM, Private IP:192.168.10.3, Port forward:3337

Cấu trúc Playbook

Trong bước này, chúng ta sẽ xác định Ansible playbook. Ansible sử dụng YAML làm ngôn ngữ đánh dấu dễ dàng để xác định hướng dẫn. Chúng tôi tạo “maria.yml” sau dựa trên tệp Ansible do Mariadb cung cấp.

$vi maria.yml
- hosts: master:slave
  user: vagrant
  tasks:
  - name: Install MariaDB repository
    apt_repository: repo='deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.3/ubuntu trusty main' state=present
  - name: Add repository key to the system
    apt_key: keyserver=keyserver.ubuntu.com id=0xcbcb082a1bb943db
  - name: Install MariaDB Server
    apt: name=mariadb-server state=latest update_cache=yes
  - name: Install python module
    apt: name=python-mysqldb state=installed
  - name: Create replication account
    mysql_user: name=repl host="%" password=s3cr3tPaSSwordR priv=*.*:"REPLICATION SLAVE" state=present
  - name: Create readwrite user
    mysql_user: name=rwuser host="%" password=s3cr3tPaSSwordR priv=*.*:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP state=present
  - name: Modify configuration file to listen on all interfaces
    lineinfile: dest=/etc/mysql/my.cnf regexp="^bind-address" line="bind-address=0.0.0.0"
- hosts: master
  user: vagrant
  tasks:
  - name: Modify configuration file to setup server ID
    lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=1"
  - name: Restart mysql service
    service: name=mysql state=restarted
  - name: Reset master binlog
    command: /usr/bin/mysql -u root -e "RESET MASTER"
- hosts: slave
  user: vagrant
  tasks:
  - name: Modify configuration file to setup server ID
    lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=2"
  - name: Setup replication
    command: /usr/bin/mysql -uroot -e "CHANGE MASTER TO master_host='192.168.10.2', master_user='repl', master_password='s3cr3tPaSSwordR', master_use_gtid=current_pos"
  - name: Restart mysql service
    service: name=mysql state=restarted
ClusterControlSingle Console cho Toàn bộ Cơ sở dữ liệu Cơ sở hạ tầng của bạnTìm hiểu những tính năng mới khác trong ClusterControlInstall ClusterControl MIỄN PHÍ

Bây giờ là lúc cho các phiên bản. Vagrant up sẽ kích hoạt cài đặt playbook.

$ vagrant up
DEPRECATION: The 'sudo' option for the Ansible provisioner is deprecated.
Please use the 'become' option instead.
The 'sudo' option will be removed in a future release of Vagrant.

==> vagrant: A new version of Vagrant is available: 2.2.4 (installed version: 2.2.3)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
==> master: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
    master: Box Provider: virtualbox
    master: Box Version: >= 0
==> master: Loading metadata for box 'ubuntu/trusty64'
    master: URL: https://vagrantcloud.com/ubuntu/trusty64
==> master: Adding box 'ubuntu/trusty64' (v20190429.0.1) for provider: virtualbox
    master: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20190429.0.1/providers/virtualbox.box
    master: Download redirected to host: cloud-images.ubuntu.com
    master: Progress: 7% (Rate: 551k/s, Estimated time remaining: 0:14:31)

Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...

Nếu bạn chưa tải xuống hình ảnh ubuntu từ Virtualbox, thì vagrant sẽ tự động tải xuống hình ảnh đó giống như ví dụ trên.

PLAY [master:slave] ************************************************************

TASK [Gathering Facts] *********************************************************
ok: [slave]

TASK [Install MariaDB repository] **********************************************
changed: [slave]

TASK [Add repository key to the system] ****************************************
changed: [slave]

TASK [Install MariaDB Server] **************************************************

Sau khi cài đặt playbook thành công, bạn sẽ thấy kết quả sau và bạn có thể đăng nhập vào cơ sở dữ liệu bằng thông tin xác thực được xác định trước (xem playbook).

PLAY RECAP ********************************************************************
master                     : ok=12   changed=10   unreachable=0    failed=0 

Bước tiếp theo là nhập cấu hình chính / phụ của bạn vào ClusterControl. Cách dễ nhất và thuận tiện nhất để cài đặt ClusterControl là sử dụng tập lệnh cài đặt do Somenines cung cấp. Chỉ cần tải xuống tập lệnh và thực thi với tư cách người dùng gốc hoặc người dùng có quyền root sudo.

$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user

Nếu bạn muốn thêm cài đặt ClusterControl vào sổ chơi của mình, bạn có thể sử dụng các hướng dẫn sau.

Bước tiếp theo là tạo khóa SSH mà chúng ta sẽ sử dụng để thiết lập SSH không cần mật khẩu sau này. Nếu bạn có một cặp khóa muốn sử dụng, bạn có thể bỏ qua việc tạo một cặp khóa mới.

ClusterControl:Nhập cụm hiện có

Sau khi cài đặt thành công, cuối cùng bạn có thể nhập cụm kiểm tra mới tạo của mình vào ClusterControl.

Chúng tôi hy vọng bài đăng trên blog này đã cung cấp cho bạn cái nhìn sâu sắc về cơ bản của việc cài đặt và thiết lập bản sao chính / nô lệ Ansible MariaDB. Vui lòng kiểm tra các blog khác của chúng tôi, nơi chúng tôi giới thiệu Chef, Puppet, Docker cho cơ sở dữ liệu MariaDB và các triển khai cụm cơ sở dữ liệu khác.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 cách thay thế chuỗi con trong MariaDB

  2. MariaDB Enterprise Cluster là gì?

  3. Laravel:Khóa được chỉ định quá dài; độ dài khóa tối đa là 767 byte

  4. 5 chức năng để trích xuất số tuần từ một ngày trong MariaDB

  5. Các bài đăng trên blog về cơ sở dữ liệu phổ biến nhất của chúng tôi trong năm 2017