mysql 高可用架构(笔记)

本贴最后更新于 2782 天前,其中的信息可能已经渤澥桑田

一.mysql 二进制日志格式

  1. 基于段的格式 binlog_format=STATEMENT

【记录 sql】

优点

  • 日志记录量相对较小,节约磁盘和网络 I/O
  • 只对一条记录修改、插入时,row 格式日志量小于端格式

缺点

  • 必须记录上下文信息,保证主从记录相同
  • 特定函数 UUID().user(),非确定性函数无法主从复制

查看当前二进制日志格式

  1. show variables like 'binlog_format';

临时修改参数

  1. set session binlog_format=statement;

刷新 binlog,产生新的 binlog 文件(名字如 mysql-bin.xxxxxx)

  1. flush logs;

查看 binlog 内容

  1. mysqlbinlog mysql-bin.000001 #查看名为mysql-bin.000001的binlog内容

2.基于行的日志格式 binlog_format=ROW(mysql5.7 之后默认使用这种格式)

【记录每一行的修改】

优点

  • ROW 格式可以避免 mysql 主从复制中出现的主从不一致
  • 对每一行数据的修改比基于段的复制更高效
  • 误操作且没有备份时,可通过反向执行二进制日志记录的操作来恢复数据

缺点

  • 记录日志量较大
  • 控制 row 记录的方式:binlog_row_image=[FULL|MINIMAL|NOBLOB]
  • FULL 全部记录;MINIMAL 同时多行操作只记录一行;NOBLOB 不修改 BLOB、TEXT 类型的字段时不会记录此字段

查看 row 格式的 binlog

  1. mysqlbinlog -vv mysql-bin.000003 | more

3. 混合日志格式 binlog_format=MIXED

特点

  • 根据 sql 语句由系统决定是使用基于段的还是基于行的格式
  • 数量的大小由所执行的 sql 语句决定

建议使用 mixed 或者 row,row 格式安全些较高,并要设置 minimal 这种方式

二、mysql 主从复制

1. 复制方式

(1)基于 SQL 语句的复制 SBR(日志格式使用的是 STATEMENT)

优点

  • 日志记录量相对较小,节约磁盘和网络 I/O
  • 并不强制要求主从数据库的表定义完全相同
  • 相比于行的复制更为灵活

缺点

  • 对于非确定性事件,无法保证主从复制数据的一致
  • 对于存储过程、触发器、自定义函数进行的修改也可能造成数据的不一致
  • 相比于基于行的复制从数据库上执行时需要更多的行锁

(2)基于行的复制 RBR(日志格式使用的是 ROW)

优点

  • 可以应用于任何 SQL 的复制,包括非确定性函数、存储过程等
  • 可以减少数据库锁的使用

缺点

  • 要求主从数据库的表结构相同,否则会中断
  • 无法再从服务器上单独执行触发器

(3)混合模式

  • 使用 MIXED

2. 复制工作方式

(1)主将变更写入二进制日志

(2)从读取主的二进制日志,并写入到 relay_log 中

(3)在从数据库上重放 relay_log 中的日志

3. 基于日志点的复制

(1)在主 DB 服务器上建立复制账号

    create user 'repl'@'IP段' identified by '密码'

    grant replication slave on *.* to 'repl'@'IP段'

    IP段可以形如192.168.3.%

(2)主数据库配置

    bin_log = mysql-bin

    server_id = 100

(3)从服务器配置

    bin_log = mysql-bin

    server_id = 101

    relay_log = mysql-relay-bin

    log_slave_update = on [可选]

    read_only = on [可选]阻止写操作

(4)从数据库初始化

主服务器备份

    mysqldump --master-data=2 --single-transaction[对仅有innodb的数据库,对有myisam和innodb混合的数据库使用--lock-all-tables]

    mysqldump --single-transaction --master-data --triggers --routines --all-databases -u root -p >> all.sql

    xtrabackup --slave-info [推荐]

从服务器导入

    mysql -u root -p < all.sql

(5)启动复制链路

在从服务器 msql 命令行执行,最后两个参数可以在 mysqldump 生成的文件中找到

  1. CHANGE MASTER TO MASTER_HOST='master_host_ip',
  2. MASTER_USER='xxx',
  3. MASTER_PASSWORD='xxx',
  4. MASTER_LOG_FILE='mysql_log_file_name',
  5. MASTER_LOG_POS=4;

然后启动

  1. start slave;

可查看进程[mysql 命令行中]

  1. show processlist

