標籤:restart mysq 去掉 virt 兩台 圖片 虛擬 log-bin cto
mysql5.5基於表鎖定 讀取和寫入互阻塞,為瞭解決這個問題便有了主從複製,讀寫分離的群集設定。
三次認證
1、主從同步認證
2、amoeba訪問資料庫認證
3、用戶端訪問amoeba認證
寫入和讀取:
用戶端寫入資料寫入到的是mysql主伺服器中
從伺服器同步主伺服器
讀取是讀取從伺服器上的內容
從而實現讀寫分離
本實驗使用mysql5.5
附mysql5.5源碼包以及安裝指令碼
連結:https://pan.baidu.com/s/1kA80VX67fXOBVChUt72__g 密碼:e42o
jdk檔案使用的是1.6
連結:https://pan.baidu.com/s/1E80A82_1YTxG2BU5745o0w 密碼:xe6g
amoeba
連結:https://pan.baidu.com/s/1S8OaSgYjj0aXcK5n5uoo3g 密碼:16gh
本實驗使用5台centos7
使用redhat6操作也相同
主伺服器地址:192.168.60.128
從伺服器1地址:192.168.60.136
從伺服器2地址:192.168.60.143
amoebaProxy 位址:192.168.60.144
用戶端地址:192.168.60.129
實驗需要我們每台虛擬機器都關掉防火牆,加強性組件
systemctl stop firewalld.service
setenforce 0
一、使用ntp協議,時間同步
1、主伺服器
rpm -q ntp //預設是安裝了
vim /etc/ntp.conf //修改ntp設定檔
在末行插入以下兩條語句
server 127.127.60.0 //自身60網段
fudge 127.127.60.0 stratum 8 //時間層級
systemctl start ntpd //啟動ntp服務
2、從伺服器(兩台配置相同)
rpm -q ntpdate //預設也是安裝了
systemctl start ntpd //啟動服務
/usr/sbin/ntpdate 192.168.60.128 //同步主伺服器,顯示以下則同步成功
二、配置mysql安裝mysql5.5(開頭有安裝包和指令碼,不在贅述)
1、主伺服器主設定檔
vim /etc/my.cnf
server-id = 11 //服務唯一標識
log-bin=master-bin //去掉注釋,開啟二進位日誌
log-slave-updates=true //允許從伺服器同步同步主伺服器
service mysql restart //重啟服務
2、主伺服器進mysql給從伺服器建立使用者授權
grant replication slave on . to ‘myslave‘@‘192.168.60.%‘ identified by ‘123123‘;
flush privileges 重新整理即時生效
show master status 查看主伺服器狀態
3、從伺服器設定檔設定(除server-id外,兩台從伺服器設定一樣)
vim /etc/my.cnf
server-id 22 //修改server-id
在server-id下添加如下兩行
relay-log=realy-log-bin
relay-log-index=slave-relay-bin.index
service mysqld restart
4、從伺服器進mysql進行操作(兩台從伺服器操作相同)
change master to master_host=‘192.168.60.128‘,master_user=‘myslave‘,master_password=‘123123‘,master_log_file=‘master-bin.000001‘,master_log_pos=338;
start slave; //開啟從複製
show slave status\G //查看slave狀態
5、主從複製測試
三、amoebaProxy 伺服器
systemctl stop firewalld.service //關閉防火牆及加強性組件
setenforce 0
1、掛載宿主機,複製JDK檔案
2、./jdk-6u14-linux-x64.bin
一直斷行符號就行了,有提示會告訴你填yes/no,填yes,開始安裝
3、添加環境變數
先將jdk的檔案改名,方便後面填寫環境變數
mv jdk1.6.0_14/ /usr/local/jdk1.6 //改名
vim /etc/profile //末行添加JDK環境變數,如下
export JAVA_HOME=/usr/local/jdk1.6export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/binexport AMOEBA_HOME=/usr/local/amoebaexport PATH=$PATH:$AMOEBA_HOME/bin
scource /etc/profile //重新整理環境變數
4、安裝amoeba
mkdir /usr/local/amoeba //建立amoeba解壓目錄
chmod 755 /usr.local/amoeba 必須要755許可權
tar zxf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ //解壓
/usr/local/amoeba/bin/amoeba //查看amoeba是否安裝成功
5、每台mysql伺服器都給amoeba建立許可權
grant all on . to ‘amoeba‘@‘192.168.60.%‘ identified by ‘123456‘;
建立了一個使用者給amoeba並且賦予許可權,amoeba將以這個身份登入mysql
6、修改amoeba.xml設定檔
vim /amoeba/conf/amoeba.xml
<property name="user">amoeba</property> 30行修改使用者為amoeba <property name="password">456789</property> 32行認證amoeba密碼為456789117行<property name="defaultPool">master</property> 改成master<!--刪掉 <property name="writePool">master</property> 改成master <property name="readPool">slaves</property> 改成slaves 刪掉 -->
7、修改dbServers.xml設定檔
26行<property name="user">test</property> 改成test
29行<property name="password">123456</property> 去掉注釋 改成認證mysql的密碼
42行<dbServer name="master" parent="abstractServer"> 改成master <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.60.128</property> ip改成master的ip<dbServer name="slave2" parent="abstractServer"> 第二台slave2 <factoryConfig> <!-- mysql ip --> <property name="ipAddress">192.168.60.143</property> </factoryConfig> </dbServer>末尾<dbServer name="slaves" virtual="true"> 池子名改為slaves<property name="poolNames">slave1,slave2</property> 池子中添加slave1,savel2
8、開啟amoeba服務
/usr/local/amoeba/bin/amoeba start& 開啟服務
netstat -anpt | grep java
四、用戶端驗證讀寫分離
1、關閉防火牆,安裝mysql並登陸
systemctl stop firewall
setenforce 0
yum install mysql -y
mysql -u amoeba -p456789-h 192.168.60.144 -P8066 遠程通過amoeba的ip登陸
2、主伺服器建立一張list表,從伺服器停止slave
建立的list表會被從伺服器同步,首先我們利用用戶端先寫入一些資訊到這張表中,到主伺服器中查看,如果內容在主伺服器顯示,說明寫入是針對主伺服器。
然後我們分別在從伺服器list表中寫入一些資訊,在用戶端查看,如果內容顯示的是從1,從2,伺服器的內容,說明讀功能針對從伺服器。
滿足以上兩條則實現讀寫分離。
3、用戶端list表插入資訊,主伺服器查看,證明寫入是寫在主伺服器上
4、從伺服器分別寫入資料,用戶端查看,顯示資料為從伺服器資料,則證明讀是讀從伺服器資料
主從同步,讀寫分離成功!
mysql配置主從複製,讀寫分離(附amoeba源碼包)