mysql主從架構

############################################################node

##############mysql主從架構#################mysql

Server11.linux

yum install mysql-server -ysql

vim /etc/my.cnf數據庫

log-bin=mysql-bin #啓動二進制日誌系統vim

binlog-do-db=test #二進制須要同步的數據庫名,若是須要同步多個庫,例如要再同步 westos服務器

,再添加一行「binlog-do-db=westos」,以此類推session

server-id=3架構

#必須爲 1 232–1 之間的一個正整數值app

binlog-ignore-db=mysql #禁止同步 mysql 數據庫

/etc/init.d/mysqld start

Mysql

 

查看和受權

wKioL1jjOLyggxccAADMHc0ygTw707.png-wh_50 

 

Server12

 yum install mysql-server -y

 

vim /etc/my.cnf添加兩行

 

vsymbolic-links=0

 

server-id=4

 

驗證受權以後是否能夠登錄

wKiom1jjOMigJIowAAGPO2hT9Fc044.png-wh_50 

 

/etc/init.d/mysqld start

Mysql

wKioL1jjONLB9cKKAAFJP6ftZpA773.png-wh_50 

 

出現說明成功了

wKiom1jjONyRbowmAAA0XXUrNBE050.png-wh_50 

 

測試

Server11

mysql

wKioL1jjOOrBuvq5AAEzVa3IOGE893.png-wh_50 

 

 

wKioL1jjOPbhg8cOAAD5HP73xFE819.png-wh_50 

 

 

wKiom1jjOP-glOfPAABkXA-RDUY246.png-wh_50 

登錄server12上的mysql

 

wKioL1jjOQuxf9THAAFclVyngg8182.png-wh_50 

 ##############################################################

###############mysqlgtid機制#############

 

