Điểm lỗi duy nhất của Bộ định tuyến MySQL

Trong trường hợp này, chúng tôi biết rằng, để ngăn chặn tình huống đó là một phần của bất kỳ dự án nào sử dụng cơ sở dữ liệu, nguyên tắc là mở rộng quy mô để đáp ứng ngày càng nhiều yêu cầu dữ liệu. Đây là một chủ đề cho một blog khác, trong đó chúng ta có thể thảo luận về các chiến lược chính để ghi và đọc nô lệ và vượt ra ngoài phạm vi của bài đăng hiện tại này

Ở đây tôi sẽ tập trung vào việc tạo cụm có 3 máy, tôi đang sử dụng vagrant để tạo chúng và sau đây là tập lệnh sẽ tạo các máy ảo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end

# -*- chế độ. hồng ngọc -*- # vi. đặt ft=ruby. VAGRANTFILE_API_VERSION = "2" Mơ hồ. cấu hình [VAGRANTFILE_API_VERSION] làm. cấu hình. cấu hình. vm. xác định "box01" làm. hộp01. hộp01. vm. tên máy chủ = "box01" box01. vm. hộp = "centos7. 0_x86_64" hộp01. vm. mạng "mạng riêng", ip. "192. 168. 50. 11", hộp ảo__intnet. cấu hình kết thúc "mysql_innodb_cluster". vm. xác định "box02" làm. hộp02. hộp02. vm. tên máy chủ = "box02" box02. vm. hộp = "centos7. 0_x86_64" hộp02. vm. mạng "mạng riêng", ip. "192. 168. 50. 12", hộp ảo__intnet. cấu hình kết thúc "mysql_innodb_cluster". vm. xác định "box03" làm. hộp03. hộp03. vm. tên máy chủ = "box03" box03. vm. hộp = "centos7. 0_x86_64" hộp03. vm. mạng "mạng riêng", ip. "192. 168. 50. 13", hộp ảo__intnet. "mysql_innodb_cluster" kết thúc kết thúc

Tôi đang xem xét việc bạn đã thêm một hình ảnh CentOS 7 vào thư viện hộp lang thang cục bộ của mình và rằng bạn đang sử dụng trình điều khiển trình ảo hóa VirtualBox để tạo các máy ảo. Nếu có gì đó khác với điều này trong thiết lập của bạn, có thể tập lệnh trên sẽ không hoạt động như mong đợi. Dưới đây, máy đang chạy

wagnerbianchi01-3:mysql_innodb_cluster01 root# vagrant status
Current machine states:
box01                     running [virtualbox]
box02                     running [virtualbox]
box03                     running [virtualbox]

wagnerbianchi01-3. mysql_innodb_cluster01 root# trạng thái mơ hồ Trạng thái máy hiện tại. box01 đang chạy [hộp ảo] box02 đang chạy [hộp ảo] box03 đang chạy [hộp ảo]

Cùng với đó, chúng ta có thể bắt đầu cấu hình các máy chủ để tạo cụm. Về cơ bản, các bước như dưới đây

1. Thiết lập tất cả các gói trên cả ba máy chủ

Trên máy chủ đầu tiên, hãy cài đặt tất cả các gói bao gồm cả bộ định tuyến vì chúng tôi sẽ khởi động nó trên nút đó. Bạn không cần cài đặt gói Bộ định tuyến MySQL trên hai nút còn lại vì nó không cần thiết ở đó. MySQL Shell nên được cài đặt trên cả ba nút. Vì vậy, dưới đây tôi chỉ cho bạn những gói tôi đã cài đặt trên mỗi nút

#: box01
  mysql-community-client.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-common.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-devel.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-libs.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-libs-compat.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-server.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-router.x86_64 0:2.1.0-0.1.labs.el7
  mysql-router-debuginfo.x86_64 0:2.1.0-0.1.labs.el7
  mysql-shell.x86_64 0:1.0.5-0.1.labs.el7
  mysql-shell-debuginfo.x86_64 0:1.0.5-0.1.labs.el7
 
#: box02
  mysql-community-client.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-common.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-devel.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-libs.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-libs-compat.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-server.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-shell.x86_64 0:1.0.5-0.1.labs.el7
  mysql-shell-debuginfo.x86_64 0:1.0.5-0.1.labs.el7
 
#: box03
  mysql-community-client.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-common.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-devel.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-libs.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-libs-compat.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-community-server.x86_64 0:5.7.15-1.labs_gr090.el7
  mysql-shell.x86_64 0:1.0.5-0.1.labs.el7
  mysql-shell-debuginfo.x86_64 0:1.0.5-0.1.labs.el7

