文章目录
环境:
node1 | 192.168.47.20 | Master |
---|---|---|
node2 | 192.168.47.30 | slave |
1、首先定义好主机清单组
[student@server ansible]$ cat inventory
[mysql]
node1
node2
[mysql_master]
node1
[mysql_slave]
node2
//手动定义角色
[student@server roles]$ ansible-galaxy init mysql
**定义数据库主从复制优先级**
```sql
[student@server mysql]$ cat templates/slave.cnf.j2
[mysqld]
log_bin=mysql-bin
server_id=10 ——数值越小的优先级越高
[student@server mysql]$ cat templates/master.cnf.j2
[mysqld]
log_bin=mysql-bin
server_id=20
2、编写主任务
[student@server mysql]$ cat tasks/main.yml
---
# tasks file for mysql
- name: mount
mount:
src: /dev/cdrom
path: /mnt
fstype: iso9660
state: mounted
- name: clear repo
shell:
cmd: rm -rf /etc/yum.repos.d/*
- name: set repo1
yum_repository:
file: server
name: aa
description: aa1
baseurl: file:///mnt/BaseOS
enabled: yes
gpgcheck: no
- name: set repo1
yum_repository:
file: server1
name: aa1
description: aa11
baseurl: file:///mnt/AppStream
enabled: yes
gpgcheck: no
- name: stop selinux
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=disabled
- name: install mariadb
yum:
name:
- mariadb-server
- mariadb
state: present
- name: cp config
template:
src: master.cnf.j2 ——将定义好的模板覆盖掉数据库配置文件
dest: /etc/my.cnf
when: inventory_hostname in {
{ groups.mysql_master }}
#匹配清单里的主机组中的mysql_master组的node1,如匹配成功则将主优先级赋予node1
- name: cp config2
template:
src: slave.cnf.j2
dest: /etc/my.cnf
when: inventory_hostname in {
{ groups.mysql_slave }} #同理
- name: start mariadb
service:
name: mariadb
state: restarted
enabled: yes
- name: grant for root
shell:
cmd: mysql -uroot -e "grant all privileges on *.* to root@'%' identified by 'redhat';"
#授予数据库root用户所有权限并设置密码
- name: master
shell:
cmd: mysql -uroot -e "grant replication slave on *.* to 'user'@'slave' identified by 'redhat';"
when: inventory_hostname in {
{ groups.mysql_master }} ——确保数据库使用的node1
将主数据授予从数据库,并设置slave用户
- name: slave
shell:
cmd: mysql -uroot -e "change master to master_host='master',master_user='user',master_password='redhat';"
when: inventory_hostname in {
{ groups.mysql_slave }}
#收到数据库数据后确定其是否连接主库,master_host表对应master
- name: start slave
shell:
cmd: mysql -uroot -e "start slave;"
when: inventory_hostname in {
{ groups.mysql_slave }}
3、测试运行结果
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: master
Master_User: user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File:
Read_Master_Log_Pos: 4
Relay_Log_File: node1-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes