文章目錄
- MySQL中間件Atlas
- 一 atlas簡介
- 二 主要功能
- 三 使用場景
- 四 企業讀寫分離及分庫分表其他方案了解
- 五 安裝Atlas
- 六 配置
- 七 啟動服務
- 1) mysql庫建立賬号
- 八 Atlas使用
- 九 管理功能簡介
- 1、 連接配接管理服務,使用配置檔案中管理接口賬戶
- 2、 持久化配置檔案
- 3、 節點管理
- 1)檢視所有節點
- 2) 節點的上線和下線
- 3) 添加删除節點
- 4、 使用者管理
- 1)在主庫增加資料庫使用者
- 2)檢視目前用
- 3) 增加Atlas使用者
MySQL中間件Atlas
一 atlas簡介
Mysql 的 proxy 中間件有比較多的工具,例如,mysql-proxy(官方提供), atlas , cobar, mycat, tddl, tinnydbrouter等等
而Atlas是由 Qihoo 360公司Web平台部基礎架構團隊開發維護的一個基于MySQL協定的資料中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司内部得到了廣泛應用,很多MySQL業務已經接入了Atlas平台,每天承載的讀寫請求數達幾十億條。
同時,有超過50家公司在生産環境中部署了Atlas,超過800人已加入了我們的開發者交流群,并且這些數字還在不斷增加。而且安裝友善。配置的注釋寫的蠻詳細的,都是中文。
Atlas官方連結:Atlas下載下傳連結:
二 主要功能
Atlas主要功能(代理)
1.讀寫分離
2.從庫負載均衡
3.IP過濾
4.自動分表
5.DBA可平滑上下線DB(不影響使用者的體驗,把你的資料庫下線)
6.自動摘除當機的DB
Atlas相對于官方MySQL-Proxy的優勢
1.将主流程中所有Lua代碼用C重寫,Lua僅用于管理接口
2.重寫網絡模型、線程模型
3.實作了真正意義上的連接配接池
4.優化了鎖機制,性能提高數十倍
三 使用場景
Atlas是一個位于前端應用與後端MySQL資料庫之間的中間件,在後端DB看來,Atlas相當于連接配接它的用戶端,在前端應用看來,Atlas相當于一個DB。Atlas作為服務端與應用程式通訊,它實作了MySQL的用戶端和服務端協定,同時作為用戶端與MySQL通訊。它對應用程式屏蔽了DB的細節,同時為了降低MySQL負擔,它還維護了連接配接池。
Atlas使得應用程式員無需再關心讀寫分離、分表等與MySQL相關的細節,可以專注于編寫業務邏輯,同時使得DBA的運維工作對前端應用透明,上下線DB前端應用無感覺。
四 企業讀寫分離及分庫分表其他方案了解
Mysql-proxy(oracle)
Mysql-router(oracle)
Atlas (Qihoo 360)
Atlas-sharding (Qihoo 360)
Cobar(是阿裡巴巴(B2B)部門開發)
Mycat(基于阿裡開源的Cobar産品而研發)
TDDL Smart Client的方式(淘寶)
Oceanus(58同城資料庫中間件)
OneProxy(原支付寶首席架構師樓方鑫開發 )
vitess(谷歌開發的資料庫中間件)
Heisenberg(百度)
TSharding(蘑菇街白輝)
五 安裝Atlas
# 雖然包時el6的,但是centos7也能用
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
rpm
六 配置
[root@manager ~]# cd /usr/local/mysql-proxy/conf
[root@manager mysql-proxy]# vim test.cnf
[mysql-proxy]
# 用來登入atlas管理接口的賬号和密碼,部署登入msyql資料
admin-username = bigegon
admin-password = 666
proxy-backend-addresses = 192.168.15.100:3306 # 寫節點(主庫)
proxy-read-only-backend-addresses = 192.168.15.101:3306,192.168.15.102:3306 # 隻讀節點(從庫)
# 用來登入msyql的賬号和加密密碼,都是存在與mysql庫的賬号免密,我們需要指定我們自己的,可以指定多個
# 注意一定要是加密密碼,需要執行
# /usr/local/mysql-proxy/bin/encrypt 123,得到123的加密密碼
pwds = root:3yb5jEku5h4=, egon:3yb5jEku5h4=
daemon = true # 背景運作
keepalive = true # 監測節點心跳
event-threads = 4 # 并發數量,設定cpu核數一半
log-level = message # 日志級别
log-path = /usr/local/mysql-proxy/log # 日志目錄
sql-log = On # sql記錄(可做審計)
proxy-address = 0.0.0.0:3306 # 業務連接配接端口
admin-address = 0.0.0.0:2345 # 管理連接配接端口
charset=utf8 # 字元集
七 啟動服務
#1、啟動,配置檔案名為test.conf對應此處的test
/usr/local/mysql-proxy/bin/mysql-proxyd test start
#2、驗證啟動(沒起來他也顯示OK)
ps -ef|grep [m]ysql-proxy
netstat -lntup|grep [m]ysql-proxy
#3、檢視日志定位問題
tail
1) mysql庫建立賬号
grant all on *.* to 'root'@'%' identified by '123';
grant all on *.* to 'egon'@'%' identified by '123';
八 Atlas使用
進入管理接口
# 進入管理接口,使用配置檔案中指定的管理賬号與密碼
mysql -ubigegon -p666 -h127.0.0.1 -P2345
#檢視幫助,依據幫助查找可執行的管理操作
mysql> SELECT * FROM help;
#檢視後端的資料庫
SELECT * FROM backends;
在任意一台機器上,登入atlas主機
#1、為了很好地觀察讀寫分離的效果,可以先把從庫的sql延遲設定大
stop slave;
CHANGE MASTER TO MASTER_DELAY = 60;
start slave;
#2、登入atlas來進行測試
# -u、-p為atlas配置檔案中pwds指定的賬号和密碼
# -h後的位址為atlas主機的位址
# -P自定atlas監聽的ip
mysql -uroot -p123 -h 192.168.15.200 -P 3306
mysql> create database db1;
此時去主庫檢視,發現有db1庫,但是去所有從庫檢視發現都沒有
過了一分鐘後從庫上都有db1了,然後我們通過atlas也可以檢視到了
mysql> show databases;
九 管理功能簡介
1、 連接配接管理服務,使用配置檔案中管理接口賬戶
mysql -ubigegon -p666 -h192.168.15.200 -P2345
2、 持久化配置檔案
mysql> save config;
Empty set (0.00 sec)
3、 節點管理
1)檢視所有節點
mysql> SELECT * FROM backends;
+-------------+---------------------+-------+------+
| backend_ndx | address | state | type |
+-------------+---------------------+-------+------+
| 1 | 192.168.15.100:3306 | up | rw |
| 2 | 192.168.15.101:3306 | up | ro |
| 3 | 192.168.15.102:3306 | up | ro |
+-------------+---------------------+-------+------+
3 rows in set (0.00 sec)
2) 節點的上線和下線
下線:
mysql> set offline 1;
+-------------+---------------------+---------+------+
| backend_ndx | address | state | type |
+-------------+---------------------+---------+------+
| 1 | 192.168.15.100:3306 | offline | rw |
+-------------+---------------------+---------+------+
1 row in set (0.00 sec)
mysql> SELECT * FROM backends;
+-------------+---------------------+---------+------+
| backend_ndx | address | state | type |
+-------------+---------------------+---------+------+
| 1 | 192.168.15.100:3306 | offline | rw |
| 2 | 192.168.15.101:3306 | up | ro |
| 3 | 192.168.15.102:3306 | up | ro |
+-------------+---------------------+---------+------+
3 rows in set (0.00 sec)
上線:
mysql> set online 1;
+-------------+---------------------+---------+------+
| backend_ndx | address | state | type |
+-------------+---------------------+---------+------+
| 1 | 192.168.15.100:3306 | unknown | rw |
+-------------+---------------------+---------+------+
1 row in set (0.00 sec)
3) 添加删除節點
mysql> remove backend 3;
mysql> SELECT * FROM backends;
mysql> add slave 192.168.15.102:3306;
mysql> SELECT * FROM backends;
4、 使用者管理
1)在主庫增加資料庫使用者
mysql> grant all on *.* to user1@'192.168.10.%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
2)檢視目前用
mysql> select * from pwds;
+----------+--------------+
| username | password |
+----------+--------------+
| test | 3yb5jEku5h4= |
| repl | 3yb5jEku5h4= |
+----------+--------------+
2 rows in set (0.00 sec)
3) 增加Atlas使用者
mysql> add pwd user1:123;
Empty set (0.00 sec)
mysql> select * from pwds;
+----------+--------------+
| username | password |
+----------+--------------+
| root | 3yb5jEku5h4= |
| egon | 3yb5jEku5h4= |
| user1 | 3yb5jEku5h4= |
+----------+--------------+
3 rows in set (0.00 sec)