简介

Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。

它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。而且安装方便。配置的注释写的蛮详细的,都是中文。

主要功能

  • 读写分离
  • 从库负载均衡
  • IP过滤
  • 自动分表
  • DBA可平滑上下线DB
  • 自动摘除宕机的DB

相关链接

环境准备

本次环境主要依赖于 MySQL 高可用架构 之 MHA 这篇文章。

各位可根据自己的环境进行配置修改即可。

Atlas 环境

操作系统 内核版本 主机名 ip地址 角色
centos 7.5 5.1.3-1.el7 master.atlas 10.0.20.196 Manager
centos 7.5 5.1.3-1.el7 slave.atlas 10.0.20.197 node01 mysql-master

VIP 地址: 10.0.20.198


MySQL 集群环境

操作系统 内核版本 主机名 MySQL 版本 ip地址 角色
centos 7.5 5.1.3-1.el7 manager.mha MySQL 5.7.18 10.0.20.200 Manager
centos 7.5 5.1.3-1.el7 node01.mha MySQL 5.7.18 10.0.20.201 node01 mysql-master
centos 7.5 5.1.3-1.el7 node02.mha MySQL 5.7.18 10.0.20.202 node02 mysql-slave
centos 7.5 5.1.3-1.el7 node03.mha MySQL 5.7.18 10.0.20.203 node03 mysql-slave
centos 7.5 5.1.3-1.el7 node04.mha MySQL 5.7.18 10.0.20.204 node04 mysql-slave

主库VIP 地址: 10.0.20.199

Atlas 安装 和 配置

安装和配置atlasmasterslave的配置要完全相同,一下操作在masterslave上均要操作

[root@master ~]# cd /opt/soft/
[root@master soft]# wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
[root@master soft]# ls
Atlas-2.2.1.el6.x86_64.rpm
[root@master soft]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:Atlas-2.2.1-1 ################################# [100%]
[root@master soft]# rpm -qa | grep Atlas
Atlas-2.2.1-1.x86_64

安装完成后,会在/usr/local/mysql-proxy/下生成四个目录

[root@master soft]# ll /usr/local/mysql-proxy/
total 0
drwxr-xr-x 2 root root 75 Jun 18 09:50 bin
drwxr-xr-x 2 root root 22 Jun 18 09:50 conf
drwxr-xr-x 3 root root 331 Jun 18 09:50 lib
drwxr-xr-x 2 root root 6 Dec 17 2014 log

bin下有三个可执行文件

[root@master soft]# ll /usr/local/mysql-proxy/bin/
total 44
-rwxr-xr-x 1 root root 9696 Dec 17 2014 encrypt
-rwxr-xr-x 1 root root 23564 Dec 17 2014 mysql-proxy
-rwxr-xr-x 1 root root 1552 Dec 17 2014 mysql-proxyd
-rw-r--r-- 1 root root 6 Dec 17 2014 VERSION

bin目录下放的都是可执行文件

  1. “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
  2. “mysql-proxy”是MySQL自己的读写分离代理
  3. “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重

剩下三个目录分别是:

  • conf目录下放的是配置文件 “test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑
  • lib目录下放的是一些包,以及Atlas的依赖
  • log目录下放的是日志,如报错等错误信息的记录

为数据库的密码加密

在配置文件中,填写的数据库的密码不是明文的,而是可以通过自带的加密工具加密后得到的内容填写进去,这里使用的最简单的123456密码测试

[root@master soft]# /usr/local/mysql-proxy/bin/encrypt 123456
/iZxz+0GRoA=

修改配置文件

[root@master conf]# cat test.cnf 