#. box01 mysql-cộng đồng-khách hàng. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng phổ biến. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-devel. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-libs. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-libs-compat. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-máy chủ. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-bộ định tuyến. x86_64 0. 2. 1. 0-0. 1. phòng thí nghiệm. el7 mysql-router-debuginfo. x86_64 0. 2. 1. 0-0. 1. phòng thí nghiệm. el7 mysql-vỏ. x86_64 0. 1. 0. 5-0. 1. phòng thí nghiệm. el7 mysql-shell-debuginfo. x86_64 0. 1. 0. 5-0. 1. phòng thí nghiệm. el7 #. box02 mysql-cộng đồng-khách hàng. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng phổ biến. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-devel. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-libs. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-libs-compat. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-máy chủ. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-vỏ. x86_64 0. 1. 0. 5-0. 1. phòng thí nghiệm. el7 mysql-shell-debuginfo. x86_64 0. 1. 0. 5-0. 1. phòng thí nghiệm. el7 #. box03 mysql-cộng đồng-khách hàng. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng phổ biến. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-devel. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-libs. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-libs-compat. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-cộng đồng-máy chủ. x86_64 0. 5. 7. 15-1. phòng thí nghiệm_gr090. el7 mysql-vỏ. x86_64 0. 1. 0. 5-0. 1. phòng thí nghiệm. el7 mysql-shell-debuginfo. x86_64 0. 1. 0. 5-0. 1. phòng thí nghiệm. el7

