Ubuntu14.04 64位+altas+mysql讀寫分離

這次我來撘下比較流行的讀寫分離配置,現(xiàn)在好像很火的樣子,能大大提升mysql的能力,所以我就學(xué)一下。

一,材料準(zhǔn)備

Altas2.2

三臺主機

  1. altas代理中間件服務(wù)器 192.168.1.1
  2. 主mysql服務(wù)器 192.168.1.2
  3. 從mysql服務(wù)器 192.168.1.3

Jmeter
還得自備JDBC橋包

二,安裝mysql

三臺服務(wù)器都需要安裝mysql,你會為代理服務(wù)器為什么也要裝,主要是該服務(wù)器會利用某一個mysql的某個包,所以還是得裝

sudo apt-get update
sudo apt-get install mysql-server mysql-client

然后根據(jù)自己的mysql版本配置UTF-8編碼,我的是5.5.6

mysql > select version(); 
mysql > show variables like 'character_set_%';#查看編碼

sudo stop mysql

sudo su
vim /etc/mysql/my.cnf
#在[client]段增加下面代碼
default-character-set=utf8
#在[mysqld]段增加下面的代碼
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

sudo start mysql

三,配置主從復(fù)制

我只是做了個最簡單的主從復(fù)制,所以想要理解深入的要自己去查看,然后一定要保持所有服務(wù)器的3306都可以連通

首先配置主從服務(wù)器,代理的mysql服務(wù)器不用管,不會用到它

vim /etc/mysql/my.cnf 
#添加或修改(如果文件上有)以下屬性
bind-address            = 0.0.0.0
server-id=1 #主是1,從是2,不要搞混,而且必須唯一
log-bin=mysql-bin 
binlog-ignore-db = mysql,information_schema

sudo restart mysql

master授權(quán)一個賬號給slave讀取數(shù)據(jù)
賬:root
密:root(identified by 密碼)

主服務(wù)器操作

mysql -uxxx -pxxx
mysql > grant all privileges on *.* to 'root'@'192.168.1.3' identified by 'root';
mysql > flush privileges;

從機操作測試能否正常連接主機的mysql,能正常連接說明沒問題,否則請自行檢查端口,這步必須先過,否則后面就會很折磨你自己為什么弄不了

mysql -uroot -proot -h192.168.1.2

好回到主機,這兩個屬性很重要,等下要用

mysql > show master status;

再去到從機,按照自己配置的賬密,還有剛剛那兩個屬性,配置以下命令輸入從機

 change master to
 master_host='192.168.1.2',#主機
 master_user='root',#賬
 master_password='root',#密
 master_log_file='mysql-bin.000001',#二進制文件
 master_log_pos=333;

重啟從機mysql,并輸入一下命令,然后會看到兩個YES,那就OK了,如果沒有,那就檢查防火墻和端口

sudo restart mysql
mysql -uxxx -pxxx
mysql > start slave;
mysql > show slave status\G;

讀寫分離參考鏈接推薦:

http://www.itdecent.cn/p/bcd01f163bae
http://blog.csdn.net/lc0817/article/details/51163268

四,測試主從復(fù)制

首先我們,我們先把主從機的數(shù)據(jù)庫打開

mysql > show databases;

然后我們再主機輸入以下命令

mysql > create database test;
mysql > use test;
mysql > create table student ( id int );
mysql > insert into student values(1);

然后分別在主從機下輸入以下命令

mysql > show databases;
mysql > use test;
mysql > select * from student;

好了恭喜,讀寫分離配置初步主從復(fù)制完畢。

五,Altas配置

首先分別進入主從機,申請同樣賬號密碼的mysql用戶提供給代理服務(wù)器使用,我覺得最好和剛才主從鏈接的賬號密碼一樣咯,這樣好記

mysql > grant all privileges on *.* to 'root'@'192.168.1.1' identified by 'root';

上傳Atlas-2.2-debian7.0-x86_64.deb到代理機上。

還記得我們剛剛給代理機的賬號密碼吧?
賬:root
密:root (記住這個密碼,最主要和主機有關(guān)系)
然后打開代理機終端輸入以下命令

cd /usr/local/
dpkg -i Atlas-2.2-debian7.0-x86_64.deb
rm -rf Atlas-2.2-debian7.0-x86_64.deb 
cd mysql-proxy
bin/encrypt root#這是剛剛所說的密碼
#DAJnl8cVzy8=  把這個密碼記住,等等配置conf
cd conf
vim test.cnf

配置以下屬性

[mysql-proxy]
#這是管理代理的賬號密碼,這個感覺默認就行了,看自己
#管理接口的用戶名
**admin-username **= user

#管理接口的密碼
**admin-password **= pwd

#實現(xiàn)管理接口的Lua腳本所在路徑
admin-lua-script = /usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua

#Atlas后端連接的MySQL主庫的IP和端口,可設(shè)置多項,用逗號分隔
#設(shè)置為自己的主機
**proxy-backend-addresses** = 192.168.1.2:3306

#Atlas后端連接的MySQL從庫的IP和端口,@后面的數(shù)字代表權(quán)重,用來作負載均衡,若省略則默認為1,可設(shè)置多項,用逗號分隔
#設(shè)置只讀服務(wù)器,其中@后面代表權(quán)值,權(quán)值越大,抽中為讀的幾率越高
**proxy-read-only-backend-addresses** = 192.168.1.2:3306@1,192.168.1.3:3306@2

#設(shè)置Atlas的運行方式,設(shè)為true時為守護進程方式,設(shè)為false時為前臺方式,一般開發(fā)調(diào)試時設(shè)為false,線上運行時設(shè)為true
daemon = true