查看从服务器

  1. show slave status \G

(6)优缺点

优点

  • bug 相对少,最早支持
  • 对 sql 查询没有任何限制
  • 故障处理比较容易

缺点

  • 故障转移时重新获取逐日志点信息比较困难

4. 基于 GTID 的复制

GTID 即全局事务 ID,其保证为每一个在主上提交的事务,在复制集群中可以生成一个唯一的 ID

GTID=source_id:transaction_id

source_id 主库的 uuid 值

transaction_id 事务的 id

(1)主 DB 上简历复制账号

    create user 'repl'@'IP段' identified by '密码'

    grant replication slave on *.* to 'repl'@'IP段'

    IP段可以形如192.168.3.%

(2)主数据库配置

    bin_log=/usr/local/mysql/log/mysql-bin

    server_id=100

    gtid_mode=on

    enforce-gtid-consistency强制gtid一致性

    log-slave-updates=on在mysql5.7以后不需要开启,会增加从服务器资源消耗

(3)从数据库配置

    server_id=101

    relay_log=/usr/local/mysql/log/relay_log

    gtid_mode=on

    enforce-gtid-consistency

    log-slave-updates=on

    read_only=on[建议]

    master_info_repository=TABLE[建议]

    relay_log_info_repository=TABLE[建议]

(4)初始化从服务器

(5)启动

  1. CHANGE MASTER TO MASTER_HOST='master_host_ip',
  2. MASTER_USER='xxx',
  3. MASTER_PASSWORD='xxx',
  4. MASTER_AUTO_POSITION=1;

(6)优缺点

优点

  • 方便进行故障转移
  • 从库不会丢失主库任何修改

缺点

  • 故障处理比较复杂
  • 对执行的 sql 有限制

(7)选择

  • GTID 是 mysql5.6 及以后才支持的
  • 复制架构及主从切换方式:GTID 方便切换
  • 所使用的高可用管理组件
  • 对应用支持度

5.mysql 复制拓扑

(1)MYSQL5.7 之前一个从库只能一个主库,之后可以一从多主

(2)一主多从

优点

  • 配置简单
  • 多个从库分担读负载

用途

  • 为不同业务使用不同从库(前后台查询)
  • 一台从库放到远程 IDC,用做灾备恢复
  • 分担主库的读负载

(3)主-主复制拓扑

主主模式(不建议)

  • 两个主中所操作的表最好能分开
  • 使用下面两个参数自增 id 的生成【auto_increment_increment=2;auto_increment_offset=1|2(一台为 1 一台为 2)】

主备模式(一台对外服务)

  • 确保两台服务器初始数据相同
  • 确保两台服务器启动 binlog,并且 server_id 不同
  • 都启用 log_slave_updates 参数
  • 初始的备库使用 read_only

(4)拥有备库的主主复制拓扑

(5)级联复制

6.复制性能优化

影响主从延迟的因素

  • 主库写入二进制日志的时间(大事务);解决方式:控制主库的事务大小,分割大事务
  • 二进制日志传输时间;解决方式:使用 mixed 日志格式,或者设置 set binlog_row_image=minimal;
  • 默认情况下从只有一个 sql 线程,主上并发的修改在从上变成串行;解决方式:使用多线程复制(5.6 及以后)

配置多线程复制

  • stop slave
  • set global slave_parallel_type='logical_clock' (使用逻辑时钟方式,5.7 支持)
  • set global slave_parallel_workers=4;
  • start slave;
  1. show variables like 'slave_parallel_type';

7.复制问题

(1)数据损坏或丢失引起主从复制错误

  • 主库或从库宕机引起错误;解决方式:使用跳过二进制日志事件或者注入空事务先恢复中断的复制链路,再对比主从数据
  • 主库二进制日志损坏
  • 备库上的中继日志损坏

(2)在从库数据修改造成主从复制错误

(3)不唯一的 server_id 或者 server_uuid

(4)max_allow_packet 设置引起的主从复制错误

8.复制不能解决的问题

  • 不能分担主数据库的写负载;解决方式:分库分表
  • 不能自动进行故障转移和主从切换
  • 不能提供读写分离

三、高可用架构

服务器磁盘空间耗尽:备份或者各种查询日志突增导致磁盘空间占满,mysql 无法记录二进制日志,无法处理新的请求

  • 建立监控报警系统
  • 对备份数据进行恢复测试
  • 正确配置数据库环境(从要 read_only)
  • 对不需要的数据进行归档和清理

