日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

mysql读写分离 存储过程_基于maxscale的读写分离部署笔记

發布時間:2023/12/2 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql读写分离 存储过程_基于maxscale的读写分离部署笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用maxscale搭建的讀寫分離架構,后期還可以再結合MHA做master的故障轉移,這樣業務層面上不需要做任何的改動即可。

基于connect方式的不要使用。從庫延遲他還會繼續分發請求過去,暫時不適合生產使用。

實驗演示:

目前的主從結構:

node93???? 10.1.20.93 master

node94 ?10.1.20.94 slave

node95 ?10.1.20.95 slave

node96 ?10.1.20.96 maxscale

先在master主庫上創建相關的賬戶:

在開始配置之前,需要在master中為MaxScale創建兩個用戶,用于監控模塊和路由模塊。

創建監控用戶,用于[MySQL Monitor]段的配置中:

> create database maxscale_schema ;??? # maxscale監控用的心跳信息會寫到這個庫里面

> create user scalemon@'%' identified by"111111";

> grant replication slave, replication client on*.* to scalemon@'%';

> grant all on maxscale_schema.* to scalemon@'%';

創建路由用戶,用于[Read-Write Service]段的配置中:

> create user maxscale@'%' identified by"111111";

> grant select on mysql.* to maxscale@'%';

maxscale部署:

rpm -ivh maxscale-2.0.2021年01月28日.rhel.6.x86_64.rpm

主要生成文件如下:

/etc/maxscale.cnf

/etc/maxscale.cnf.template

/usr/bin/cdc.py

/usr/bin/cdc_kafka_producer.py

/usr/bin/cdc_last_transaction.py

/usr/bin/cdc_users.py

/usr/bin/maxadmin

/usr/bin/maxavrocheck

/usr/bin/maxbinlogcheck

/usr/bin/maxkeys

/usr/bin/maxpasswd

/usr/bin/maxscale

/var

/var/lib

/var/lib/maxscale

創建秘鑰文件:

[root@maxscale /root ]# maxkeys /var/lib/maxscale

生成加密后的密碼:

[root@maxscale /root ]# maxpasswd/var/lib/maxscale/.secrets 123456

上面劃掉的這2步驟我們用不到,直接在配置文件/etc/maxscale.cnf里寫上明文密碼就行了。(這里踩了坑,配置這個參數,導致后面maxscale起來后,無法連接到其他庫提示access denied)

vim/etc/security/limits.conf:

* softnofile 65535

* hardnofile 65535

vim/etc/sysctl.conf :

fs.file-max=655350

net.ipv4.ip_local_port_range= 1025 65000

net.ipv4.tcp_tw_reuse= 1

修改完內和參數后,需要重啟下服務器。

修改配置文件:

cat /etc/maxscale.cnf

[maxscale]

threads=auto

ms_timestamp=1???????????? #timestamp精度

syslog=1?????????????????? #將日志寫入到syslog中

maxlog=1?????????????????? #將日志寫入到maxscale的日志文件中

log_to_shm=0?????????????? #不將日志寫入到共享緩存中,開啟debug模式時可打開加快速度

log_warning=1????????????? #記錄告警信息

log_notice=1?????????????? #記錄notice

log_info=1???????????????? #記錄info

log_debug=0??????????????? #不打開debug模式

log_augmentation=1???????? #日志遞增

# Server definitions

#

# Set the address of the server to the network

# address of a MySQL server.

#

#需要把master和slave地址都配上,maxscale會自動分辨出哪個是master和slave

[server1]

type=server

address=10.1.20.93

port=3306

protocol=MySQLBackend

[server2]

type=server

address=10.1.20.94

port=3306

protocol=MySQLBackend

[server3]

type=server

address=10.1.20.95

port=3306

protocol=MySQLBackend

# Monitor for the servers

#

# This will keep MaxScale aware of the state of theservers.

# MySQL Monitor documentation:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Monitors/MySQL-Monitor.md

[MySQL Monitor]