Để lấy tất cả các gói này cho tinh hoàn của bạn, hãy nhấp vào đây [http. //tải xuống. mysql. com/snapshots/pb/mysql-innodb-cluster-5. 7. 15-preview/mysql-innodb-cluster-labs201609-el7-x86_64. vòng/phút. hắc ín. gz]

2. Thêm cấu hình/cài đặt chính xác vào tệp cấu hình mysql hay còn gọi là my. cnf

[root@box01 mysql]# cat /etc/my.cnf
[mysqld]
user=mysql
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
#: innodb cluster configs
server_id=1
binlog_checksum=none
enforce_gtid_consistency=on
gtid_mode=on
log_bin
log_slave_updates
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64

[root@box01 mysql]# mèo /etc/my. cnf [mysqld] user=mysql datadir=/var/lib/mysql socket=/var/lib/mysql/mysql. sock # Việc tắt liên kết tượng trưng được khuyến nghị để ngăn chặn các loại rủi ro bảo mật liên kết tượng trưng=0 log-error=/var/log/mysqld. log pid-file=/var/run/mysqld/mysqld. pid #. cấu hình cụm innodb server_id=1 binlog_checksum=noneforce_gtid_consistency=on gtid_mode=on log_bin log_slave_updates master_info_repository=TABLE relay_log_info_repository=TABLE transaction_write_set_extraction=XXHASH64

Hãy chắc chắn rằng bạn khởi động lại mysqld trong trường hợp bạn thêm các cấu hình mới sau khi khởi tạo nó để các biến trên có hiệu lực

3. Khởi tạo mysqld [sử dụng dịch vụ –initialize-insecure và khởi động lại]

[root@box01 ~]# mysqld --initialize-insecure
[root@box01 mysql]# ls -lh
insgesamt 109M
-rw-r----- 1 mysql mysql   56 24. Sep 16:23 auto.cnf
-rw-r----- 1 mysql mysql  169 24. Sep 16:23 box01-bin.000001
-rw-r----- 1 mysql mysql   19 24. Sep 16:23 box01-bin.index
-rw-r----- 1 mysql mysql  413 24. Sep 16:23 ib_buffer_pool
-rw-r----- 1 mysql mysql  12M 24. Sep 16:23 ibdata1
-rw-r----- 1 mysql mysql  48M 24. Sep 16:23 ib_logfile0
-rw-r----- 1 mysql mysql  48M 24. Sep 16:23 ib_logfile1
drwxr-x--- 2 mysql mysql 4,0K 24. Sep 16:23 mysql
drwxr-x--- 2 mysql mysql 8,0K 24. Sep 16:23 performance_schema
drwxr-x--- 2 mysql mysql 8,0K 24. Sep 16:23 sys
[root@box01 mysql]# systemctl restart mysqld.service
[root@box01 mysql]# systemctl status mysqld.service
mysqld.service - MySQL Server
   Loaded: loaded [/usr/lib/systemd/system/mysqld.service; enabled]
   Active: active [running] since Sa 2016-09-24 16:25:13 CEST; 6s ago
  Process: 17112 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS [code=exited, status=0/SUCCESS]
  Process: 17095 ExecStartPre=/usr/bin/mysqld_pre_systemd [code=exited, status=0/SUCCESS]
 Main PID: 17116 [mysqld]
   CGroup: /system.slice/mysqld.service
           └─17116 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
 
Sep 24 16:25:12 box01 systemd[1]: Starting MySQL Server...
Sep 24 16:25:13 box01 systemd[1]: Started MySQL Server.

[root@box01 ~]# mysqld --initialize-insecure [root@box01 mysql]# ls -lh insgesamt 109M -rw-r----- 1 mysql mysql 56 24. 16 tháng 9. 23 ô tô. cnf -rw-r----- 1 mysql mysql 169 24. 16 tháng 9. 23 thùng01 thùng. 000001 -rw-r----- 1 mysql mysql 19 24. 16 tháng 9. 23 thùng01 thùng. chỉ mục -rw-r----- 1 mysql mysql 413 24. 16 tháng 9. 23 ib_buffer_pool -rw-r----- 1 mysql mysql 12M 24. 16 tháng 9. 23 ibdata1 -rw-r----- 1 mysql mysql 48M 24. 16 tháng 9. 23 ib_logfile0 -rw-r----- 1 mysql mysql 48M 24. 16 tháng 9. 23 ib_logfile1 drwxr-x--- 2 mysql mysql 4,0K 24. 16 tháng 9. 23 mysql drwxr-x--- 2 mysql mysql 8,0K 24. 16 tháng 9. 23 performance_schema drwxr-x--- 2 mysql mysql 8,0K 24. 16 tháng 9. 23 sys [root@box01 mysql]# systemctl khởi động lại mysqld. dịch vụ [root@box01 mysql]# systemctl status mysqld. dịch vụ mysqld. dịch vụ - Máy chủ MySQL đã tải. đã tải [/usr/lib/systemd/system/mysqld. Dịch vụ; . hoạt động [đang chạy] kể từ Sa 2016-09-24 16. 25. 13 CEST; . 17112 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld. pid $MYSQLD_OPTS [mã=đã thoát, trạng thái=0/THÀNH CÔNG] Quá trình. 17095 ExecStartPre=/usr/bin/mysqld_pre_systemd [code=exited, status=0/SUCCESS] PID chính. Nhóm 17116 [mysqld]. /hệ thống. lát/mysqld. dịch vụ └─17116 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld. pid 24 tháng 9 16. 25. 12 box01 systemd[1]. Khởi động máy chủ MySQL. 24 tháng chín 16. 25. 13 box01 systemd[1]. Máy chủ MySQL đã khởi động

4. Định cấu hình mật khẩu cho root@‘%’ cung cấp TÙY CHỌN CẤP cho người dùng này

Trong bước này, bạn cần làm việc để cung cấp các đặc quyền phù hợp cho root@‘%’ và định cấu hình mật khẩu cho người dùng này, mật khẩu này sẽ sớm được sử dụng để hoàn tất thiết lập. Trong các bước tiếp theo là xác minh và xác thực phiên bản, bạn sẽ được nhắc mật khẩu root@‘%’ này, vì vậy, hãy làm theo các bước bên dưới trên cả ba nút

#: create and configure the root@‘%'
mysql> grant all on *.* to root@'%' identified by 'bianchi' with grant option;
Query OK, 0 rows affected, 1 warning [0,00 sec] -- don’t worry about this warning
 
#: configure the password for root@localhost
mysql> set password='bianchi';
Query OK, 0 rows affected [0,00 sec]
 
#: in any case, flush grants tables
mysql> flush privileges;
Query OK, 0 rows affected [0,00 sec]

#. tạo và cấu hình root@‘%' mysql> cấp tất cả trên *. * đến root@'%' được xác định bởi 'bianchi' với tùy chọn cấp quyền; . cấu hình mật khẩu cho root@localhost mysql> set password='bianchi'; . trong bất kỳ trường hợp nào, flush cấp các bảng mysql> flush các đặc quyền;

5. Xác thực các phiên bản, điều này được thực hiện khi truy cập MySQL Shell trên cả ba nút và chạy lệnh bên dưới

mysql-js> dba.validateInstance['root@localhost:3306']
Please provide a password for 'root@localhost:3306':
Validating instance...
 
Running check command.
Checking Group Replication prerequisites.
* Comparing options compatibility with Group Replication.. PASS
Server configuration is compliant with the requirements.
* Checking server version.. PASS
Server is 5.7.15
 
* Checking that server_id is unique.. PASS
The server_id is valid.
 
* Checking compliance of existing tables.. PASS
 
The instance: localhost:3306 is valid for Cluster usage

mysql-js> dba. validateInstance['root@localhost. 3306'] Vui lòng cung cấp mật khẩu cho 'root@localhost. 3306'. Phiên bản xác thực. Chạy lệnh kiểm tra. Kiểm tra điều kiện tiên quyết sao chép nhóm. * So sánh các tùy chọn tương thích với Group Replication. Cấu hình PASS Server phù hợp với yêu cầu. * Kiểm tra phiên bản máy chủ. Máy chủ PASS là 5. 7. 15 * Kiểm tra xem server_id có phải là duy nhất không. ĐẠT Server_id hợp lệ. * Kiểm tra sự tuân thủ của các bảng hiện có. VƯỢT QUA Ví dụ. máy chủ cục bộ. 3306 hợp lệ cho việc sử dụng Cụm

Tại thời điểm này, chúng ta sẽ bắt đầu truy cập các phiên bản xung quanh, hãy đảm bảo rằng bạn định cấu hình iptables một cách thích hợp hoặc thậm chí, chỉ cần xóa tất cả các chuỗi được định cấu hình trên đó để tránh thông báo bên dưới khi truy cập các nút từ xa

________số 8_______

[root@box01 mysql]# mysql -u root -p -h box02 Nhập mật khẩu. LỖI 2003 [HY000]. Không thể kết nối với máy chủ MySQL trên 'box02' [113] [root@box02 ~]# iptables -F [root@box02 ~]# systemctl firewalld stop [root@box01 mysql]# mysql -u root -p -h box02 . Chào mừng đến với màn hình MySQL. Các lệnh kết thúc bằng ; . Id kết nối MySQL của bạn là phiên bản 4 Máy chủ. 5. 7. 15-labs-gr090-log Máy chủ cộng đồng MySQL [GPL] Bản quyền [c] 2000, 2016, Oracle và/hoặc các chi nhánh của nó. Đã đăng ký Bản quyền. Oracle là nhãn hiệu đã đăng ký của Oracle Corporation và/hoặc các chi nhánh của nó. Other names may be trademarks of their respective owners. Nhập 'trợ giúp;' . Nhập '\c' để xóa câu lệnh nhập hiện tại. mysql> \q Tạm biệt

6. Tại thời điểm này, chúng ta cần tạo một cụm

Hãy sử dụng box01 làm máy chủ mà chúng ta sẽ tạo cụm và khởi động nó, tạo tất cả siêu dữ liệu của cụm

#: create the cluster on box01
[root@box01 mysql]# mysqlsh
Welcome to MySQL Shell 1.0.5-labs Development Preview
 
Copyright [c] 2016, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type '\help', '\h' or '\?' for help, type '\quit' or '\q' to exit.
 
Currently in JavaScript mode. Use \sql to switch to SQL mode and execute queries.
mysql-js> \c root@localhost:3306
Creating a Session to 'root@localhost:3306'
Enter password:
Classic Session successfully established. No default schema selected.
 
mysql-js> cluster = dba.createCluster['wbCluster001']
A new InnoDB cluster will be created on instance 'root@localhost:3306'.
 
When setting up a new InnoDB cluster it is required to define an administrative
MASTER key for the cluster. This MASTER key needs to be re-entered when making
changes to the cluster later on, e.g.adding new MySQL instances or configuring
MySQL Routers. Losing this MASTER key will require the configuration of all
InnoDB cluster entities to be changed.
 
Please specify an administrative MASTER key for the cluster 'wbCluster001':
Creating InnoDB cluster 'wbCluster001' on 'root@localhost:3306'...
Adding Seed Instance...
 
Cluster successfully created. Use Cluster.addInstance[] to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.
 
mysql-js>

#. tạo cụm trên box01 [root@box01 mysql]# mysqlsh Chào mừng đến với MySQL Shell 1. 0. 5-labs Development Preview Bản quyền [c] 2016, Oracle và/hoặc các chi nhánh của nó. Đã đăng ký Bản quyền. Oracle là nhãn hiệu đã đăng ký của Oracle Corporation và/hoặc các chi nhánh của nó. Những tên khác có thể là thương hiệu của chủ sở hữu tương ứng. Nhập '\help', '\h' hoặc '\?' . Hiện đang ở chế độ JavaScript. Sử dụng \sql để chuyển sang chế độ SQL và thực hiện truy vấn. mysql-js> \c root@localhost. 3306 Tạo phiên tới 'root@localhost. 3306' Nhập mật khẩu. Đã thiết lập thành công Phiên cổ điển. Không có lược đồ mặc định nào được chọn. mysql-js> cụm = dba. createCluster['wbCluster001'] Một cụm InnoDB mới sẽ được tạo trong trường hợp 'root@localhost. 3306'. Khi thiết lập cụm InnoDB mới, cần phải xác định khóa MASTER quản trị cho cụm. Khóa MASTER này cần được nhập lại khi thực hiện các thay đổi đối với cụm sau này, e. g. thêm các phiên bản MySQL mới hoặc định cấu hình Bộ định tuyến MySQL. Mất khóa MASTER này sẽ yêu cầu thay đổi cấu hình của tất cả các thực thể cụm InnoDB. Vui lòng chỉ định khóa MASTER quản trị cho cụm 'wbCluster001'. Tạo cụm InnoDB 'wbCluster001' trên 'root@localhost. 3306'. Thêm ví dụ hạt giống. Đã tạo cụm thành công. Sử dụng cụm. addInstance[] để thêm các phiên bản MySQL. Cần ít nhất 3 phiên bản để cụm có thể chịu được tối đa một lỗi máy chủ. mysql-js>

Bây giờ chúng ta có thể sử dụng giá trị mà chúng ta đã lưu trữ trên cụm biến để hiển thị trạng thái của cụm vừa tạo

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
0
# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
1

cụm mysql-js>. trạng thái [] { "tên cụm". "wbCluster001", "defaultReplicaSet". { "tình trạng". "Cluster KHÔNG chấp nhận bất kỳ thất bại nào. ", "cấu trúc liên kết". { "máy chủ cục bộ. 3306". { "Địa chỉ". "máy chủ cục bộ. 3306", "trạng thái". "TRỰC TUYẾN", "vai diễn". "HA", "chế độ". "R/W", "lá". {} } } } }

Trạng thái cụm tại thời điểm này cho thấy rằng nó không có khả năng chịu lỗi do không có bất kỳ nút nào khác như một phần của cụm wbCluster001. Một điều khác tôi đã xác minh ở đây và nó cũng có trong kịch bản của bài viết trước, đó là siêu dữ liệu được tạo trên một số bảng trên lược đồ cơ sở dữ liệu có tên mysql_innodb_cluster_metadata, được thêm vào phiên bản được sử dụng để tạo cụm và đó sẽ là phiên bản

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
2

#. box01, phiên bản được sử dụng làm mysql gốc của cụm> sử dụng mysql_innodb_cluster_metadata Đọc thông tin bảng để hoàn thành tên bảng và cột Bạn có thể tắt tính năng này để khởi động nhanh hơn với -A Database đã thay đổi mysql> hiển thị bảng; . Tables_in_mysql_innodb_cluster_metadata. +-------------------------------------------------+. cụm. . máy chủ. . trường hợp. . bản sao. . schema_version. + ------------------------------------------ + 5 hàng trong bộ [0, . cụm\G *************************** 1. hàng *************************** cluster_id. 1 tên_cụm. wbCluster001 1 hàng trong bộ [0,00 giây]

7. Thêm các thể hiện vào cụm

Bây giờ, những gì chúng ta cần làm là bắt đầu thêm các phiên bản mà chúng ta đã thiết lập trên cụm hiện có của mình và để làm điều đó, trong trường hợp bạn không còn tên của cụm trên biến cụm nữa, bạn có thể sử dụng mysqlsh, kết nối với phiên bản đang chạy . 3306 và sử dụng dba. getCluster[‘wbCluster001’] lại. Sau khi làm điều đó, bạn có thể tiếp tục thực thi các phương thức addInstances[] bên dưới để thêm các phiên bản box02,box03 vào cụm hiện có

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
3

mysql-js> \c root@192. 168. 50. 11. 3306 Tạo phiên tới 'root@192. 168. 50. 11. 3306' Nhập mật khẩu. Đã thiết lập thành công Phiên cổ điển. Không có lược đồ mặc định nào được chọn. mysql-js> cụm = dba. getCluster['wbCluster001'] Khi thiết lập cụm InnoDB, một khóa MASTER được xác định để cho phép thực hiện các tác vụ quản trị trên cụm. Vui lòng chỉ định khóa MASTER quản trị cho cụm 'wbCluster001'. < Cụm. wbCluster001> #. thêm cụm box02 mysql-js>. addInstance['root@192. 168. 50. 12. 3306'] Một phiên bản mới sẽ được thêm vào cụm InnoDB. Tùy thuộc vào lượng dữ liệu trên cụm, quá trình này có thể mất từ ​​​​vài giây đến vài giờ. Vui lòng cung cấp mật khẩu cho 'root@192. 168. 50. 12. 3306'. Thêm cá thể vào cụm. Ví dụ 'root@192. 168. 50. 12. 3306' đã được thêm thành công vào cụm. #. thêm cụm box03 mysql-js>. addInstance['root@192. 168. 50. 13. 3306'] Một phiên bản mới sẽ được thêm vào cụm InnoDB. Tùy thuộc vào lượng dữ liệu trên cụm, quá trình này có thể mất từ ​​​​vài giây đến vài giờ. Vui lòng cung cấp mật khẩu cho 'root@192. 168. 50. 13. 3306'. Thêm cá thể vào cụm. Ví dụ 'root@192. 168. 50. 13. 3306' đã được thêm thành công vào cụm

Lúc này, cấu hình đúng như cách các bạn đang đọc ở trên, mình thấy error log trên cả 2 node nối là box02 và box03, thông báo như sau

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
4

2016-09-25T00. 34. 11. 285509Z 61 [ERROR] Slave I/O cho kênh 'group_replication_recovery'. lỗi kết nối với chủ 'mysql_innodb_cluster_rpl_user@box01. 3306' - thời gian thử lại. 60 lần thử lại. 1, Error_code. 2005 2016-09-25T00. 34. 11. 285535Z 61 [Lưu ý] Chủ đề I/O nô lệ cho kênh 'group_replication_recovery' bị giết khi kết nối với chủ 2016-09-25T00. 34. 11. 285539Z 61 [Lưu ý] Thoát luồng I/O nô lệ cho kênh 'group_replication_recovery', đọc tới nhật ký 'FIRST', vị trí 4 2016-09-25T00. 34. 11. 285963Z 48 [ERROR] Plugin group_replication đã báo cáo. 'Đã xảy ra lỗi khi kết nối với máy chủ của nhà tài trợ. Kiểm tra thông tin đăng nhập kết nối của khôi phục sao chép nhóm. ' 2016-09-25T00. 34. 11. 286204Z 48 [Lưu ý] Đã báo cáo plugin group_replication. 'Thử lại kết nối khôi phục nhóm với một nhà tài trợ khác. Cố gắng 8/10’

Mặc dù ngày càng có nhiều lỗi do kết nối giữa người tham gia và nhà tài trợ được thêm vào nhật ký lỗi, tôi đã thêm vào tất cả các hộp một số mục nhập trên /etc/hosts và hơn nữa, sự cố đã được khắc phục. Vì vậy, điều này rất quan trọng để xem xét cấu hình bên dưới được thêm vào tệp máy chủ của máy vào máy chủ dưới dạng trình phân giải DNS. Nếu bạn không làm điều đó, khi bạn kiểm tra cụm. status [], nó sẽ báo cáo rằng nút db của trình kết nối đang ở CHẾ ĐỘ PHỤC HỒI là box03 hoặc 192. 168. 50. 13. 3306 bên dưới

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
5_______1_______6

cụm mysql-js>. trạng thái [] { "tên cụm". "wbCluster001", "defaultReplicaSet". { "tình trạng". "Cluster KHÔNG chấp nhận bất kỳ thất bại nào. ", "cấu trúc liên kết". { "192. 168. 50. 11. 3306". { "Địa chỉ". "192. 168. 50. 11. 3306", "trạng thái". "TRỰC TUYẾN", "vai diễn". "HA", "chế độ". "R/W", "lá". { "192. 168. 50. 12. 3306". { "Địa chỉ". "192. 168. 50. 12. 3306", "trạng thái". "TRỰC TUYẾN", "vai trò". "HA", "chế độ". "R/O", "lá". {} }, "192. 168. 50. 13. 3306". { "Địa chỉ". "192. 168. 50. 13. 3306", "trạng thái". "PHỤC HỒI", "vai trò". "HA", "mode". "R/O", "lá". {} } } } } } }

Vì nhiều nỗ lực đã được thực hiện trong khi tôi đang khắc phục sự cố liên quan đến tệp máy chủ, tôi đã phải thực hiện một cụm. tham gia lạiInstance cho box03, như bạn có thể thấy bên dưới

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
7

cụm mysql-js>. tham gia lạiInstance['root@192. 168. 50. 13. 3306'] Vui lòng cung cấp mật khẩu cho 'root@192. 168. 50. 13. 3306'. Phiên bản sẽ thử tham gia lại cụm InnoDB. Tùy thuộc vào sự cố ban đầu khiến phiên bản không khả dụng khi tham gia lại, thao tác có thể không thành công và sẽ cần thực hiện thêm các bước thủ công để khắc phục sự cố tiềm ẩn. Vui lòng theo dõi kết quả của thao tác nối lại và thực hiện hành động cần thiết nếu phiên bản không thể nối lại. Nhập mật khẩu cho máy chủ [root@192. 168. 50. 13. 3306]. Nhập mật khẩu cho bản sao_user [mysql_innodb_cluster_rpl_user]. Nhập mật khẩu cho máy chủ ngang hàng [root@192. 168. 50. 12. 3306]. Chạy lệnh tham gia trên '192. 168. 50. 13@3306'. Chạy lệnh y tế trên '192. 168. 50. 13@3306'. Thành viên sao chép nhóm. - Chủ nhà. hộp03 Cổng. 3306 tiểu bang. TRỰC TUYẾN - Chủ nhà. hộp02 Cổng. 3306 tiểu bang. TRỰC TUYẾN - Chủ nhà. hộp01 Cổng. 3306 tiểu bang. TRỰC TUYẾN

Vì vậy, tại thời điểm này, cụm vẫn ổn, cả ba nút đều hoạt động tốt

# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
8
# -*- mode: ruby -*-
# vi: set ft=ruby :
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure[VAGRANTFILE_API_VERSION] do |config|
  config.vm.define "box01" do |box01|
	box01.vm.hostname="box01"
	box01.vm.box = "centos7.0_x86_64"
	box01.vm.network "private_network", ip: "192.168.50.11", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box02" do |box02|
	box02.vm.hostname="box02"
        box02.vm.box = "centos7.0_x86_64"
        box02.vm.network "private_network", ip: "192.168.50.12", virtualbox__intnet: "mysql_innodb_cluster"
  end
 
  config.vm.define "box03" do |box03|
        box03.vm.hostname="box03"
        box03.vm.box = "centos7.0_x86_64"
        box03.vm.network "private_network", ip: "192.168.50.13", virtualbox__intnet: "mysql_innodb_cluster"
  end
end
9

#. mô tả cụm mysql-js> cụm. mô tả [] { "tên cụm". "wbCluster001", "adminType". "cục bộ", "bản sao mặc định". { "Tên". "mặc định", "trường hợp". [ { "Tên". "192. 168. 50. 11. 3306", "máy chủ". "192. 168. 50. 11. 3306", "vai diễn". "HA" }, { "tên". "192. 168. 50. 12. 3306", "máy chủ". "192. 168. 50. 12. 3306", "vai diễn". "HA" }, { "tên". "192. 168. 50. 13. 3306", "máy chủ". "192. 168. 50. 13. 3306", "vai diễn". "HA" } ] } } #. trạng thái cụm mysql-js> cụm. trạng thái [] { "tên cụm". "wbCluster001", "defaultReplicaSet". { "tình trạng". "Cluster chịu được 2 thất bại. ", "cấu trúc liên kết". { "192. 168. 50. 11. 3306". { "Địa chỉ". "192. 168. 50. 11. 3306", "trạng thái". "TRỰC TUYẾN", "vai trò". "HA", "chế độ". "R/W", "lá". { "192. 168. 50. 12. 3306". { "Địa chỉ". "192. 168. 50. 12. 3306", "trạng thái". "TRỰC TUYẾN", "vai diễn". "HA", "chế độ". "R/O", "lá". {} }, "192. 168. 50. 13. 3306". { "Địa chỉ". "192. 168. 50. 13. 3306", "trạng thái". “TRỰC TUYẾN”, "vai trò". "HA", "chế độ". "R/O", "lá". {} } } } } } }

Sau khi giải quyết các vấn đề nêu trên, tôi thấy các sự kiện sau được thêm vào nhật ký lỗi trên hộp02 và hộp03

wagnerbianchi01-3:mysql_innodb_cluster01 root# vagrant status
Current machine states:
box01                     running [virtualbox]
box02                     running [virtualbox]
box03                     running [virtualbox]
0

#. hộp02 2016-09-26T14. 07. 02. 432632Z 0 [Lưu ý] Đã báo cáo plugin group_replication. 'Máy chủ này đã được khai báo trực tuyến trong nhóm sao chép' #. hộp03 2016-09-26T14. 14. 52. 432632Z 0 [Lưu ý] Đã báo cáo plugin group_replication. 'Máy chủ này đã được khai báo trực tuyến trong nhóm sao chép'

Cuối cùng, bạn có thể kiểm tra xem Bản sao nhóm MySQL có phải là tính năng cơ bản hỗ trợ cụm MySQL InnoDB không. Trên ô01, hoặc, 192. 168. 50. 11. 3306

wagnerbianchi01-3:mysql_innodb_cluster01 root# vagrant status
Current machine states:
box01                     running [virtualbox]
box02                     running [virtualbox]
box03                     running [virtualbox]
1

mysql-sql> chọn * từ performance_schema. nhân bản_nhóm_thành viên; . TÊN KÊNH. MÃ THÀNH VIÊN. MEMBER_HOST. MEMBER_PORT. MEMBER_STATE. +----------------------------------+--------------------- . nhóm_replication_applier. b0b1603f-83ef-11e6-85a6-080027de0e0e. hộp01. 3306. TRỰC TUYẾN. . nhóm_replication_applier. bb29750c-83ef-11e6-8b4f-080027de0e0e. hộp02. 3306. TRỰC TUYẾN. . nhóm_replication_applier. bbu3761b-83ef-11e6-894c-080027de0t0e. hộp03. 3306. TRỰC TUYẾN. +----------------------------------+--------------------- . 00 giây]

