Ansible-角色部署MySQL主从
配置主机
[root@server ansible]# vim hosts
[mysql]
node1
node2
[my_master]
node1
[my_slave]
node2
创建角色
[root@server ansible]# ansible-galaxy init roles/mysqld
- Role roles/mysqld was created successfully
调用角色配置主从
[root@server ansible]# vim roles/mysqld/tasks/main.yml
[root@server ansible]# cat roles/mysqld/tasks/main.yml
---
# tasks file for roles/mysqld
- name: set firewalld
service:
name: firewalld
state: stopped
enabled: no
- name: stop selinux
lineinfile:
path: /etc/sysconfig/selinux
regexp: '^SELINUX='
line: 'SELINUX=disabled'
- name: setenforce 0
shell: setenforce 0
- name: install mariadb
yum:
name:
- mariadb-server
- mariadb
state: present
- name: copy moban1
template:
src: my_master.cnf.j2
dest: /etc/my.cnf
when: inventory_hostname in {{ groups.my_master }}
- name: copy moban2
template:
src: my_slave.cnf.j2
dest: /etc/my.cnf
when: inventory_hostname in {{ groups.my_slave }}
- name: restare mariadb
service:
name: mariadb
state: started
enabled: yes
- name: quanxian
shell: mysql -uroot -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '123456';"
- name: quanxian2
shell: mysql -uroot -e "GRANT REPLICATION SLAVE ON *.* TO 'zhan'@'slave' IDENTIFIED BY '123456';"
when: inventory_hostname in {{ groups.my_master }}
- name: quanxian3
shell: mysql -uroot -e "CHANGE MASTER TO MASTER_HOST='192.168.193.130', MASTER_USER='zhan', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;"
when: inventory_hostname in {{ groups.my_slave }}
- name: start
shell: mysql -uroot -e "start slave;"
when: inventory_hostname in {{ groups.my_slave }}
模板文件
[root@server ansible]# vim roles/mysqld/templates/my_master.cnf.j2
[root@server ansible]# cat roles/mysqld/templates/my_master.cnf.j2
[mysqld]
log_bin=mysql-bin
server_id=20
[root@server ansible]# vim roles/mysqld/templates/my_slave.cnf.j2
[root@server ansible]# cat roles/mysqld/templates/my_slave.cnf.j2
[mysqld]
log_bin=mysql-bin
server_id=30
调用mysqld角色
[root@server ansible]# vim mysql.yml
[root@server ansible]# cat mysql.yml
---
- name: use mysqld
hosts: mysql
roles:
- mysqld
[root@server ansible]# ansible-playbook mysql.yml
PLAY [use mysqld] *************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [node1]
ok: [node2]
TASK [mysqld : set firewalld] *************************************************************************
changed: [node1]
changed: [node2]
TASK [mysqld : stop selinux] **************************************************************************
changed: [node1]
changed: [node2]
TASK [mysqld : setenforce 0] **************************************************************************
changed: [node2]
changed: [node1]
TASK [mysqld : install mariadb] ***********************************************************************
changed: [node2]
changed: [node1]
TASK [mysqld : copy moban1] ***************************************************************************
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_master }}
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_master }}
skipping: [node2]
changed: [node1]
TASK [mysqld : copy moban2] ***************************************************************************
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_slave }}
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_slave }}
skipping: [node2]
changed: [node1]
TASK [mysqld : restare mariadb] ***********************************************************************
changed: [node1]
changed: [node2]
TASK [mysqld : quanxian] ******************************************************************************
changed: [node2]
changed: [node1]
TASK [mysqld : quanxian2] *****************************************************************************
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_master }}
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_master }}
skipping: [node2]
changed: [node1]
TASK [mysqld : quanxian3] *****************************************************************************
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_slave }}
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_slave }}
skipping: [node2]
changed: [node1]
TASK [mysqld : start] *********************************************************************************
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_slave }}
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {%
%}. Found: inventory_hostname in {{ groups.my_slave }}
skipping: [node2]
changed: [node1]
PLAY RECAP ********************************************************************************************
node1 : ok=12 changed=11 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=7 changed=6 unreachable=0 failed=0 skipped=5 rescued=0 ignored=0
查看
[root@node1 ~]# cat /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server_id=20
[root@node2 ~]# cat /etc/my.cnf
[mysqld]
log_bin=mysql-bin
server_id=30
[root@node2 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.3.28-MariaDB-log MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.193.130
Master_User: zhan
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: node2-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 256
Until_Condition: None