mysql集羣技術:主主複製

mysql集羣技術:主主複製

主從複製,2臺服務器地位有差別,一主一從.
從服務器一是起到備份作用,一是起到分擔查詢壓力的作用.

接下來的配置,2臺服務器之間,沒有明顯的地位差距, 兩者可以同步對方的內容.
一般的格局如下圖:
兩臺服務器相互複製

Created with Raphaël 2.1.0主庫166主庫166主庫168主庫168主庫166更新,則主庫168也更新主庫166與主庫168的地位是平等的主庫168更新,則主庫166也更新

大致步驟:

1: 2臺服務器都設置上二進制日誌和relay日誌

2: 都設置上replcation賬號

3: 都設置對方爲自己的master

配置my.cnf

說白了就是把主服務器和從服務器配置整合在一起,讓他們都具有主服務器和從服務器的功能

#主庫166配置開始
# 給服務器起一個唯一的 id
server-id=166
# 開啓二進制日誌
log-bin=mysql-bin
# 指定日誌格式 有mixed|row|statement 推薦mixed
binlog-format=mixed
# 從服務器中繼日誌
realy-log=mysql-relay
#主庫166配置結束
#主庫168配置開始
server-id=168
# 開啓二進制日誌
log-bin=mysql-bin
# 指定日誌格式 有mixed|row|statement 推薦mixed
binlog-format=mixed
# 從服務器中繼日誌
realy-log=mysql-relay
#主庫168配置結束

在服務器上分別要複製的主服務器

master_log_file對應主服務器 show master status中的File
master_log_pos對應主服務器 … status中的position
master_host 分別對應主服務器

mysql> change master to
master_host='192.168.1.166',
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=0;
Query OK, 0 rows affected (0.00 sec)

主主複製下一定要注意避免的問題———同步衝突

例:

create table stu (
id int primary key auto_increment.
)......

2臺mysql地位相等, 假如2個請求同時到達2臺服務器,
請求的A節點, stu 的id爲1
請求的B 節點, stu的id爲1 ,
同步—>衝突

如何解決?

讓1臺服務器 1,3,5,7來增長
另1臺服務器 2,4,6,8來增長

一臺服務器:

set global auto_increment_increment = 2;#每步增長1
set global auto_increment_offset = 1;從1開始增長
set session auto_increment_increment = 2;
set session auto_increment_offset = 1;

另一臺服務器:

set global auto_increment_increment = 2;
set global auto_increment_offset = 2;
set session auto_increment_increment=2;
set session auto_increment_offset = 2;

注:auto-increment-increment 和 auto-increment-offset 要寫到配置文件中,防止下次重啓後失效.

操作後得到如下類似效果

mysql> select id,hit from news;
+----+-------------------+
| id | hit               |
| 1  | 100               |
| 3  | 200               |
| 4  | 300               |
| 6  | 400               |
+----+-------------------+
4 rows in set (0.00 sec)

如果後期需要加服務器,這個辦法就有限制了.
我們可以在業務邏輯上來解決,
以redis爲例, 我們可以專門構建一個 global:id
每次PHP插入Mysql前,先 incr->global:id, 得到一個不重複的id。
或則預先生成一個ID池,當需要時去取。

被動模式下的主主複製

是指 2臺服務器地位一樣, 但其中一臺爲只讀,並且業務中也只寫某1臺服務器.

好處: 如果供寫入的服務器出了故障,能迅速的切換到從服務器,
或者出於檢修等目的,把寫入功能切換到另一臺服務器也比較方便.

#主庫166配置開始
# 給服務器起一個唯一的 id
server-id=166
# 開啓二進制日誌
log-bin=mysql-bin
# 指定日誌格式 有mixed|row|statement 推薦mixed
binlog-format=mixed
# 從服務器中繼日誌
realy-log=mysql-relay
#主庫166配置結束
#主庫168配置開始
server-id=168
# 開啓二進制日誌
log-bin=mysql-bin
# 指定日誌格式 有mixed|row|statement 推薦mixed
binlog-format=mixed
# 從服務器中繼日誌
realy-log=mysql-relay


#-----------增加----------
#當變量對複製從服務器設置爲ON時,從服務器不允許更新,除非通過從服務器的線程或用戶擁有SUPER權限。可以確保從服務器不接受客戶端的更新命令。
read_only=ON
#主庫168配置結束
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章