mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇
今天我们就来搭建一个读写分离,负载均衡的MySQL集群。想了解高可用理论方面内容的童鞋可以阅读理论篇。
奥兹·杰克:MySQL高可用方案:理论篇zhuanlan.zhihu.com
搭建的集群的基本架构如下:
假设该集群下各机器的IP地址如下:
Master: 192.168.1.1
route:192.168.1.2
slave1:192.168.1.3
slave2:192.168.1.4
首先,我们需要通过主从复制搭建起最基本的一主三从集群。
- 配置master
- 先在主数据库中创建主从复制使用的用户repli
GRANT REPLICATION SLAVE ON *.* TO 'repli'@'%' IDENTIFIED BY 'password';
然后修改my.cnf文件,在[mysqld]下添加如下配置:
[mysqld]
server-id=1 # id必须唯一
log-bin=mysql-bin # 二进制文件名
log-bin-index=master-bin.index # 显示master状态
binlog-do-db=DATABASE_NAME # 主从复制哪些数据库
sync_binlog=N # 每执行N次写入后与硬盘同步一次
值得一提的是,sync_binlog参数用于控制数据库的binlog与磁盘同步,默认情况下,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。1是最安全的,但是也是最慢的。因此,可以视具体情况选择合适的sync_binlog值。
重启mysqld服务之后,通过SHOW MASTER STATUS;可以查看主服务器的master状态
其中File显示的是二进制日志的文件名称,假设此处File为‘mysql-bin.000001’,Position为654321
- 配置Slave
修改配置文件my.cnf,在[mysqld]下添加如下配置:
[mysqld]
server-id=2 # 此id一定要大于master的id,且id必须保持唯一
relay-log-index=slave-relay-bin.index # 定义relay-log-index的文件名
relay-log=slave-relay-bin # 定义relay-log的文件名(默认保存在数据目录下)
配置完毕后重启mysqld,进入mysql命令行开始登陆master:
change master to master_host='192.168.1.1',
master_port=3306,
master_user='repli',
master_password='password',
master_log_file='mysql-bin.000001',
master_log_pos=654321;
其中master_log_file='mysql-bin.000001' 填的是master中二进制文件的名称
master_log_pos=654321 填的是master中Position的值
然后执行start slave;开始主从复制
mysql> start slave; # 开始主从复制
此时可以通过show slave status G;查看从机状态
为了使从服务器专注于读服务,可以在每台从服务器上都执行set global read_only=1;来禁止写入。
而负载均衡可以通过HAProxy实现,在route机上安装HAProxy。
- - - - - - - - - - - - - - - - - - - HAProxy安装过程省略线 - - - - - - - - - - - - - - - - - - - - -
安装成功后打开/etc/haproxy/haproxy.cfg进行配置
globaldaemon # 以守护进程的方式工作于后台,其等同于“-D”选项的功能nbproc 1log 127.0.0.1 local2 # 通过local2进行log记录pidfile /var/run/haproxy.pidmaxconn 5000 # 最大并发连接数,等同于命令行选项“-n” default=4000defaultsmode tcp # mode{tcp/http/health}: tcp在第四层, http在第七层.retries 3 # 3次连接失败就认为服务器不可用,通过check进行检查option redispatch # serverId对应的服务器挂掉后,强制定向到其他健康的服务器option abortonclosemaxconn 4096timeout connect 5000mstimeout client 30000mstimeout server 30000mstimeout check 2000log global# 监控页面配置
listen admin_statsstats enablebind 0.0.0.0:8080 # 监听端口mode httpoption httplogmaxconn 5stats refresh 30s # 30s刷新一次页面stats uri /MONITER # 虚拟路径stats hide-version # 隐藏HAProxy的版本号stats realm Global statisticsstats auth root:abcd1234 # 登录账号:密码
# 配置完毕后可以通过 http://ip:8080/MONITER 同时输入账号密码来访问HAProxy的监控页面listen testbind 0.0.0.0:3306log 127.0.0.1 local0 debugbalance roundrobin # 负载均衡算法option mysql-check user lb01mode tcpserver slave1 192.168.1.3:3306 server slave2 192.168.1.4:3306 # 如果还有更多从机,直接追加即可
- 配置段说明:
“global”配置中的参数为进程级别的参数,且通常与其运行的操作系统有关
“defaults”用于为所有其他配置段提供默认参数
“forntend”用于定义一系列监听的套接字,这些套接字可以接受客户端请求并与子建立连接
“backend” 用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器
“listen” 用于定义通过关联“前段”和“后端”一个完整的代理,通常只对TCP流量有用
- 负载均衡算法:
“balance”用于定义负载均衡算法,可用于"defaults"、"listen"和"backend"中。用于在负载均衡场景中挑选一个server。
其支持的算法有:
roundrobin:基于权重进行轮询,在服务器的处理时间保持均匀分布时 ,这是最平衡、最公平的算法。此算法是动态的,这表示某权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多支持4128个连接。
static-rr:基于权重进行轮询,与roundrobin类似,但是为静态方法,在运行时调整期后端权重不会生效,不过,其在后端服务器连接数上没有限制。
leastconn:新的连接会被派发至具有最少连接数目的后端服务器,在有这较长会话的场景中推荐使用此算法,如LDAP、SQL等。其并不太适合用于较短会话的应用层协议,如HTTP,此算法是动态的,可以在运行时调整其权重。
source:将请求的源地址进行hash运算,并有后端的服务器的权重总数相处后派发至某匹配的服务器,这可以使得同一个客户端IP的请求始终被派发至某特定的服务器,不过,当服务器权重总数发生变化时,如某服务器宕机或者添加新服务器,许多的请求可能会被派发至与此前请求不同的服务器,常用于负载均衡无cooki功能的基于TCP的协议,默认为动态,不过可以使用hash-type修改此特性。
uri:对URI的左半部分(“问号”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器;这可以使得对同一个URI的请求总是派发至某匹配的服务器,除法服务器的权重总数发生了变化,此算法常用于代理缓存或反病毒代理以提高缓存的命中率,需要注意的是,此算法仅应用于HTTP后端服务器场景,其默认为静态算法,不过可以使用hash-type修改此特性。
url_param:通过为URL指定的参数在每个HTTP GET请求中将会被索引,日过找到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相处后派发至某匹配的服务器,此算法可以通过追踪请求中的用户标识进而确保同一个用户的ID请求被发送同一个特定的服务器,除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有效值,则使用轮询算法对其想用请求进行调度,此算法默认为静态,不过可以使用hash-type修改此特性。
har():对于每个HTTP请求,通过指定的HTTP首部将会被检索,如果对于那个的首部没有出现或其没有有效值,则使用轮询算法对响应请求进行调度,其有一个可选项“use_domain_only”可以指定检索类似host类的首部时仅计算域名部分以降低hash算法的运算量,此算法默认为静态,不过可以使用hash-type修改此特性。
- 参数mode说明:
用于设定实例的运行模式或协议,当实现内容交换时,前段和后端必须工作与统一中模式(一般说来时tcp模式),否则将无法启动实例。
其一共支持tcp、http、health三种模式。
- tcp: 实例运行于纯tcp模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查,此为默认模式,通常用于SSL、SSH、SMTP等应用
2. http:实例运行于http模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC模式兼容的请求都会被拒绝
3. health:实例运行于health模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求;目前来讲,此模式已经废弃,因为tcp或http模式中的monitor关键字可完成此类功能
介绍完haproxy的基本配置以后,咱们回到部署的步骤中。
配置完毕后,直接service haproxy start启动haproxy服务即可。
此时查询haproxy状态就可以看得到:
HAProxy启动成功!现在整个集群中以它作为从机负载均衡的路由,读服务直接访问route,它会根据负载均衡算法将读请求分配给某个slave,从而实现负载均衡。
mysql查询每个机构下的账号总数_MySQL高可用方案:实践篇相关推荐
- mysql 双主 脑裂_MySQL高可用方案——双主
MySQL高可用方案--双主 发布时间:2020-03-01 20:45:48 来源:51CTO 阅读:253 作者:warrent MySQL的高可用方案有很多种,双主.MHA.MMM等等,这里只是 ...
- mysql高可用_mysql高可用方案
第一节:mysql 高可用方案 1.1 一主一从架构 mysql 配置为主从模式,从库是主库的 backup,同一时间设置其中一台为主服务器,提供读写,另一台服务器作为热备,不提供读写,通过复制与主服 ...
- 方案 mysql 优点_mysql高可用方案分析
低读低写并发.低数据量方案 方案一:双机高可用方案 1.数据库架构图 2.特点 一台机器A作为读写库,另一台B作为备份库:A库故障后B库作为读写库:A库恢复后A作为备库. 3.开发说明 此种情况下,数 ...
- mysql mha好吗_MySQL高可用方案MHA的一些总结和思考
原标题:MySQL高可用方案MHA的一些总结和思考 MySQL高可用方案中MHA绝地是一个相当成熟的实现.对于数据的切换,其实MGR也能很好的完成,也就是说,数据层面的角色切换已经刻意很平滑的做好了, ...
- mysql 升级高可用_MySQL高可用方案升级规划
这是学习笔记的第2035篇文章 这两天在梳理MySQL高可用方案的升级计划,发现要做的事情还真不少. 我们目前有新系统和老系统,老系统因为历史原因使用的是MySQL 5.5版本,新系统有了整体的规划, ...
- mysql最新高可用_MySQL高可用方案介绍
MySQL-Transefer(下称Transfer)是一个基于MySQL+patch后得到的主从同步工具. 其主要目的是为了解决原版本的主从同步里,从库是单线程apply主库的binlog,导致的延 ...
- mysql mmm 扩展_Mysql - 高可用方案之MMM(一)
一.概述 本文将介绍mysql的MMM(Master-Master replication manager for MySQL)方案.官方文档地址:https://mysql-mmm.org/star ...
- mysql高可用最佳实践_mysql高可用方案
1.一主多从 适用场景:数据实时性要求不高,读多写少. 实现方式:扩展slave数量,将读压力分散到多台slave机器上,以此解决数据库端的读性能瓶颈. 在实际应用场景中,MySQL复制90%以上都是 ...
- mysql查询sex为男的记录总数_mysql 查询 45 道题
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
最新文章
- Hadoop生态组件-HIVE学习
- 离散数学 关系和有向图
- Redis第二集:Linux下安装Redis和测试,包含命令代码和问题处理办法,超详细版
- yii2中的事件和行为
- boost::mp11::mp_eval_or相关用法的测试程序
- ios开发基础之通讯录系统实战-20
- 【Python】元组和列表相关知识总结
- python aes padding_使用PKCS7Padding在python和Node.js之间进行AES加密
- java常用的搜索引擎_我掏空了各大搜索引擎,给你整理了154道Java面试题!
- python连接opencv库_利用Python和OpenCV库将URL转换为OpenCV格式的方法
- Web十大安全隐患之XSS跨站脚本
- spark的UI界面解析
- tomcat启动报错:java.lang.NoClassDefFoundError
- Python基础语法知识点汇集
- php生成字母头像,【PHP】利用现有的PHP库生成简单而独特的头像-----单字符头像生成...
- 更换 ApkTool 版本,需要清理本地的FrameWork缓存。
- IT产业第一定律:摩尔定理
- UVa 437 巴比伦塔(The Tower of Babylon)
- 销售书籍推荐,这本书做销售的必看!
- HDFS启动报错Expected to be able to read up until at least txid but unable to find any edit logs
热门文章
- 全球最难翻译的十大单词
- 百度和吉利合作造车,数据揭秘百度造车、拆股背后逻辑
- 阅读APP,为什么都开始抢kindle生意了?
- Linux主机密码设置,Linux如何批量创建用户和设置密码
- 扩容是元素还是数组_02 数组(附ArrayList源码分析)
- 文件可视化编辑_高维数据可视化必备图形平行坐标图
- 发起http请求_关于HTTP请求发起和响应你了解多少
- 计算机丢失qt4core.dll,qtcore4.;dll文件丢失。怎么办?
- python中 __str__和__repr__
- Python 通过all()判断列表(list)中所有元素是否都包含某个字符串(string)