1. 程式人生 > >使用amoeba配置mysql主從同步讀寫分離

使用amoeba配置mysql主從同步讀寫分離

mysql主從同步 mysql讀寫分離 amoeba搭建

使用amoeba配置mysql主從同步讀寫分離

實驗環境:
需要三臺手工編譯安裝的mysql,一臺主,兩臺從
主: 192.168.88.100
從1: 192.168.88.103
從2: 192.168.88.104
前段服務器: 192.168.88.101

-----在主服務器192.168.88.100上做---------------配置NTP服務器---------- //在主服務器上搭ntp服務,提供時間同步

yum install -y ntp

vi /etc/ntp.conf

restrict 192.168.88.0 mask 255.255.255.0 nomodify notrap

server 127.127.1.0
fudge 127.127.1.0 stratum 8 //設置時間服務器的層級為8級,頂級是0

service ntpd start
service firewalld stop
setenforce 0

配置master主服務器的MYSQL:
vi /etc/my.cnf //在 [mysqld]下面配置

server_id = 11
log_bin=master_bin //這是記錄對master操作的二進制日誌文件
log_slave_updates=true //允許從服務器同步

service mysqld restart

mysql -u root -p

GRANT REPLICATION SLAVE ON . TO ‘myslave‘@‘192.168.88.%‘ IDENTIFIED BY ‘123456‘; //為所有從服務器授權所有數據庫

FLUSH PRIVILEGES;
show master status; //要記下 Position 列的值 (我的是603)和File的值

技術分享圖片![]

--------以下配置從服務器192.168.88.103和192.168.88.104的ntp服務和從mysql------------------

service firewalld stop
setenforce 0

yum install -y ntpdate

ntpdate 192.168.88.100

技術分享圖片![]
當出現offset時,說明同步成功。offset時偏移值

echo ‘/30 * /usr/sbin/ntpdate 192.168.88.100‘ >> /var/spool/cron/root //計劃任務,每隔30分鐘與主服務器同步一次
crontab -l

接著配置從服務器上的mysql:
vi /etc/my.cnf //[mysqld]下面
server_id = 22 //這裏註意id值不能和master的id相同,兩臺從mysql的id也不能相同
relay_log=relay-log-bin
relay_log_index=slave-relay-bin.index

service mysqld restart
-------註意master_logpos= 的值,要在主上使用show master status;查看一下,註意 -和 ----

mysql -u root
change master to master_host=‘192.168.88.100‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master_bin.000001‘,master_log_pos=900; //跟蹤主mysql服務器的二進制文件
start slave;
show slave status \G //以下兩個選項需要是Yes

……
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
……

技術分享圖片

接著驗證主從同步:
------在主服務器上新建庫並驗證同步------------
mysql -u root -p

create database hello;
show databases; //主服務器創建好數據庫,在從服務器上查看,從服務器上也會時時同步

----------------------------------配置mysql讀寫分離---------

-----在前端服務器上(192.168.88.101)配置------------

service firewalld stop
setenforce 0

yum install -y ntpdate
ntpdate 192.168.88.100

echo ‘/30 * /usr/sbin/ntpdate 192.168.88.100‘ >> /var/spool/cron/root
crontab -l
-----------安裝JDK------- //amoeba是基於java開發的,所以安裝需要java環境

tar xf jdk-8u144-linux-x64.tar.gz
cp -rv jdk1.8.0_144/ /usr/local/java

vi /etc/profile //設置環境變量

export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile

#java -version

java version "1.8.0_144" //以上出現,java環境搭建成功
……
……

--------------安裝amoeba------https://sourceforge.net/projects/amoeba/files/--

unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /usr/local/
mv /usr/local/amoeba-mysql-3.0.5-RC/ /usr/local/amoeba
chmod -R 755 /usr/local/amoeba/

vi /usr/local/amoeba/jvm.properties

JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss196k -XX:PermSize=16m -XX:MaxPermSize=96m" //修改32行,為以下參數
JVM_OPTIONS="-server -Xms1024m -Xmx1024m -Xss256k"

------制作amoeba管理腳本-------
vi /etc/init.d/amoeba

#!/bin/bash
#chkconfig: 35 62 62
#
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
NAME=Amoeba
AMOEBA_BIN=/usr/local/amoeba/bin/launcher
SHUTDOWN_BIN=/usr/local/amoeba/bin/shutdown
PIDFILE=/usr/local/amoeba/Amoeba-MySQL.pid
SCRIPTNAME=/etc/init.d/amoeba

