MySQL中间件之Atlas部署与读写分离实现

Atlas简介:
  • Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性。

  • Atlas是一个位于应用程序与MySQL之间中间件。在后端DB看来,Atlas相当于连接它的客户端,在前端应用看来,Atlas相当于一个DB。Atlas作为服务端与应用程序通讯,它实现了MySQL的客户端和服务端协议,同时作为客户端与MySQL通讯。它对应用程序屏蔽了DB的细节,同时为了降低MySQL负担,它还维护了连接池。

Atlas主要功能:
  • 1.读写分离
  • 2.从库负载均衡
  • 3.IP过滤
  • 4.自动分表
  • 5.DBA可平滑上下线DB
  • 6.自动摘除宕机的DB
Atlas的优势:
  • Atlas相对于官方MySQL-Proxy

  • 1.将主流程中所有Lua代码用C重写,Lua仅用于管理接口

  • 2.重写网络模型、线程模型

  • 3.实现了真正意义上的连接池

  • 4.优化了锁机制,性能提高数十倍

安装Atlas中间件:

  • Atlas (普通) : Atlas-2.2.1.el6.x86_64.rpm
  • Atlas (分表) : Atlas-sharding_1.0.1-el6.x86_64.rpm
下载Altas软件包:
  • 这里我们只需要下载普通的即可。
    [root@db-atlas ~]# wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
    [root@db-atlas ~]# rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
配置环境变量:
[root@db-atlas ~]# echo 'export PATH=/usr/local/mysql-proxy/bin:$PATH' >> /etc/profile
[root@db-atlas ~]# source /etc/profile
启动Altas服务:
#配置文件的名字为test.cnf,那就启动test,如果配置文件改名为olda,那就执行olda start
[root@db-atlas ~]# mysql-proxyd test start
管理Altas服务:
  • 如果是8.0版本的mysql客户端程序暂时不可使用。可以二进制解压一个5.7版本的mysql客户端工具
#'user与pwd都是配置文件内管理用户的默认用户与密码
[root@db-atlas ~]# mysql -uuser -ppwd -h172.18.1.100 -P2345

只有以下参数这些功能,按照例子就可以配置Altas

Atlas-读写分离实现:

当前读写分离架构图:

配置Atlas文件:
  • 配置文件内有默认的管理用户与密码,还有管理地址与端口,进入配置文件内查看
# 使用Altas的加密工具进行对 123456密码加密
[root@db-atlas ~]# encrypt 123456
# /iZxz+0GRoA=

[root@db-atlas ~]# egrep -v '^$|^#' /usr/local/mysql-proxy/conf/prod.cnf
[mysql-proxy]
admin-username = root
admin-password = 123456
proxy-backend-addresses = 172.18.1.76:3306       # 12行,配置主库 IP
proxy-read-only-backend-addresses = 172.18.1.78:3306      # 15行,配置当前环境内的从库的 IP
pwds = root:/iZxz+0GRoA=      # 18行,配置MySQL用户与密码,用逗号分隔,冒号写密码(加密后的密码)
daemon = true           # 是否守护运行
keepalive = true        # 自动监控worker进行运行状态
event-threads = 8       # 工作线程数
log-level = error      #30行,指定日志记录的级别
log-path = /usr/local/mysql-proxy/log        # 日志存放的路径
sql-log = ON         # 36行,开启SQL语句执行的日志
sql-log-slow = 10      # 39行,记录大于10毫秒的执行语句日志
proxy-address = 0.0.0.0:1234      # 45行,指定程序监听地址与端口
admin-address = 0.0.0.0:2345      # 48行,Atlas监听的管理接口IP和端口
charset = utf8      #54行,指定字符集
重启Atlas服务:
#配置文件的名字为prod.cnf,那就启动prod,如果配置文件改名为olda,那就执行olda start
[root@db-atlas ~]# mysql-proxyd prod restart
查看Altas后端数据库:
  • 如果是8.0版本的mysql客户端程序暂时不可使用。可以二进制解压一个5.7版本的mysql客户端工具

  • 管理端口默认:2345

#'root 与 123456 都是配置文件内管理用户指定的用户与密码
[root@db-atlas ~]# mysql -uroot -p -h172.18.1.100 -P2345 -e "select * from backends;"
Enter password: 
+-------------+------------------+-------+------+
| backend_ndx | address          | state | type |
+-------------+------------------+-------+------+
|           1 | 172.18.1.76:3306 | up    | rw   |
|           2 | 172.18.1.78:3306 | up    | ro   |
+-------------+------------------+-------+------+
测试读写分离:
  • 数据端口默认:1234
# 查看 temp表结构
[root@db-atlas ~]# mysql -uroot -p -h172.18.1.100 -P1234 -e "use course;desc temp;"
Enter password: 
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(64) | YES  |     | NULL    |       |
| gender | int(11)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
# 插入数据到 temp表
[root@db-mycat ~]# mysql -uroot -p -h172.18.1.100 -P1234 -e "use course; insert into temp values(1,'aa','1');"
Enter password: 
[root@db-mycat ~]# mysql -uroot -p -h172.18.1.100 -P1234 -e "use course; insert into temp values(2,'bb','2');"
Enter password:

# 停止 MySQL-主库,测试是否还可以插入数据到 temp表 ( 不可写是正常的 )
[root@db-mycat ~]# mysql -uroot -p -h172.18.1.100 -P1234 -e "use course; insert into temp values(3,'cc','3');"
Enter password: 
ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query

# 停止 MySQL-主库,测试是否还可读 temp表数据 ( 可读代表已经 读写分离 完毕 )
[root@db-mycat ~]# mysql -uroot -p -h172.18.1.100 -P1234 -e "use course; select * from temp;"
Enter password: 
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|    1 | aa   |      1 |
|    2 | bb   |      2 |
+------+------+--------+
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论