ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql8.0.26-cluster 单主与多主搭建

2022-03-01 10:03:42  阅读:195  来源: 互联网

标签:... 26 单主 instance 192.168 cluster zabbix 3306


先配置三台服务器

系统版本
cat /etc/redhat-release 
Rocky Linux release 8.5 (Green Obsidian)

mysql版本  8.0.26

[root@zabbix-master1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.6 zabbix-master1
192.168.100.11 zabbix-master2
192.168.100.14 zabbix-master3



#下载 mysql-shell 
wget https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.28-1.el8.x86_64.rpm







[root@zabbix-master1 ~]# mysqlsh
MySQL Shell 8.0.28

Copyright (c) 2016, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.

Type '\help' or '\?' for help; '\quit' to exit.

#我们依次输入cluster所有节点的地址  \c root@域名也可:Port
  MySQL  JS > \c root@192.168.100.6:3306
Creating a session to 'root@192.168.100.6:3306'
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 84
Please provide the password for 'root@192.168.100.6:3006': ************
Server version: 8.0.26 Source distribution
No default schema selected; type \use <schema> to set one.
 MySQL  192.168.100.6:3306 ssl  JS > 



#三台机器都连接过数据库后,再连接各自MySQL执行下面操作
 MySQL  192.168.100.6:3306 ssl  JS > dba.configureInstance();   
Configuring local MySQL instance listening at port 3306 for use in an InnoDB cluster...

This instance reports its own address as zabbix-master1:3306
Clients and other cluster members will communicate with it through this address by default. If this is not correct, the report_host MySQL system variable should be changed.

applierWorkerThreads will be set to the default value of 4.

NOTE: Some configuration options need to be fixed:
+----------------------------------------+---------------+----------------+----------------------------+
| Variable                               | Current Value | Required Value | Note                       |
+----------------------------------------+---------------+----------------+----------------------------+
| binlog_transaction_dependency_tracking | COMMIT_ORDER  | WRITESET       | Update the server variable |
| replica_parallel_type                  | DATABASE      | LOGICAL_CLOCK  | Update the server variable |
| replica_preserve_commit_order          | OFF           | ON             | Update the server variable |
+----------------------------------------+---------------+----------------+----------------------------+

Do you want to perform the required configuration changes? [y/n]: y
Configuring instance...
The instance 'zabbix-master1:3306' was configured to be used in an InnoDB cluster.



#检查节点配置实例状态是否为健康,用于加入cluster之前
MySQL  192.168.100.6:3306 ssl  JS > dba.checkInstanceConfiguration("root@192.168.100.6:3306");
Validating local MySQL instance listening at port 3306 for use in an InnoDB cluster...

This instance reports its own address as zabbix-master1:3306
Clients and other cluster members will communicate with it through this address by default. If this is not correct, the report_host MySQL system variable should be changed.

Checking whether existing tables comply with Group Replication requirements...
No incompatible tables detected

Checking instance configuration...
Instance configuration is compatible with InnoDB cluster

The instance 'zabbix-master1:3306' is valid to be used in an InnoDB cluster.

{
    "status": "ok"
}



#创建集群名称叫myCluster
MySQL  192.168.100.6:3306 ssl  JS > var cluster=dba.createCluster("myCluster");
A new InnoDB cluster will be created on instance '192.168.100.6:3306'.

Validating instance configuration at 192.168.100.6:3306...

This instance reports its own address as zabbix-master1:3306

Instance configuration is suitable.
NOTE: Group Replication will communicate with other members using 'zabbix-master1:33061'. Use the localAddress option to override.

Creating InnoDB cluster 'myCluster' on 'zabbix-master1: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  192.168.100.6:3306 ssl  JS > cluster.addInstance("root@192.168.100.11:3306")

WARNING: A GTID set check of the MySQL instance at 'zabbix-master2:3306' determined that it contains transactions that do not originate from the cluster, which must be discarded before it can join the cluster.

zabbix-master2:3306 has the following errant GTIDs that do not exist in the cluster:
ccb17a91-983c-11ec-a058-000c299ab833:1-5

WARNING: Discarding these extra GTID events can either be done manually or by completely overwriting the state of zabbix-master2:3306 with a physical snapshot from an existing cluster member. To use this method by default, set the 'recoveryMethod' option to 'clone'.

Having extra GTID events is not expected, and it is recommended to investigate this further and ensure that the data can be removed prior to choosing the clone recovery method.

Please select a recovery method [C]lone/[A]bort (default Abort): C
Validating instance configuration at 192.168.100.11:3306...

This instance reports its own address as zabbix-master2:3306

Instance configuration is suitable.
NOTE: Group Replication will communicate with other members using 'zabbix-master2:33061'. Use the localAddress option to override.

A new instance will be added to the InnoDB cluster. Depending on the amount of
data on the cluster this might take from a few seconds to several hours.

Adding instance to the cluster...

Monitoring recovery process of the new cluster member. Press ^C to stop monitoring and let it continue in background.
Clone based state recovery is now in progress.

NOTE: A server restart is expected to happen as part of the clone process. If the
server does not support the RESTART command or does not come back after a
while, you may need to manually start it back.

* Waiting for clone to finish...
NOTE: zabbix-master2:3306 is being cloned from zabbix-master1:3306
** Stage DROP DATA: Completed 
** Clone Transfer  
    FILE COPY  ============================================================    0%  In Progress
    PAGE COPY  ============================================================    0%  Not Started
    REDO COPY  ============================================================    0%  Not Started

NOTE: zabbix-master2:3306 is shutting down...

* Waiting for server restart... ready 
* zabbix-master2:3306 has restarted, waiting for clone to finish...
** Stage RESTART: Completed
* Clone process has finished: 72.71 MB transferred in about 1 second (~72.71 MB/s)

State recovery already finished for 'zabbix-master2:3306'

The instance 'zabbix-master2:3306' was successfully added to the cluster.



# 往集群里面添加节点
MySQL  192.168.100.6:3306 ssl  JS > cluster.addInstance("root@192.168.100.14:3306")

WARNING: A GTID set check of the MySQL instance at 'zabbix-master3:3306' determined that it contains transactions that do not originate from the cluster, which must be discarded before it can join the cluster.

zabbix-master3:3306 has the following errant GTIDs that do not exist in the cluster:
02c8d10a-983f-11ec-a9f2-000c2929b6f0:1-4

WARNING: Discarding these extra GTID events can either be done manually or by completely overwriting the state of zabbix-master3:3306 with a physical snapshot from an existing cluster member. To use this method by default, set the 'recoveryMethod' option to 'clone'.

Having extra GTID events is not expected, and it is recommended to investigate this further and ensure that the data can be removed prior to choosing the clone recovery method.

Please select a recovery method [C]lone/[A]bort (default Abort): C
Validating instance configuration at 192.168.100.14:3306...

This instance reports its own address as zabbix-master3:3306

Instance configuration is suitable.
NOTE: Group Replication will communicate with other members using 'zabbix-master3:33061'. Use the localAddress option to override.

A new instance will be added to the InnoDB cluster. Depending on the amount of
data on the cluster this might take from a few seconds to several hours.

Adding instance to the cluster...

Monitoring recovery process of the new cluster member. Press ^C to stop monitoring and let it continue in background.
Clone based state recovery is now in progress.

NOTE: A server restart is expected to happen as part of the clone process. If the
server does not support the RESTART command or does not come back after a
while, you may need to manually start it back.

* Waiting for clone to finish...
NOTE: zabbix-master3:3306 is being cloned from zabbix-master1:3306
** Stage DROP DATA: Completed
** Clone Transfer  
    FILE COPY  ############################################################  100%  Completed
    PAGE COPY  ############################################################  100%  Completed
    REDO COPY  ############################################################  100%  Completed

NOTE: zabbix-master3:3306 is shutting down...

* Waiting for server restart... ready 
* zabbix-master3:3306 has restarted, waiting for clone to finish...
** Stage RESTART: Completed
* Clone process has finished: 72.61 MB transferred in about 1 second (~72.61 MB/s)

State recovery already finished for 'zabbix-master3:3306'

The instance 'zabbix-master3:3306' was successfully added to the cluster.



MySQL  192.168.100.6:3306 ssl  JS > cluster.status();
{
    "clusterName": "myCluster", 
    "defaultReplicaSet": {
        "name": "default", 
        "primary": "zabbix-master1:3306", 
        "ssl": "REQUIRED", 
        "status": "OK", 
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", 
        "topology": {
            "zabbix-master1:3306": {
                "address": "zabbix-master1:3306", 
                "memberRole": "PRIMARY", 
                "mode": "R/W", 
                "readReplicas": {}, 
                "replicationLag": null, 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.26"
            }, 
            "zabbix-master2:3306": {
                "address": "zabbix-master2:3306", 
                "memberRole": "SECONDARY", 
                "mode": "R/O", 
                "readReplicas": {}, 
                "replicationLag": null, 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.26"
            }, 
            "zabbix-master3:3306": {
                "address": "zabbix-master3:3306", 
                "memberRole": "SECONDARY", 
                "mode": "R/O", 
                "readReplicas": {}, 
                "replicationLag": null, 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.26"
            }
        }, 
        "topologyMode": "Single-Primary"
    }, 
    "groupInformationSourceMember": "zabbix-master1:3306"
}



#进入mysql 查询集群状态
mysql> select * from performance_schema.replication_group_members;

dba.checkInstanceConfiguration("root@hostname:3306")     #检查节点配置实例,用于加入cluster之前
 
dba.rebootClusterFromCompleteOutage('myCluster');        #重启 
 
dba.dropMetadataSchema();                                #删除schema
 
var cluster = dba.getCluster('myCluster')                #获取当前集群
 
cluster.checkInstanceState("root@hostname:3306")         #检查cluster里节点状态
 
cluster.rejoinInstance("root@hostname:3306")             #重新加入节点,我本地测试的时候发现rejoin一直无效,每次是delete后
 
addcluster.dissolve({force:true})                       #删除集群
 
cluster.addInstance("root@hostname:3306")                #增加节点
 
cluster.removeInstance("root@hostname:3306")             #删除节点
 
cluster.removeInstance('root@host:3306',{force:true})    #强制删除节点
 
cluster.dissolve({force:true})                           #解散集群
 
cluster.describe();                                      #集群描述



- ONLINE       - 节点状态正常。
- OFFLINE      - 实例在运行,但没有加入任何Cluster。
- RECOVERING   - 实例已加入Cluster,正在同步数据。
- ERROR        - 同步数据发生异常。
- UNREACHABLE  - 与其他节点通讯中断,可能是网络问题,可能是节点crash。
- MISSING      - 节点已加入集群,但未启动group replication



#如果查询节点状态为:
 "status": "(MISSING)"
#重新加入命令
shell.connect("root@node-1:3305");
cluster=dba.getCluster();
cluster.rejoinInstance("root@node-2:3305")
#如果rejoinInstance失败,提示remove重新添加如下:
cluster.removeInstance('root@node-1:3305');
cluster.addInstance('root@node-1:3305');





#切换到多主状态
MySQL  192.168.100.6:3306 ssl  JS > cluster.switchToMultiPrimaryMode()
Switching cluster 'myCluster' to Multi-Primary mode...

Instance 'zabbix-master3:3306' was switched from SECONDARY to PRIMARY.
Instance 'zabbix-master1:3306' remains PRIMARY.
Instance 'zabbix-master2:3306' was switched from SECONDARY to PRIMARY.

The cluster successfully switched to Multi-Primary mode.



#多主

标签:...,26,单主,instance,192.168,cluster,zabbix,3306
来源: https://www.cnblogs.com/AnyChen/p/15948836.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有