case "$1" in
start)
echo -n "Starting $NAME... "
$AMOEBA_BIN
echo " done"
;;
stop)
echo -n "Stoping $NAME... "
$SHUTDOWN_BIN
echo " done"
;;
restart)
$SHUTDOWN_BIN
sleep 1
$AMOEBA_BIN
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}"
exit 1
;;
esac

chmod +x /etc/init.d/amoeba
chkconfig --add amoeba

service amoeba start
netstat -anpt | grep 8066 //默認監聽在8066端口

----------------分別在三臺mysql數據庫中為amoeba授權-------

GRANT ALL ON . TO test@‘192.168.88.%‘ IDENTIFIED BY ‘123.com‘;

FLUSH PRIVILEGES;

--------在前端服務器上----

cd /usr/local/amoeba

vi conf/amoeba.xml
---28行-----設置客戶端連接amoeba前端服務器時使用的用戶名和密碼----
<property name="user">amoeba</property>
----30行---------
<property name="password">123456</property>
------------------------------------以上配置用於客戶端連接用戶名密碼-------------

---83-去掉註釋-同時把默認的server1改成master,把默認的servers改成 slaves
<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">slaves</property>

vi conf/dbServers.xml

--26-29--去掉註釋--
<property name="user">test</property>

<property name="password">123.com</property>

------主服務器地址---
43 <dbServer name="master" parent="abstractServer">
46 <property name="ipAddress">192.168.80.181</property>

--50-從服務器主機名-
<dbServer name="slave1" parent="abstractServer">
--53-從服務器地址-
<property name="ipAddress">192.168.80.182</property>

----復制相關代碼---
<dbServer name="slave1" parent="abstractServer">
<factoryConfig>

192.168.88.103 192.168.88.104 ---以下兩行修改---- --末尾-- slave1,slave2 -----------------------註意---------------------- test //數據庫中要有此處定義的數據庫,否則客戶端連接後會報如下錯誤: ERROR 1044 (42000): Could not create a validated object, cause: ValidateObject failed --------------------------------------- service amoeba restart netstat -anpt | grep java ![](http://i2.51cto.com/images/blog/201804/23/acb8f13aa85e173dbae8199c60f91af8.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)![] amoeba啟動成功 ------------------------測試用客戶端------ //可以在主mysql上做 service firewalld stop setenforce 0 yum install -y mysql mysql -u amoeba -p123456 -h 192.168.88.101 -P8066 //amoeba地址 ![](http://i2.51cto.com/images/blog/201804/23/53afe67ac2b72e876ef893b21d336112.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) 連接amoeba成功 ----在MASTER上新建的數據庫或者裏面的表,兩臺從服務器會同步--通過amoeba操作的--------- mysql -u amoeba -p123456 -h 192.168.88.101 -P8066 use test; create table zhang (id int(10),name varchar(10),address varchar(20)); show tables; //三臺數據庫服務器上查看會是相同結果 ---在兩臺從上停止從服務後----- stop slave; ----在主服務器上插入的內容不會同步-通過amoeba操作的-- insert into zhang values(‘1‘,‘hahahha‘,‘this_is_master‘); ----此時在從服務器1上新建內容----直接在從上操作 use test; insert into zhang values(‘2‘,‘zhang‘,‘this_is_slave1‘); ----從服務器2上新建內容---- use test; insert into zhang values(‘3‘,‘zhang‘,‘this_is_slave2‘); ------在客戶端amoeba上測試----第一次會向從服務器1讀數據-第二次會各從2讀取 select * from zhang; ![](http://i2.51cto.com/images/blog/201804/23/87ea190c8592f9fdaa44f56101142a12.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=) -------------在通過客戶端連接數據庫後寫入的數據只有主會記錄,然後同步給從-從服務器不會記錄,從而實現了讀寫分離。---- insert into zhang values(‘4‘,‘zhang‘,‘write_test‘); -----在客戶端amoeba上看不到新插入的數據--因為同步沒有開啟-----只有主服務器上可以看到數據。 select * from zhang; -----在客戶端開啟同步後,主服務器上數據會同步到各從服務器中,但是從服務器上自己增加的數據不會同步,只有本地保存--- select * from zhang; //在客戶端查看會看到主上同步過來的數據,以及自己本地增加的數據,但是看不到其它從上自己增加

使用amoeba配置mysql主從同步讀寫分離