MySQL-Xenon高可用
共 9586字,需瀏覽 20分鐘
·
2024-05-19 20:30
在MySQL5.5及以下傳統(tǒng)復制的時代,MHA在MySQL高可用應用中非常成熟,在MySQL5.6的GTID時代開啟以后,MHA卻沒有與新的MySQL一起順應潮流,MHA最近一次發(fā)版是2018年。于是RadonDB開發(fā)團隊研發(fā)并開源新一代MySQL集群高可用工具。基于Raft協(xié)議進行無中心化選主,實現(xiàn)主從秒級切換;基于semi-sync機制,保障數(shù)據(jù)不丟失,實現(xiàn)數(shù)據(jù)強一致性。并結合MySQL5.7及以上版本并行復制特性,實現(xiàn)binlog并行回放那個,大大降低從庫延遲。
代碼托管:https://github.com/radondb/xenon
Xenon 實驗環(huán)境
master db01 192.168.3.112
slave db02 192.168.3.113
salve db03 192.168.3.114
1、配置基于增強半同步的主從復制,配置過程詳見《MySQL-主從復制》中。
2、三臺主機安裝 xtrabackup
# rpm -ivh percona-xtrabackup-80-8.0.13-1.el7.x86_64.rpm
3、三臺主機配置互信,免密ssh登錄
4、三臺主機安裝 go 環(huán)境
go 下載地址:https://golang.google.cn/dl/
# tar -zxvf go1.14.8.linux-amd64.tar.gz -C /opt/# vim /etc/profileexport GOPATH=/opt/go/binexport PATH=$PATH:$GOPATH
5、安裝Xenon
下載地址:https://github.com/radondb/xenon/
# unzip xenon-master.zip# make
6、三臺主機配置 Xenon
mkdir /opt/xenoncp -r /root/xenon-master/bin/ /opt/xenon/mkdir /opt/xenon/etccp /root/xenon-master/conf/xenon-sample.conf.json /opt/xenon/etc/xenon.jsonecho "/opt/xenon/etc/xenon.json" > /opt/xenon/bin/config.pathchown mysql.mysql /opt/xenon/ -R
修改 xenon.json 文件
# more /opt/xenon/etc/xenon.json{"server":{"endpoint":"192.168.3.114:8801"},"raft":{"meta-datadir":"raft.meta","leader-start-command":"sudo /sbin/ip a a 192.168.3.110/24 dev ens33 && arping -c 3 -A 192.168.3.110 -I ens33","leader-stop-command":"sudo /sbin/ip a d 192.168.3.110/24 dev ens33"},"mysql":{"admin":"root","version":"mysql80","passwd":"123","host":"192.168.3.114","port":3306,"basedir":"/opt/mysql","defaults-file":"/opt/mysql/.my.cnf","ping-timeout":1000,"master-sysvars":"tokudb_fsync_log_period=default;sync_binlog=default;innodb_flush_log_at_trx_commit=default","slave-sysvars" : "tokudb_fsync_log_period=1000;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"},"replication":{"user":"repl","passwd":"repl"},"backup":{"ssh-host":"192.168.3.114","ssh-user":"root","ssh-passwd":"root123","basedir":"/opt/mysql","backupdir":"/opt/mysql/data","xtrabackup-bindir":"/bin","max-allowed-local-trx-count": 1000,"backup-use-memory": "1GB","backup-parallel": 4},"rpc":{"request-timeout":500},"log":{"level":"INFO"}}
三臺主機啟動 xenon ,并添加節(jié)點。官方建議Xenon和MySQL使用同一用戶啟動。
以普通用戶啟動要配置sudo
## NOPASSWD 免輸入密碼sudo,不加此選項,則啟動失敗# visudomysql ALL=(ALL) NOPASSWD: /usr/sbin/ip
在 mysql 用戶下啟動,xenon會自動拉起mysql進程服務
su - mysqlnohup /opt/xenon/bin/xenon -c /opt/xenon/etc/xenon.json > /opt/xenon/xenon.log 2>&1 &./xenoncli cluster add 192.168.3.112:8801,192.168.3.113:8801,192.168.3.114:8801
查看集群狀態(tài)
$ ./xenoncli cluster status+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+--------------------+| ID | Raft | Mysqld | Monitor | Backup | Mysql | IO/SQL_RUNNING | MyLeader |+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+--------------------+| 192.168.3.112:8801 | [ViewID:3 EpochID:0]@LEADER | RUNNING | ON | state:[NONE]? | [ALIVE] [READWRITE] | [true/true] | 192.168.3.112:8801 || | | | | LastError: | | | |+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+--------------------+| 192.168.3.113:8801 | [ViewID:3 EpochID:0]@FOLLOWER | RUNNING | ON | state:[NONE]? | [ALIVE] [READONLY] | [true/true] | 192.168.3.112:8801 || | | | | LastError: | | | |+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+--------------------+| 192.168.3.114:8801 | [ViewID:3 EpochID:0]@FOLLOWER | RUNNING | ON | state:[NONE]? | [ALIVE] [READONLY] | [true/true] | 192.168.3.112:8801 || | | | | LastError: | | | |+--------------------+-------------------------------+---------+---------+--------------------------+---------------------+----------------+--------------------+$ ./xenoncli cluster mysql+--------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+| ID | Raft | Mysql | Option | Master_Log_File/Pos | IO/SQL_Running | Seconds_Behind | Last_Error |+--------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+| 192.168.3.112:8801 | LEADER | ALIVE | READWRITE | [mysql-bin.000008/388] | [true/true] | 0 | |+--------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+| 192.168.3.113:8801 | FOLLOWER | ALIVE | READONLY | [mysql-bin.000008/388] | [true/true] | 0 | |+--------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+| 192.168.3.114:8801 | FOLLOWER | ALIVE | READONLY | [mysql-bin.000008/388] | [true/true] | 0 | |+--------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+關閉集群``` shell# ./xenoncli mysql stopmonitor# ./xenoncli mysql shutdown# pkill xenon
Xenon 備份
$ /opt/xenon/bin/xenoncli mysql backup --to=/opt/mysql/98762023/06/18 15:48:41.643361 callx.go:92: [WARNING] get.client.error[dial tcp 192.168.3.113:8801: connect: connection refused]2023/06/18 15:48:41.643473 callx.go:163: [WARNING] get.client.error[dial tcp 192.168.3.113:8801: connect: connection refused]2023/06/18 15:48:41.652513 callx.go:183: [WARNING] best.slave.can't.found.set.to.leader[192.168.3.112:8801]2023/06/18 15:48:41.652531 mysql.go:562: [WARNING] S1-->found.the.best.backup.host[192.168.3.112:8801]....2023/06/18 15:48:41.783611 mysql.go:576: [WARNING] S2-->rm.and.mkdir.backupdir[/opt/mysql/9876]2023/06/18 15:48:41.783637 mysql.go:581: [WARNING] S3-->xtrabackup.begin....2023/06/18 15:48:41.784505 callx.go:442: [WARNING] rebuildme.backup.req[&{From: BackupDir:/opt/mysql/9876 SSHHost:192.168.3.114 SSHUser:mysql SSHPasswd:mysql SSHPort:22 IOPSLimits:100000 XtrabackupBinDir:/usr/bin}].from[192.168.3.112:8801]2023/06/18 15:48:42.804183 common.go:41: [PANIC] rsp[cmd.outs.[completed OK!].found[0]!=expects[1]] != [OK]panic: [PANIC] rsp[cmd.outs.[completed OK!].found[0]!=expects[1]] != [OK]goroutine 1 [running]:xbase/xlog.(*Log).Panic(0xc0000ec170, 0x8dd965, 0xf, 0xc0000e1d68, 0x1, 0x1)/root/xenon-master/src/xbase/xlog/xlog.go:164 +0x153cli/cmd.RspOK(...)/root/xenon-master/src/cli/cmd/common.go:41cli/cmd.mysqlDoBackupCommandFn(0xc0000fe000, 0xc0000ec200, 0x0, 0x1)/root/xenon-master/src/cli/cmd/mysql.go:584 +0x481vendor/github.com/spf13/cobra.(*Command).execute(0xc0000fe000, 0xc0000ec1e0, 0x1, 0x1, 0xc0000fe000, 0xc0000ec1e0)/root/xenon-master/src/vendor/github.com/spf13/cobra/command.go:603 +0x22evendor/github.com/spf13/cobra.(*Command).ExecuteC(0xc7f800, 0x1, 0xc0000e1f78, 0x40746f)/root/xenon-master/src/vendor/github.com/spf13/cobra/command.go:689 +0x2bcvendor/github.com/spf13/cobra.(*Command).Execute(...)/root/xenon-master/src/vendor/github.com/spf13/cobra/command.go:648main.main()/root/xenon-master/src/cli/cli.go:43 +0x31
從輸出日志信息看是備份失敗,經排查是因為xenon.json配置中 mysql 部分的 host 參數(shù)導致。
"mysql":{"admin":"root","version":"mysql80","passwd":"123","host":"192.168.3.114", # 設置為主機IP地址,設置為localhost導致備份失敗"port":3306,"basedir":"/opt/mysql","defaults-file":"/opt/mysql/.my.cnf","ping-timeout":1000,"master-sysvars":"tokudb_fsync_log_period=default;sync_binlog=default;innodb_flush_log_at_trx_commit=default","slave-sysvars" : "tokudb_fsync_log_period=1000;sync_binlog=1000;innodb_flush_log_at_trx_commit=2"},
鏈接:https://www.cnblogs.com/zbc230/p/17486690.html
(版權歸原作者所有,侵刪)