type=monitor

module=mysqlmon

servers=server1,server2,server3??? #這里要把全部server都寫上,以便maxscale去監測

user=scalemon

passwd=111111

monitor_interval=10000??? #每隔10s檢查一次

detect_replication_lag=true???? #檢查復制延遲的情況

detect_stale_master=true ??????#當所有的slave都不可用時,select查詢請求會轉發到master。

# Service definitions

#

# Service Definition for a read-only service and

# a read/write splitting service.

#

# ReadConnRoute documentation:

#https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadConnRoute.md

由于我們使用了[Read-Write Service],可以刪除另一個服務[Read-Only Service],注釋掉下面整塊兒內容即可。

#需要把master和slave地址都配上

#[Read-Only Service]

#type=service

#router=readconnroute

#servers=server1,server2,server3

#user=maxscale?????????? #讀寫分離的賬戶和密碼

#passwd=111111???? ??????#讀寫分離的賬戶和密碼

#router_options=slave

# ReadWriteSplit documentation:

# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Routers/ReadWriteSplit.md

#配置的讀寫分離,需要把master和slave地址都配上

[Read-Write Service]

type=service

router=readwritesplit

servers=server1,server2,server3

user=maxscale??????? #讀寫分離的賬戶和密碼

passwd=111111?????? #讀寫分離的賬戶和密碼

max_slave_connections=100%???????? #所有的slave提供select查詢服務

max_slave_replication_lag = 5????? # slave超時5秒,就把請求轉發到其他slave

use_sql_variables_in = all???????? #

# This service enables the use of the MaxAdmininterface

# MaxScale administration guide:

#https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Reference/MaxAdmin.md

[MaxAdmin Service]

type=service

router=cli

# Listener definitions for the services

#

# These listeners represent the ports the

# services will listen on.

#

#[Read-Only Listener]

#type=listener

#service=Read-Only Service

#protocol=MySQLClient

#port=4008

[Read-Write Listener]

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006

[MaxAdmin Listener]

type=listener

service=MaxAdmin Service

protocol=maxscaled

socket=default

啟動maxscale:

maxscale -f/etc/maxscale.cnf

ss -lnt可以看到4006端口啟動了。

可以使用之前的業務賬號連接到maxscale的4006端口上,例如:

mysql -utest -ptest -P 4006 -h 10.1.20.96

注意begin;select @@hostname;commit;這種的select會在主庫上執行。此外,執行存儲過程或者函數時候也是會自動在主庫去執行的。

執行SQL?> begin;select@@hostname; commit; insert into t2 select 3; select @@hostname;對應的在/var/log/maxscale/maxscale.log記錄如下:

很明顯的可以看:開啟事務、插入等操作會被轉發到主庫去處理。而單純的select則會被轉發到某個從庫去處理。

maxscale不能對master進行故障切換,可以配合使用MHA來進行。MHA的故障切換后,maxscale可以自動識別哪臺機器是master。然后自動將求發送到新的主從結構中。

maxscale的延遲檢測:

和pt-heartbeat的原理類似。maxscale會對master和slave上replication_heartbeat表的master_timestamp時間戳進行對比,相減得出差異。這個差異就是MySQL主從同步的延遲值。

select * frommaxscale_schema.replication_heartbeat;

從庫故障或延遲過大會被自動剔除:

我們可以在192.168.2.12上stop slave;稍等片刻,再執行查詢操作的話,會發現請求不會被轉發到192.168.2.12的mysql上,maxscale里面自動將這個機器踢下線了。如下圖:

192.168.2.12出現延遲,則在maxscale日志顯示如下:

192.168.2.12的3306端口不通(可能mysqld掛掉或者服務器宕機),則在maxscale日志顯示如下:

其他后補充進筆記的,管理maxscale的一些命令:

maxadmin -S /tmp/maxadmin.sock

總結

以上是生活随笔為你收集整理的mysql读写分离 存储过程_基于maxscale的读写分离部署笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。