1. 程式人生 > >MaridDB主從復制,雙主模型,半同步的配置

MaridDB主從復制,雙主模型,半同步的配置

mariadb 主從復制 半同步

一、主從復制

MariaDB是將客戶端上傳的數據從主節點復制一份到從節點,從而可以提高讀性能,而這種方式並不能提升寫性能,因為每一份數據都會在從節點上寫一份

缺點:為了增加讀寫性能,數據庫都是將數據 先存入內存中,隨後同步到數據文件中,也就是磁盤上,兩者同步是異步同步,也就是說,從節點上的數據是落後於主節點的

復制過程:

客戶端寫入數據---->主服務器的事務日誌內存---->事物日誌文件---->同步到數據文件---->通過二進制文件---從服務器的IO線程---->中繼日誌--->通過SQL線程來重放中繼日誌

實現:

主數據庫服務器

[root@centos7 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=log-bin
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@"192.168.1.%" IDENTIFIED BY 'centos';  #授權主從復制賬戶
MariaDB [(none)]> FLUSH PRIVILEGES;  #刷新
MariaDB [(none)]> SHOW MASTER STATUS;  #查看當前使用的是哪一個二進制日誌,還有POS的位置,需要在從節點使用  
+----------------+----------+--------------+------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----------+--------------+------------------+
| log-bin.000001 |      489 |              |                  |
+----------------+----------+--------------+------------------+

從服務器

[root@centos7 ~]# vim /etc/my.cnf
server_id=2
relay_log=relay-log
read_only=ON
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.151',MASTER_USER='test',MASTER_PASSWORD='centos',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=489;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
  Slave_IO_Running: Yes  #這兩項需要為yes,代表開啟IO線程和SQL線程
  Slave_SQL_Running: Yes

測試在主節點創建數據庫或者插入數據,即可同步

二、雙主模型

雙主模型,容易造成數據不一致,一般不建議使用

主機A

[root@centos7 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=log-bin
relay_log=relay-log

MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@"192.168.1.%" IDENTIFIED BY 'centos';
CHANGE MASTER TO MASTER_HOST='192.168.1.152',MASTER_USER='test',MASTER_PASSWORD='centos',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=489;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;

主機B

[root@centos7 ~]# vim /etc/my.cnf
[mysqld]
server_id=2
log_bin=log-bin
relay_log=relay-log

MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO test@"192.168.1.%" IDENTIFIED BY 'centos';
CHANGE MASTER TO MASTER_HOST='192.168.1.151',MASTER_USER='test',MASTER_PASSWORD='centos',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=489;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;


三、半同步復制

半同步復制是有一臺主機同步寫磁盤,當客戶端寫入數據,主數據庫服務器將立刻將數據寫入指定從服務器,立即同步,然後在相應客戶端,以證明有一份完整的數據,以防主服務器故障

實現半同步復制需要向數據庫添加主服務器添加semisync_master.so,從服務器添加semisync_slave.so

主服務器

MariaDB [none]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
MariaDB [none]> SET GLOBAL rpl_semi_sync_master_enabled=ON;	#開啟同步寫數據文件
MariaDB [none]> 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_no_slave | ON    |
+------------------------------------+-------+	

從服務器

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
			
MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';                        
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+			
			
MariaDB [none]> STOP SLAVE IO_THREAD;
MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
MariaDB [none]> START SLAVE IO_THREAD;
MariaDB [none]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';                        
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+


MaridDB主從復制,雙主模型,半同步的配置