主機 | 操作系統 | IP地址 | 主要軟件 |
---|---|---|---|
master | centos7.3x64 | 192.168.200.132 | mysql 5.5.24 |
slave1 | centos7.3x64 | 192.168.200.130 | mysql 5.5.24 |
slave2 | centos7.3x64 | 192.168.200.128 | mysql 5.5.24 |
Amoeba | centos7.3x64 | 192.168.200.133 | amoeba,jdk |
客戶端 | centos7.3x64 | 192.168.200.129 | mysql 5.5.24 |
前言:
- MySQL支持的複製類型
- 基於語句複製。在從服務器上執行同樣的語句。MySQL默認採用。
- 基於行的複製。把改變的內容複製過去,而不是在服務器在執行一便。
- 混合類型複製。默認採用基於語句複製,一旦發現基於語句無法精準的複製就會採用基於行的複製
讀寫分離:
- 簡單來說,讀寫分離,就是在主服務器上寫,只在從服務器上讀。基本原理是讓主數據庫處理事務性查詢,而從數據庫處理select查詢。數據一塊複製被用來把事物性查詢導致的改變同步到就集羣中的從數據庫
Amoeba是什麼
Amoeba(變形蟲)項目,該開源框架於2008年 開始發佈一款 Amoeba for Mysql軟件。這個軟件致力於MySQL的分佈式數據庫前端代理層,它主要在應用層訪問MySQL的時候充當SQL路由功能,專注於分佈式數據庫代理層(Database Proxy)開發,它位於與Client、DBServer(s)之間,對客戶端透明。具有 負載均衡、高可用性、SQL過濾、讀寫分離、可路由相關的到目標數據庫、可併發請求多臺數據庫合併結果。
實驗開始唯一的共同點都要關閉防火牆在最開始的時候就關閉別導致什麼都配置好了就因爲防火沒關而導致報錯
systemctl stop firewalld.service
setenforce 0
主服務MySQL配置同步時間
yum install ntp -y // 時間同步 在centos7.3 中默認是安裝好的(不是最小化安裝)
vim /etc/ntp.conf //修改其主配置文件 因爲我的網段全是200 段的
server 127.127.200.0 //本地是時鐘源//
fudge 127.127.200.0 stratum 8 //設置時間層級爲8(限制在15內)//
啓動服務
systemctl start ntpdate.service
從服務器同樣操作可以兩臺同時進行
systemctl start ntpd.service //開啓服務
/usr/sbin/ntpdate 192.168.200.132 //同步主服務器的時間
當提示the NTP socket is in use, exiting //說明同步好了可以使用
Master、Slave1、Slave2 分別安裝mysql數據庫安裝MySQL5.5.24 若條件允許則可三臺同時運行
yum install gcc gcc-c++ make cmake ncurses-devel bisonlibaio-devel -y //安裝所需要的環境
tar zxvf mysql-5.5.24.tar.gz -C /opt/ //.mysql軟件包解壓至/opt目錄下
useradd -s /sbin/nologin mysql //創建管理用戶
mkdir /usr/local/mysql //創建存放目錄
轉到MySQL解壓後目錄
#配置mysql
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1
-DWITH_READLINE=1
-DENABLED_LOCAL_INFILE=1
-DMYSQL_DATADIR=/home/mysql
-DMYSQL_USER=mysql
-DMYSQL_TCP_PORT=3306
make & make install //執行安裝
chown -R mysql.mysql /usr/local/mysql //修改MySQL目錄屬主屬組
export PATH=$PATH:/usr/local/mysql/bin/ //刷新環境變量
cp support-files/my-medium.cnf /etc/my.cnf //複製mysql默認配置文件及啓動腳本
cp support-files/mysql.server /etc/init.d/mysqld //複製mysql默認配置文件及啓動腳本
/usr/local/mysql/scripts/mysql_install_db \ /切換到MySQL解壓目錄//初始化數據庫
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock /*直接建立軟連接*/
vim /etc/init.d/mysqld //mysqld中的mysql安裝路徑及數據目錄路徑
basedir=/usr/local/mysql
datadir=/home/mysql
service mysqld start
mysqladmin -u root password 'abc123' //設置MySQL登陸密碼
mysq -u root -p //就可以登陸
開始配置主從MySQL
主MySQL 主配置文件
vim /etc/my.cnf
server-id = 11 //主個從的區別總得有一個做老大吧
log-bin=master-bin //主服務器日誌文件//
log-slave-updates=true //從服務器更新二進制日誌//
service mysqld restart
從MySQL 主配文件 兩個從MySQL一樣的配置
vim /etc/my.cnf 注意這是在從服務器上配置
server-id = 22 //id這個兩個從的服務器都一樣
relay-log=relay-log-bin //從主服務器上同步日誌文件記錄到本地//
relay-log-index=slave-relay-bin.index //定義relay-log的位置和名稱//
到此主從同步讀寫分離配置文件就到此接數
爲Slaves從服務器同步創建用戶
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.200.%' IDENTIFIED BY '123456';
給與從服務器權限 對方的名字爲myslave 訪問的網段200端 密碼 123456
FLUSH PRIVILEGES; //立即生效
show master status; //查看狀態
以上就是主服務器的同步配置
下面是從服務器同步配置當然實在MySQL模式下
change master to master_host='192.168.200.132',master_user='myslave',master_password='123456',master_log_file='master-bin.000004',master_log_pos=339; //添加向主服務器同步數據命令
start slave; //開啓slave從服務器
show slave status\G; //查看狀態
驗證主從同步
在主MySQL上面添加新表 看看兩個從服務是否能同步
開始配置amoeba服務器也叫變形蟲
複製jdk包及安裝
cp jdk-6u14-linux-x64.bin /usr/local/
cd /usr/local/ //別忘切換目錄····
./jdk-6u14-linux-x64.bin # yes 按enter
修改jdk目錄名稱
mv jdk1.6.0_14/ /usr/local/jdk1.6
添加jdk、jre、amoeba環境變量
vim /etc/profile //末尾添加
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin
source /etc/profile //刷新環境變
mkdir /usr/local/amoeba // 創建amoeba目錄
tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ //解壓amoeba軟件包至/usr/local/amoeba目錄下
chmod -R 755 /usr/local/amoeba/ //修改amoebab目錄權限
/usr/local/amoeba/bin/amoeba //驗證amoeba是否安裝成功
顯示amoeba start|stop說明安裝成功
+--------在三臺mysql上添加權限開放給amoeba訪問-----------------------+
|grant all on *.* to test@'192.168.200.%' identified by '123.com'; |
+------------------------------------------------------------------+
vim conf/amoeba.xml //配置文件
---30行--
<property name="user">amoeba</property> #訪問amoeba的用戶名
----32行---------
<property name="password">123456</property> #密碼
---117-去掉註釋-
<property name="defaultPool">master</property> #默認爲主服務器
<property name="writePool">master</property> #寫入爲主服務器
<property name="readPool">slaves</property> #讀取爲slaves池,現有slave1、slave2服務器
修改dbServers.xml配置文件還是在變形蟲上做動作
vim conf/dbServers.xml
3 <dbServer name="master" parent="abstractServer"> #name爲master
44 <factoryConfig>
45 <!-- mysql ip -->
46 <property name="ipAddress">192.168.200.132</property> #主服務器IP地址
47 </factoryConfig>
48 </dbServer>
49
50 <dbServer name="slave1" parent="abstractServer"> #name爲slave1
51 <factoryConfig>
52 <!-- mysql ip -->
53 <property name="ipAddress">192.168.200.128</property> #從服務器1 IP地址
54 </factoryConfig>
55 </dbServer>
56
57 <dbServer name="slave2" parent="abstractServer"> #name爲slave2
58 <factoryConfig>
59 <!-- mysql ip -->
60 <property name="ipAddress">192.168.200.130</property> #從服務器2 IP地址
61 </factoryConfig>
62 </dbServer>
63
64 <dbServer name="slaves" virtual="true"> #name爲slaves
65 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
66 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
67 <property name="loadbalance">1</property> #默認爲輪詢方式
68
69 <!-- Separated by commas,such as: server1,server2,server1 -->
70 <property name="poolNames">slave1,slave2</property> #輪詢順序爲:slave1、slave2
71 </poolConfig>
72 </dbServer>
/usr/local/amoeba/bin/amoeba start& //啓動服務
netstat -anpt | grep java //查看Java端口
客戶端
這個就簡單了
yum install mysql -y //直接用yum 裝
mysql -u amoeba -p123456 -h 192.168.200.133 -P8066 //訪問的IP是變形蟲的IP地址的
驗證讀寫分離
stop slave; //關閉同步
在主服務器上創建一個表格
create table zhang (id int(10),name varchar(10),address varchar(20));
則在客戶端可以查看的到在Slave1,Slave2服務器上則看不到
反之當在從服務器本身上寫入數據則客戶端顯示出來,主服務器顯示不出來