MYSQL 高可用集羣相關配置(超詳細)

MYSQL 主從備份(一主多從)

  • 資源相關
Master 	192.168.44.161
Slave 	192.168.44.153
Slave 	192.168.44.154

在這裏插入圖片描述

  • 開啓log-bin日誌
#192.168.44.161 master節點
log-bin=mysql-bin
server-id=161

#192.168.44.153 slave節點
log-bin=mysql-bin
server-id=153

#192.168.44.154 slave節點
log-bin=mysql-bin
server-id=154

#重啓mysql
systemctl restart mysql

在這裏插入圖片描述

  • 在192.168.44.161 Master節點上創建賬戶【用於從節點連接】
#創建賬戶: slave  密碼:147258  授權44網段內都可訪問
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.44.%' IDENTIFIED BY '147258';

#刷新
flush privileges;

在這裏插入圖片描述

  • 查看192.168.44.161 Master節點狀態
show master status;

在這裏插入圖片描述

  • 配置192.168.44.153,192.168.44.154 Slave從節點
#在192.168.44.153  192.168.44.154節點上都執行
CHANGE MASTER TO
         MASTER_HOST='192.168.44.161',
         MASTER_USER='slave',
         MASTER_PASSWORD='147258',
         MASTER_LOG_FILE='mysql-bin.000001',
         MASTER_LOG_POS=328;
         
#啓動Slave 節點
start slave;

在這裏插入圖片描述

  • 查看配置的Master節點信息
#切換目錄
cd /var/lib/mysql && ll

#查看
cat master.info

在這裏插入圖片描述

  • 查看192.168.44.153,192.168.44.154 Slave 進程信息
show slave status\G;