[mysql-proxy]
#带#号的为非必需的配置项目 #管理接口的用户名
admin-username = user #管理接口的密码
admin-password = pwd #Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 10.0.20.199:3306 #Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 10.0.20.202:3306@1,10.0.20.203:3306@1,10.0.20.204:3306@1 #用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码!
pwds = java:Q6gAt5tl+GUa8s/oWZlMvQ==, root:/iZxz+0GRoA= #设置Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
daemon = true #设置Atlas的运行方式,设为true时Atlas会启动两个进程,一个为monitor,一个为worker,monitor在worker意外退出后会自动将其重启,设为false时只有worker,没有monitor,一般开发调试时设为false,线上运行时设为true,true后面不能有空格。
keepalive = true #工作线程数,对Atlas的性能有很大影响,可根据情况适当设置
event-threads = 16 #日志级别,分为message、warning、critical、error、debug五个级别
log-level = message #日志存放的路径
log-path = /usr/local/mysql-proxy/log #SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,REALTIME代表记录SQL日志且实时写入磁盘,默认为OFF
#sql-log = OFF #慢日志输出设置。当设置了该参数时,则日志只输出执行时间超过sql-log-slow(单位:ms)的日志记录。不设置该参数则输出全部日志。
sql-log-slow = 10 #实例名称,用于同一台机器上多个Atlas实例间的区分
instance = dev #Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:3306 #Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345 #分表设置,此例中person为库名,mt为表名,id为分表字段,3为子表数量,可设置多项,以逗号分隔,若不分表则不需要设置该项
#tables = person.mt.id.3 #默认字符集,设置该项后客户端不再需要执行SET NAMES语句
#charset = utf8 #允许连接Atlas的客户端的IP,可以是精确IP,也可以是IP段,以逗号分隔,若不设置该项则允许所有IP连接,否则只允许列表中的IP连接
#client-ips = 127.0.0.1, 192.168.1 #Atlas前面挂接的LVS的物理网卡的IP(注意不是虚IP),若有LVS且设置了client-ips则此项必须设置,否则可以不设置
#lvs-ips = 192.168.1.1

启动

[root@master conf]# /usr/local/mysql-proxy/bin/mysql-proxyd dev start
OK: MySQL-Proxy of dev is started
[root@master conf]# ps aux|grep mysql
root 9173 0.0 0.3 65844 7080 ? S 10:45 0:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/dev.cnf
root 9174 0.0 1.2 235972 26032 ? Sl 10:45 0:00 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/dev.cnf
[root@master conf]# netstat -lntup | grep mysql
tcp 0 0 0.0.0.0:2345 0.0.0.0:* LISTEN 9174/mysql-proxy
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9174/mysql-proxy

加入开机启动项

[root@master conf]# echo '/usr/local/mysql-proxy/bin/mysql-proxyd dev start' >> /etc/rc.local

注意: 这里master配置完成了,slave需要相同一模一样的配置。

Keepalived 安装配置

安装

master 和 slave 节点都需要安装

yum install keepalived -y

master 配置

配置文件

[root@master keepalived]# vim keepalived.conf
! Configuration File for keepalived global_defs {
router_id mysql_proxy_196
} vrrp_script chk_atlas_proxy
{
script "/etc/keepalived/che_atlas.sh"
interval 2
weight -2
} vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 151
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.20.198/24 dev bond0 label bond0:1
}
track_script {
chk_atlas_proxy
}
}

che_atlas.sh 脚本

[root@master keepalived]# cat /etc/keepalived/che_atlas.sh
#!/bin/bash
if [ `ps aux|grep mysql | grep -v grep | wc -l` -ne 2 ];then
systemctl stop keepalived
fi

启动master上的keepalived服务

# 启动服务
[root@master keepalived]# systemctl start keepalived
# 开机启动服务
[root@master keepalived]# systemctl enable keepalived
# 关闭服务
[root@master keepalived]# systemctl stop keepalived
# 查看服务状态
[root@master keepalived]# systemctl status keepalived

查看状态:

[root@master keepalived]# ps aux | grep keep
root 8983 0.0 0.0 118700 1956 ? Ss 09:37 0:00 /usr/sbin/keepalived -D
root 8984 0.0 0.2 118700 5580 ? S 09:37 0:00 /usr/sbin/keepalived -D
root 8985 0.0 0.1 118700 3752 ? S 09:37 0:01 /usr/sbin/keepalived -D
root 9449 0.0 0.1 112712 2276 pts/0 S+ 13:35 0:00 grep --color=auto keep
[root@master keepalived]# ip a | grep 20
inet 10.0.20.196/24 brd 10.0.20.255 scope global bond0
inet 10.0.20.198/24 scope global secondary bond0:1

Keepalive 脚本不执行的坑

请查看文章 CentOS 7 Keepalive 脚本不执行解决

slave 配置

[root@slave ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
router_id mysql_proxy_197
} vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id 151
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.20.198/24 dev bond0 label bond0:1
}
}

启动slave上的keepalived服务

# 启动服务
[root@slave keepalived]# systemctl start keepalived
# 开机启动服务
[root@master keepalived]# systemctl enable keepalived

查看状态

[root@slave ~]# ps aux | grep keep
root 9082 0.0 0.0 118700 2012 ? Ss 09:36 0:00 /usr/sbin/keepalived -D
root 9083 0.0 0.2 118700 5476 ? S 09:36 0:00 /usr/sbin/keepalived -D
root 9084 0.0 0.1 118700 3656 ? S 09:36 0:00 /usr/sbin/keepalived -D
root 9484 0.0 0.1 112712 2188 pts/0 S+ 13:36 0:00 grep --color=auto keep