Lần tới, tôi sẽ khởi động bộ định tuyến để hiển thị một số kiểm tra liên quan đến các kết nối định tuyến ra khỏi các nút bị lỗi. Cân nhắc cuối cùng đối với cách mới này để cung cấp HA cho môi trường sử dụng InnoDB là chưa có đủ tài liệu về việc phân cấp lại các phương thức đã thoát để thao tác các phiên bản trong cụm, trong trường hợp bạn cần tắt, khởi động lại hoặc thậm chí tìm hiểu . Đây không phải là GA, tính năng này mới được phát hành, đối với tôi, nó rất hứa hẹn và sẽ giúp việc thêm các cụm trở nên dễ dàng hơn và tôi hy vọng sẽ thấy nhiều hơn nữa về tính năng này. Một lần nữa, làm rất tốt Nhóm Oracle MySQL, hãy tiếp tục

Có cần thiết phải cấu hình bộ định tuyến MySQL không?

Bạn được nhắc định cấu hình Bộ định tuyến MySQL sau lần cài đặt ban đầu và khi bạn định cấu hình lại một cách rõ ràng bộ định tuyến đã cài đặt. Ngược lại, thao tác nâng cấp không yêu cầu hoặc nhắc bạn định cấu hình sản phẩm đã nâng cấp

