【MySQL】通过xenon实现数据库高可用集群

发布时间 2023-03-22 21:08:56作者: dbprofessional
[root@node01 ~]# yum install -y golang screen git

[root@node01 ~]# which ip /usr/sbin/ip [root@node01 ~]# visudo mysql ALL=(ALL) NOPASSWD:/usr/sbin/ip
[mysql@node01 ~]$ sudo /usr/sbin/ip address add 192.168.40.100/32 dev ens192 [mysql@node01 ~]$ arping -c 5 -A 192.168.40.100 -I ens192 [mysql@node01 ~]$ sudo /usr/sbin/ip address del 192.168.40.100/32 dev ens192
[mysql@node01 ~]$ ssh-keygen [mysql@node01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub mysql@node02 [mysql@node01 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub mysql@node03 [root@node01 ~]# git clone https://github.com/radondb/xenon.git Cloning into 'xenon'... remote: Enumerating objects: 1493, done. remote: Counting objects: 100% (65/65), done. remote: Compressing objects: 100% (49/49), done. remote: Total 1493 (delta 20), reused 16 (delta 16), pack-reused 1428 Receiving objects: 100% (1493/1493), 815.39 KiB | 0 bytes/s, done. Resolving deltas: 100% (790/790), done. [root@node01 ~]# cd xenon
[root@node01 xenon]# go env -w GO111MODULE=off [root@node01 xenon]# make build [root@node01 ~]# cp -ar xenon /usr/local/ [root@node01 ~]# chown -R mysql:mysql /usr/local/xenon
[mysql@node01 ~]$ cd /usr/local/xenon/conf [mysql@node01 conf]$ cp xenon-simple.conf.json xenon.json [mysql@node01 conf]$ vim xenon.json { "server": { "endpoint":"192.168.40.101:8801" }, "raft": { "meta-datadir":"raft.meta", "heartbeat-timeout":1000, "election-timeout":3000, "leader-start-command":"sudo /usr/sbin/ip address add 192.168.40.100/32 dev ens192 && arping -c 5 -A 192.168.40.100 -I ens192", "leader-stop-command":"sudo /usr/sbin/ip address del 192.168.40.100/32 dev ens192" }, "mysql": { "admin":"root", "passwd":"abcd.1234", "host":"localhost", "port":3306, "basedir":"/usr/local/mysql", "defaults-file":"/etc/my.cnf", "ping-timeout":1000, "master-sysvars":"", "slave-sysvars": "" }, "replication": { "user":"repl", "passwd":"repl" }, "backup": { "backupdir":"/home/mysql/backup", "xtrabackup-bindir":"/usr/bin", "backup-iops-limits":100000, "backup-use-memory": "2GB", "backup-parallel": 2 }, "rpc": { "request-timeout":500 }, "log": { "level":"INFO" } }
[mysql@node01 ~]$ echo "/usr/local/xenon/conf/xenon.json" > /usr/local/xenon/bin/config.path [root@node01 ~]# yum -y install screen [mysql@node01 ~]$ screen -S xenon [mysql@node01 ~]$ /usr/local/xenon/bin/xenon -c /usr/local/xenon/conf/xenon.json > /usr/local/xenon/xenon.log ctrl+a+d --后台执行 [mysql@node01 ~]$ screen -ls There is a screen on: 3061.xenon (Detached) 1 Socket in /var/run/screen/S-mysql.
[root@node02 ~]# yum install -y golang screen git

[root@node02 ~]# which ip
/usr/sbin/ip
[root@node02 ~]# visudo
mysql   ALL=(ALL)       NOPASSWD:/usr/sbin/ip
[mysql@node02 ~]$ sudo /usr/sbin/ip address add 192.168.40.100/32 dev ens192
[mysql@node02 ~]$ arping -c 5 -A 192.168.40.100  -I ens192
[mysql@node02 ~]$ sudo /usr/sbin/ip address del 192.168.40.100/32 dev ens192

[mysql@node02 ~]$ ssh-keygen
[mysql@node02 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub mysql@node01
[mysql@node02 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub mysql@node03

[root@node02 ~]# git clone https://github.com/radondb/xenon.git
Cloning into 'xenon'...
remote: Enumerating objects: 1493, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 1493 (delta 20), reused 16 (delta 16), pack-reused 1428
Receiving objects: 100% (1493/1493), 815.39 KiB | 0 bytes/s, done.
Resolving deltas: 100% (790/790), done.

[root@node02 ~]# cd xenon
[root@node02 xenon]# go env -w GO111MODULE=off
[root@node02 xenon]# make build
[root@node02 ~]# cp -ar xenon /usr/local/
[root@node02 ~]# chown -R mysql:mysql /usr/local/xenon
[mysql@node02 ~]$ cd /usr/local/xenon/conf
[mysql@node02 conf]$ cp xenon-simple.conf.json xenon.json
[mysql@node02 conf]$ vim xenon.json
{
        "server":
        {
                "endpoint":"192.168.40.102:8801"
        },

        "raft":
        {
                "meta-datadir":"raft.meta",
                "heartbeat-timeout":1000,
                "election-timeout":3000,
                "leader-start-command":"sudo /usr/sbin/ip address add 192.168.40.100/32 dev ens192 && arping -c 5 -A 192.168.40.100 -I ens192",
                "leader-stop-command":"sudo /usr/sbin/ip address del 192.168.40.100/32 dev ens192"
        },

        "mysql":
        {
                "admin":"root",
                "passwd":"abcd.1234",
                "host":"localhost",
                "port":3306,
                "basedir":"/usr/local/mysql",
                "defaults-file":"/etc/my.cnf",
                "ping-timeout":1000,
                "master-sysvars":"",
                "slave-sysvars": ""
        },

        "replication":
        {
                "user":"repl",
                "passwd":"repl"
        },

        "backup":
        {
                "backupdir":"/home/mysql/backup",
                "xtrabackup-bindir":"/usr/bin",
                "backup-iops-limits":100000,
                "backup-use-memory": "2GB",
                "backup-parallel": 2
        },

        "rpc":
        {
                "request-timeout":500
        },

        "log":
        {
                "level":"INFO"
        }
}
[mysql@node02 ~]$ echo "/usr/local/xenon/conf/xenon.json" > /usr/local/xenon/bin/config.path

[mysql@node02 ~]$ screen -S xenon
[mysql@node02 ~]$ /usr/local/xenon/bin/xenon -c /usr/local/xenon/conf/xenon.json > /usr/local/xenon/xenon.log
ctrl+a+d --后台执行
[mysql@node02 ~]$ screen -ls
There is a screen on:
        1396.xenon      (Detached)
1 Socket in /var/run/screen/S-mysql.
[root@node03 ~]# yum install -y golang screen git

[root@node03 ~]# which ip
/usr/sbin/ip
[root@node03 ~]# visudo
mysql   ALL=(ALL)       NOPASSWD:/usr/sbin/ip
[mysql@node03 ~]$ sudo /usr/sbin/ip address add 192.168.40.100/32 dev ens192
[mysql@node03 ~]$ arping -c 5 -A 192.168.40.100  -I ens192
[mysql@node03 ~]$ sudo /usr/sbin/ip address del 192.168.40.100/32 dev ens192

[mysql@node03 ~]$ ssh-keygen
[mysql@node03 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub mysql@node01
[mysql@node03 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub mysql@node02

[root@node03 ~]# git clone https://github.com/radondb/xenon.git
Cloning into 'xenon'...
remote: Enumerating objects: 1493, done.
remote: Counting objects: 100% (65/65), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 1493 (delta 20), reused 16 (delta 16), pack-reused 1428
Receiving objects: 100% (1493/1493), 815.39 KiB | 0 bytes/s, done.
Resolving deltas: 100% (790/790), done.

[root@node03 ~]# cd xenon
[root@node03 xenon]# go env -w GO111MODULE=off
[root@node03 xenon]# make build
[root@node03 ~]# cp -ar xenon /usr/local/
[root@node03 ~]# chown -R mysql:mysql /usr/local/xenon
[mysql@node03 ~]$ cd /usr/local/xenon/conf
[mysql@node03 conf]$ cp xenon-simple.conf.json xenon.json
[mysql@node03 conf]$ vim xenon.json
{
        "server":
        {
                "endpoint":"192.168.40.103:8801"
        },

        "raft":
        {
                "meta-datadir":"raft.meta",
                "heartbeat-timeout":1000,
                "election-timeout":3000,
                "leader-start-command":"sudo /usr/sbin/ip address add 192.168.40.100/32 dev ens192 && arping -c 5 -A 192.168.40.100 -I ens192",
                "leader-stop-command":"sudo /usr/sbin/ip address del 192.168.40.100/32 dev ens192"
        },

        "mysql":
        {
                "admin":"root",
                "passwd":"abcd.1234",
                "host":"localhost",
                "port":3306,
                "basedir":"/usr/local/mysql",
                "defaults-file":"/etc/my.cnf",
                "ping-timeout":1000,
                "master-sysvars":"",
                "slave-sysvars": ""
        },

        "replication":
        {
                "user":"repl",
                "passwd":"repl"
        },

        "backup":
        {
                "backupdir":"/home/mysql/backup",
                "xtrabackup-bindir":"/usr/bin",
                "backup-iops-limits":100000,
                "backup-use-memory": "2GB",
                "backup-parallel": 2
        },

        "rpc":
        {
                "request-timeout":500
        },

        "log":
        {
                "level":"INFO"
        }
}
[mysql@node03 ~]$ echo "/usr/local/xenon/conf/xenon.json" > /usr/local/xenon/bin/config.path

[mysql@node03 ~]$ screen -S xenon
[mysql@node03 ~]$ /usr/local/xenon/bin/xenon -c /usr/local/xenon/conf/xenon.json > /usr/local/xenon/xenon.log
ctrl+a+d --后台执行
[mysql@node02 ~]$ screen -ls
There is a screen on:
        19761.xenon     (Detached)
1 Socket in /var/run/screen/S-mysql.
[mysql@node01 ~]$ /usr/local/xenon/bin/xenoncli cluster add 192.168.40.101:8801,192.168.40.102:8801,192.168.40.103:8801
[mysql@node02 ~]$ /usr/local/xenon/bin/xenoncli cluster add 192.168.40.101:8801,192.168.40.102:8801,192.168.40.103:8801
[mysql@node03 ~]$ /usr/local/xenon/bin/xenoncli cluster add 192.168.40.101:8801,192.168.40.102:8801,192.168.40.103:8801

[mysql@node01 ~]$ /usr/local/xenon/bin/xenoncli cluster mysql
+---------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+
|         ID          |   Raft   | Mysql |  Option   |  Master_Log_File/Pos   | IO/SQL_Running | Seconds_Behind | Last_Error |
+---------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+
| 192.168.40.101:8801 | LEADER   | ALIVE | READWRITE | [mysql-bin.000002/654] | [true/true]    |              0 |            |
+---------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+
| 192.168.40.102:8801 | FOLLOWER | ALIVE | READONLY  | [mysql-bin.000002/654] | [true/true]    |              0 |            |
+---------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+
| 192.168.40.103:8801 | FOLLOWER | ALIVE | READONLY  | [mysql-bin.000002/654] | [true/true]    |              0 |            |
+---------------------+----------+-------+-----------+------------------------+----------------+----------------+------------+