mysql雙擊熱備+amoeba讀寫分離

Mysql讀寫分離是爲了提升網站的訪問速度,提升數據庫的併發負載能力。php


但在實際的生產環境中,由單臺Mysql做爲獨立的數據庫是徹底不能知足實際需求的,不管是在安全性,高可用性以及高併發等各個方面。java


所以,通常來講都是經過 主從複製(Master-Slave)的方式來同步數據,再經過讀寫分離來提高數據庫的併發負載能力, 這樣的方案來進行部署與實施的。mysql


注意:先作主從複製,再度讀寫分離。linux


MySQL主從複製結構是基於mysql bin-log日誌基礎上,從庫經過打開IO進程收到主庫的bin-log日誌增量信息,並保存到本地relay log,然後再經過打開MYSQL進程從relay log上獲取的增量信息並翻譯成SQL語句後寫到從數據庫。sql


實驗環境:數據庫


主:10.8.0.150c#


從:10.8.0.151後端


amoeba:10.8.0.160安全


PS:爲了方便實驗,可直接yum mysql 或者直接腳本執行lnmp。服務器


拓撲圖以下:


232123111.jpg


實驗第一步:


登錄主服務器操做命令


mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'cong151'@'10.8.0.151' IDENTIFIED BY "123456";


mysql> show master status;


+------------------+----------+--------------+------------------+


| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |


+------------------+----------+--------------+------------------+


| mysql-bin.000008 | 5722410 | | |


+------------------+----------+--------------+------------------+


記住file和Position。


登錄從服務器操做命令


一、編輯my.ini 文件 ,修改 server-id = 2 (默認爲1,因作mysql的主從複製,須要修改ID和主服務器上不同便可,也不可和同內網mysql服務器其餘的ID同樣)


二、登入mysql


mysql> change master to master_host='10.8.0.150',master_user='cong151',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=5722410;


mysql> start slave;


mysql> show slave status\G


*************************** 1. row ***************************


Slave_IO_State: Waiting for master to send event


Master_Host: 10.8.0.150


Master_User: cong151


Master_Port: 3306


Connect_Retry: 60


Master_Log_File: mysql-bin.000008


Read_Master_Log_Pos: 5722410


Relay_Log_File: localhost-relay-bin.000061


Relay_Log_Pos: 251


Relay_Master_Log_File: mysql-bin.000008


Slave_IO_Running: Yes


Slave_SQL_Running: Yes


Replicate_Do_DB:


Replicate_Ignore_DB:


Replicate_Do_Table:


Replicate_Ignore_Table:


Replicate_Wild_Do_Table:


Replicate_Wild_Ignore_Table:


Last_Errno: 0


Last_Error:


Skip_Counter: 0


Exec_Master_Log_Pos: 5722410


Relay_Log_Space: 3466785


Until_Condition: None


Until_Log_File:


Until_Log_Pos: 0


Master_SSL_Allowed: No


Master_SSL_CA_File:


Master_SSL_CA_Path:


Master_SSL_Cert:


Master_SSL_Cipher:


Master_SSL_Key:


Seconds_Behind_Master: 0


Master_SSL_Verify_Server_Cert: No


Last_IO_Errno: 0


Last_IO_Error:


Last_SQL_Errno: 0


Last_SQL_Error:


這樣說明從服務器複製主服務器的數據是正常的了,且能夠指定複製的庫,能夠在my.ini裏面修改便可。


爲了作主從複製,即從複製主且主複製從。


繼續在從服務器上操做。


mysql> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'zhu150'@'10.8.0.150' IDENTIFIED BY "123456";


mysql> show master status;


+------------------+----------+--------------+------------------+


| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |


+------------------+----------+--------------+------------------+


| mysql-bin.000006 | 786 | | |


+------------------+----------+--------------+------------------+


登錄主服務器


mysql> change master to master_host='10.8.0.151',master_user='zhu150',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=786;


mysql> start slave;


mysql> show slave status\G


*************************** 1. row ***************************


Slave_IO_State: Waiting for master to send event


Master_Host: 10.8.0.151


Master_User: zhu150


Master_Port: 3306


Connect_Retry: 60


Master_Log_File: mysql-bin.000006


Read_Master_Log_Pos: 786


Relay_Log_File: localhost-relay-bin.000003


Relay_Log_Pos: 251


Relay_Master_Log_File: mysql-bin.000006


Slave_IO_Running: Yes