增加系统冗余,保证尽快恢复

  • 避免存在单点故障
  • 主从切换及故障转移

单点故障

  • 利用 SUN 共享存储或者 DRDB 磁盘恢复解决单点故障
  • 利用多谢集群或者 NDB 集群来解决(pxc 架构)
  • 利用主从复制来解决

解决主从中主服务器的单点故障

  • 主服务器切换后,如何通知应用新的主服务器 ip 地址
  • 如何检查主服务器是否可用
  • 如何处理从服务器和新主服务器之间的复制关系
  • 解决方式:使用 MMM 或者 MHA

(一).MMM 架构

1.作用:监控和管理 MySQL 的主主复制拓扑,并在当前主服务器失效时,进行主和主备服务器之前的服从切换和故障转移操作。

MMM 所需要的资源

拓扑图

2.配置步骤(先配置主主复制)

(1)备份主数据库

  1. mysqldump --master-data=2 --single-transaction --lock-all-tables --all-databases -u root -p > all.sql

(2)数据库导入数据(用于另一个主服务器和其他从服务器的数据导入)

  1. mysql -u root -p < all.sql

(3)一个主数据库配置复制链路(192.168.3.101)(此操作在 mysql 的命令行中)

  1. CHANGE MASTER TO MASTER_HOST='192.168.3.100',
  2. MASTER_USER='xxx',
  3. MASTER_PASSWORD='xxx',
  4. MASTER_LOG_FILE='mysql_log_file_name',
  5. MASTER_LOG_POS=4;#偏移量使用备份文件all.sql里面备份时间点的偏移量(搜索关键字MASTER_LOG_FILE)

然后启动

  1. start slave;

查看当前服务器(可以看到当前库的二进制日志名称 File,和偏移量 Position)

  1. show slave status \G

(4)另一个主数据库配置复制链路(192.168.3.100),从而形成主主复制

  1. CHANGE MASTER TO MASTER_HOST='192.168.3.101',
  2. MASTER_USER='xxx',
  3. MASTER_PASSWORD='xxx',
  4. MASTER_LOG_FILE='mysql_log_file_name',#取192.168.3.101的二进制日志名称
  5. MASTER_LOG_POS=4;#取192.168.3.101的偏移量

然后启动

  1. start slave;

(5)配置从数据库复制链路(192.168.3.102)

  1. CHANGE MASTER TO MASTER_HOST='192.168.3.100',
  2. MASTER_USER='xxx',
  3. MASTER_PASSWORD='xxx',
  4. MASTER_LOG_FILE='mysql_log_file_name',
  5. MASTER_LOG_POS=4;#偏移量使用备份文件all.sql里面备份时间点的偏移量(搜索关键字MASTER_LOG_FILE)

然后启动

  1. start slave;

(6)更新每个数据库服务器的 yum 源

  1. wget http://mirrors.opencas.cn/epel/epel-release-latest-6.noarch.rpm
  2. wget http://rpms.famillecollet.com/enterprise/remi-release-6.rmp
  3. rmp -ivh epel-release-latest-6.noarch.rpm #安装
  4. rmp -ivh remi-release-6.rpm
  5. vim /etc/yum.repos.d/remi.repo #修改[remi]中的enabled=1
  6. vim /etc/yum.repos.d/epel.repo #修改[epel]中,打开baseurl注释,注释掉mirrorlist

(7)mmm 组件安装

yum install mysql-mmm-agent.noarch -y #安装 mmm 代理,每个服务器都安装

yum install mysql-mmm* #安装监控组件,监控服务器上安装,此处是在一个从服务器上安装。(监控服务器可以单独设立,也可以利用一个从服务器来混合使用)

(8)mysql 用户创建(在主服务器 100 上创建)

  1. grant replication client on *.* to 'mmm_monitor'@'192.168.3.%' identified by '123456'; #监控用户
  2. grant super,replication client,process on *.* to 'mmm_agent'@'192.168.3.%' identified by '123456'; #代理用户
  3. grant replication slave on *.* to 'repl'@'192.168.3.%' identified by '123456'; #复制用户,此用户应在前面配置复制链路前添加,复制链路中使用的就是此用户

(9)mmm 配置文件

数据库结点配置

