高可用 | Xenon 實現 MySQL 高可用架構 部署篇


原創:知數堂

在《高可用 | Xenon:后 MHA 時代的選擇》一文中,我們對 Xenon 的實現原理、應用場景等做了簡要介紹。文章發布后,社區小伙伴都在咨詢 Xenon 如何與 MySQL 配合使用?

本文來自知數堂投稿,是一篇基於 Xenon 架構原理,部署 一主兩從 架構的 MySQL 高可用集群的實操文檔。

Xenon 架構圖

Xenon 架構圖

環境信息:

  • Redhat 7
  • MySQL 5.7
  • Xenon 1.0.7
  • XtraBackup 24

**另:Xenon 支持 MySQL 5.6/5.7/8.0 內核,本文以 5.7 為例*。

1. 搭建 MySQL 增強半同步復制架構

1.1 准備單機 MySQL

准備三台單機 MySQL,安裝步驟(略)。

  • db1 (10.10.10.10)
  • db2 (10.10.10.11)
  • db3 (10.10.10.18)

1.2 配置主從復制

配置三台單機 MySQL 主從 復制關系,配置步驟(略)。

1.3 配置增強半同步復制

在 db1 服務器上,開啟 semi_sync插件。

set global super_read_only=0;   ---默認
set global read_only=0;         ---默認
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
show plugins;

在 db2 和 db3 服務器上執行並查看結果。

stop  slave io_thread;
start slave io_thread;
2020-01-05T12:16:01.269943Z 20 [Note] Aborted connection 20 to db: 'unconnected' user: 'root' host: 'localhost' (Got timeout reading communication packets)
2020-01-05T12:25:57.193720Z 13 [Note] Slave I/O thread killed while reading event for channel ''
2020-01-05T12:25:57.193804Z 13 [Note] Slave I/O thread exiting for channel '', read up to log 'mysql-bin.000002', position 2310
2020-01-05T12:25:57.227685Z 22 [Note] Slave I/O thread: Start semi-sync replication to master 'repl@10.10.10.10:3306' in log 'mysql-bin.000002' at position 2310
2020-01-05T12:25:57.227782Z 22 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
2020-01-05T12:25:57.230523Z 22 [Note] Slave I/O thread for channel '': connected to master 'repl@10.10.10.10:3306',replication started in log 'mysql-bin.000002' at position 2310

至此,一主兩從 增強半同步復制就配置好了,接下來即可使用 Xenon 搭建高可用架構。

2. 使用 Xenon 搭建高可用架構

2.1 環境准備

2.1.1 配置帳號

修改 MySQL 的路徑和帳號密碼,由 /sbin/nologin 修改為 /bin/bash,並修改 MySQL 帳號的密碼。

說明:MySQL 默認路徑為 /bin/bash

chsh mysql
Changing shell for mysql.
New shell [/sbin/nologin]: /bin/bash
passwd mysql

為 Xenon 的帳號添加 sudo /usr/ip 權限。

visudo 
mysql   ALL=(ALL)       NOPASSWD: /usr/sbin/ip
# 添加權限前
[mysql@db1 ~]$ sudo /sbin/ip a a 10.10.10.30/16 dev enp0s3 && arping -c 3 -A  172.18.0.100  -I enp0s3
bind: Cannot assign requested address 
# 添加權限后
[mysql@db1 ~]$ ping 10.10.10.30
PING 10.10.10.30 (10.10.10.30) 56(84) bytes of data.
64 bytes from 10.10.10.30: icmp_seq=1 ttl=64 time=0.021 ms
[1]+  Stopped                 ping 10.10.10.30

2.1.2 建立互信關系

建立三台服務器之間互信關系。

ssh-copy-id -i /home/mysql/.ssh/id_rsa.pub 10.10.10.18
ssh-copy-id -i /home/mysql/.ssh/id_rsa.pub 10.10.10.10
ssh-copy-id -i /home/mysql/.ssh/id_rsa.pub 10.10.10.11

2.1.3 安裝 XtraBackup

yum install -y perl-DBD-MySQL
rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm 
rpm -ivh percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

root@db2 tmp]# rpm -ivh percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm 
warning: percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:percona-xtrabackup-24-2.4.15-1.el################################# [100%]

2.1.4 安裝 Go

wget https://golang.org/doc/install?download=go1.13.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz
echo "export PATH=\$PATH:/usr/local/go/bin" >> /etc/profile

[root@db1 tmp]# source /etc/profile
[root@db1 tmp]# which go
/usr/local/go/bin/go
[root@db1 tmp]# go version
go version go1.13.4 linux/amd64

2.2 安裝 Xenon

https://github.com/radondb/xenon/releases 下載 1.0.7 版本的安裝包至服務器。

[root@db1 local]# tar -xvf xenon-1.0.7.tar.gz
[root@db1 local]# mv xenon-1.0.7 xenon
[root@db1 local]# cd /usr/local/xenon
[root@db1 xenon]# make build
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
fatal: Not a git repository (or any of the parent directories): .git
--> Building...
# 省略……
[root@db1 xenon]# make

2.3 配置 Xenon

2.3.1 添加配置文件

添加 db1 的配置文件。

