日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据切分——Atlas读写分离Mysql集群的搭建

發布時間:2024/4/14 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据切分——Atlas读写分离Mysql集群的搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 關于數據切分的原理可以參見博客:

????????http://blog.csdn.net/jhq0113/article/details/44226789

???????

??????? 關于Atlas的介紹可以參見博客:

????????http://blog.csdn.net/jhq0113/article/details/44239823


???????????????? Atlas源代碼用C語言編寫,它對于Web Server相當于是DB,相對于DB相當于是Client,如果把Atlas的邏輯放到Web Server程序里去處理,這樣會大大增加Web Server程序的復雜度,同時Web Server和DB之間的耦合度也相當高,因為只要DB增加/減少服務,Web Server就有可能要發生代碼改變,若代碼不改變,就得通過中間關系表與心跳機制來維護Server之間的關系,這樣會帶來性能的損耗,而Atlas是架設在Web Server與DB之間的一個中間件,Web Server與DB之間的耦合關系放到了Atlas來處理,既做到了靈活也保留了性能,這也是Atlas存在的價值。


??????? Atlas支持表的水平切分,支持讀寫分離,對數據實時性要求較高的項目可以在select語句前增加/*master*/強制讀主庫,主從MySql數據庫之間數據的同步需要自己配置,主從MySql數據庫數據主從復制的配置方法參見博客:

????????http://blog.csdn.net/jhq0113/article/details/44263367

?????????

??????? 1.安裝

?????????注意:只能安裝在64位的Linux操作系統上,CentOS官方建議rpm安裝方式

?????????獲取地址:https://github.com/Qihoo360/Atlas/releases

???????? 目前最新的版本為:

????????? Atlas-2.2.1.el5.x86_64.rpm??????????????????????CentOS 5.*? 版本

??????????Atlas-2.2.1.el6.x86_64.rpm??????????????????????CentOS 6.*? 版本

??????????

???????? 我的環境是CentOS 6.6 Basic Server x86_64

??????????

???????? 安裝命令:

???????? [root@jhq0229 src]# rpm -i Atlas-2.2.1.el6.x86_64.rpm

?????????

???????? 安裝位置:

???????? /usr/local/mysql-proxy

???????? 配置文件:

???????? /usr/local/mysql-proxy/conf/test.cnf

????????

???????? 重要配置文件詳解:

?????? ??(1)線程數

???????? event-threads項設置,過小無法充分發揮多核CPU的性能,過大造成不必要的線程切換開銷,推薦設置為CPU的核數。

????? (2)最小空閑連接數(2.x以上版本不需要該項,1.x版本需要)

???????? min-idle-connections項設置,過小則在高并發下會有報錯,過大雖然不報錯但在測試時不容易看出讀寫分離效果,推薦設置為比客戶端的并發峰值稍大,詳見《配置參數詳解》。上面的配置范例是針對Atlas 2.X版本,沒有該選項。對于Atlas 1.X版本的配置文件,需要加入該配置選項

????? (3)Atlas的工作端口

???????? proxy-address項配置,例如proxy-address = 0.0.0.0:1234代表客戶端應該使用1234這個端口連接Atlas來發送SQL請求。

???? (4)Atlas的管理端口

???????? admin-address項配置,例如admin-address = 0.0.0.0:2345代表DBA應該使用2345這個端口連接Atlas來執行運維管理操作。

??? (5)管理接口的用戶名和密碼

??????? admin-username項和admin-password項設置,這兩項是用來進入Atlas的管理界面的,與后端連接的MySQL沒有關系,所以可以任意設置,不需要MySQL在配置上做任何改動。

?? (6)日志級別

??????? 以log-level項配置,分為message、warning、critical、error、debug五個級別。

?? (7)日志路徑

?????? 以log-path項配置,如log-path = /usr/local/mysql-proxy/log。

?? (8)主庫的IP和端口

?????? proxy-backend-addresses = 192.168.0.12:3306