vim /etc/mysql-mmm/mmm_common.conf #所有服务器都配置

  1. replication_user repl
  2. replication_password 123456
  3. agent_user mmm_agent
  4. agent_password 123456
  5. <host db1>
  6. ip 192.168.3.100
  7. mode master
  8. peer db2
  9. host>
  10. <host db2>
  11. ip 192.168.3.101
  12. mode master
  13. peer db1
  14. host>
  15. <host db3>
  16. ip 192.168.3.102
  17. mode slave
  18. host>
  19. <role writer>
  20. hosts db1,db2
  21. ips 192.168.3.90 #虚拟ip
  22. mode exclusive
  23. role>
  24. <role reader>
  25. hosts db1,db2,db3
  26. ips 192.168.3.91,192.168.3.92,192.168.3.93 #虚拟ip
  27. mode balanced
  28. role>

vim /etc/mysql-mmm/mmm_agent.conf #所有服务器(代理服务器)

  1. this db1 #各个服务器改成自己的代号:db2,db3.....

监控结点配置

vim /etc/mysql-mmm/mmm_mon.conf #监控服务器,只列出要修改的

  1. <monitor>
  2. ping_ips 192.168.3.100,192.168.3.101,192.168.3.102 #最好加上网关,以监控网络有效性
  3. monitor>
  4. <host default>
  5. monitor_user mmm_monitor
  6. monitor_password 123456
  7. host>

(10)启动

  1. /etc/init.d/mysql-mmm-agent start

  2. #启动代理,在所有代理服务器执行,此处100、101、102都是代理服务器

  3. /etc/init.d/mysql-mmm-monitor start

  4. #启动监控,在监控服务器执行,此处混合使用的102服务器作为监控

  5. mmm_control show #在监控服务器执行,可查看当前服务状态

(11)特点

  • 不支持 GTID 复制,只支持基于日志点的复制
  • 发布比较早,最新版本 10 年发布
  • 没有负载均衡的功能
  • 主从切换容易造成数据丢失
  • MMM 监控服务存在单点故障

(二).MHA 架构

1.简介

(1)特点

  • 只监控主数据库服务器是否可用
  • 当主数据库不可用时,在多个从数据库中选举出新的主数据库服务器
  • 提供了主从切换和故障转移
  • 可以与半同步复制结合

(2)主从切换过程

  • 尝试从出现故障的主数据库保存二进制日志
  • 从多个被选从服务器中选举出新的备选主服务器
  • 在备选主服务器和其他从服务器同步差异二进制数据
  • 重放从原来主服务器上保存的二进制日志
  • 提升备选主为新的主服务器
  • 迁移集群中其它从 DB 为新主 DB 的从服务器

2.配置

使用 masterha_check_ssh 和 masterha_check_repl 对配置进行校验

拓扑图

(1)

(1)建立主从复制集群

  • 此处建立的是基于 GTID 的复制,需要所有服务器都要设置 gtid_mode=on
  • 需要添加 repl 用户
  • 需要各个从数据库数据初始化,保持数据一致
  • 启动复制链路(参考上面的--基于 GTID 的复制)

(2)先配置免认证登陆

  • 使用 ssh-keygen 生成秘钥
  • 使用 ssh-copy-id -i /root/.ssh/id_rsa '-p 22 root@192.168.3.100' 来复制公钥到其他节点(本机也要添加,当本机作为主时使用);所有节点都要执行此操作。

【node 和 manager 软件包下载】

软件包下载 https://drive.google.com/drive/folders/0B1lu97m8-haWeHdGWXp0YVVUSlk

(3)node 软件包安装(服务结点)

  • 先安装依赖包,需要的是 yum -y install perl-DBD-MySQL perl-DBI.x86 ncftp
  • 此处使用的 rpm 包 rpm -ivh mha4mysql-node-*-*.noarch.rpm
  • 所有节点都要安装(除监控结点)

(4)manager 软件包安装(监控结点)

安装依赖

  1. yum -y install perl-Config-Tiny.noarch perl-Time-HiRes.x86_64 perl-Parallel-ForkManager perl-Log-Dispatch-Perl.noarch perl-DBD-MySQL perl-DBI.x86 ncftp

安装包

  1. rpm -ivh mha4mysql-manager-*-*.noarch.rpm

(5)管理服务器增加配置文件

