1. 程式人生 > >amoeba讀寫分離安裝詳細教程

amoeba讀寫分離安裝詳細教程

業務邏輯 tcpclient oracl buffer tco obj sys 監管 2.6

8.12.2 amoeba

8.12.2.1 amoeba安裝

? 安裝JDK

http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm

? 安裝amoeba

http://sourceforge.net/projects/amoeba/files/

https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz/download

tar -zxvf amoeba-mysql-binary-2.1.0-RC5.tar.gz -C /usr/local/amoeba

可使用命令[/usr/local/amoeba/bin/amoeba]驗證Amoeba是否安裝成功。

8.12.2.2 配置Mysql主從授權

設置讀寫分離的權限
禁止mysql.user表同步
主: grant select,insert,update,delete on . to r-amoeba@‘%‘ identified by ‘123456‘

從: grant select on . to w-amoeba@‘%‘ identified by ‘123456‘

mysql讀寫分離的授權方案

mysql庫不同步,再對主從進行授權
主: web_r 123456 10.204.1.100 3306 (select,insert,delete,update)

從: web_w 123456 10.204.1.101 3306 (select)
缺隱:從接替主的時候,沒有修改權限,替補方案是,做一臺從專門冷備,用來接替主
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema

mysql庫同步,在主上授權同步到從
主: web_r 123456 10.204.1.100 3306 (select,insert,delete,update)
如果防止從被寫入,設置配置文件參數read-only,
註意:read-only對root用戶不生效

生產環境如何確保從庫只讀

  1. mysql從服務器中加入read-only參數或者從服務器啟動時加該參數
  2. 忽略mysql庫及information_schema庫同步
  3. 授權從庫用戶僅授權select權限

8.12.2.3 amoeba配置

├── bin
│ ├── amoeba
├── conf
│ ├── amoeba.xml
├── dbServers.xml

vim amoeba.xml
配置ameoba訪問的用戶名和密碼 IP 端口提供給web連接

