mariadb主從架構

mariadb主從架構(異步)和集羣

通常應用的場所是網站,主的機器是能夠寫能夠讀,從的機器能夠讀,也能夠寫,但不會同步。只有主的機器增刪改,從的機器纔會同步。node

主從至少三個線程:dump、I/O thread、 SQLthreadmysql

binary log:二進制日誌,對於二進制文件的記錄是串行(一條一條)記錄。sql

relay log:中繼日誌數據庫

原理:I/O線程先讀到二進制日誌(Binary log),而後dump線程給I/O線程返回,返回後寫入到中繼日誌(Relay log),然後SQL線程進行讀取,實現回放。bootstrap

存在這麼一種狀況

當我只有一臺主的時候,從節點不少,這樣壓力全都集中到了主的身上,這樣對主的性能產生了很大的影響,如何解決???vim

 

blackhole引擎的特色:不能讀,不能寫。就利用這個特色只存儲二進制文件。後端

延遲

  延遲有好有壞,當我有大量的數據進入數據時,個人二進制日誌是不能同時完成的,由於它是串行的就是一條一條執行,這樣,主節點就會形成延遲,主節點已經延遲了,那麼從節點在讀取二進制日誌的時候,就更延遲了。centos

好處:在我誤操做的時候,能夠先切斷主從之間的鏈接,然後利用延遲從主節點修改個人誤操做,力挽狂瀾!!!緩存

 

異步:我給你發一個請求,你無須給我返回請求,我只是給你發送請求,好處是效率高,壞處是安全性低。安全

時時同步:我給你發一個請求,你必須給我返回一個信號,我才進行我下面的事情,好處是安全性高,缺點是效率低。

主節點存在單點故障隱患,如何排除?

第一種方案:

MHA 主機高可用,通常佈置在另一臺機器上

經過MHA監控主從狀態。當一個主節點死掉以後,會根據MHA的機制,從後端的從機器裏調出一臺成爲主。

如何監控:經過一個配置文件。

第二種方案:適合增刪改較少的。

互爲主備(主主架構)這種架構會形成數據的不一致。

相互有二進制文件便可。

第三種方案:

galera集羣:一條事物同時提交(時時同步)

主從架構的配置

主節點:

mysql主從配置 yum配置 [mariadb] name=MariaDB baseurl=http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1 服務器1: MariaDB01 192.168.24.8 服務器2: MariaDB02 192.168.24.9 操做系統: CentOS7.3 數據庫版本: MariaDB-10.3.7 主從關係: MariaDB01爲主,MariaDB02爲從 MariaDB01 1. 修改配置文件 vi /etc/my.cnf.d/server.cnf 在[mysqld]下加入如下 server-id=1 log-bin=mysql-bin 2. 重啓mysql服務 service mysqld restart 3.建立主從鏈接賬號與受權 CREATE USER 'slave'@'%' IDENTIFIED BY 'slave'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; flush privileges; 4.show master status

從節點:

MariaDB02 1. 修改配置文件 vi /etc/my.cnf.d/server.cnf server-id=2
2. 重啓mysql服務 service mysqld restart 3.登陸數據庫 mysql -uroot -proot4. 創建主從鏈接 CHANGE MASTER TO MASTER_HOST='192.168.24.8', MASTER_USER='slave', MASTER_PASSWORD='slave', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=1443; start slave; 5.驗證!!! create database test01 use test01 create table students(id int(10), name char(20), age int(10)) 以後查看從節點是否有test01數據庫和students表 6.查看mysql二進制log mysqlbinlog /var/lib/mysql/mysql-bin.000001 #若是出現不一樣步能夠執行如下步驟 stop slave set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; start slave 或者 stop slave; mysql> change master to master_host='192.168.24.8', master_user='user', master_password='pwd', master_port=3306, master_log_file='mysql-bin.000008', master_log_pos=483; start slave 

show slave status\G 這是用豎列的方式查看這兩個線程有沒有啓動

mariadb galera集羣(時時同步)

多主的概念:哪一個都是老大

對於一條事物,同時提交,幾乎無延遲。缺點性能會降低。缺點是必須得保證機器硬件的一致。不了會影響效率。

如何實現同步?

經過wsrep協議進行同步。端口號爲4567

配置galera集羣

第一步:設置主機名host解析,三臺節點都要設置,能互相解析到ip加主機名。

vim /etc/host

ip node1

ip node2

ip node3

第二步:關閉三臺機器的mariadb

第三步:打開mariadb配置文件

vim /etc/my.cnf.d/server.cnf

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so     #galera的庫文件的地址

wsrep_cluster_address="gcomm://ip1,ip2,ip3"   #各節點的ip

wsrep_node_name=node1             #節點主機名  

wsrep_node_address=本機ip                 #本機節點ip

binlog_format=row            #二進制日誌設置爲行模式

row模式 行模式是安全性最高的,但性能是最低的

語句模式

折中模式

default_storage_engine=InnoDB    #使用的默認引擎

innodb_autoinc_lock_mode=2      #性能最好

wsrep_slave_threads=1              #並行複製線程數

innodb_flush_log_at_trx_commit=0   #0.log buffer(緩存)將每秒一次地寫入log file中,而且log file的flush(刷到磁盤)操做同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁盤的操做。

                     #1:每次事務提交時MySQL都會把log buffer的數據寫入log file,而且flush(刷到磁盤)中去,該模式爲系統默認。

                      #2:每次事務提交時MySQL都會把log buffer的數據寫入log file,可是flush(刷到磁盤)操做並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁盤)操做

innodb_buffer_pool_size=120M       #設置緩存池大小

wsrep_sst_method=rsync             #遠程同步

wsrep_causal_reads=ON         #避免各個節點的數據不一致,這種狀況須要等待全同步複製

將此文件複製到mariadb-2、mariadb-3,注意要把 wsrep_node_name 和 wsrep_node_address 改爲相應節點的 hostname 和 ip。

第四步:啓動集羣服務

啓動 MariaDB Galera Cluster 服務:

第一次啓動要用初始化:mysqld_safe --wsrep_cluster_address=gcomm://ip1,ip2,ip3 >/dev/null &

/bin/galera_new_cluster

若是galera_new_cluster 報錯

vim /var/lib/mysql/grastate.dat

把safe_to_bootstrap更改成1

# GALERA saved state

version: 2.1

uuid:    a393feef-f639-11e8-9b89-4e75f9b8fb0f

seqno:   -1

safe_to_bootstrap: 1

第五步:查看端口4567和3306是否啓動,把其他節點的mariadb啓動,開始測試glare集羣是否搭建成功。 

galera命令(數據庫中使用)

show status like "wsrep_ready";  查看glarea是否啓動

show status like "wsrep_cluster_size";  目前集羣機器數

show status like "wsrep%"; 查看集羣狀態

show status like "wsrep_incoming_addresses"; 查看連接的主機ip
相關文章
相關標籤/搜索