第六章:Ansible部署主從復(fù)制

第一節(jié):部署數(shù)據(jù)庫(kù)主從的前提條件

1.兩臺(tái)或兩臺(tái)以上的數(shù)據(jù)庫(kù)實(shí)例
2.主庫(kù)要開(kāi)啟二進(jìn)制日志
3.主庫(kù)要有復(fù)制用戶(hù)
4.主庫(kù)的server_id和從庫(kù)不同
5.從庫(kù)需要在開(kāi)啟復(fù)制功能前,要獲取到主庫(kù)之前的數(shù)據(jù)(主庫(kù)備份,并且記錄binlog當(dāng)時(shí)位置)
6.從庫(kù)在第一次開(kāi)啟主從復(fù)制時(shí),時(shí)必須獲知主庫(kù):ip,port,user,password,logfile,pos


IP:10.0.0.51
Port:3306
User:rep
Password:123456
logFile:mysql-bin.000002    <--在主庫(kù)上獲取值
Pos:120                     <--在主庫(kù)上獲取值

7.從庫(kù)要開(kāi)啟相關(guān)線(xiàn)程:IO、SQL
8.從庫(kù)需要記錄復(fù)制相關(guān)用戶(hù)信息,還應(yīng)該記錄到上次已經(jīng)從主庫(kù)請(qǐng)求到哪個(gè)二進(jìn)制日志
9.從庫(kù)請(qǐng)求過(guò)來(lái)的binlog,首先要存下來(lái),并且執(zhí)行binlog,執(zhí)行過(guò)的信息保存下來(lái)

第二節(jié): 使用Ansible自動(dòng)部署主從復(fù)制

Ansible部署主從復(fù)制出現(xiàn)的問(wèn)題:由于主庫(kù)的logfile,和pos不是固定的所以,我們所寫(xiě)的ansible前提是要在主庫(kù)上執(zhí)行命令,進(jìn)行查看logfile和pos

show master status;

主機(jī)文件:

[mysql]
172.16.1.51
172.16.1.52

第三節(jié):使用register來(lái)注冊(cè)變量

這里我使用了register注冊(cè)變量,但是注冊(cè)的變量只能針對(duì)當(dāng)前主機(jī)生效。通過(guò)設(shè)置全局的fact變量來(lái)實(shí)現(xiàn)跨主機(jī)變量的使用,從而自動(dòng)獲取到logfile和pot。

#將logfile注冊(cè)成變量。
- name: Get logfile
  shell: mysql -uroot -p123456 -e "show master status;"|awk 'NR==2{print $1}'
  register: file
  when: ( ansible_hostname is match "mysql01" )
#將pot注冊(cè)成變量
- name: master-bin-pot
  shell: mysql -uroot -p123456 -e "show master status;"|awk 'NR==2{print $2}'
  register: pot
  when: ( ansible_hostname is match "mysql01" )

第四節(jié):跨主機(jī)變量的使用

1.通過(guò)set_fact模塊來(lái)設(shè)置全局的fact變量

- name: set facts file
  set_fact: masterbin={{ file.stdout_lines[0] }}   <--將獲取到的logfile賦值給masterbin
  when: ( ansible_hostname is match "mysql01")

- name: set facts position
  set_fact: position={{ pot.stdout_lines[0] }}     <--將獲取到的pot賦值給position
  when: ( ansible_hostname is match "mysql01")

2.從庫(kù)上執(zhí)行change master to 命令

- name: Changemaster to
  mysql_replication:
    login_user: root
    login_password: '123456'
    mode: changemaster
    master_user: web
    master_password: '123456'
    master_host: 172.16.1.51
    master_log_file: "{{ hostvars['172.16.1.51']['masterbin'] }}"  <--引用51的主機(jī)變量
    master_log_pos: "{{ hostvars['172.16.1.51']['position'] }}"    <--引用51的主機(jī)變量
  when: ( ansible_hostname is match "mysql02" )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容