Server11.server12相同

 /etc/init.d/mysqld stop

 yum remove mysql-server -y

 rm -fr /var/lib/mysql/*

tar xf mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar

yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm   mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm

/etc/init.d/mysqld start

cat /var/log/mysqld.log | grep password 初始化密碼在這

mysql -p

退出而且關掉mysql

 

Server11

vim /etc/my.cnf

 

wKiom1jjORfQEFxQAAFEgP-g0CA251.png-wh_50 

 

 

Server12

vim /etc/my.cnf

wKiom1jjOSKBXkCMAAFbI1gRKRI994.png-wh_50 

 

 

兩個服務器都打開mysql

 

Server11

受權

wKioL1jjOS7ij8d1AAE3b52jux8794.png-wh_50 

 

Server12

查看是否受權成功

 

wKiom1jjOTuRAjX1AAHu9GUQJ_4785.png-wh_50 

 

 

添加主服務器的相關信息

wKiom1jjOUWgqKdqAAD5OlErgd8557.png-wh_50 

 

 

 

 

mysql> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 172.25.45.11

                  Master_User: student           ####主服務起的IP、用戶名和端口信息

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 450

               Relay_Log_File: server12-relay-bin.000002

                Relay_Log_Pos: 663

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes    IOSQL線程開啓

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 450

              Relay_Log_Space: 873

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File:

           Master_SSL_CA_Path:

              Master_SSL_Cert:

            Master_SSL_Cipher:

               Master_SSL_Key:

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 3

                  Master_UUID: ae5b62c7-1548-11e7-a52c-525400cc54de

             Master_Info_File: /var/lib/mysql/master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set: ae5b62c7-1548-11e7-a52c-525400cc54de:1

            Executed_Gtid_Set: ae5b62c7-1548-11e7-a52c-525400cc54de:1

                Auto_Position: 1

         Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

1 row in set (0.00 sec)

 

 

查看    /var/lib/mysql/mysqlbinlog mysql-bin.000003

#170330  8:41:02 server id 4  end_log_pos 194 CRC32 0xeb5aadd3 Previous-GTIDs

# ae5b62c7-1548-11e7-a52c-525400cc54de:1-5

兩個gtid應該同樣

Sever11

 

建立庫而且存入相關信息

wKioL1jjOVLQmHRQAAD29ioVd6U657.png-wh_50 

 

wKioL1jjOV7hDhrjAAC0crZcUlQ507.png-wh_50 

 

Server12查看

wKiom1jjOXPxUq5FAABiiNAwK5Q807.png-wh_50 

 

主從複製成功

 

##########mysql主從的半同步和異步傳輸日誌文件數據##########

 

Mysql版本必須時5.5以上

 

接下來分別在主庫和從庫執行install  plugin 命令加載插件,而且開啓半同步插件,查看插件的安裝狀況

 

 

 

主庫

wKioL1jjOcPxaCAeAACKzqoA8VA347.png-wh_50 

 

從庫

wKiom1jjOezCkXSvAAE7FKCU3uU020.png-wh_50 

 

安裝狀況

 

wKioL1jjOfbCK38mAAA28PNx2Nw257.png-wh_50 

 

Rpl_semi_sync_master_timeout表示主庫等待從庫的超時時間,若是在時間內沒有收到從庫迴應,複製切換到異步模式

 

在從庫上中止io線程,在此時主庫內同步數據,在10秒內自動切換到異步同步數據

wKiom1jjOgDwMGfcAAAjNLPsa2M700.png-wh_50 

 

然而下次繼續同步數據時,便不用在等待,直接爲異步同步,若打開從庫的io線程,主庫又恢復半同步複製數據

 

mysql啓動前將全局變量寫入到配置文件中,以避免忘記設置使半同步不生效

 

主庫配置文件

[mysqld]

rpl_semi_sync_master_enabled=1

rpl__semi_sync_master_timeout=10000  ###10

從庫配置文件

[mysqld]

rpl_semi_sync_slave_enabled=1

 

 

 

 

主庫:

mysql> show global variables like '%rpl_semi%';

+-------------------------------------------+------------+

| Variable_name                             | Value      |

+-------------------------------------------+------------+

| rpl_semi_sync_master_enabled              | ON         |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

+-------------------------------------------+------------+

6 rows in set (0.01 sec)

##IO線程關閉後,半同步狀態檢測的延時(10000ms

 

mysql> show global status like '%rpl_semi%';

+--------------------------------------------+-------+

| Variable_name                              | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients               | 0     |

| Rpl_semi_sync_master_net_avg_wait_time     | 0     |

| Rpl_semi_sync_master_net_wait_time         | 0     |

| Rpl_semi_sync_master_net_waits             | 0     |

| Rpl_semi_sync_master_no_times              | 0     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | ON    |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |

| Rpl_semi_sync_master_tx_wait_time          | 0     |

| Rpl_semi_sync_master_tx_waits              | 0     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 0     |

+--------------------------------------------+-------+

 

 

 

主庫

mysql> show global variables like '%rpl_semi%';

+-------------------------------------------+------------+

| Variable_name                             | Value      |

+-------------------------------------------+------------+

| rpl_semi_sync_master_enabled              | OFF        |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

| rpl_semi_sync_slave_enabled               | ON         |

| rpl_semi_sync_slave_trace_level           | 32         |

+-------------------------------------------+------------+

8 rows in set (0.01 sec)

mysql> show global status like '%rpl_semi%';

+--------------------------------------------+-------+

| Variable_name                              | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients               | 0     |

| Rpl_semi_sync_master_net_avg_wait_time     | 0     |

| Rpl_semi_sync_master_net_wait_time         | 0     |

| Rpl_semi_sync_master_net_waits             | 0     |

| Rpl_semi_sync_master_no_times              | 1     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | OFF   |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |

| Rpl_semi_sync_master_tx_wait_time          | 0     |

| Rpl_semi_sync_master_tx_waits              | 0     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 0     |

| Rpl_semi_sync_slave_status                 | OFF   |

+--------------------------------------------+-------+

 

 

############sql線程的並行(多)線程##############

IO線程用於同步日誌二進制文件數據

sql線程(本來爲單線程)用於回放日誌,將二進制文件的在slave上進行再次操做。sql線程在slave

 

 vim /etc/my.cnf##添加

 15 slave-parallel-type=LOGICAL_CLOCK

 16 slave-parallel-workers=16

 17 master_info_repository=TABLE

 18 relay_log_info_repository=TABLE

 19 relay_log_recovery=ON

 

 

 /etc/init.d/mysqld restart

 mysql -p

wKioL1jjOhGBVZFaAAK1qllSYYk911.png-wh_50 

 

 

 

 

Msyql-proxy讀寫分離

 

1.mysql proxy

 

 tar -zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

 mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy

cd /usr/local/mysql-proxy

mkdir lua

Mkdir logs

cp /share/doc/mysql-proxy/rw-splitting.lua ./lua

 cp /share/doc/mysql-proxy/admin-sql.lua ./lua

vim /usr/local/mysql-proxy/bin/mysql-proxy.conf

 

[mysql-proxy]

user=root

admin-username=proxy

admin-password=Westos+007

proxy-address=172.25.45.13:4040

proxy-read-only-backend-addresses=172.25.45.12

proxy-backend-addresses=172.25.45.11

proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua

#admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua

log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log

log-level=info

daemon=true

keepalive=true

 

 chmod 660 /usr/local/mysql-proxy/bin/mysql-proxy.conf

vim /usr/local/mysql-proxy/lua/rw-splitting.lua

if not proxy.global.config.rwsplit then

        proxy.global.config.rwsplit = {

                min_idle_connections = 1,

                max_idle_connections = 1,

 

                is_debug = false

 

改成1,方便測試

啓動MYSQL-PROXY

/usr/lo/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/bin/mysql-proxy.conf

 

netstat -tupln | grep 4040

 

測試讀寫分離

主服務器

 

grant all on *.* to proxy@'172.25.45.13' identified by 'Westos+007';

 

使用客戶端鏈接mysql-proxy

mysql -u proxy -h 172.25.45.13 -P 4041 -pWestos+007

 

wKioL1jjOinAirnuAAEAoqwY_Xg877.png-wh_50 

 

 

 

################MHA###############3

 

在作好mysqlgtid機制和半同步的基礎上

Server1172.25.45.11  master

Server2172.25.45.12slave(主從)

Server4172.25.45.13  slave

Server5172.25.45.14  manager

 

 

1.配置三臺機子ssh無密碼鏈接:

ssh-keygen   ##每臺機子都要生成本身的公祕鑰對

ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.45.12

ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.45.13

ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.45.14

每臺機子都要作上述操做

 

 

2.安裝mha

全部節點都要安裝

 yum install -y perl-DBD-MySQL  

 rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm  

管理節點

yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager 

rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm 

配置mysql的主從replication

主從服務器都須要有  vim /etc/my.cnf

binlog-do-db=test

replication-do-db=test

其中在從服務器的配置還須要多添加一行:

Relay_log_purge=0

 

通常狀況下,主服務器須要包含binlog-do-db=test,從服務器須要包含replicate-do-db=test,這樣主從就能夠同步了。可是隻是這樣配置的話,會報如下錯誤

All log-bin enabled servers must have same binlog filtering rules (same binlog-do-db and binlog-ignore-db). Check SHOW MASTER STATUS output and set my.cnf correctly

 

 

3.配置mha manage

1,添加管理帳號,每臺機器都執行如下操做

grant all privileges on *.*  to lzt@'172.25.45.%'  identified by 'Westos+007';  

flush privileges;  

2,配置/etc/mha/app1.cnf,只在管理端作,manage這臺機器

mkdir /etc/mha

mkdir -p /var/log/mha/app1

vim /etc/mha/app1.cnf  ##配置以下:

[server default]

manager_log=/var/log/mha/app1/manager.log

manager_workdir=/var/log/mha/app1.log

master_binlog_dir=/var/lib/mysql

user=proxy

Password=Westos+007

ping_interval=2

repl_password=Westos+007

repl_user=lzt

ssh_user=root

 

[server1]

hostname=172.25.45.11

port=3306

 

[server2]

candidate_master=1

check_repl_delay=0

hostname=172.25.45.12

port=3306

 

[server3]

check_repl_delay=0

hostname=172.25.30.45.12

port=3306

 

 

4.檢測mha是否配置成功:

 

A.檢查ssh登錄:

masterha_check_ssh --conf=/etc/mha/app1.cnf

 

wKiom1jjOjjBXR_tAAE6MXm1jIs071.png-wh_50 

 

B.檢測mha manage的監控情況:

wKiom1jjOkGRTu-oAAIFNrQdA8c605.png-wh_50 

 

 

3,管理端經常使用命令

masterha_check_ssh       檢查MHASSH配置情況  

masterha_check_repl      檢查MySQL複製情況  

masterha_manger          啓動MHA  

masterha_check_status    檢測當前MHA運行狀態  

masterha_master_monitor  檢測master是否宕機  

masterha_master_switch   控制故障轉移(自動或者手動)  

masterha_conf_host       添加或刪除配置的server信息  

wKiom1jjOkyx3uhsAAGGftIK73M526.png-wh_50 

 

4.切換:

關閉master ,切換至主備

wKioL1jjOlrCSaSrAADUWiNUuDI252.png-wh_50

相關文章
相關標籤/搜索