在/etc/mha/mysql_mha.cnf

  1. [server default]
  2. user=mha#MHA用于管理数据库的用户,备选主都增加,给privileges权限
  3. password=123456
  4. manager_workdir=/home/mysql_mha
  5. manager_log=/home/mysql_mha/manager.log
  6. remote_workdir=/home/mysql_mha#其他节点都建立
  7. ssh_user=root
  8. repl_user=repl#复制用户
  9. repl_password=123456
  10. ping_interval=1 #检查主是否能连同的时间间隔
  11. master_binlog_dir=/home/mysql/sql_log
  12. master_ip_failover_script=/user/bin/master_ip_failover #用于虚拟IP迁移脚本
  13. #通过多路径检测master是否可用,脚本mha自带
  14. secondary_check_script=/usr/bin/masterha_secondary_check -s 192.168.3.101 -s 192.168.3.102 -s 192.168.3.100 -s 网关IP
  15. [server1]
  16. hostname=192.168.3.100
  17. candidate_master=1#可以作为备选的主
  18. [server2]
  19. hostname=192.168.3.101
  20. candidate_master=1#可以作为备选的主
  21. [server3]
  22. hostname=192.168.3.102
  23. no_master=1#不可作为备选的主

脚本/user/bin/master_ip_failover #用于虚拟 IP 迁移脚本

  1. #!/usr/bin/env perl

  2. use strict;

  3. use warnings FATAL => 'all1;

  4. use Getopt::Long;

  5. my (

  6. $command,$orig_master_host,$orig_master_ip,$ssh_user,

  7. $orig_master_port, $new_master_host, $new_master_ip,$new_master_port,

  8. $orig_master_ssh_port,$new_master_ssh_port,$new_master_user,$new_master_password

  9. );

  10. my $vip = '192.168.3.90/24l';

  11. my $key = '1';

  12. my $ssn_start_vip = "sudo /sbin/ifconfig ethO:$key $vip";

  13. my $ssh_stop_vip = "sudo /sbin/ifconfig ethO:$key down";

  14. GetOptions(

  15. 'command=s' => \$command,

  16. 'ssh_user=s' => \$ssh_user,

  17. 'orig_master_host=s' => \$orig_master_host,

  18. 'orig_master_ip=s' => \$orig_master_ip,

  19. 'orig_master_port=i; => \$orig_master_port,

  20. 'orig_master_ssh_port=i' => \$orig_master_ssh_port,

  21. 'new一master一host=s' => \$new_master_host,

  22. 'new_master_ip=s' => \$new_master_ip,

  23. 'new_master_port=i' => \$new_master_port,

  24. 'new_master_ssh_port' => \$new_master_ssh_port,

  25. 'new_master_user' => \$new_master_user,

  26. 'new一master_password' => \$new_master_password

  27. );

  28. exit &main();

  29. sub main {

  30. $ssh_user = defined $ssh_user ? $ssh_B|ser : ' root';

  31. print "\n\nIN SCRIPT TEST====$ssh_user|$ssh_stop_vip==$ssh_user|$ssh_start_vip===\n\n";

  32. if ( $command eq "stop" | | $command eq "stopssh" ) {

  33. my $exit_code = 1;

  34. eval {

  35. print "Disabling the VIP on old master: $orig_master_host \n";

  36. &stop_vi();

  37. $exit_code = 0;

  38. };

  39. if ($@) {

  40. warn "Got Error: $@\n";

  41. exit $exit_code;

  42. }

  43. exit $exit_code;

  44. }

  45. elsif ( Scommand eq "start" ) {

  46. my $exit_code = 10;

  47. eval {

  48. print "Enabling the VIP - $vip on the new master - $new_master_host\n";

  49. &start_vip();

  50. $exit_code = 0;

  51. };

  52. if ($@) {

  53. warn $@;

  54. exit $exit_code;

  55. }

  56. exit $exit一code;

  57. }

  58. elsif ( $command eq "status" ) {

  59. print "Checking the Status of the script.. OK \n";

  60. exit 0;

  61. }

  62. else {

  63. &usage();

  64. exit 1;

  65. }

  66. }

(6)运行

测试配置是否正确

  1. masterha_check_ssh --conf=/etc/mha/mysql_mha.cnf

复制环境检测

  1. masterha_check_repl --conf=/etc/mha/mysql_mha.cnf

运行 mha(此处放到后台运行)

  1. nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf &

mha 不会自动配置虚拟 IP(但可以利用 master_ip_failover 脚本,在主服务器更换时自动迁移走),需要手动在主服务器配置

  1. ifconfig eth0:1 192.168.3.90/24

(7)优点

  • Perl 开发、开源
  • MHA 可以支持基于 GTID 的复制
  • MHA 在故障转移时更不易产生数据丢失
  • MHA 同一个监控结点可以监控多个集群

