標籤:mysql伺服器叢集技術
假如一個業務情境,測試後,讀寫比列為1:20,根據讀寫比例,合理設定最佳化方案。
讀寫比列:
寫資料/讀資料比例, insert/update/delete / select
從“讀寫分離”概念推導實現基本要素:
一般來說,讀伺服器就是指寫伺服器的資料鏡像。
從伺服器端看:要有N台從伺服器和主伺服器保持資料一致。
從用戶端看:比如有一條insert語句和一條select語句,
則要區分讀/寫語句,並且分別請求從/主伺服器。
伺服器端讀寫分離的具體技術
1:資料庫叢集技術
叢集由3個概念
(1)sql節點 sql node
(2)資料節點 data node
(3)管理節點 ndb managerment
sql語句發送“1sql節點”,“1sql”節點發往“2資料節點”,再由3管理節點完成資料節點之間的同步。
叢集技術相對複雜,至少有3種節點,4台伺服器才能完成。
2,資料庫複寫
寫/master(0) 同步 讀/slave(1)
3,資料庫複寫replication的實現原理
(1)主伺服器凡運行語句,都產生一個二進位日誌 binlog
(2)從伺服器不斷讀取主伺服器的binlog
(3)從伺服器讀取到的binlog,轉換為自身可執行檔relaylog
(4)執行relaylog
4,實現步驟:
(1)首先確保主伺服器開啟二進位日誌功能
這樣,主伺服器一旦有資料變化,立即產生二進位日誌
(2)從伺服器也需要開啟二進位日誌和relay日誌功能
這樣可以從主伺服器讀取binlog,併產生relaylog
(3)在主伺服器建立一個從伺服器的帳號,並授予最高許可權
(4)指定從伺服器對應的主伺服器,開啟從伺服器
具體實施
假如一台虛擬機器xp,和一台linux
(1)在虛擬機器xp下安裝mysql作為從伺服器
(2)在linux下編譯mysql,作為主伺服器
(3)保證xp與linux的3306連接埠互連
(4)配置主伺服器,開啟binlog
mysql>show master status;
Empty set (0.00 sec)
#開啟二進位日誌
log-bin=mysql-bin
#給伺服器起一個唯一的id
serve-id=1
#指定日誌格式
binlog-format=mixd/row/statement
重啟mysql
mysql>show master status;
會多兩個檔案:mysql-bin.000001和mysql-bin.index
已經能夠充當master伺服器
5,配置從伺服器開啟binlog和relaylog
mysql>show slave status;
Empty set (0.00 sec)
[mysql]
#slave config
log_bin =mysql-bin
server_id =2
relay_log =mysql-relay-bin
log_slave_updates =1
read_only =1
重啟從伺服器
6,在主伺服器上建立相應的複製帳號
mysql>grant replication slave,replication client
->on *.*
->to [email protected]‘192.168.2.%‘ identified by ‘111111‘;
Query OK, 0 rows affected (0.02 sec)
mysql>flush privileges;
Query OK,0 rows affected (0.00 sec)
7,在從伺服器通過語句指定要複製的主伺服器(注意,可以一主多從,不可以一從多主)
mysql>change master to
->master_host=‘192.168.2.99‘,(主伺服器ip)
->master_user=‘repl‘,
->master_password=‘111111‘,
->master_log_file=‘mysql-bin.000001‘,
->master_log_pos=0;
Query OK, 0 rows affected (0.08 sec)
8,啟動從伺服器功能
->start slave;
9,測試
如何在用戶端應用的時候,路由語句
一般用兩種方法
(1)直接在PHP的mysql類做判斷,最簡單,不用額外加軟體
比如discuz論壇。
代碼:
//下面這個mysql類,不僅僅是一個mysql類,還充當一個sql語句的路由功能。
class mysql{
$dbm=主伺服器;
$dbs1=從伺服器1;
$dbs2=從伺服器2;
public function query(){
在query裡面進行語句判斷
分別串連不同的mysql伺服器
}
}
new mysql
mysql->query();
(2)用叢集中介軟體
比如官方的mysql_proxy,還有國產的中介軟體amoeba