• ADADADADAD

    MySQL Innodb Cluster搭建与初探[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:14:50

    作者:文/会员上传

    简介:

    -------------------------------------------------------------------------------------------------正文-----------------------------------------------------------

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    -------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------
    场景:
    有些空余时间了,想要测试一下Group Replication与MySQL Router~\(≧▽≦)/~

    结论:
    可用性方面不错;
    性能方面其实还不错, 不过写入能力还是老问题, 读多写少的业务可以关注一下Innodb Cluster;

    测试环境:

    MySQL 8.0.3-rc
    MySQL Router 8.0
    MySQL shell
    sysbench 1.0 (以后再补一篇测试数据......)

    虚拟机:

    4C24G,2.00GHz x 5 (MySQL 8.0.3-rc)
    4C24G, 2.40GHz x 4 (MySQL 8.0.3-rc)
    8C24G, 2.40GHz x 1 (MySQL Router)

    搭建过程:

    1. 官方源直接安装MySQL相关的所有包, apt-get/yum

    2.MySQL的配置, 除了常规配置以外, 推荐加上如下的部分, loose开头的参数表示如果不存在group_replication插件, 则忽略这些配置

    点击(此处)折叠或打开

      report_host = 192.168.0.100 ##GR插件会用这个report_host来标记Group中的每个MySQL实例, 确保每个MySQL实例的hostname不一样, 或者这个report_host不一样
      log_bin = /home/mysql/mysql-binlog ##必须开启
      log_slave_updates = ON ##必须开启
      master_info_repository = TABLE ##必须使用Table
      relay_log_info_repository = TABLE##必须使用Table
      gtid_mode = ON ##必须开启GTID
      enforce_gtid_consistency = ON##必须开启
      slave_preserve_commit_order = ON##确保GR_applier按照一致的顺序复现事务
      binlog_checksum = NONE ##必须设置为NONE
      transaction_write_set_extraction=XXHASH64##必须设置为XXHASH64

      #group_replication = ON ##开启Group Replication插件, 安装插件之后再开启
      loose-group_replication_start_on_boot=off##默认关闭, 防止重启后自动创建新的Group
      loose-group_replication_local_address= "192.168.0.100:13306" ##官方工具会默认使用13306端口作为插件的端口, 设置为13306方便测试
      loose-group_replication_group_seeds= "192.168.0.100:13306,192.168.1.100:13306"##官方工具貌似不会主动管理这个参数, 手动加上
      loose-group_replication_bootstrap_group=off##默认关闭,防止自动创建新的Group
      loose-group_replication_ip_whitelist = '192.168.0.0/24,192.168.1.0/24' ##推荐在初始化前手工加上, 控制哪些ip的机器可以加入Group

    PS: 测试中, 全程使用innodb_flush_log_at_trx_commit = 2 和sync_binlog = 0 的设置, 双1的性能实在是弱......_(:з」∠)_

    3. 启动所有的MySQL实例, 并安装插件

    点击(此处)折叠或打开

      INSTALL PLUGIN group_replication SONAME 'group_replication.so'

    4. 在mysql中创建用户temp, 测试图方便, 用ALL on *.*就行, 在官方文档中, 有列出这个用户需要的具体权限, 如下

    点击(此处)折叠或打开

      GRANT ALL PRIVILEGES ON mysql_innodb_cluster_metadata.* TO your_user@'%' WITH GRANT OPTION;
      GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, \
      CREATE USER ON *.* TO your_user@'%' WITH GRANT OPTION;
      GRANT SELECT ON performance_schema.* TO your_user@'%' WITH GRANT OPTION;
      GRANT SELECT ON *.* TO your_user@'%' WITH GRANT OPTION;
      GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO your_user@'%' WITH GRANT OPTION

    还有一个需要注意的是: 官方推荐修改/etc/hosts, 实测中, 把localhost指向内网IP, 或者是创建temp@localhost的同权限用户也行, 官方的工具会用到@localhost的登录方式;

    PS: with grant option很重要, 因为工具会新建一个mysql_route_xxxx用户, 以及存储meta的新数据库;

    4. 在Group Primary的机器上启动MySQL shell, 这个很重要, 因为第3点中提到的: 官方的工具会用到@localhost的登录方式
    PS: 推荐用mysqlsh --log-level=DEBUG3来启动mysql shell, 且不要关闭wizard;

    5. 进入MySQL shell以后, 可以选择使用java script还是python, 这里比较习惯python, 就用python的方式, 和js基本没区别;


    6. dba.help()命令能看到支持的所有命令, 搭建过程中主要用到的主要有这几个:
    check_instance_configuration : 检查实例的参数配置是否符合搭建Group的要求
    configure_local_instance : 持久化实例的配置参数到配置文件
    create_cluster :创建innodb cluster
    get_cluster :获取这个实例所属innodb cluster的信息
    \connect 用户名@ip:port: 登录到某个实例, 一般为本机

    7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')来检测配置参数, 按照第一步设置之后, 应该是直接返回OK的, 如果还有缺失的话, 就手动补上吧
    PS: 这个工具可以自动把参数修改成符合要求的设置, 有兴趣可以研究一下, 这里就不唠叨了ㄟ( ▔, ▔ )ㄏ


    8. 接下来就是使用create_cluster来创建innodb cluster了, 这里放上比较常用的一些设置信息


    简单说明部分参数:
    multiMaster : 如果要创建多主集群,就需要单独指定这个参数, 否则默认创建单主集群(类似于一主多从的复制架构);
    adoptFromGR : 如果已经手动把Group搭建起来了, 需要在这个Group上创建新的innodb cluster, 那就需要显式指定这个参数, 且关闭wizard模式, 关掉wizard模式之后, 需要再额外添加创建集群的用户名和密码作为参数, 推荐开启wizard, 并全程使用MySQL shell搭建innodb cluster;
    ipWhitelist : 在测试的时候, 可能是工具没有管理seed这个参数, 所以在创建的时候即便指定了白名单, 也无法向Group里面添加新实例;



    PS: 在python模式下, 如果需要添加参数, 就这么写

    点击(此处)折叠或打开

      cluster = cluster.create_cluster('temp@192.168.0.100:3306', {'multiMaster':1,'adoptFromGR':1})


    9. 开启wizard的情况下(本文默认开启), 使用如下命令创建Cluster:

    点击(此处)折叠或打开

      cluster = dba.create_cluster('testCluster')
    如果没问题的话, 就会有如下提示信息


    10. 集群创建成功以后, 用add_instance命令把所有的实例都添加到群组就好了, 在官方的宣讲中, 暂时不支持超过9个实例组成一个Group, 实际上, 不超过7个比较好, auto_increament的默认设置是7;

    11. 这时候登录数据库,就会看到多出来一个库, 叫做mysql_innodb_cluster_metadata, 里面有cluster的一些信息, 有兴趣可以看看;

    12. 在其他的虚拟机上安装MySQL Router, 然后用bootstrap来自动生成配置;

    点击(此处)折叠或打开

      mysqlrouter --bootstrap temp@192.168.0.100:3306 --directory /home/mysqlrouter/ --user=mysqlrouter
    在对应的目录下会有start.sh和stop.sh来启动和关闭mysqlrouter
    PS : stop.sh可能会关不掉mysqlrouter, 留意一下, 脚本的问题

    13. 读写默认使用6446, 只读使用6447, 这时候就可以随意进行测试了;

    14. 如果要创建多主模式, 需要调整两个参数

    点击(此处)折叠或打开

      group_replication_single_primary_mode = OFF
      group_replication_enforce_update_everywhere_checks = ON

    PPS: MySQLRouter会根据meta的数据来动态调整读写和只读连接, 比如说Primary挂掉了, meta发生了变化,MySQLRouter会在很短的时间内发现并把流量切换到新的Primary;

    PPPPPS: 性能测试数据待整理
    MySQL Innodb Cluster搭建与初探.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: clusterinnodbmysql