(8)缺点

  • 需要编写脚本或者利用第三方工具来实现 Vip(虚拟 IP)的配置(上方 master_ip_failover 脚本就是)
  • MHA 启动后只会对主数据库进行监控,其他比如复制链路出现问题等不会监控到
  • 需要机遇 SSH 免认证配置,存在一定的安全隐患
  • 没有提供从服务器的读负载均衡功能

(三)读写分离

方式:

(1)程序控制(灵活,不增加故障点,性能损耗较少);

(2)中间件控制

1.中间件控制

(1)工具:mysql-proxy;maxScale

(2)特点:

  • 中间件根据查询语法分析,自动完成读写分离
  • 对程序透明,已有程序不需要修改
  • 增加中间层,对效率有损耗
  • 对于延迟敏感业务无法自动在主库执行

(四)读的负载均衡

工具:软件(LVS,Haproxy,MaxScale);硬件(F5)

(五)MaxScale

1.插件

  • Authentication 认证插件
  • Protocal 协议插件(客户端到 MaxScale,MaxScale 到后端数据库的协议)
  • Router 路由插件(读写分离(readwritesplit)、读负载均衡(readconnroute)由此模块实现)
  • Monitor 监控插件(用于监控后台数据库是否正常)
  • Filter&Logging 过滤和日志插件(提供了数据库防火墙功能)

2.安装

(1)下载:到此页面下载 https://mariadb.com/downloads/maxscale

(2)安装依赖

  1. yum -y install libaio.x86_64 libaio-devel.x86_64 novacom-server.x86_64

(3)安装

  1. rpm -ivh maxScale-xxxxx.x84_64.rpm

3.配置

(1)先在主数据库建立 maxScale 监控使用的账号

  1. create user scalemon@'192.168.3.%' identified by '123456';
  2. grant replication slave, replication client on *.* to scalemon@'192.168.3.%' ;

(2)建立 maxScale 路由模块使用的账号(只读权限)

  1. create user scale@'192.168.3.%' identified by '123456';
  2. grant select on *.* to scale@'192.168.3.%' ;

(3)生成加密的密码(可选)

  1. maxkey #生成加密秘钥到/var/lib/maxscale目录
  2. maxpasswd /var/lib/maxscale 123456 #生成加密的密码,此处123456是密码

(4)配置文件 /etc/maxscale.cnf

此处只记录需要修改的

  1. threads=4 #一般最多为8

  2. [server1]

  3. type=server

  4. address=192.168.3.100

  5. port=3306

  6. protocol=MySQLBackend

  7. [server2]

  8. type=server

  9. address=192.168.3.101

  10. port=3306

  11. protocol=MySQLBackend

  12. [server3]

  13. type=server

  14. address=192.168.3.102

  15. port=3306

  16. protocol=MySQLBackend

  17. [MySQL Monitor]

  18. servers=server1,server2,server3

  19. user=scakemon #监控用的用户

  20. passwd=123456 #如果前面生成了加密的密码,可以填在此处

  21. monitor=1000 #此处代表监控每秒发起一次

  22. [Read-Only Service] #此处是配置读负载均衡;演示项目要配置读写分离,遂删除了此模块配置

  23. [Read-Write Service]

  24. servers=server1,server2,server3

  25. user=maxscale

  26. passwd=123456

  27. max_slave_connections=100% #最大可用从服务器数量

  28. max_slave_replication_lag=60 #(秒)从服务器的延迟大于此值时,就不参与读写分离

  29. [Read-Only Listener] #只读监听;演示项目没有使用只读服务,遂删除了此模块配置

  30. [Read-Write Listener]

  31. port=4006 #此端口可用于程序连接使用,代替直连后端的mysql服务器

(5)启动

  1. maxscale --config=/etc/maxscale.cnf

(6)maxscale 后台管理

  1. maxadmin --user=admin --password=mariadb
  2. ##############以下为进入后的命令##################
  3. list servers #列出所有服务器
  4. show dbuers "Read-Write Service" #列出读写分离模块的用户

最终高可用架构的拓扑图

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    692 引用 • 535 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 667 关注
  • sts
    2 引用 • 2 回帖 • 197 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1737 回帖 • 1 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 632 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • Notion

    Notion - The all-in-one workspace for your notes, tasks, wikis, and databases.

    7 引用 • 40 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 15 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 4 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 483 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 483 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 27 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 416 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 6 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    86 引用 • 122 回帖 • 626 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 223 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 635 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    23020 引用 • 92599 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    171 引用 • 512 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    343 引用 • 723 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 60 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 75 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 668 关注