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(虚拟网络地址),当有设备发生故 ...
随机推荐
- Mycat分布式数据库架构解决方案--配置defaultAccount属性报错解决方案
echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 该文章 ...
- centos 7 防火墙firewall 与iptables 的一些常用命令
CentOS 7的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样. firewall常用命令 service fir ...
- c#中关于string的特性介绍以及注意事项
前言 string类型在我们实际项目开发中是一个最使用的类型,string是一个引用类型这一点大家都知道,但是在实际使用过程中,大家会发现string和我们常见的引用类型使用还真不一样,看下面的一个简 ...
- c# 保留两位小数点
保留两位小数点 由于简单的原因大家直接看代码块. using System; namespace HelloWorld { class Program { static void Main(strin ...
- RTKLib的Manual解读
Key-word: integer ambiguity resolution :整周模糊度解算 navigation:导航 Kinematic:动态,RTK的K rover:漫游 validation ...
- mysql设计规范二
一.基本规范 必须使用InnoDB存储引擎 必须使用UTF8字符集 数据表.数据字段必须加入中文注释 二.设计规范 库名称.表名称.字段名称必须使用小写,最好不要使用驼峰式,使用“_”区分,例如use ...
- 使用Typescript重构axios(四)——实现基础功能:处理post请求参数
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- P2579 [ZJOI2005]沼泽鳄鱼(邻接矩阵,快速幂)
题目简洁明了(一点都不好伐) 照例,化简题目 给一张图,每一个时间点有一些点不能走,(有周期性),求从起点第k秒恰好在终点的方案数,可重复,不可停留. 额dp实锤 于是就被打脸了.... 有一种东西叫 ...
- 基于 ThinkPHP5 + Bootstrap 的后台开发框架 FastAdmin
FastAdmin是一款基于 ThinkPHP5 + Bootstrap 的极速后台开发框架. 主要特性 基于Auth验证的权限管理系统 支持无限级父子级权限继承,父级的管理员可任意增删改子级管理员及 ...
- 你了解MySQL中的日志吗?
MySQL中有两类非常重要的日志,一类是redo log(重做日志),一类是bin log(归档日志) redo log 重做日志利用的,是MySQL中,常见的WAL技术,WAL技术的全程是:Writ ...