搭建 MySQL主從復制與讀寫分離
阿新 • • 發佈:2018-07-10
ast round running mysql配置 一個表 mysql主從 安全性 配置 tab 搭建 MySQL主從復制與讀寫分離
案例概述 :
在實際環境中 ,如果對數據庫的讀和寫都在同一個數據庫服務中操作 ,無論實在安全性、高可用性,
還是高並發等各個方面都是完全不能滿足實際需求的 ,因此 ,一般來說都只通過主從復制的方式來同
步數據 ,在通過讀寫分離來提升數據庫的並發負載能力 ,這樣的方案來進行部署與實施 。
環境拓補圖 :
本案環境 :
主機 | 操作系統 | IP地 址 | 主要軟件 |
---|---|---|---|
主服務器 | CentOS 7.3 x86_64 | 192.168.217.130 | NTP |
從服務器1 | CentOS 7.3 x86_64 | 192.168.217.131 | ntpdate |
從服務器2 | CentOS 7.3 x86_64 | 192.168.217.132 | ntpdate |
amoeda | CentOS 7.3 x86_64 | 192.168.217.129 | jdk-6u14-linux-x64.bin amoeba-mysql-binary-2.2.0.tar.gz |
客戶端 | CentOS 7.3 x86_64 | 192.168.217.128 | mysql |
案例實施:
配置主服務器 :
-
在主服務器上搭建時間同步服務, 安裝NTP :
yum install ntp -y
-
配置 NTP :
vim /etc/ntp.conf #編輯配置文件 添加 server 127.127.217.0 #設置本地是時鐘源 fudge 127.127.217.0 stratum 8 #設置時間層級為8(限制在15內) #127.127 ntp時間服務器的保留ip地址,作用是使用本機作為客戶端的時間服務器
-
開啟服務 :
systemctl start ntpd.service systemctl stop firewalld.service setenforce 0
-
配置 MySQL 配置文件 :
vim /etc/my.cnf #在配置文件添加 [mysqld] server-id = 11 #修改 ID 主從不一樣 log-bin=master-bin #開啟二進制日誌 log-slave-updates=true #開啟從服務器同步主服務器二進制日誌
-
重啟服務, 進入數據庫給從服務器授權 :
systemctl restart mysqld.service
mysql -u root -p mysql>GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.217.%‘ IDENTIFIED BY ‘123456‘; #允許從服務器使用 myslave賬戶 登錄數據庫 mysql> FLUSH PRIVILEGES; #刷新權限 mysql> show master status; #查看主服務器狀態 +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000001 | 604 | | | | +-------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
記住主服務器的二進制日誌文件名和偏移量 。
配置從服務器 :
-
安裝 ntpdate 同步時間 :
yum install ntpdate -y #從服務器上安裝的 [root@localhost ~]# systemctl start ntpdate.service #開啟服務 [root@localhost ~]# /usr/sbin/ntpdate 192.168.217.130 #時間同步 6 Jul 09:45:44 ntpdate[2941]: adjust time server 192.168.217.130 offset -0.233224 sec #同步成功 systemctl stop firewalld.service setenforce 0
-
配置MySQL配置文件 :
vim /etc/my.cnf [mysqld] server-id = 12 # id 不一樣 別一臺從服務器同樣配置 id 不同即可 relay-log=relay-log-bin #開啟中繼日誌 relay-log-index=slvae-relay-bin.index #指定位置和名稱
-
重啟服務 ,進入mysql :
systemctl restart mysqld.service
mysql -u root -p mysql> change master to master_host=‘192.168.217.130‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master-bin.000001‘,master_log_pos=604; # 主服務器地址、授權用戶、二進制日誌名稱、偏移量 。 mysql> start slave; # 開啟從服務器 mysql> show slave status\G; #查看從服務器狀態 *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.217.130 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 604 Relay_Log_File: relay-log-bin.000002 Relay_Log_Pos: 321 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes # 兩個為yes 表示同步中 Slave_SQL_Running: Yes
配置 Amoeda 代理服務器 :
-
配置 java 環境變量 :
cp jdk-6u14-linux-x64.bin /usr/local/ cd /usr/local/ ./jdk-6u14-linux-x64.bin #運行jdk #之後輸入yes 或者 按回車鍵即可 mv jdk1.6.0_14/ /usr/local/jdk1.6 #重命名
vi /etc/profile # 添加 export JAVA_HOME=/usr/local/jdk1.6 #java家目錄 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib #指定運行庫 export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin #識別java命令 export AMOEBA_HOME=/usr/local/amoeba #指定amoeba家目錄 export PATH=$PATH:$AMOEBA_HOME/bin # amoeba命令
source /etc/profile #刷新環境變量
-
配置 amoeba 軟件 :
mkdir /usr/local/amoeba tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/ chmod -R 755 /usr/local/amoeba/ /usr/local/amoeba/bin/amoeba amoeba start|stop #出現 amoeba start|stop 說明 amoeba 安裝成功
-
配置 amoeba 讀寫分離 :
mysql> grant all on *.* to ‘test‘@‘192.168.217.%‘ identified by ‘abcabc‘; #在三臺mysql上添加權限開放給amoeba訪問
cd /usr/local/amoeba vim conf/amoeba.xml #編輯 amoeba 配置文件
30<property name="user">amoeba</property> #第30、32行 用戶名 密碼 這是客戶端訪問 amoeba 所需要的賬戶密碼 31 32 <property name="password">123456</property>
# 把註釋去掉 開啟服務 115<property name="defaultPool">master</property> #修改 默認池 116<property name="writePool">master</property> #修改 寫入池 寫操作寫 mysql 主服務器 117<property name="readPool">slaver</property> #修改 讀入池 讀操作讀 mysql 從服務器
-
配置 dbServers.xml 配置文件 :
vim conf/dbServers.xml 23 <property name="schema">test</property> #把這句話註釋 或者在mysql主服務器創建一個test數據庫 ,再或者把test修改成mysql主服務器已經存在的數據庫名 25 <property name="user">test</property> #允許amoeba 訪問數據庫 的賬戶密碼 26 # 把註釋去掉 開啟服務 27 <property name="password">abcabc</property>
42 <dbServer name="master" parent="abstractServer"> #修改 MySQL 主服務器名稱 43 <factoryConfig> 44 <!-- mysql ip --> 45 <property name="ipAddress">192.168.217.130</property> #修改 主服務器 IP 地址 49 <dbServer name="slave1" parent="abstractServer"> #修改 MySQL 從服務器名稱 50 <factoryConfig> 51 <!-- mysql ip --> 52 <property name="ipAddress">192.168.217.131</property> #修改 從服務器 IP 地址 53 </factoryConfig> 54 </dbServer> 55 #添加 slave2 56 <dbServer name="slave2" parent="abstractServer"> #MySQL 從服務器名稱 57 <factoryConfig> 58 <!-- mysql ip --> 59 <property name="ipAddress">192.168.217.132</property> # 從服務器 IP 地址 60 </factoryConfig> 61 </dbServer> 62 <dbServer name="slaves" virtual="true"> #定義 slaves 池 63 <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool"> 64 <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA--> 65 <property name="loadbalance">1</property> 66 67 <!-- Separated by commas,such as: server1,server2,server1 --> 68 <property name="poolNames">slave1,slave2</property> #修改 slaves 池 所包含slave1 、slave2 69 </poolConfig>
-
啟動 amoeba 服務 :
/usr/local/amoeba/bin/amoeba start & #後臺啟動 netstat -anpt | grep java #查看8066端口 systemctl stop firewalld.service setenforce 0
配置客戶端 :
-
在客戶端安裝 mysql :
yum install -y mysql mysql -u amoeba -p123456 -h 192.168.217.129 -P8066 #鏈接 amoeba 代理服務 ip地址是 amoeba 地址
讀寫分離測試 :
-
在客戶端創建一個表 ,查看主從服務器是否創建 。
-
在一臺mysql從服務器表內插入信息 ,在客戶端進行查看到的信息應該是一下有信息 、一下沒有信息 。因為在讀取mysql從服務器是輪流讀取 。
ps:數據庫授權給 amoeba 訪問的權限賬戶 、密碼和 amoeba 給客戶端授予的權限賬戶 、密碼不要搞錯 。
搭建 MySQL主從復制與讀寫分離