【MySQL高可用】MySQL高可用之MGR部署

【MySQL高可用】MySQL高可用之MGR部署

参考:https://www.xmmup.com/dbbao45mysqlgaokeyongzhimgrconsuljiagoubushu.html

架构介绍

采用MGR集群、和consul服务注册发现实现应用端通过动态dns访问MGR集群,实现数据库高可用,自动化切换的方案。

本次环境一共包含7台机器。其中3台做MySQL的MGR数据节点(也需要安装Consul,作为Consul client)。单主模式,还有3台做Consul server集群。实现Consul的高可用,剩下一台做DNS服务器,用来解析MGR节点域名。

IP 数据库版本 主机名 容器名 容器映射端口 Server ID 实例端口 MGR通讯端口 备注
192.168.68.60 8.0.22 mgr60 mysql8022mgr33060 33060 802233060 3306 33061 MGR主节点
192.168.68.61 8.0.22 mgr61 mysql8022mgr33061 33061 802233061 3306 33061 MGR节点
192.168.68.62 8.0.22 mgr62 mysql8022mgr33062 33062 802233062 3306 33061 MGR节点

搭建MGR

申请3台MGR机器

[root@mysql conf]# docker pull lhrbest/lhrcentos76:8.0


-- 创建主从网络环境
[root@mysql ~]# docker network create --subnet=192.168.68.0/16 mhaclone
8b8e5ae9dd1efbb247323978a3dbcf025415b861b76bd828859ac934aefa77d1
[root@mysql ~]# docker network inspect mhaclone
[
    {
   
        "Name": "mhaclone",
        "Id": "8b8e5ae9dd1efbb247323978a3dbcf025415b861b76bd828859ac934aefa77d1",
        "Created": "2022-10-14T20:55:25.87905019+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
   
            "Driver": "default",
            "Options": {
   },
            "Config": [
                {
   
                    "Subnet": "192.168.68.0/16"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
   
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
   },
        "Options": {
   },
        "Labels": {
   }
    }
]

-- 生成3台CentOS的环境
[root@mysql conf]# docker rm -f mysql8022mgr33060 mysql8022mgr33061 mysql8022mgr33062

[root@mysql conf]# docker run -d --name mysql8022mgr33060  -h mgr60   --network mhaclone --ip 192.168.68.60 --privileged=true  -p 33060:3306    -v /sys/fs/cgroup:/sys/fs/cgroup  lhrbest/lhrcentos76:8.0 init
575e7d8692eeb9bd702c190d4faf281696eb913611b96cc3eb14f2fd81022b74
[root@mysql conf]# docker run -d --name mysql8022mgr33061  -h mgr61   --network mhaclone --ip 192.168.68.61 --privileged=true  -p 33061:3306    -v /sys/fs/cgroup:/sys/fs/cgroup  lhrbest/lhrcentos76:8.0 init
73d80f98b3ddd54a5b9c6a4a7c91ae1bf54980e1d7f7aafca571827aff328ae5
[root@mysql conf]# docker run -d --name mysql8022mgr33062  -h mgr62  --network mhaclone --ip 192.168.68.62 --privileged=true  -p 33062:3306    -v /sys/fs/cgroup:/sys/fs/cgroup  lhrbest/lhrcentos76:8.0 init
3705d9583d6d8f8574a839ddb4e6a46b2055efc86d6e7f0b5b26a074483f6ff6

mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar下载地址:

https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar

-- 上传mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar到docker 
[root@mysql ~]# pwd
/root
[root@mysql ~]# ls
anaconda-ks.cfg  centos:7.6.1810  mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar  -p  --privileged=true
[root@mysql ~]# docker cp mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar mysql8022mgr33060:/
[root@mysql ~]# docker cp mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar mysql8022mgr33061:/
[root@mysql ~]# docker cp mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar mysql8022mgr33062:/

[root@mysql ~]# docker network connect bridge mysql8022mgr33060
[root@mysql ~]# docker network connect bridge mysql8022mgr33061
[root@mysql ~]# docker network connect bridge mysql8022mgr33062
[root@mysql ~]# docker restart  mysql8022mgr33060 mysql8022mgr33061 mysql8022mgr33062

3台主机安装MySQL环境

mysql8022mgr33060

[root@mysql ~]# docker exec -it mysql8022mgr33060 bash
[root@mgr60 /]# tar -xvf mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar
[root@mgr60 /]# yum localinstall -y mysql-community-*.rpm
-- 取消密码认证
[root@mgr60 /]# mv /usr/lib64/mysql/plugin/validate_password.so /usr/lib64/mysql/plugin/validate_password.so_bk
[root@mgr60 /]# mv /usr/lib64/mysql/plugin/component_validate_password.so /usr/lib64/mysql/plugin/component_validate_password.so_bk
[root@mgr60 /]# systemctl start mysqld
[root@mgr60 /]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-10-15 11:43:50 CST; 975ms ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1140 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1211 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/docker-575e7d8692eeb9bd702c190d4faf281696eb913611b96cc3eb14f2fd81022b74.scope/system.slice/mysqld.service
           └─1211 /usr/sbin/mysqld

Oct 15 11:43:46 mgr60 systemd[1]: Starting MySQL Server...
Oct 15 11:43:50 mgr60 systemd[1]: Started MySQL Server.
[root@mgr60 /]# grep 'temporary password' /var/log/mysqld.log
2022-10-15T03:43:47.341706Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: HPe-pnyYh3us
[root@mgr60 /]# mysql -uroot -pHPe-pnyYh3us
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.22

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> alter user root@'localhost' identified with mysql_native_password by 'wcb';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to root@'localhost' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> create user root@'%' identified with mysql_native_password by 'wcb';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to root@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host,grant_priv,super_priv,authentication_string,password_last_changed from mysql.user;
+------------------+-----------+------------+------------+------------------------------------------------------------------------+-----------------------+
| user             | host      | grant_priv | super_priv | authentication_string                                                  | password_last_changed |
+------------------+-----------+------------+------------+------------------------------------------------------------------------+-----------------------+
| root             | %         | Y          | Y          | *1095707276B0CF42657EB271586320F15FD4D6AB                              | 2022-10-15 11:45:00   |
| mysql.infoschema | localhost | N          | N          | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 2022-10-15 11:43:47   |
| mysql.session    | localhost | N          | Y          | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 2022-10-15 11:43:47   |
| mysql.sys        | localhost | N          | N          | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 2022-10-15 11:43:47   |
| root             | localhost | Y          | Y          | *1095707276B0CF42657EB271586320F15FD4D6AB                              | 2022-10-15 11:44:49   |
+------------------+-----------+------------+------------+------------------------------------------------------------------------+-----------------------+
5 rows in set (0.00 sec)

mysql8022mgr33061

[root@mysql ~]# docker exec -it mysql8022mgr33061 bash
[root@mgr61 /]# tar -xvf mysql-8.0.22-1.el7.x86_64.rpm-bundle.tar
[root@mgr61 /]# yum localinstall -y mysql-community-*.rpm
[root@mgr61 /]# mv /usr/lib64/mysql/plugin/validate_password.so /usr/lib64/mysql/plugin/validate_password.so_bk
[root@mgr61 /]#  mv /usr/lib64/mysql/plugin/component_validate_password.so /usr/lib64/mysql/plugin/component_validate_password.so_bk
[root@mgr61 /]# systemctl start mysqld
[root@mgr61 /]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2022-10-15 11:47:14 CST; 608ms ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 1262 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 1333 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/docker-73d80f98b3ddd54a5b9c6a4a7c91ae1bf54980e1d7f7aafca571827aff328ae5.scope/system.slice/mysqld.service
           └─1333 /usr/sbin/mysqld

Oct 15 11:47:10 mgr61 systemd[1]: Starting MySQL Server...
Oct 15 11:47:14 mgr61 systemd[1]: Started MySQL Server.
[root@mgr61 /]# grep 'temporary password' /var/log/mysqld.log
2022-10-15T03:47:11.109466Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: <A!;j)I4Tptt
[root@mgr61 /]

你可能感兴趣的:(MySQL,mysql,服务器,docker)