关于数据库:高可用-Xenon-实现-MySQL-高可用架构-常用操作篇

6次阅读

共计 11034 个字符,预计需要花费 28 分钟才能阅读完成。

原创:知数堂

上一篇文章,咱们具体介绍了 Xenon 实现 MySQL 高可用架构的部署过程。接下来本篇将介绍 Xenon 的罕用操作,帮忙大家在实现环境搭建之后,能把 Xenon 纯熟的用起来,以更好的对 MySQL 高可用架构进行治理。

| 1 启动集群

1.1 启动 MySQL

# db1:
[mysql@db1 ~]$ nohup mysqld_safe --defaults-file=/etc/my.cnf &
[1] 5526
[mysql@db1 ~]$ nohup: ignoring input and appending output to‘nohup.out’# db2:
[mysql@db2 ~]$ nohup mysqld_safe --defaults-file=/etc/my.cnf &
[1] 3637
[mysql@db2 ~]$ nohup: ignoring input and appending output to 'nohup.out'
mysql –uroot –p    # 开启加强半同步
set global  rpl_semi_sync_slave_enabled=1;
stop  slave io_thread;
start slave  io_thread;

db3 的启动步骤同 db2。

1.2 启动 Xenon

db1:
[mysql@db1 ~]$ cd /usr/local/xenon/bin/
[mysql@db1 bin]$ ./xenon -c /etc/xenon/xenon.json > /etc/xenon/log/xenon.log 2>&1 &

db2、db3 的启动形式同 db1。

留神:当 MySQL 未启动时,启动 Xenon 会主动启动 MySQL。

1.3 查看半同步复制

启动时,须要查看半同步复制是否开启。

(product)root@localhost [(none)]> show variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
| rpl_semi_sync_slave_enabled               | OFF        |
| rpl_semi_sync_slave_trace_level           | 32         |
……

主要参数:主节点 rpl_semi_sync_master_enabled 的状态为 ON,从节点 rpl_semi_sync_slave_enabled 的状态为 ON,示意半同步复制失常开启。

| 2 帮忙命令

通过 xenoncli 的帮忙命令查看可选的命令。

[mysql@db1 bin]$ ./xenoncli  help
A simple command line client for xenon
 
Usage:
  xenoncli [command]

Available Commands:
  cluster     cluster related commands
  init        init the xenon config file
  mysql       mysql related commands
  perf        perf related commands
  raft        raft related commands
  version     Print the version number of xenon client
  xenon       xenon related commands
 
Use "xenoncli [command] --help" for more information about a command.

举例说明,查看 cluster 的操作命令帮忙。

[mysql@db1 bin]$  ./xenoncli cluster -h
cluster related commands
Usage:
  xenoncli cluster [command]
 
Available Commands:
  add         add peers to leader(if there is no leader, add to local)
  gtid        show cluster gtid status
  log         merge cluster xenon.log from logdir
  mysql       show cluster mysql status
  raft        show cluster raft status
  remove      remove peers from leader(if there is no leader, remove from local)
  status      show cluster status
  xenon       show cluster xenon status
 
Use "xenoncli cluster [command] --help" for more information about a command.

| 3 查看集群

3.1 查看状态

xenoncli cluster status

xenoncli cluster mysql

xenoncli cluster xenon

3.2 查看集群统一状态

xenoncli cluster raft

3.3 查看集群 GTID 状态

xenoncli cluster gtid

| 4 敞开集群

xenoncli mysql stopmonitor
xenoncli mysql shutdown
pkill xenon

| 5 增加 / 删除节点

5.1 增加节点

xenoncli cluster add 192.168.0.2:8801,192.168.0.3:8801,192.168.0.5:8801

Xenon 容许增加曾经增加过的节点。如果节点曾经在集群外面,将间接被忽视,不做任何操作。

5.2 删除节点

xenoncli cluster  remove 192.168.0.2:8801,192.168.0.3:8801,192.168.0.5:8801