[mysql@db1 conf]$ cat xenon.json 
{
"server":
{
   "endpoint":"10.10.10.10:8801"
},
"raft":
{
   "meta-datadir":"raft.meta",
   "heartbeat-timeout":1000,
   "election-timeout":3000,
   "admit-defeat-hearbeat-count": 5,
   "purge-binlog-disabled": true,
   "leader-start-command":"sudo /sbin/ip a a 10.10.10.20/24 dev enp0s3 && arping -c 3 -A 10.10.10.20 -I enp0s3",
   "leader-stop-command":"sudo /sbin/ip a d 10.10.10.20/24 dev enp0s3"
},
"mysql":
{
   "admin":"root",                
   "passwd":"123456",            
   "host":"127.0.0.1",              
   "port":3306,                    
   "basedir":"/usr/local/mysql",    
   "defaults-file":"/etc/my.cnf"
},
"replication":
{
   "user":"repl",                
   "passwd":"123456"        
},
"backup":
{
   "ssh-host":"10.10.10.10",                    
   "ssh-user":"mysql",                            
   "ssh-passwd":"123456",                        
   "basedir":"/usr/local/mysql",                 
   "backup-dir":"/backup",
   "mysqld-monitor-interval": 5000,
   "backup-use-memory": "3072M",
   "ssh-port": 22,
   "backup-parallel": 2,         
   "backup-iops-limits": 100000,                 
   "xtrabackup-bindir":"/usr/bin"       
},
"rpc":
{
   "request-timeout":500
},
"log":
{
   "level":"INFO"
}
}

添加 db2 和 db3 的配置文件。以 db2 配置文件為示例。

[mysql@db2 ~]$ cd /usr/local/xenon/conf
[mysql@db2 conf]$ cat xenon.json 
{
"server":
{
   "endpoint":"10.10.10.11:8801"  #添加 db3 配置文件時,需設置為 10.10.10.18
},
"raft":
{
   "meta-datadir":"raft.meta",
   "heartbeat-timeout":1000,
   "election-timeout":3000,
   "admit-defeat-hearbeat-count": 5,
   "purge-binlog-disabled": true,
   "leader-start-command":"sudo /sbin/ip a a 10.10.10.20/24 dev enp0s3 && arping -c 3 -A 10.10.10.20 -I enp0s3",
   "leader-stop-command":"sudo /sbin/ip a d 10.10.10.20/24 dev enp0s3"
},
"mysql":
{
   "admin":"root",                
   "passwd":"123456",            
   "host":"127.0.0.1",              
   "port":3306,                    
   "basedir":"/usr/local/mysql",    
   "defaults-file":"/etc/my.cnf"
},
"replication":
{
   "user":"repl",                
   "passwd":"123456"        
},
"backup":
{
   "ssh-host":"10.10.10.11",                    
   "ssh-user":"mysql",                            
   "ssh-passwd":"123456",                        
   "basedir":"/usr/local/mysql",                 
   "backup-dir":"/backup",
   "mysqld-monitor-interval": 5000,
   "backup-use-memory": "3072M",
   "ssh-port": 22,
   "backup-parallel": 2,         
   "backup-iops-limits": 100000,                 
   "xtrabackup-bindir":"/usr/bin"       
},
"rpc":
{
   "request-timeout":500
},
"log":
{
   "level":"INFO"
}
}

注意:主機配置文件中leader-start-commandleader-stop-command 參數的值,10.10.10.20/24 和 enp0s3 需要根據實際情況填寫。

2.3.2 配置備份環境

mkdir /backup & chown -R mysql.mysql /backup

在復制環境中創建管理員帳號。

create user 'root'@'127.0.0.1' identified by '123456';
grant all privileges on *.* to 'root'@'127.0.0.1';
flush privileges;

2.3.3 修改權限

mkdir /etc/xenon/
ln -s /usr/local/xenon/conf/xenon.json /etc/xenon/
chown mysql.mysql -R /usr/local/xenon
chown mysql.mysql -R /etc/xenon/

2.3.4 修改日志目錄

mkdir /etc/xenon/log
chown mysql.mysql /etc/xenon/log
cd /usr/local/xenon/bin/
echo "/etc/xenon/xenon.json" > /usr/local/xenon/bin/config.path

2.4 啟用 Xenon

2.4.1 登錄

通過 MySQL 帳號登錄並啟動 Xenon。

# db1
su - mysql
/usr/local/xenon/bin/xenon -c /etc/xenon/xenon.json > /etc/xenon/log/xenon.log 2>&1 &
 
# db2
su - mysql
/usr/local/xenon/bin/xenon -c /etc/xenon/xenon.json > /etc/xenon/log/xenon.log 2>&1 &
 
# db3
su - mysql
/usr/local/xenon/bin/xenon -c /etc/xenon/xenon.json > /etc/xenon/log/xenon.log 2>&1 &

2.4.2 添加成員

/usr/local/xenon/bin/xenoncli cluster add \
10.10.10.10:8801,10.10.10.11:8801,10.10.10.18:8801

2.4.3 查看集群狀態

查看集群狀態。

查看 MySQL 狀態。

MySQL 高可用部署成功!

總結

在使用 Xenon 搭建高可用集群時,需要注意以下幾點:

  1. MySQL 5.7+ GTID 復制結構為基礎
  2. 必須有增強半同步復制插件
  3. MySQL 帳號必須是 /bin/bash
  4. Xenon 和 MySQL 必須運行在同一帳號下,一般就是 MySQL
  5. MySQL 帳號在節點之前必須有 SSH 信任
  6. 節點必須安裝 Xtrabackup
  7. 必須使用 mysqld_safe 啟用 mysql

下期預告

下一期我們將介紹 Xenon 常見操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM