centos 7 Atlas keepalived 实现高可用 MySQL 5.7 MHA环境读写分离
简介
Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。
它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。而且安装方便。配置的注释写的蛮详细的,都是中文。
主要功能
- 读写分离
 - 从库负载均衡
 - IP过滤
 - 自动分表
 - DBA可平滑上下线DB
 - 自动摘除宕机的DB
 
相关链接
- Mysql中间件产品比较:http://songwie.com/articlelist/44
 - Atlas的安装:https://github.com/Qihoo360/Atlas/wiki/Atlas的安装
 - Atlas功能特点FAQ:https://github.com/Qihoo360/Atlas/wiki/Atlas功能特点FAQ
 - Atlas性能特点:https://github.com/Qihoo360/Atlas/wiki/Atlas的性能测试
 - Atlas架构:https://github.com/Qihoo360/Atlas/wiki/Atlas的架构
 - Atlas+Keepalived:http://sofar.blog.51cto.com/353572/1601552
 - Atlas各项功能验证:http://blog.itpub.net/27000195/viewspace-1421262/
 
环境准备
本次环境主要依赖于 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 安装 和 配置
安装和配置
atlas,master和slave的配置要完全相同,一下操作在master和slave上均要操作
[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目录下放的都是可执行文件
- “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
 - “mysql-proxy”是MySQL自己的读写分离代理
 - “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环境读写分离的更多相关文章
- 《高可用MySQL》1 – Windows环境下压缩版MySQL安装
		
近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天 ...
 - haproxy+keepalived实现高可用负载均衡
		
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...
 - haproxy+keepalived实现高可用负载均衡(转)
		
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. ...
 - Centos7 安装keepalived实现高可用
		
场景:尝试安装keepalived实现高可用,进而在suse环境中部署. 测试过程需要配合Nginx的相关知识:Centos7 Nginx安装 1 安装过程 问题 !!! OpenSSL is not ...
 - 高可用Mysql架构_Haproxy+keepalived+mycat集群的配置
		
接上一篇文章http://www.cnblogs.com/wt645631686/p/8310891.html,虽然已经在原有两台mycat基础上增加了Haproxy作为mycat的中间服务器,不足的 ...
 - (转)MySQL主主互备结合keepalived实现高可用
		
MySQL主主互备结合keepalived实现高可用 原文:http://7424593.blog.51cto.com/7414593/1741717 试验环境: master:192.168.1.2 ...
 - keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群
		
keepalived工作原理和配置说明 腾讯云VPC内通过keepalived搭建高可用主备集群 内网路由都用mac地址 一个mac地址绑定多个ip一个网卡只能一个mac地址,而且mac地址无法改,但 ...
 - Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived  实现高可用)
		
一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...
 - docker 部署nginx 使用keepalived 部署高可用
		
一.体系架构 在Keepalived + Nginx高可用负载均衡架构中,keepalived负责实现High-availability (HA) 功能控制前端机VIP(虚拟网络地址),当有设备发生故 ...
 
随机推荐
- Docker 从入门到掉坑
			
Docker 介绍 简单的对docker进行介绍,可以把它理解为一个应用程序执行的容器.但是docker本身和虚拟机还是有较为明显的出入的.我大致归纳了一下,可以总结为以下几点: docker自身也有 ...
 - Windows 程序包管理器 Chocolatey:一条命令装软件
			
Windows 程序包管理器 Chocolatey:一条命令装软件 本文原始地址:https://sitoi.cn/posts/46278.html 介绍 Chocolatey 是一种软件管理解决方案 ...
 - 如何在Vue项目中使用Typescript
			
0.前言 本快速入门指南将会教你如何在Vue项目中使用TypeScript进行开发.本指南非常灵活,它可以将TypeScript集成到现有的Vue项目中任何一个阶段. 1.初始化项目 首先,创建一个新 ...
 - 002.Kubernetes简单入门实例
			
一 环境准备 1.1 基础环境 Kubernetes模式:单机版 系统环境:CentOS 7/172.24.9.157 部署方式:yum快速部署 其他设置:开启NTP.关闭防火墙及SELinux 二 ...
 - jquery 路径动画贝塞尔动画
			
jquery 路径动画贝塞尔动画 <pre><!DOCTYPE html><!DOCTYPE html><html> <head> < ...
 - 创建python的虚拟环境
			
为什么需要虚拟环境?如果你现在用Django 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用Django 0.9开发的,让你来维护,但是Django 1.10不再兼容Django 0 ...
 - Resources for embedded SQL engine
			
1. Official Website for SQLite: http://www.sqlite.org/ 2. .Net Wrapper for SQLite (System.Data.SQLit ...
 - PHP Swoole-Demo TCP服务端简单实现
			
tcp 服务端简单demo与client . <?php /** * author : rookiejin <mrjnamei@gmail.com> * createTime : 2 ...
 - 手把手教你如何在阿里云ECS搭建Python TensorFlow Jupyter
			
前段时间在阿里云买了一台服务器,准备部署网站,近期想玩一些深度学习项目,正好拿来用.TensorFlow官网的安装仅提及Ubuntu,但我的ECS操作系统是 CentOS 7.6 64位,搭建Pyth ...
 - Vue躬行记(9)——Vuex
			
Vuex是一个专为Vue.js设计的状态管理库,适用于多组件共享状态的场景.Vuex能集中式的存储和维护所有组件的状态,并提供相关规则保证状态的独立性.正确性和可预测性,这不仅让调试变得可追踪,还让代 ...