${clientConnectioneManager} 128 64 # amoeba本地的用戶名和密碼 root ${amoeba.home}/conf/access_list.conf 查詢路由設置 ${amoeba.home}/conf/rule.xml ${amoeba.home}/conf/ruleFunctionMap.xml ${amoeba.home}/conf/functionMap.xml 1500 # 設置默認的服務器(此處為master池) # 設定可寫節點,節點定義見dbServers.xml文件 masterPool masterPool #設置寫的庫 salvePool # 設置讀的庫 true 修改 vim dbServers.xml 定義抽象服務器,為每個後端MySQL服務器提供默認連接配置 ★ ${defaultManager} 64 128 test # 用戶密碼這一段只需要設置一次,下面子服務器共享上面的參數 500 500 10 600000 600000 true true # 以上多臺mysql時,可配置多個 定義後端MySQL的IP地址,一個master,一個slave 192.168.0.45 192.168.0.46 定義讀池和寫池 分別設置server列表,設置負載均衡方式 master-pool 定義池名和關聯服務器 # 設置負載均衡參數 1=輪詢 2=權重 3=Hash 1 server1 slave-pool 定義池名和關聯服務器 # 設置輪詢方式 1 server2 8.12.2.4 amoeba測試 重臺啟動 /usr/local/amoeba/bin/amoeba start & 連接測試 mysql -h127.0.0.1 -uroot -p -P8066 # amoeba默認監聽端口為8066 這裏連接的是ameoba的IP 8.12.2.5 Amoeba調優 20 30 30 500 60 ①readThreadPoolSize –用於處理客戶端連接發送過來的數據,跟數據庫服務器返回的數據的線程數 量這個可以根據客戶端連接數量來調整。 ②clientSideThreadPoolSize –在讀線程讀完客戶端的請求數據包以後,這個線程將會接手處理具體 的業務邏輯(比如:解析SQL、SQL 路由)。 ③serverSideThreadPoolSize –在server端讀取數據庫返回的數據包,合並多數據庫返回的數據,將數 據包發送到客戶端。 ④statementCacheSize –連接池緩存的Prepared Statement數量。 ⑤queryTimeout –語句執行超時時間設置。 12864true ① sendBufferSize – 屬性設置在SocketChannel.Write 方法的調用中期望發送的字節數。實際上, 此屬性的操作對象是為發送操作所分配的網絡緩沖區空間。網絡緩沖區應至少與應用程序緩沖 區同樣大小,這樣才能確保在一次操作中就能存儲和發送所需的數據。使用 SendBufferSize 屬 性設置此大小。如果應用程序要發送批量數據,需為 Write 方法提供足夠大的應用程序緩沖區。 如果網絡緩沖區小於提供給 Write 方法的數據量,則對 Write 方法的每次調用都將多次執行網 絡發送操作。通過確保網絡緩沖區至少與應用程序緩沖區同樣大小,可獲得更大的數據吞吐量。 ② receiveBufferSize–設置你希望在接收緩沖區中為每次讀操作存儲的字節數。實際上,此屬性的操作對象是為 接收傳入數據所分配的網絡緩沖區空間。網絡緩沖區應至少與應用程序緩沖區同樣大小,這樣才能確保在調用SocketChannel.Read 方法時所需的數據是可用的。使用 ReceiveBufferSize 屬性 設置此大小。如果應用程序將要接收批量數據,應為Read方法提供非常大的應用程序緩沖區。 如果網絡緩沖區小於在 Read 方法中所請求的數據量,你將無法在一次讀取操作中檢索到所需的 數據量。這將導致增加對 Read 方法的調用次數,進而增加系統開銷。 ③ tcpNoDelay–如果禁用延遲,則為 true;否則為 false。默認值為 true。 如果該參數設為 false,則直到 TcpClient 收集到相當數量的輸出數據之後,它才會通過網絡發 送數據包。由於 TCP 段中系統開銷的數量,發送少量數據時效率比較低。但是,也存在這樣情 況:你可能要發送極少量的數據或者期望立即從你發送的每個數據包得到響應。你應該在網絡效率與應用程序響應要求中取舍。 Table 5.1. JVM(Java Virtual Machine)內存參數設置 JVM選項 含義 -Xms 初始Heap大小 -Xmx Java Heap最大值 -Xmn Young Generation的Heap大小 -Xss 每個線程的Stack大小 8.12.2.6 amoeba報錯 ? The stack size specified is too small, Specify at least 228k Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 解決方法: vim bin/amoeba DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss128k" 改成256 ? Exception in thread "main" com.meidusa.amoeba.config.ConfigurationException: Initialisation bean=com.meidusa.amoeba.server.MultipleServerPool@6eec8b11 error 8.12.3 MySQL + MMM架構 8.12.3.1 mysql-mmm 概述 MMM即Master-Master Replication Manager for MySQL(mysql主主復制管理器)關於mysql主主復制配置的監控、故障轉移和管理的一套可伸縮的腳本套件(在任何時候只有一個節點可以被寫入),這個套件也能對居於標準的主從配置的任意數量的從服務器進行讀負載均衡,所以你可以用它來在一組居於復制的服務器啟動虛擬ip,除此之外,它還有實現數據備份、節點之間重新同步功能的腳本。 MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現服務器的故障轉移,從而實現mysql的高可用。MMM項目來自Google:http://code.google.com/p/mysql-master-master 官方網站為:http://mysql-mmm.org mysql-mmm主要功能由下面三個腳本提供 mmm_mond 負責所有的監控工作的監控守護進程,決定節點的移除等等 mmm_agentd 運行在mysql服務器上的代理守護進程,通過簡單遠程服務集提供給監控節點 mmm_control 通過命令行管理mmm_mond進程 mysql-mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,通過監管的管理,這些IP會綁定在可用mysql之上,當某一臺mysql宕機時,監管會將VIP遷移至其他mysql。 在整個監管過程中,需要在mysql中添加相關授權用戶,以便讓mysql可以支持監理機的維護。授權的用戶包括一個mmm_monitor用戶和一個mmm_agent用戶,如果想使用mmm的備份工具則還要添加一個mmm_tools用戶。

amoeba讀寫分離安裝詳細教程