#設(shè)置Atlas的運行方式,設(shè)為true時Atlas會啟動兩個進程,一個為monitor,一個為worker,monitor在worker意外退出后會自動將其重啟,設(shè)為false時只有worker,沒有monitor,一般開發(fā)調(diào)試時設(shè)為false,線上運行時設(shè)為true
keepalive = true

#工作線程數(shù),推薦設(shè)置與系統(tǒng)的CPU核數(shù)相等
event-threads = 4

#日志級別,分為message、warning、critical、error、debug五個級別
log-level = message

#日志存放的路徑
log-path = /usr/local/mysql-proxy/log

#實例名稱,用于同一臺機器上多個Atlas實例間的區(qū)分
instance = test

#Atlas監(jiān)聽的工作接口IP和端口
proxy-address = 0.0.0.0:1234

#Atlas監(jiān)聽的管理接口IP和端口
admin-address = 0.0.0.0:2345

#連接池的最小空閑連接數(shù),應(yīng)設(shè)為event-threads的整數(shù)倍,可根據(jù)業(yè)務(wù)請求量大小適當(dāng)調(diào)大或調(diào)小
min-idle-connections = 8

#分表設(shè)置,此例中person為庫名,mt為表名,id為分表字段,3為子表數(shù)量,可設(shè)置多項,以逗號分隔,若不分表則不需要設(shè)置該項
#tables = person.mt.id.3

#用戶名與其對應(yīng)的加密過的MySQL密碼,密碼使用PREFIX/bin目錄下的加密程序encrypt加密,此設(shè)置項用于多個用戶名同時訪問同一個Atlas實例的情況,若只有一個用戶名則不需要設(shè)置該項
#設(shè)置剛剛經(jīng)過轉(zhuǎn)碼的密碼,其實我也不太了解官方寫的什么意思
**pwds** = root:DAJnl8cVzy8=

#默認字符集,若不設(shè)置該項,則默認字符集為latin1
**charset** = utf8

#允許連接Atlas的客戶端的IP,可以是精確IP,也可以是IP段,以逗號分隔,若不設(shè)置該項則允許所有IP連接,否則只允許列表中的IP連接
#client-ips = 127.0.0.1, 192.168.1

#Atlas前面掛接的LVS的物理網(wǎng)卡的IP(注意不是虛IP),若有LVS且設(shè)置了client-ips則此項必須設(shè)置,否則可以不設(shè)置
#lvs-ips = 192.168.1.1

OK,基本配置完成

六,Altas測試

代理服務(wù)器下輸入以下命令

/usr/local/mysql-proxy/bin/mysql-proxyd test start

再看看代理服務(wù)器能不能正常鏈接兩個服務(wù)器,在代理服務(wù)器上輸入這個命令

mysql -h192.168.1.1 -P2345 -uuser -ppwd
mysql > select \* from help;
mysql > select \* from backends; 

可以看到,配置基本完成,其實基本讀寫分離完成了也可以用了,只要把URL換成這個就行了,和平時鏈接沒區(qū)別,
jdbc:mysql://192.168.1.1:1234/test?characterEncoding=UTF-8,
并用主機的賬號密碼登錄,如果還是不放心,那就看下面這點吧

七,Altas讀寫分離測試

這里我就說步驟了。

打開apache-jmeter-3.1\bin\jmeter.bat

主從機上安裝sar命令,然后同時輸入sar命令來監(jiān)看這個動態(tài)過程

sudo apt-get install sysstat
sar -n DEV 1 10000

可以看到現(xiàn)在很平穩(wěn),那么我們回到Jmerter,執(zhí)行查詢語句,留意兩機的變化

可以看到,從機幾乎2比1主機,也就是說讀的話,從機占了絕大部分,而主機只需分擔(dān)一點點壓力就好了,和我們的分壓理論下一致了,那么我們再測一下寫又會是怎么樣

你會看到,怎么從機也會寫呢,因為主從復(fù)制,那么主機寫的時候,從機也在讀主機數(shù)據(jù),肯定也會運行?。繉Π?,我們這就達到了讀寫分離的狀態(tài),而且寫的明顯比讀的高,這就表明了讀寫已經(jīng)分離了,好了完成了!

參考鏈接推薦:

https://my.oschina.net/ydsakyclguozi/blog/402444
http://www.cnblogs.com/yyhh/archive/2015/12/29/5084844.html

我已經(jīng)嘗試了好多種中間件,好像mycat,可是我覺得mycat有點深度,如果不好好研究一時沒法用,而且我覺得太麻煩了,不能讀出大量數(shù)據(jù),有限制化,我的業(yè)務(wù)不能用這個中間件了。其他各有優(yōu)缺,以待分析。很多人會有這個問題,就是同步延遲,其實就好像分布式一樣,會有io傳輸這種問題,不管哪個中間件,也不太能很好解決這個問題,異步是無法避免,看您怎么看待了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,545評論 19 139
  • 《老男孩Linux運維》筆記MySQL-Documentation 概述 MySQL介紹 MySQL屬于傳統(tǒng)關(guān)系型...
    Zhang21閱讀 1,083評論 0 9
  • !/bin/sh 02 03 mysql-proxy This script starts and stops t...
    __XY__閱讀 870評論 0 15
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,792評論 11 349
  • 謝謝各位原創(chuàng)作者的奉獻, 因為有你, 技術(shù)更精彩~持續(xù)更新中~ 強波 (阿里云OS平臺部-Cloud Engine...
    菜刀文閱讀 801評論 1 1

友情鏈接更多精彩內(nèi)容