Làm cách nào để định cấu hình bộ định tuyến MySQL?

Giải nén kho lưu trữ cài đặt
Tạo một tệp tùy chọn
Chọn loại máy chủ MySQL
Khởi tạo thư mục dữ liệu
Khởi động máy chủ lần đầu tiên
Khởi động MySQL từ Dòng lệnh Windows
Tùy chỉnh PATH cho Công cụ MySQL
Khởi động MySQL dưới dạng Dịch vụ Windows

Sao chép nhóm trong MySQL là gì?

Sao chép nhóm MySQL là một plugin Máy chủ MySQL cho phép bạn tạo các cấu trúc liên kết sao chép linh hoạt, có tính sẵn sàng cao, chịu lỗi . Các nhóm có thể hoạt động ở chế độ bầu cử sơ bộ đơn lẻ với bầu cử sơ bộ tự động, trong đó mỗi lần chỉ có một máy chủ chấp nhận các bản cập nhật.

Cụm MySQL InnoDB là gì?

Một cụm InnoDB bao gồm ít nhất ba phiên bản Máy chủ MySQL và nó cung cấp các tính năng mở rộng và tính khả dụng cao . InnoDB Cluster sử dụng các công nghệ MySQL sau. MySQL Shell, một ứng dụng khách và trình chỉnh sửa mã nâng cao cho MySQL.

Chủ Đề