CloudNative 架构

CloudNative|云原生应用架构|云原生架构|容器化架构|微服务架构|平台架构|基础架构


  • 首页

  • 标签

  • 分类

  • 归档

  • k8s离线安装包

  • 搜索

MySQL too many connection 问题分析

发表于 2016-09-29 | 分类于 mysql | | 热度: ℃
字数统计: 1,112 字 | 阅读时长 ≈ 4 分钟

问题缘由

线上一个网站在运行一段时间后,页面打开速度变慢随之出现502 bad gateway的错误。

问题分析

由502 bad gateway的错误,我们知道就是nginx链接后端的php,而php程序没有及时返回,造成了超时。
那么造成php超时的原因也有多种,比如:

  1. php-fpm资源消耗光
  2. 调用外部资源超时,比如外部的web service、数据库等等
  3. ….

出现问题,我们先登录服务器查看相关日志。

结合我们的业务,首先想到了mysql数据库,先查看了一下mysql数据库的状态,通过show full processlist命令发现有大量的链接处于sleep状态。

sleep状态的意思就是说,某个客户端一直占着这个链接,但是什么事也不干,或者是客户端压根儿就已经断开了,而服务端却不知道。

我们知道,mysql的连接数是有限制的,比如默认是151个,那么当大量的链接处于sleep状态时,php程序就无法同mysql建立链接,就会发生超时现象。

阅读全文 »

MaxScale 在 slave 有故障后如何处理?

发表于 2016-08-16 | 分类于 mysql , 读写分离 | | 热度: ℃
字数统计: 1,030 字 | 阅读时长 ≈ 4 分钟

前言

之前介绍了 MaxScale 可以实现 Mysql 的读写分离和读负载均衡,那么当 slave 出现故障后,MaxScale 会如何处理呢?

例如有 3 台数据库服务器,一主二从的结构,数据库名称分别为 master, slave1, slave2

现在我们实验以下两种情况:

  1. 当一台从服务器( slave1 或者 slave2 )出现故障后,查看 MaxScale 如何应对,及故障服务器重新上线后的情况
  2. 当两台从服务器( slave1 和 slave2 )都出现故障后,查看 MaxScale 如何应对,及故障服务器重新上线后的情况

准备

为了更深入的查看 MaxScale 的状态,需要把 MaxScale 的日志打开

修改配置文件

1
vi /etc/maxscale.cnf

找到 [maxscale] 部分,这里用来进行全局设置,在其中添加日志配置

1
2
log_info=1
logdir=/tmp/

通过开启 log_info 级别,可以看到 MaxScale 的路由日志

修改配置后,重启 MaxScale

实验过程

阅读全文 »

Mysql 读写分离中间件 MaxScale

发表于 2016-08-16 | 分类于 mysql , 读写分离 | | 热度: ℃
字数统计: 1,073 字 | 阅读时长 ≈ 4 分钟

MaxScale 是干什么的?

配置好了 Mysql 的主从复制结构后,我们希望实现读写分离,把读操作分散到从服务器中,并且对多个从服务器能实现负载均衡

读写分离和负载均衡是 Mysql 集群的基础需求,MaxScale 就可以帮着我们方便的实现这些功能
Maxscale

MaxScale 的基础构成

  • MaxScale 是 Mysql 的兄弟公司 MariaDB 开发的,现在已经发展得非常成熟
  • MaxScale 是插件式结构,允许用户开发适合自己的插件
  • MaxScale 目前提供的插件功能分为5类

认证插件

提供了登录认证功能,MaxScale 会读取并缓存数据库中 user 表中的信息,当有连接进来时,先从缓存信息中进行验证,如果没有此用户,会从后端数据库中更新信息,再次进行验证

协议插件

包括客户端连接协议,和连接数据库的协议

路由插件

决定如何把客户端的请求转发给后端数据库服务器,读写分离和负载均衡的功能就是由这个模块实现的

监控插件

对各个数据库服务器进行监控,例如发现某个数据库服务器响应很慢,那么就不向其转发请求了

日志和过滤插件

提供简单的数据库防火墙功能,可以对SQL进行过滤和容错

阅读全文 »

双机高可用-负载均衡-MySQL(读写分离、主从自动切换)架构设计

发表于 2016-08-09 | 分类于 高可用 , 负载均衡 , 读写分离 | | 热度: ℃
字数统计: 3,539 字 | 阅读时长 ≈ 18 分钟