Slave_SQL_Running: Yes


Replicate_Do_DB:


Replicate_Ignore_DB:


Replicate_Do_Table:


Replicate_Ignore_Table:


Replicate_Wild_Do_Table:


Replicate_Wild_Ignore_Table:


Last_Errno: 0


Last_Error:


Skip_Counter: 0


Exec_Master_Log_Pos: 786


Relay_Log_Space: 935


Until_Condition: None


Until_Log_File:


Until_Log_Pos: 0


Master_SSL_Allowed: No


Master_SSL_CA_File:


Master_SSL_CA_Path:


Master_SSL_Cert:


Master_SSL_Cipher:


Master_SSL_Key:


Seconds_Behind_Master: 0


Master_SSL_Verify_Server_Cert: No


Last_IO_Errno: 0


Last_IO_Error:


Last_SQL_Errno: 0


Last_SQL_Error:


這樣,mysql的主從複製實驗OK。


Amoeba的安裝:


安裝Amoeba前要先安裝JDK,由於Amoeba是用java開發的所要有JDK支持。


下載jdk-6u15-linux-i586.bin (sh jdk-6u15-linux-i586.bin 執行程序)


編輯/etc/profile 添加以下代碼


export JAVA_HOME=/usr/local/jdk1.6.0_15


export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar


export PATH=$PATH:$JAVA_HOME/bin


[root@localhost ~]# source /etc/profile


[root@localhost ~]# java -version


java version "1.6.0_15"


Java(TM) SE Runtime Environment (build 1.6.0_15-b03)


Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)


下載amoeba-mysql-binary-2.0.1-BETA.tar.gz


[root@localhost ~]# mkdir /usr/local/amoeba && cd /usr/local/amoeba/ && tar /root/amoeba-mysql-binary-2.0.1-BETA.tar.gz


那麼剩下來的就是如何配置amoeba(配置文件在conf目錄下,主要是dbServers.xml和amoeba.xml兩個文件)


先編輯dbServers.xml 文件


235709615.jpg


注意此時的用戶名和密碼,爲後端數據庫的用戶名和密碼,須要在兩臺數據庫服務器上開啓遠程,遠程的用戶名和密碼本身設置,我是爲了方便。


000021663.jpg


添加兩個節點,分別是master和slave,同時修改下一個虛擬組,將master和slave加入進去。後面會須要的。


在編輯amoeba.xml 文件


000319218.jpg


建議修改下IP爲AMOEBA的代理服務器的IP,不建議寫127.0.0.1 或者localhost。


下面的用戶名和密碼,是對外提供的數據庫用戶名和密碼,也就是AMOEBA登錄的用戶名和密碼,不須要在主從服務器上添加這個用戶名和密碼的,我這樣設置也是爲了方便。


000321280.jpg


默認的組是master,說明利用amoeba登錄後,實際上是登錄到主服務器上的。


寫入組是master,說明數據寫入在主服務器上。


讀取組是咱們以前設置的虛擬組(包括master和slave,帶來的效果是,查詢兩次,分別是在主上面查詢一次和從上面查詢一次)


以上,amoeba的服務器配置OK,剩下的是檢查配置,


直接利用 /usr/local/amoeba/bin/amoeba start 來檢查,若是出現問題,請當即解決。


001135717.jpg


若是沒發現問題,相似如此日誌,請ctrl+c 關閉進程。同時利用 /usr/local/amoeba/bin/amoeba start & 啓動並將程序放入後臺。


001138320.jpg


最後剩下的就是測試。


先須要測試經過amoeba鏈接服務器,


案例命令:mysql -uroot -pu2ktgshc#@dq -h10.8.0.160 -P8066


001430214.jpg


第二,直接操做數據庫,新建庫,新建表,表裏寫入數據,查看數據是否正常。主要是測試mysql的主從同步效果如何。


最後,關閉主從相互同步,命令:stop slave; 兩個後端的服務器都須要操做,這樣主從複製被中止,再次插入數據,查看兩次,看下對比便可。


若是發現了變化,那麼您的實驗OK了,沒發現效果,請檢查amoeba的兩個配置文件。


注意一點:<--! --> 這個表示註釋,以前我我的作實驗也是由於這個問題致使第一次沒成功。


望各位好運。


若有成功者,且切實弄到測試環境中(搭建網站測試),請告知如何php調用amoeba,我的沒搞定。爲感!

相關文章
相關標籤/搜索