验证高可用

  1. 模拟停用一台SECONDARY节点后,测试读请求的情况。

    1. 登录数据库从库1。
      1
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqls.sock
      
    2. 关闭数据库。
      1
      shutdown;
      
    3. 登录主库并查看组成员信息。
      1
      2
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqlm.sock
      select * from performance_schema.replication_group_members;
      

    4. 执行读请求脚本。
      1
      sh /home/read_6447.sh
      

      数据库127.0.0.1:3307服务停用了,读端口只路由到127.0.0.1:3308服务上,测试符合预期。

  2. 模拟停用两台SECONDARY节点后,测试读路由的情况。

    1. 登录数据库从库2。
      1
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqls2.sock
      
    2. 关闭数据库。
      1
      shutdown;
      
    3. 登录主库并查看组成员信息。
      1
      2
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqlm.sock
      select * from performance_schema.replication_group_members;
      

    4. 执行读请求脚本。
      1
      sh /home/read_6447.sh
      

      所有SECONDARY服务器停用了,读端口路由到PRIMARY节点服务127.0.0.1:3306上,测试符合预期(round-robin-with-fallback算法实现的)。

  3. 模拟PRIMARY节点切换。

    1. 分别启动数据库从库1和数据库从库2。
      1
      2
      /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf-slave-mgr &
      /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf-slave-2-mgr &
      
    2. 分别登录到数据库从库1和数据库从库2。
      1
      2
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqls.sock
      /usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/run/mysqls2.sock
      
    3. 分别在登录到数据库从库1和数据库从库2里执行如下语句启动MGR。
      1
      START GROUP_REPLICATION;
      
    4. 查看组成员信息(可在MGR群组的任意成员中查看)。
      1
      select * from performance_schema.replication_group_members;
      

    5. 将从库2设置为PRIMARY节点,其它为SECONDARY节点。
      1
      select group_replication_set_as_primary('从库2的member_id');
      

    6. 执行读请求脚本。
      1
      sh /home/read_6446.sh
      

    7. 执行写请求脚本。
      1. 编辑文件。
        1
        vim /home/write_6446.sh
        
      2. 替换为如下内容。
        1
        2
        3
        4
        5
        #!/bin/bash
        for i in {1001..2000}
        do
        /usr/local/mysql/bin/mysql -uroot -p123456 -P6446 -h127.0.0.1 -Dsysbench -e "insert into test1(id,report_serverid) values($i,@@server_id)"
        done
        
      3. “Esc”键,输入:wq!,按“Enter”保存并退出编辑。
      4. 执行写请求脚本。
        1
        sh /home/write_6446.sh
        
      5. 确认测试数据。
        1
        /usr/local/mysql/bin/mysql -uroot -p123456 -P6446 -h127.0.0.1 -Dsysbench -e "select * from test1"
        

    8. 执行读请求脚本。
      1
      sh /home/read_6447.sh
      

      写端口(6446端口)所有的读写请求都路由到PRIMARY服务127.0.0.1:3308上,读端口(6447端口)所有的读请求都路由到SECONDARY服务127.0.0.1:3306和127.0.0.1:3307上,测试符合预期。