?? (9)從庫的IP和端口,@后面的數字代表權重,用來作負載均衡,若省略則默認為1,可設置多項,用逗號分隔。如果想讓主庫也能分擔讀請求的話,只需要將主庫信息加入到下面的配置項中。

?????? proxy-read-only-backend-addresses = 192.168.0.13:3306,192.168.0.14:3306

?? (10)用戶名與其對應的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程序encrypt加密,用戶名與密碼之間用冒號分隔。主從數據庫上需要先創建該用戶并設置密碼(用戶名和密碼在主從數據庫上要一致)。比如用戶名為myuser,密碼為mypwd,執行./encrypt mypwd結果為HJBoxfRsjeI=。如果有多個用戶用逗號分隔即可。則設置如下行所示:

????? pwds = myuser: HJBoxfRsjeI=,myuser2:HJBoxfRsjeI=

?(11)分表設置,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設置多項,以逗號分隔,若不分表則不需要設置該項,子表需要事先建好,子表名稱為表名_數字,數字范圍為[0,子表數-1],如本例里,子表名稱為mt_0、mt_1、mt_2

??? tables = person.mt.id.3


?? 我的配置:

???

[plain]?view plain?copy ?print?
  • [mysql-proxy]??
  • ??
  • #管理接口的用戶名??
  • admin-username?=?user??
  • ??
  • #管理接口的密碼??
  • admin-password?=?pwd??
  • ??
  • #Atlas后端連接的MySQL主庫的IP和端口,可設置多項,用逗號分隔??
  • proxy-backend-addresses?=?192.168.1.18:3306??
  • ??
  • #從庫??
  • proxy-read-only-backend-addresses?=?192.168.1.16:3306@1??
  • #用戶名和密碼配置項,需要和主從復制配置的用戶名和密碼配置一樣??
  • #pwds?=?user1:+jKsgB3YAG8=,?user2:GS+tr4TPgqc=??
  • pwds?=?mastt:/iZxz+0GRoA=??
  • ??
  • #后臺運行??
  • daemon?=?true??
  • ??
  • keepalive?=?true??
  • ??
  • #工作線程數,對Atlas的性能有很大影響,可根據情況適當設置??
  • event-threads?=?8??
  • ??
  • #日志級別,分為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?=?test??
  • ??
  • #Atlas監聽的工作接口IP和端口??
  • proxy-address?=?192.168.1.18:8060??
  • ??
  • #Atlas監聽的管理接口IP和端口??
  • admin-address?=?192.168.1.18:2345??
  • ??
  • #分表設置,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設置多項,以逗號分隔,若不分表則不需??
  • 要設置該項??
  • #tables?=?person.mt.id.3??
  • tables=orders.my_orders.year.2015??
  • ??
  • #默認字符集,設置該項后客戶端不再需要執行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??

  • 從以上配置可以清楚看到:

    主庫:192.168.1.18:3306

    從庫:192.168.1.16:3306??? 權重為1

    注意:主從復制需要自行配置。

    ?

    Atlas Proxy的ip和端口為:192.168.1.18:8060

    主從復制的用戶和密碼為:mastt???? 123456,以上的pwds的密碼是經過加密處理的

    若用Navicat登陸,就用Atlas Proxy的ip和端口,用戶名和密碼用主從復制的,主從復制的賬戶需要設置可以在Navicat上登陸。


    分表配置項:

    [plain]?view plain?copy ?print?
  • tables=orders.my_orders.year.2015??

  • 我的主從庫名稱是orders,里有三張表,分別是my_orders_0,my_orders_1,my_orders_2,按year字段進行分表,雖然分了2015張表,但是你的數據庫里不一定有這么多張表,這里的2015只是取模的一個基數,按照此規律去找到相應的表,例如year=2015,數據請求會發送到my_orders_0表。


    編寫簡單Atlas的啟動腳本:

    [root@jhq0229 ~]# vim /etc/init.d/atlas


    內容如下:

    [plain]?view plain?copy ?print?
  • #!/bin/sh??
  • #??
  • #atlas:????Atlas?Daemon??
  • #??
  • #?chkconfig:????-?90?25??
  • #?description:??Atlas?Daemon??
  • #??
  • #?Source?function?library.??
  • start()??
  • {??
  • ????????echo?-n?$"Starting?atlas:?"??
  • ????????/usr/local/mysql-proxy/bin/mysql-proxyd?test?start??
  • ????????echo???
  • }??
  • stop()??
  • {??
  • ????????echo?-n?$"Shutting?down?atlas:?"??
  • ????????/usr/local/mysql-proxy/bin/mysql-proxyd?test?stop??
  • ????????echo??
  • }??
  • ATLAS="/usr/local/mysql-proxy/bin/mysql-proxyd"??
  • [?-f?$ATLAS?]?||?exit?1??
  • #?See?how?we?were?called.??
  • case?"$1"?in??
  • ????????start)??
  • ????????????????start??
  • ????????????????;;??
  • ????????stop)??
  • ????????????????stop??
  • ????????????????;;??
  • ????????restart)??
  • ????????????????stop??
  • ????????????????sleep?3??
  • ????????????????start??
  • ????????????????;;??
  • ????????*)??
  • ????????????????echo?$"Usage:?$0?{start|stop|restart}"??
  • ????????????????exit?1??
  • esac??
  • exit?0??

  • 授權并加入開機啟動

    [root@jhq0229 ~]# chmod +x /etc/init.d/atlas
    [root@jhq0229 ~]# chkconfig atlas on


    啟動atlas服務

    [root@jhq0229 ~]# service atlas start


    2.功能測試:

    1).利用mastt用戶123456密碼Navicat登陸到192.168.1.18:8060查看數據庫表,開始數據庫中沒有數據。

    表結構如下:

    [sql]?view plain?copy ?print?
  • CREATE?TABLE?`my_orders_0`?(??
  • ??`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT?COMMENT?'表主鍵',??
  • ??`pid`?int(10)?unsigned?NOT?NULL?COMMENT?'產品ID',??
  • ??`price`?decimal(15,2)?NOT?NULL?COMMENT?'單價',??
  • ??`num`?int(11)?NOT?NULL?COMMENT?'購買數量',??
  • ??`person`?varchar(255)?NOT?NULL?COMMENT?'客戶姓名',??
  • ??`atime`?int(10)?unsigned?NOT?NULL?COMMENT?'下單時間',??
  • ??`utime`?int(10)?unsigned?NOT?NULL?COMMENT?'修改時間',??
  • ??`isdel`?tinyint(4)?NOT?NULL?DEFAULT?'0'?COMMENT?'軟刪除標識',??
  • ??`year`?smallint(5)?unsigned?NOT?NULL?COMMENT?'年',??
  • ??PRIMARY?KEY?(`id`)??
  • )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8;??

  • 插入數據

    [sql]?view plain?copy ?print?
  • INSERT?INTO?`my_orders`(`pid`,`price`,`num`,`person`,`atime`,`utime`,`year`)?VALUES?('1',?'123.54',?'1',?'周潤發',?'1426335606',?'1426335606','2015');??
  • INSERT?INTO?`my_orders`(`pid`,`price`,`num`,`person`,`atime`,`utime`,`year`)?VALUES?('3',?'13.67',?'4',?'周迅',?'1426338765',?'1426338765',?'2016');??
  • INSERT?INTO?`my_orders`(`pid`,`price`,`num`,`person`,`atime`,`utime`,`year`)?VALUES?('4',?'44.44',?'4',?'郭敬明',?'1426754324',?'1426754324','2017');??

  • 此時我們會看到my_orders_0,1,2表中分別有一條數據,15年的在0表,16年在1表,17年的在2表。


    查詢測試,如果不指定表的全名,查詢時需要year字段作為where條件,否則不會通過,測試結果如下圖:

    ???????


    讀寫分離測試,為了達到測試效果,我們在從庫的my_orders_0表手動添加一條數據,語句如下:

    [sql]?view plain?copy ?print?
  • INSERT?INTO?`my_orders_0`(`pid`,`price`,`num`,`person`,`atime`,`utime`,`year`)?VALUES?('2',?'212.54',?'1',?'梁朝偉',?'1426335606',?'1426335606','2015');??

  • 此時,主庫的0表只有一條數據,從表里有兩條數據,如果我們執行查詢語句

    SELECT * FROM my_orders WHERE `year`=2015出現一條結果,則都的是主庫,若出現兩條則為從庫,結果如下圖:

    ????????


    證明已經讀的是從庫。


    測試強制讀主庫,若執行語句/*master*/ SELECT * FROM my_orders WHERE `year`=2015有兩條記錄則讀的是從庫,如果是一條記錄都的是主庫,測試結果只有周潤發一條記錄。


    至此,Atlas的配置完畢,如果將Atlas與Mysql表的分區聯合使用可以大大提高大數據的處理能力,希望可以幫助到你。


    轉載于:https://www.cnblogs.com/duyinqiang/p/5696356.html

    總結

    以上是生活随笔為你收集整理的数据切分——Atlas读写分离Mysql集群的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 香蕉久久精品日日躁夜夜躁 | 欧美播放 | 美女黄视频网站 | 99久久精品国产一区二区成人 | 亚洲欧美综合色 | 久久国产激情 | 日韩精品在线一区二区 | 色欲av永久无码精品无码蜜桃 | 亚洲宅男天堂 | 欧美成片vs欧美 | 日朝毛片| 97超碰人人澡人人爱学生 | 深夜福利免费在线观看 | 男人的天堂在线观看av | 人与动物黄色片 | www.自拍 | 成人激情视频网 | 天天摸日日摸狠狠添 | 日韩欧美一级视频 | 在线免费观看日韩av | 亚洲色图40p | 中文在线а√天堂官网 | 秋霞自拍| 黄色污网站在线观看 | 公交顶臀绿裙妇女配视频 | 黄色av免费在线观看 | 少妇第一次交换又紧又爽 | av大西瓜 | 中文字幕一区二区三区手机版 | 处女朱莉| 中文字幕一二三四区 | 日本免费一区视频 | 久久久久99人妻一区二区三区 | 销魂奶水汁系列小说 | 国产精品毛片va一区二区三区 | 女人性做爰24姿势视频 | 欧美成人三级视频 | 国产网站一区 | 久久久久久久999 | 91狠狠综合 | 日本精品久久久久中文字幕 | 72种无遮挡啪啪的姿势 | 亚洲国产视频一区 | 黄色小视频在线 | 日韩欧美在线中文字幕 | 国产天天操 | 男女那个视频 | 97在线视频免费观看 | 精品三区视频 | 日韩成人看片 | 在线理论视频 | 台湾极品xxx少妇 | 欧美精品videos极品 | 少妇人妻好深好紧精品无码 | 日韩1级片 | www.av免费 | 色哟哟视频网站 | 日本不卡一二三 | 黄瓜视频色 | 国产一国产二国产三 | 日本精品黄 | 麻豆av一区二区 | 成人国产精品入口免费视频 | 熟睡人妻被讨厌的公侵犯 | 国产无限资源 | 美国av大片| 黄色国产免费 | 中文字幕一区二区人妻 | 捆绑最紧bdsm视频 | 成人av国产 | 九九热九九| 亚欧成人精品一区二区 | 久久成人在线视频 | 日日夜夜免费精品视频 | 国产精品无码久久av | 国产一区二区三区久久 | 国产成人免费观看视频 | 亚洲砖区区免费 | a√在线观看| 国产91一区在线精品 | 久久久久久久久久一级 | 天堂在线一区二区 | 最近中文字幕无免费 | 最近免费中文字幕中文高清百度 | 福利网站在线观看 | 刘亦菲一区二区三区免费看 | zoo性欧美 | 欧美亚洲在线播放 | 久久久久欧美 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 黄91在线观看 | 日韩精品在线观看中文字幕 | 一级片一区 | 男女男精品视频 | 久久98| 日韩一区二区三区精 | 人人射人人爱 | 中文字幕第3页 | 色欲久久久天天天综合网精品 |