测试宕机

手动停止master上的 atlas服务,查看keepalive的服务状态以及vip飘移是否正常

停止Atlas服务

[root@master keepalived]# /usr/local/mysql-proxy/bin/mysql-proxyd dev stop
OK: MySQL-Proxy of dev is stopped

查看Master日志:

Jun 18 15:17:30 master systemd: Stopping LVS and VRRP High Availability Monitor...
Jun 18 15:17:30 master Keepalived[10367]: Stopping
Jun 18 15:17:30 master Keepalived_vrrp[10369]: VRRP_Instance(VI_1) sent 0 priority
Jun 18 15:17:30 master Keepalived_vrrp[10369]: VRRP_Instance(VI_1) removing protocol VIPs.
Jun 18 15:17:30 master Keepalived_healthcheckers[10368]: Stopped
Jun 18 15:17:31 master Keepalived_vrrp[10369]: Stopped
Jun 18 15:17:31 master Keepalived[10367]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Jun 18 15:17:31 master systemd: Stopped LVS and VRRP High Availability Monitor.

查看slave状态

[root@slave keepalived]# ip a | grep 20
inet 10.0.20.197/24 brd 10.0.20.255 scope global bond0
inet 10.0.20.198/24 scope global secondary bond0:1

VIP已经被Slave接管

centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离的更多相关文章

  1. 《高可用MySQL》1 – Windows环境下压缩版MySQL安装

    近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...

  2. haproxy+keepalived实现高可用负载均衡

    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...

  3. haproxy+keepalived实现高可用负载均衡(转)

      软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...

  4. Centos7 安装keepalived实现高可用

    场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...

  5. 高可用Mysql架构_Haproxy+keepalived+mycat集群的配置

    接上一篇文章http://www.cnblogs.com/wt645631686/p/8310891.html,虽然已经在原有两台mycat基础上增加了Haproxy作为mycat的中间服务器,不足的 ...

  6. (转)MySQL主主互备结合keepalived实现高可用

    MySQL主主互备结合keepalived实现高可用 原文:http://7424593.blog.51cto.com/7414593/1741717 试验环境: master:192.168.1.2 ...

  7. keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群

    keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...

  8. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  9. docker 部署nginx 使用keepalived 部署高可用

    一.体系架构 在Keepalived + Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故 ...

随机推荐

  1. MySql数据库优化必须注意的四个细节(方法)

    MySQL 数据库性能的优化是 MySQL 数据库发展的必经之路, MySQL 数据库性能的优化也是 MySQL 数据库前进的见证,下文中将从从4个方面给出了 MySQL 数据库性能优化的方法. 1. ...

  2. python的位置参数、关键字参数、收集参数,关键字收集参数混合调用问题

    参数混合调用顺序用法: 函数中参数顺序为:普通参数,收集参数,关键字参数,关键字收集参数,其顺序不能颠倒,颠倒会报错. 普通参数.关键字参数可以有n个,对量没有具体要求,收集参数和关键字收集参数要么没 ...

  3. 小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. STL&&用法集合

    .....STL是c++里很强势很好用的一系列容器(函数)之类的,之前一直不太会用,所以总是暴毙....想着快比赛了,是时候理一下这些东西了. -1.pair 存放两个基本元素的东西 定义方法: pa ...

  5. java应用性能调优之详解System的gc垃圾回收方法

    一.什么是System.gc()? System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API.当它被调用时,它将尽最大努力从内存中清除垃圾(即未被引用的对象).名词解释:GC, ...

  6. JAVA Rest High Level Client如何取聚合后得数据

    对于刚刚学习es的童鞋来说,很容易不清楚怎么获取客户端对es文档的聚合结果,下面就演示一下模仿DSL写聚合,然后获取到聚合对结果. 一, 对于下面这个简单的聚合,目的是对于文档全文匹配,聚合颜色字段. ...

  7. Anaconda的安装和详细介绍(带图文)

    Anacond的介绍 Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 因为包含了大量的科学包,Anaconda 的下载文件比较大( ...

  8. Apache Jmeter进行服务器压力测试

    1.前言 最近项目遇到一个问题:其他公司对接我们系统,请求量太大的时候,返回单给对方就是丢失格式,大概十几万中总有那么十几单会出现格式错误! 所以我们老大就叫我用apache jmeter来进行并发测 ...

  9. [Collection] 的常用方法有这些。

  10. 【Mac】【SoupUI】许可证损坏问题

    近期参考 https://www.cnblogs.com/shuaijie/articles/5913750.html#top 安装破解SoupUI 破解方法如下: 截至2014-10-9:SoapU ...