| 6 备份 MySQL 到本地

[root@db1 backup]# xenoncli mysql backup
Usage:
  xenoncli mysql backup --to=backupdir [flags]
[mysql@db1 bin]$ ./xenoncli mysql backup --to=/backup/data
 2020/02/10 04:28:43.924306       [WARNING]     rebuildme.found.best.slave[10.10.10.11:8801].leader[10.10.10.10:8801]
 2020/02/10 04:28:43.924576       [WARNING]     S1-->found.the.best.backup.host[10.10.10.11:8801]....
 2020/02/10 04:28:43.945828       [WARNING]     S2-->rm.and.mkdir.backupdir[/backup/data]
 2020/02/10 04:28:43.945845       [WARNING]     S3-->xtrabackup.begin....
 2020/02/10 04:28:43.946692       [WARNING]     rebuildme.backup.req[&{From: BackupDir:/backup/data SSHHost:10.10.10.10 SSHUser:mysql SSHPasswd:123456 SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[10.10.10.11:8801]
 2020/02/10 04:29:06.360412       [WARNING]     S3-->xtrabackup.end....
 2020/02/10 04:29:06.360444       [WARNING]     S4-->apply-log.begin....
 2020/02/10 04:29:11.010835       [WARNING]     S4-->apply-log.end....
 2020/02/10 04:29:11.011275       [WARNING]     completed OK!
 2020/02/10 04:29:11.011300       [WARNING]     backup.all.done....

因 xenoncli 会尝试先删除 backupdir 再 mkdir,故不倡议应用 /backup 根目录门路。若应用这种门路,rm 能够胜利,mkdir 会失败。

| 7 Rebuild 重建

抉择最佳状态的从节点,进行 XtraBackup 流式重建,from 参数可指定重建源节点。

  • 作用:重建以后节点 MySQL
  • 场景:节点坏掉须要疾速重建
// 在要做重建的节点执行:xenoncli mysql rebuildme

// 如果想以指定节点为准重建,执行:xenoncli mysql -h

// 基于指定节点复制重建以后 MySQL 节点
[mysql@db1 bin]$ ./xenoncli mysql rebuildme --from=10.10.10.11:8801
 2020/02/11 01:19:40.907645       [WARNING]     =====prepare.to.rebuildme=====
                        IMPORTANT: Please check that the backup run completes successfully.
                                   At the end of a successful backup run innobackupex
                                   prints "completed OK!".
 
 2020/02/11 01:19:40.908418       [WARNING]     S1-->check.raft.leader
 2020/02/11 01:19:40.911586       [WARNING]     S2-->prepare.rebuild.from[10.10.10.11:8801]....
 2020/02/11 01:19:40.913050       [WARNING]     S3-->check.bestone[10.10.10.11:8801].is.OK....
 2020/02/11 01:19:40.913066       [WARNING]     S4-->set.learner
 2020/02/11 01:19:40.915499       [WARNING]     S5-->stop.monitor
 2020/02/11 01:19:40.916758       [WARNING]     S6-->kill.mysql
 2020/02/11 01:19:40.947717       [WARNING]     S7-->check.bestone[10.10.10.11:8801].is.OK....
 2020/02/11 01:19:40.950867       [WARNING]     S8-->rm.datadir[/backup/data]
 2020/02/11 01:19:40.950879       [WARNING]     S9-->xtrabackup.begin....
 2020/02/11 01:19:40.951632       [WARNING]     rebuildme.backup.req[&{From: BackupDir:/backup/data SSHHost:10.10.10.10 SSHUser:mysql SSHPasswd:123456 SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[10.10.10.11:8801]
 2020/02/11 01:19:51.200092       [WARNING]     S9-->xtrabackup.end....
 2020/02/11 01:19:51.200116       [WARNING]     S10-->apply-log.begin....
 2020/02/11 01:19:56.666199       [WARNING]     S10-->apply-log.end....
 2020/02/11 01:19:56.666209       [WARNING]     S11-->start.mysql.begin...
 2020/02/11 01:19:56.666757       [WARNING]     S11-->start.mysql.end...
 2020/02/11 01:19:56.666766       [WARNING]     S12-->wait.mysqld.running.begin....
 2020/02/11 01:19:59.680987       [WARNING]     wait.mysqld.running...
 2020/02/11 01:19:59.709382       [WARNING]     S12-->wait.mysqld.running.end....
 2020/02/11 01:19:59.709395       [WARNING]     S13-->wait.mysql.working.begin....
 2020/02/11 01:19:59.710943       [WARNING]     S13-->wait.mysql.working.end....
 2020/02/11 01:19:59.710955       [WARNING]     S14-->stop.and.reset.slave.begin....
 2020/02/11 01:19:59.731108       [WARNING]     S14-->stop.and.reset.slave.end....
 2020/02/11 01:19:59.731121       [WARNING]     S15-->reset.master.begin....
 2020/02/11 01:19:59.739414       [WARNING]     S15-->reset.master.end....
 2020/02/11 01:19:59.739455       [WARNING]     S15-->set.gtid_purged[1520b6dd-2fb1-11ea-ab64-080027d70146:1-14].begin....
 2020/02/11 01:19:59.742273       [WARNING]     S15-->set.gtid_purged.end....
 2020/02/11 01:19:59.742284       [WARNING]     S16-->enable.raft.begin...
 2020/02/11 01:19:59.743512       [WARNING]     S16-->enable.raft.done...
 2020/02/11 01:19:59.743534       [WARNING]     S17-->wait[3000 ms].change.to.master...
 2020/02/11 01:19:59.743551       [WARNING]     S18-->start.slave.begin....
 2020/02/11 01:19:59.763468       [WARNING]     S18-->start.slave.end....
 2020/02/11 01:19:59.763478       [WARNING]     completed OK!

| 8 手动 Failover/switchover

手动触发主从切换。

(product)root@localhost [(none)]> set global read_only=on;
Query OK, 0 rows affected (0.00 sec)
 
[mysql@db1 bin]$ ./xenoncli raft trytoleader
 2020/02/11 01:48:51.219975       [WARNING]     [10.10.10.10:8801].prepare.to.propose.this.raft.to.leader
 2020/02/11 01:48:51.255617       [WARNING]     [10.10.10.10:8801].propose.done
[mysql@db1 bin]$ ./xenoncli  cluster status
+------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+------------------+
|        ID        |             Raft              | Mysqld  | Monitor |          Backup          |        Mysql        | IO/SQL_RUNNING |     MyLeader     |
+------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+------------------+
| 10.10.10.10:8801 | [ViewID:4 EpochID:0]@LEADER   | RUNNING | ON      | state:[NONE]
            | [ALIVE] [READWRITE] | [true/true]    | 10.10.10.10:8801 |
|                  |                               |         |         | LastError:               |                     |                |                  |
+------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+------------------+
| 10.10.10.11:8801 | [ViewID:4 EpochID:0]@FOLLOWER | RUNNING | ON      | state:[NONE]
            | [ALIVE] [READONLY]  | [true/true]    | 10.10.10.10:8801 |
|                  |                               |         |         | LastError:               |                     |                |                  |
+------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+------------------+
| 10.10.10.18:8801 | [ViewID:4 EpochID:0]@FOLLOWER | RUNNING | ON      | state:[NONE]
            | [ALIVE] [READONLY]  | [true/true]    | 10.10.10.10:8801 |
|                  |                               |         |         | LastError:               |                     |                |                  |
+------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+------------------+

| 9 MySQL Stack Info

查看 MySQL 如何调用堆栈信息。Quick Stack 性能速度快,对流程简直没有影响。

xenoncli perf -h
perf related commands
 
Usage:
  xenoncli perf [command]
 
Available Commands:
  quickstack  capture the stack of mysqld using quickstack

| 10 Raft + Operation

不发动选主 enable 是复原,disable 指该 Xenon 节点只复制。

xenoncli raft -h
raft related commands
 
Usage:
  xenoncli raft [command]
 
Available Commands:
  add                add peers to local
  disable            enable the node out control of raft
  disablepurgebinlog disable leader to purge binlog
  enable             enable the node in control of raft
  enablepurgebinlog  enable leader to purge binlog(default)
  nodes              show raft nodes
  remove             remove peers from local
  status             status in JSON(state(LEADER/CANDIDATE/FOLLOWER/IDLE))
  trytoleader        propose this raft as leader

| 11 启动加强半同步查看

# 启动半同步复制查看
xenoncli raft enablechecksemisync

# 启动或敞开半同步复制查看
xenoncli raft disablechecksemisync

咱们能够看到半同步的参数是:

(product)root@localhost [(none)]> show variables like '%rpl%';
+-------------------------------------------+---------------------+
| Variable_name                             | Value               |
+-------------------------------------------+---------------------+
| rpl_semi_sync_master_enabled              | ON                  |
| rpl_semi_sync_master_timeout              | 1000000000000000000 |
| rpl_semi_sync_master_trace_level          | 32                  |
| rpl_semi_sync_master_wait_for_slave_count | 1                   |
| rpl_semi_sync_master_wait_no_slave        | ON                  |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC          |
| rpl_semi_sync_slave_enabled               | ON                  |
| rpl_semi_sync_slave_trace_level           | 32                  |
| rpl_stop_slave_timeout                    | 31536000            |
+-------------------------------------------+---------------------+

若通过 set global 批改半同步的 timeout,将主动勘误为无限大;若基于运维长期调整,须要先执行 xenoncli mysql disablechecksemisync 再批改;若运维完,须要复原主动勘误的话,执行 enablechecksemisync

// 例如:批改 timeout 参数为 10,
(product)root@localhost [(none)]> set global rpl_semi_sync_master_timeout=10;
Query OK, 0 rows affected (0.00 sec)
 
(product)root@localhost [(none)]> show variables like '%rpl%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10         |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
| rpl_semi_sync_slave_enabled               | ON         |
| rpl_semi_sync_slave_trace_level           | 32         |
| rpl_stop_slave_timeout                    | 31536000   |
+-------------------------------------------+------------+
9 rows in set (0.00 sec)
 
// 过一会儿又主动变为无穷大了
(product)root@localhost [(none)]> show variables like '%rpl%';
+-------------------------------------------+---------------------+
| Variable_name                             | Value               |
+-------------------------------------------+---------------------+
| rpl_semi_sync_master_enabled              | ON                  |
| rpl_semi_sync_master_timeout              | 1000000000000000000 |
| rpl_semi_sync_master_trace_level          | 32                  |
| rpl_semi_sync_master_wait_for_slave_count | 1                   |
| rpl_semi_sync_master_wait_no_slave        | ON                  |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC          |
| rpl_semi_sync_slave_enabled               | ON                  |
| rpl_semi_sync_slave_trace_level           | 32                  |
| rpl_stop_slave_timeout                    | 31536000            |
+-------------------------------------------+---------------------+
9 rows in set (0.00 sec)

| 指令分类

查问集群信息:

xenoncli cluster 指令 

操作本机的:

xenoncli raft 指令
xenoncli perf quickstack
xenoncli mysql backup | cancelbackup | kill | rebuildme | shutdown | start | startmonitor |status | stopmonitor | sysvar

先尝试连贯到 Leader 执行,如果没有 Leader,则在本机执行:

xenoncli mysql changepassword | createsuperuser | createuser | createuserwithgrants |
dropuser | getuser

下期预报

下期咱们将介绍 Xenon 配置文件相干的应用。

举荐浏览

  • 高可用 | Xenon 实现 MySQL 高可用架构 部署篇
  • 高可用 | Xenon:后 MHA 时代的抉择
正文完
 0