在這裏插入圖片描述

  • 測試主從
    • 192.168.44.161 主節點創建數據庫信息

      CREATE DATABASE `task_db`;
      
      USE `task_db`;
      
      DROP TABLE IF EXISTS `tb_user`;
      
      CREATE TABLE `tb_user` (
        `id` int(4) NOT NULL AUTO_INCREMENT,
        `name` varchar(20) DEFAULT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
      
      insert  into `tb_user`(`id`,`name`) values (1,'劉一'),(2,'陳二'),(3,'張三'),(4,'李四'),(5,'王五');
      insert into tb_user(name) values(@@hostname);
      
    • 查看153,154從節點信息
      在這裏插入圖片描述

    • 到此,一主多從配置完成

MYSQL 互爲主備(雙主)

  • 資源相關
Master 192.168.44.161
Master 192.168.44.162

在這裏插入圖片描述

  • 開啓bin-log日誌配置
#192.168.44.161 Master節點配置
log-bin=mysql-bin
server-id=161
#忽略指定數據庫
binlog-ignore-db=mysql


#192.168.44.162 Master節點配置
log-bin=mysql-bin
server-id=162
#忽略指定數據庫
binlog-ignore-db=mysql

#重啓mysql
systemctl restart mysql

在這裏插入圖片描述

  • 以161爲Master、162爲Slave

    • 在161主機上創建授權信息、允許162 Slave節點訪問
    #創建賬戶: slave_m_162密碼:147258  允許192.168.44.162訪問
    GRANT REPLICATION SLAVE ON *.* TO 'slave_m_162'@'192.168.44.162' IDENTIFIED BY '147258';
    
    #刷新
    flush privileges;
    

    在這裏插入圖片描述

    • 查詢192.168.44.161 上Master信息
    show master status;
    

    在這裏插入圖片描述

    • 以192.168.44.162爲Slave節點、鏈接192.168.44.161 Master節點
    #在192.168.44.162上執行
    CHANGE MASTER TO
             MASTER_HOST='192.168.44.161',
             MASTER_USER='slave_m_162',
             MASTER_PASSWORD='147258',
             MASTER_LOG_FILE='mysql-bin.000006',
             MASTER_LOG_POS=336;
             
    #啓動Slave 節點
    start slave;
    

    在這裏插入圖片描述

    • 查看192.168.44.162 Slave節點狀態
    show slave status\G;
    

    在這裏插入圖片描述

  • 以162爲Master、161爲Slave

    • 在162主機上創建授權信息、允許162 Slave節點訪問
    #創建賬戶: slave_m_161密碼:147258  允許192.168.44.161訪問
     GRANT REPLICATION SLAVE ON *.* TO 'slave_m_161'@'192.168.44.161' IDENTIFIED BY '147258';
    
    #刷新
    flush privileges;
    
    • 查詢192.168.44.162 上Master信息
    show master status;
    

    在這裏插入圖片描述

    • 以192.168.44.161爲Slave節點、鏈接192.168.44.162 Master節點
    #在192.168.44.161上執行
    CHANGE MASTER TO
             MASTER_HOST='192.168.44.162',
             MASTER_USER='slave_m_161',
             MASTER_PASSWORD='147258',
             MASTER_LOG_FILE='mysql-bin.000005',
             MASTER_LOG_POS=336;
             
    #啓動Slave 節點
    start slave;
    

    在這裏插入圖片描述

    • 查看192.168.44.161 Slave節點狀態
    show slave status\G;
    

    在這裏插入圖片描述

  • 測試雙主(互爲準備)

    • 192.168.44.161上創建數據庫、192.168.44.162上查看備份
      在這裏插入圖片描述
    • 192.168.44.162上刪除剛創建的數據庫、192.168.44.161上查看是否刪除
      在這裏插入圖片描述
    • 到此、雙主搭建完成

MYSQL 雙主雙從

  • 資源準備
master  192.168.44.191  3306 root SYS_666_admin  Mysql 5.7
master  192.168.44.192  3306 root SYS_666_admin  Mysql 5.7
slave   192.168.44.193  3306 root SYS_666_admin  Mysql 5.7
slave   192.168.44.194  3306 root SYS_666_admin  Mysql 5.7

在這裏插入圖片描述

  • 編輯MYSQL配置
#雙主 191
log-bin=mysql-bin
server-id=191
#略過數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#設置需要主備的數據庫【根據情況填寫】
binlog-do-db=task_db
#設置logbin格式
binlog_format=STATEMENT
#作爲從庫、也寫入日誌
log-slave-updates
#自增長字段每次遞增的量、指定自增字段的起始值,取值範圍1-65535
auto_increment_increment=2
#自增長字段從哪個數開始、即一次遞增多少、取值1-65535
auto-increment-offset=1


#雙主 192
log-bin=mysql-bin
server-id=192
#略過數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#設置需要主備的數據庫【根據情況填寫】
binlog-do-db=task_db
#設置logbin格式
binlog_format=STATEMENT
#作爲從庫、也寫入日誌
log-slave-updates
#自增長字段每次遞增的量、指定自增字段的起始值,取值範圍1-65535
auto_increment_increment=2
#自增長字段從哪個數開始、即一次遞增多少、取值1-65535
auto-increment-offset=2


#雙從 193
log-bin=mysql-bin
server-id=193
#只讀哪個數據庫
replicate-do-db=task_db
read_only=1
relay-log=mysql-relay

#雙從 194
log-bin=mysql-bin
server-id=194
#只讀哪個數據庫
replicate-do-db=task_db
read_only=1
relay-log=mysql-relay
  • 授權並鏈接主從
#191/192分別創建授權賬戶
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'SYS_admin_147258';
flush privileges;

#相關清除命令
flush logs;
reset master;
reset slave;

#雙主 s/192 鏈接 m/191
CHANGE MASTER TO MASTER_HOST='192.168.44.191',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

#雙主 s/191 鏈接 m/192
CHANGE MASTER TO MASTER_HOST='192.168.44.192',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

#雙主 s/193 鏈接 m/191
CHANGE MASTER TO MASTER_HOST='192.168.44.191',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

#雙主 s/194 鏈接 m/192
CHANGE MASTER TO MASTER_HOST='192.168.44.192',MASTER_USER='slave',MASTER_PASSWORD='SYS_admin_147258', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

#啓動Slave
start slave;
show slave status\G;

在這裏插入圖片描述

  • 測試雙主雙從
    在這裏插入圖片描述
  • 到此,雙主雙從搭建完成。

MYSQL 中間件(Amoeba)

  • Amoeba簡介

    • Amoeba是一個以MySQL爲底層數據存儲,並對應用提供MySQL協議接口的proxy。它集中地響應應用的請求,依據用戶事先設置的規則,將SQL請求發送到特定的數據庫上執行。基於此可以實現負載均衡、讀寫分離、高可用性等需求。
  • 資源相關

Amoeba		192.168.44.162
  • MYSQL 一主多從配置參考如上步驟

  • Amoeba 負載均衡/讀寫分離配置

    wget https://liquidtelecom.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip
    
    #解壓
    unzip amoeba-mysql-3.0.5-RC-distribution.zip -d /opt/module
    
    #切換目錄
    cd /opt/module/ && ll
    

    在這裏插入圖片描述

    • Amoeba 配置文件詳解

      • Amoeba主配置文件($AMOEBA_HOME/conf/amoeba.xml),用來配置Amoeba服務的基本參數,如Amoeba主機地址、端口、認證方式、用於連接的用戶名、密碼、線程數、超時時間、其他配置文件的位置等。

      • 數據庫服務器配置文件($AMOEBA_HOME/conf/dbServers.xml),用來存儲和配置Amoeba所代理的數據庫服務器的信息,如:主機IP、端口、用戶名、密碼等。

      • 切分規則配置文件($AMOEBA_HOME/conf/rule.xml),用來配置切分規則。

      • 數據庫函數配置文件($AMOEBA_HOME/conf/functionMap.xml),用來配置數據庫函數的處理方法,Amoeba將使用該配置文件中的方法解析數據庫函數。

      • 切分規則函數配置文件($AMOEBA_HOME/conf/ruleFunctionMap.xml),用來配置切分規則中使用的用戶自定義函數的處理方法。

      • 訪問規則配置文件($AMOEBA_HOME/conf/access_list.conf),用來授權或禁止某些服務器IP訪問Amoeba。

      • 日誌規格配置文件($AMOEBA_HOME/conf/log4j.xml),用來配置Amoeba輸出日誌的級別和方式。

    • Amoeba 集羣節點信息配置

      • ① 編輯dbServers.xml
      #切換目錄
      cd /opt/module/amoeba-mysql-3.0.5-RC/conf
      #編輯dbServer.xml文件
      vim dbServers.xml 
      
      • ② MYSQL 節點基本信息配置
      <!-- 鏈接各MYSQL 節點的 用戶密碼配置 -->
       <dbServer name="abstractServer" abstractive="true">
             <factoryConfig class="com.meidusa.amoeba.mysql.net.MysqlServerConnectionFactory">
                     <property name="connectionManager">${defaultManager}</property>
                     <property name="sendBufferSize">64</property>
                     <property name="receiveBufferSize">128</property>
                     <property name="port">3306</property>
                     <property name="schema">test</property>
                     <property name="user">amoeba</property>
                     <property name="password">amoeba</property>
             </factoryConfig>
      
             <!-- 優化相關 -->
             <poolConfig class="com.meidusa.toolkit.common.poolable.PoolableObjectPool">
                     <property name="maxActive">500</property>
                     <property name="maxIdle">500</property>
                     <property name="minIdle">1</property>
                     <property name="minEvictableIdleTimeMillis">600000</property>
                     <property name="timeBetweenEvictionRunsMillis">600000</property>
                     <property name="testOnBorrow">true</property>
                     <property name="testOnReturn">true</property>
                     <property name="testWhileIdle">true</property>
             </poolConfig>
      </dbServer>
      
      • ③ MYSQL 集羣節點配置
      <!-- 192.168.44.161 Master節點 -->
      <dbServer name="master_server1"  parent="abstractServer">
             <factoryConfig>
                     <!-- mysql ip -->
                     <property name="ipAddress">192.168.44.161</property>
             </factoryConfig>
      </dbServer>
      
      <!-- 192.168.44.153 Slave從節點 -->
      <dbServer name="slave_server2"  parent="abstractServer">
             <factoryConfig>
                     <!-- mysql ip -->
                     <property name="ipAddress">192.168.44.153</property>
             </factoryConfig>
      </dbServer>
      
      <!-- 192.168.44.154 Slave從節點 -->
      <dbServer name="slave_server3"  parent="abstractServer">
             <factoryConfig>
                     <!-- mysql ip -->
                     <property name="ipAddress">192.168.44.154</property>
             </factoryConfig>
      </dbServer>
      
      
      • ④ MYSQL 讀寫數據庫鏈接池配置
      <!-- 寫數據庫鏈接池 -->
      <dbServer name="masterPool" virtual="true">
             <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                     <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                     <property name="loadbalance">1</property>
      
                    <!-- Separated by commas,such as: server1,server2,server1 -->
                     <property name="poolNames">master_server1</property>
             </poolConfig>
      </dbServer>
      
      <!--讀數據庫鏈接池 -->
      <dbServer name="slavePool" virtual="true">
             <poolConfig class="com.meidusa.amoeba.server.MultipleServerPool">
                     <!-- Load balancing strategy: 1=ROUNDROBIN , 2=WEIGHTBASED , 3=HA-->
                     <property name="loadbalance">1</property>
      
                    <!-- Separated by commas,such as: server1,server2,server1 -->
                     <property name="poolNames">slave_server2,slave_server3</property>
             </poolConfig>
      </dbServer>
      
    • Amoeba 基本信息/讀寫分離配置

      • ① 編輯amoeba.xml
      #編輯命令
      vim /opt/module/amoeba-mysql-3.0.5-RC/conf/amoeba.xml 
      
      • ② Amoeba基本鏈接信息配置
       <proxy>
        <!-- service class must implements com.meidusa.amoeba.service.Service -->
           <service name="Amoeba for Mysql" class="com.meidusa.amoeba.mysql.server.MySQLService">
                   <!-- port -->
                   <property name="port">8066</property>
      
                   <!-- bind ipAddress -->
                   <property name="ipAddress">192.168.44.162</property>
      
                   <property name="connectionFactory">
                           <bean class="com.meidusa.amoeba.mysql.net.MysqlClientConnectionFactory">
                                   <property name="sendBufferSize">128</property>
                                   <property name="receiveBufferSize">64</property>
                           </bean>
                   </property>
      
                   <property name="authenticateProvider">
                           <bean class="com.meidusa.amoeba.mysql.server.MysqlClientAuthenticator">
      
                                   <!-- 鏈接Amoeba的賬戶 密碼 -->
                                   <property name="user">amoeba</property>
                                   
                                   <property name="password">amoeba</property>
                                   
                                   <property name="filter">
                                           <bean class="com.meidusa.toolkit.net.authenticate.server.IPAccessController">
                                                   <property name="ipFile">${amoeba.home}/conf/access_list.conf</property>
                                           </bean>
                                   </property>
                           </bean>
                   </property>
                   
           </service>
           
           <runtime class="com.meidusa.amoeba.mysql.context.MysqlRuntimeContext">
                   <property name="executeThreadSize">128</property>
                   <property name="statementCacheSize">500</property>
                   <property name="serverCharset">utf8</property>
                   <property name="queryTimeout">60</property>
           </runtime>
      </proxy>	
      
      • ③ Amoeba讀寫分離配置
      <!-- 讀寫分離配置-->
       <queryRouter class="com.meidusa.amoeba.mysql.parser.MysqlQueryRouter">
                  <property name="ruleLoader">
                          <bean class="com.meidusa.amoeba.route.TableRuleFileLoader">
                                  <property name="ruleFile">${amoeba.home}/conf/rule.xml</property>
                                  <property name="functionFile">${amoeba.home}/conf/ruleFunctionMap.xml</property>
                          </bean>
                  </property>
                  <property name="sqlFunctionFile">${amoeba.home}/conf/functionMap.xml</property>
                  <property name="LRUMapSize">1500</property>
      
                  <!-- 配置讀寫分離 MYSQL鏈接池 -->
                  <property name="defaultPool">masterPool</property>
                  <property name="writePool">masterPool</property>
                  <property name="readPool">slavePool</property>
                  <property name="needParse">true</property>
          </queryRouter>
      
    • Amoeba JVM配置

    #編輯命令
    vim /opt/module/amoeba-mysql-3.0.5-RC/jvm.properties 
    
    #修改-Xss196k  爲512k
    JVM_OPTIONS="-server -Xms256m -Xmx1024m -Xss512k -XX:PermSize=16m -XX:MaxPermSize=96m"
    

    在這裏插入圖片描述

    • 在MYSQL集羣節點上爲Amoeba配置授權信息
    #創建用戶
    GRANT ALL ON *.* TO 'amoeba'@'192.168.44.162' IDENTIFIED BY 'amoeba';
    
    #刷新配置
    flush privileges;
    
    • Amoeba 啓動
    #啓動方式一
    nohup bash -x /opt/module/amoeba-mysql-3.0.5-RC/bin/benchmark
    
    #啓動方式二
    #切換目錄
    cd /opt/module/amoeba-mysql-3.0.5-RC/bin/
    
    #啓動
    ./launcher start
    
    #查看進程
    ps -ef|grep amoeba
    

    在這裏插入圖片描述

    • Amoeba 讀寫分離測試
      • ① 鏈接Amoeba
        #鏈接Amoeba服務
        mysql -h 192.168.44.162 -u amoeba -pamoeba -P 8066
        
        在這裏插入圖片描述
      • ② 測試寫操作
        在這裏插入圖片描述
      • ③ 測試讀操作
        在這裏插入圖片描述
      • 到此,Amoeba讀寫分離配置完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章