Amoeba 實現MySQL讀寫分離

Amoeba是一個以MySQL爲底層數據存儲,並對應用提供MySQL協議接口的proxy,它集中地響應應用的請求,依據用戶事先設置的規則,將SQL請求發送到特定的數據庫上執行.基於此能夠實現負載均衡、讀寫分離、高可用性等需求,與MySQL官方的MySQL Proxy相比,做者強調的是amoeba配置的方便.java

<escape><!-- more --></escape>mysql

MySQL主從配置

1.主從服務器須要配置好主從關係,主從服務器都須要安裝MySQL.linux

[root@localhost ~]# yum install -y mysql mysql-server

2.啓動MySQL服務,並設置初始化密碼(主從都要重啓).sql

[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# mysqladmin -uroot password 123

3.修改主配置文件/etc/my.cnf並再次重啓MySQL(主從都要修改).數據庫

[root@localhost ~]# vim /etc/my.cnf

log-bin=mysql-bin									#開啓二進制日誌文件
server-id=148										#聲明本臺MySQL服務器ID號

4.登錄主數據庫,建立用於從服務器登錄的用戶(主服務器).vim

[root@localhost ~]# mysql -uroot –p
mysql> grant replication slave on *.* to '用戶名'@'%' identified by '密碼'; #建立從服務器用戶
mysql> show master status;                                                 #查看二進制文件名

5.登錄從數據庫,確認從主服務器同步數據(從服務器).bash

[root@localhost ~]# mysql -uroot –p
mysql> change master to master_host='主服務器IP',master_user='用戶',master_password='密碼',master_log_file='二進制文名',master_log_pos=文件空間大小;	 
mysql> start slave;                #啓動同步功能
mysql> show slave status\G;        #查看同步狀態

注意:
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes      #只用在兩個選項都爲YES才證實開啓

<br> ## 安裝Java環境+Amoeba服務器

1.本臺服務器也應安裝MySQL用於登陸測試,不須要啓動.app

[root@localhost ~]# yum install -y mysql mysql-server

2.解壓相應軟件並更名.負載均衡

[root@localhost ~]# tar -xzvf jdk-7u40-linux-x64.gz -C /usr/local/   #解壓到jdk目錄
[root@localhost ~]# mv /usr/local/jdk1.7.0_40/  /usr/local/jdk       #重命名JDK目錄

3.配置JAVA環境變量,寫入/etc/profile文件中,使其開機生效.

[root@localhost ~]# vim /etc/profile                      #設置開機自加載

#--------------------------------------------------------------------
#Java-SE-JDK
JAVA_HOME=/usr/local/jdk
export  JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
export CLASSPATH
#--------------------------------------------------------------------
[root@localhost ~]# source /etc/profile                     #刷新配置文件
[root@localhost ~]# java -version                           #測試java是否可用

4.進入主從MySQL分別建立Amoeba使用的帳號(主從服務器都要建立).

[root@localhost ~]# grant all privileges on *.* to 'master'@'%' identified by '123';  #建立主服務器登錄帳號
[root@localhost ~]# grant all privileges on *.* to 'slave1'@'%' identified by '123';  #建立從服務器登錄帳號

5.安裝Amoeba並設置權限.

[root@localhost ~]# unzip amoeba-mysql-1.3.1-BETA.zip -d /usr/local/amoeba     #解壓Amoeba
[root@localhost ~]# chmod  -R a+x  /usr/local/amoeba/bin/                      #賦予可執行權限

6.編輯主配置文件,配置Amoeba.

[root@localhost ~]# vim /usr/local/amoeba/conf/amoeba.xml

<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE amoeba:configuration SYSTEM "amoeba.dtd">
<amoeba:configuration xmlns:amoeba="http://amoeba.meidusa.com/">
<server>
		<property name="port">8066</property>					#指定Amoeba端口
		<property name="ipAddress">192.168.22.147</property>		#指定(Amoeba)本機IP
		<property name="readThreadPoolSize">20</property>
		<property name="clientSideThreadPoolSize">30</property>
		<property name="serverSideThreadPoolSize">30</property>
		<property name="netBufferSize">128</property>
		<property name="tcpNoDelay">true</property>
		<property name="user">root</property>					#指定Amoeba登錄帳號
		<property name="password">123</property>				#指定Amoea登錄密碼
		<property name="queryTimeout">60</property>
</server>
<connectionManagerList>
<connectionManager name="defaultManager" class="com.meidusa.amoeba.net.MultiConnectionManagerWrapper">
<property name="subManagerClassName">com.meidusa.amoeba.net.AuthingableConnectionManager</property>
</connectionManager>
</connectionManagerList>
	
<dbServerList>
#**********************************如下是主機區域******************************************
		<dbServer name="server1">								#指定第1個server區域
			<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
				<property name="manager">defaultManager</property>
				<property name="port">3306</property>				#指定主機1端口
				<property name="ipAddress">192.168.22.148</property>	#指定主機1 IP
				<property name="schema">test</property>			#同步的數據庫
				<property name="user">zhu1</property>				#同步帳號
				<property name="password">123</property>			#同步密碼
			</factoryConfig>
			<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
				<property name="maxActive">200</property>
				<property name="maxIdle">200</property>
				<property name="minIdle">10</property>
				<property name="minEvictableIdleTimeMillis">600000</property>
				<property name="timeBetweenEvictionRunsMillis">600000</property>
				<property name="testOnBorrow">true</property>
				<property name="testWhileIdle">true</property>
			</poolConfig>
		</dbServer>

		<dbServer name="server2">								#指定第2個server區域
			<factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
				<property name="manager">defaultManager</property>
				<property name="port">3306</property>				#指定主機2端口
				<property name="ipAddress">192.168.22.149</property>	#指定主機2IP
				<property name="schema">test</property>			#同步的數據庫
				<property name="user">cong1</property>			#同步帳號
				<property name="password">123</property>			#同步密碼
			</factoryConfig>
			<poolConfig class="com.meidusa.amoeba.net.poolable.PoolableObjectPool">
				<property name="maxActive">200</property>
				<property name="maxIdle">200</property>
				<property name="minIdle">10</property>
				<property name="minEvictableIdleTimeMillis">600000</property>
				<property name="timeBetweenEvictionRunsMillis">600000</property>
				<property name="testOnBorrow">true</property>
				<property name="testWhileIdle">true</property>
			</poolConfig>
		</dbServer>
#*****************************************************************************************
#*******************************如下是主機命名區域****************************************
<dbServer name="master" virtual="true">									#主機命名區域1
			<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
				<property name="loadbalance">1</property>
				<property name="poolNames">server1</property>			#主機1區域名
			</poolConfig>
</dbServer>
<dbServer name="slave" virtual="true">									#主機命名區域2
			<poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
				<property name="loadbalance">1</property>
				<property name="poolNames">server2</property>			#主機2區域名
			</poolConfig>
		</dbServer>
		
</dbServerList>
#*****************************************************************************************
#**********************************如下是讀寫池區域***************************************
<queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
		<property name="ruleConfig">${amoeba.home}/conf/rule.xml</property>
		<property name="functionConfig">${amoeba.home}/conf/functionMap.xml</property>
		<property name="ruleFunctionConfig">${amoeba.home}/conf/ruleFunctionMap.xml</property>
		<property name="LRUMapSize">1500</property>
		<property name="defaultPool">master</property>					#指定默認區域
		
		<property name="writePool">master</property>					#指定寫池
		<property name="readPool">slave</property>						#指定讀池	
		<property name="needParse">true</property>
	</queryRouter>
</amoeba:configuration>
#*****************************************************************************************

7.打開amoeba配置文件.

[root@localhost ~]# vim /usr/local/amoeba/bin/amoeba

修改如下內容↓
DEFAULT_OPTS="-server -Xms256m -Xmx256m -Xss256k

8.啓動amoeba

[root@localhost ~]# nohup bash -x /usr/local/amoeba/bin/amoeba  &

9登錄數據庫測試.

[root@localhost ~]# mysql -uroot -p -h 192.168.22.147 -P 8066

<br>

相關文章
相關標籤/搜索