架构简介

只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上。如何设计这样的架构场景。
High Availability

此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP。正常情况时,外网VIP和内网VIP都绑定在server1服务器,web请求发送到server1的nginx,nginx对于静态资源请求就直接在本机检索并返回,对于php的动态请求,则负载均衡到server1和server2。对于SQL请求,会将此类请求发送到Atlas MySQL中间件,Atlas接收到请求之后,把涉及写操作的请求发送到内网VIP,读请求操作发送到mysql从,这样就实现了读写分离。

当主服务器server1宕机时,keepalived检测到后,立即把外网VIP和内网VIP绑定到server2,并把server2的mysql切换成主库。此时由于外网VIP已经转移到了server2,web请求将发送给server2的nginx。nginx检测到server1宕机,不再把请求转发到server1的php-fpm。之后的sql请求照常发送给本地的atlas,atlas把写操作发送给内网VIP,读操作发送给mysql从,由于内网VIP已经绑定到server2了,server2的mysql同时接受写操作和读操作。

当主服务器server1恢复后,server1的mysql自动设置为从,与server2的mysql主同步。keepalived不抢占server2的VIP,继续正常服务。

架构要求

要实现此架构,需要三个条件:

  1. 服务器可以设置内网IP,并且设置的内网IP互通。
  2. 服务器可以随意绑定IDC分配给我们使用的外网IP,即外网IP没有绑定MAC地址。
  3. MySQL服务器支持GTID,即MySQL-5.6.5以上版本。

环境说明

对外VIP:10.96.153.239
对内VIP:192.168.1.150

描述 网卡1:eth0(公网IP) 网卡2:eth1(内网IP) 操作系统
server1 10.96.153.110 192.168.1.100 Centos 6.X
server2 10.96.153.114 192.168.1.101 Centos 6.X

架构配置

阅读全文 »

使用lsyncd实时同步文件

发表于 2016-07-15 | 分类于 实时同步 | | 热度: ℃
字数统计: 2,596 字 | 阅读时长 ≈ 11 分钟

简介

Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。

实现简单高效的本地目录同步备份(网络存储挂载也当作本地目录),一个命令搞定。

github地址:https://github.com/axkibe/lsyncd

使用 lsyncd 本地目录实时备份

这一节实现的功能是,本地目录source实时同步到另一个目录target,而在source下有大量的文件,并且有部分目录和临时文件不需要同步。

安装lsyncd

安装lsyncd极为简单,已经收录在ubuntu的官方镜像源里,直接通过apt-get install lsyncd就可以。
在Redhat系(我的环境是CentOS 6.2 x86_64 ),可以手动去下载 lsyncd-2.1.5-6.fc21.x86_64.rpm,但首先你得安装两个依赖yum install lua lua-devel。也可以通过在线安装,需要epel-release扩展包:

1
2
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install lsyncd

源码编译安装
从源码编译安装可以使用最新版的lsyncd程序,但必须要相应的依赖库文件和编译工具:yum install lua lua-devel asciidoc cmake。

从 googlecode lsyncd 上下载的lsyncd-2.1.5.tar.gz,直接./configure、make && make install就可以了。

从github上下载lsyncd-master.zip 的2.1.5版本使用的是 cmake 编译工具,无法./configure:

1
2
3
4
uzip lsyncd-master.zip
cd lsyncd-master
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd-2.1.5
make && make install

我这个版本编译时有个小bug,如果按照INSTALL在 build目录中make,会提示:

1
2
3
4
5
6
[100%] Generating doc/lsyncd.1
Updating the manpage
a2x: failed: source file not found: doc/lsyncd.1.txt
make[2]: *** [doc/lsyncd.1] Error 1
make[1]: *** [CMakeFiles/manpage.dir/all] Error 2
make: *** [all] Error 2

解决办法是要么直接在解压目录下cmake,不要mkdir build,要么在CMakeList.txt中搜索doc字符串,在前面加上${PROJECT_SOURCE_DIR}。

阅读全文 »
1…19202122
icyboy

icyboy

109 日志
98 分类
182 标签
RSS
GitHub 微博 知乎
友情链接
  • 张家港水蜜桃
  • 运维开发
  • DevOps
© 2016 — 2021 icyboy | Site words total count: 330.8k
本站访客数:
博客全站共330.8k字