创建目录结构
mkdir ansible
cd ansible/
mkdir ansible_roles
cd ansible_roles/
# 创建三个角色
ansible-galaxy role init roles/mariadb-nodes
ansible-galaxy role init roles/mariadb-server
ansible-galaxy role init roles/mariadb-slave
创建以后,我们使用tree命令查看目录结构。如果没有tree命令,就安装一个。
[root@master01 ansible_roles]# tree
.
└── roles
├── mariadb-nodes
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── README.md
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ ├── tests
│ │ ├── inventory
│ │ └── test.yml
│ └── vars
│ └── main.yml
...
安装mariadb-server的主从复制集群
在roles目录下,使用自定义的hosts文件。
内容如下
[root@master01 ansible_roles]# cat hosts
[mariadb-nodes]
192.168.10.144 server_id=1 type=master
192.168.10.145 server_id=2 type=node
192.168.10.146 server_id=3 type=node
[mariadb-server]
192.168.10.144
[mariadb-slave]
192.168.10.145
192.168.10.146
在tasks目录下增加tasks文件
[root@master01 tasks]# pwd
/root/ansible/ansible_roles/roles/mariadb-nodes/tasks
[root@master01 tasks]# ll
total 20
-rw-r--r--. 1 root root 277 Oct 14 05:53 configure.yml
-rw-r--r--. 1 root root 75 Oct 14 03:36 enable.yml
-rw-r--r--. 1 root root 83 Oct 14 00:36 install.yml
-rw-r--r--. 1 root root 135 Oct 14 02:03 main.yml
-rw-r--r--. 1 root root 241 Oct 14 03:37 prepare.yml
分别修改每个task文件的内容
[root@master01 tasks]# cat main.yml
---
# tasks file for roles/mariadb-server
- include: prepare.yml
- include: install.yml
- include: enable.yml
- include: configure.yml
root@master01 tasks]# cat configure.yml
- name: ensure conf.d
shell: mkdir -p /etc/my.cnf.d
- name: copy server id file
copy:
content: |
[mysqld]
server_id={{ server_id }}
dest: /etc/my.cnf.d/server_id.cnf
- name: start mariadb
service:
name: mariadb
state: restarted
[root@master01 tasks]# cat enable.yml
- name: enable mariadb-server
service:
name: mariadb
enabled: yes
[root@master01 tasks]# cat install.yml
- name: install mariadb-server
yum:
name: mariadb-server
state: present
[root@master01 tasks]# cat prepare.yml
- name: firewall enable 3306
service:
name: firewalld
enabled: no
state: stopped
- name: stop selinux
shell: setenforce 0
- name: disable selinux
shell: |
sed -i.bak '/LINUX/s/enforcing/disabled/g' /etc/selinux/config
修改handler文件
[root@master01 tasks]# cd ..
[root@master01 mariadb-nodes]# ls
defaults files handlers meta README.md tasks templates tests vars
[root@master01 mariadb-nodes]# cd handlers/
[root@master01 handlers]# ls
main.yml
[root@master01 handlers]# cat main.yml
---
# handlers file for roles/mariadb-server
- name: restart mariadb
service:
name: mariadb
state: restarted
修改mariadb-server/tasks下的任务
[root@master01 files]# cd ../../..
[root@master01 ansible_roles]# cd roles/mariadb-server/tasks/
[root@master01 tasks]# ll
total 4
-rw-r--r--. 1 root root 361 Oct 14 05:11 main.yml
[root@master01 tasks]# cat main.yml
---
# tasks file for mariadb-server
- name: create slave replication user
shell: |
mysql -e "grant replication slave,super,reload on *.* to slave@'%' identified by '123456'; "
mysql -e "flush privileges; "
- name: login enabling
template:
src: mysql-bin.cnf.jk2
dest: /etc/my.cnf.d/mysql-bin.cnf
notify:
- restart mariadb
[root@master01 tasks]# cat ../templates/mysql-bin.cnf.jk2
[mysqld]
log-bin = mysql-bin
[root@master01 tasks]# cat ../handlers/main.yml
---
# handlers file for mariadb-server
- name: restart mariadb
service:
name: mariadb
state: restarted
修改mariadb-slave
角色的task文件
[root@master01 mariadb-slave]# cd tasks/
[root@master01 tasks]# ls
main.yml
[root@master01 tasks]# cat main.yml
---
# tasks file for mariadb-slave
- name: copy template
template:
src: changemasterto.jk2
dest: /tmp/changemaster
mode: 755
- name:
shell: /tmp/changemaster
修改模板文件
[root@master01 tasks]# cd ../
defaults/ files/ handlers/ meta/ README.md tasks/ templates/ tests/ vars/
[root@master01 tasks]# cat ../templates/changemasterto.jk2
ip=`echo "{{ groups['mariadb-server'] }}" |sed 's/\[//g' |sed 's/\]//g' ` ;
sql="change master to master_host=$ip,master_user='slave',master_password='123456' ;" ;
echo $sql | mysql
mysql -e " start slave ; show slave status\G " ;
增加总的playbook文件
[root@master01 ansible_roles]# pwd
/root/ansible/ansible_roles
[root@master01 ansible_roles]# ll
total 8
-rw-r--r--. 1 root root 178 Oct 14 03:49 hosts
-rw-r--r--. 1 root root 159 Oct 14 03:40 mariadb-nodes.yml
drwxr-xr-x. 7 root root 94 Oct 14 00:40 roles
[root@master01 ansible_roles]# cat mariadb-nodes.yml
- hosts: mariadb-nodes
roles:
- mariadb-nodes
- hosts: mariadb-server
roles:
- mariadb-server
- hosts: mariadb-slave
roles:
- mariadb-slave
运行脚本
[root@master01 ansible_roles]# ansible-playbook -i hosts mariadb-nodes.yml
[WARNING]: Invalid characters were found in group names but not replaced, use -vvvv to see details
[DEPRECATION WARNING]: "include" is deprecated, use include_tasks/import_tasks instead. See https://docs.ansible.com/ansible-
core/2.14/user_guide/playbooks_reuse_includes.html for details. This feature will be removed in version 2.16. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [mariadb-nodes] *************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.146]
ok: [192.168.10.144]
TASK [mariadb-nodes : firewall enable 3306] **************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.144]
ok: [192.168.10.146]
TASK [mariadb-nodes : stop selinux] **********************************************************************************************************************************
changed: [192.168.10.146]
changed: [192.168.10.145]
changed: [192.168.10.144]
TASK [mariadb-nodes : disable selinux] *******************************************************************************************************************************
changed: [192.168.10.145]
changed: [192.168.10.144]
changed: [192.168.10.146]
TASK [mariadb-nodes : install mariadb-server] ************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.144]
ok: [192.168.10.146]
TASK [mariadb-nodes : enable mariadb-server] *************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.144]
ok: [192.168.10.146]
TASK [mariadb-nodes : ensure conf.d] *********************************************************************************************************************************
changed: [192.168.10.146]
changed: [192.168.10.144]
changed: [192.168.10.145]
TASK [mariadb-nodes : copy server id file] ***************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.146]
ok: [192.168.10.144]
TASK [mariadb-nodes : start mariadb] *********************************************************************************************************************************
changed: [192.168.10.145]
changed: [192.168.10.146]
changed: [192.168.10.144]
PLAY [mariadb-server] ************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************
ok: [192.168.10.144]
TASK [mariadb-server : create slave replication user] ****************************************************************************************************************
changed: [192.168.10.144]
TASK [mariadb-server : login enabling] *******************************************************************************************************************************
ok: [192.168.10.144]
PLAY [mariadb-slave] *************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.146]
TASK [mariadb-slave : copy template] *********************************************************************************************************************************
ok: [192.168.10.145]
ok: [192.168.10.146]
TASK [mariadb-slave : shell] *****************************************************************************************************************************************
changed: [192.168.10.145]
changed: [192.168.10.146]
PLAY RECAP ***********************************************************************************************************************************************************
192.168.10.144 : ok=12 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.10.145 : ok=12 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.10.146 : ok=12 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
测试,到客户端192.168.10.146
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.3.39-MariaDB 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: Waiting for master to send event
Master_Host: 192.168.10.144
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 663
Relay_Log_File: mariadb-relay-bin.000007
Relay_Log_Pos: 962
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
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: 663
Relay_Log_Space: 1572
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: No
Gtid_IO_Pos:
Replicate_Do_Domain_Ids:
Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Slave_DDL_Groups: 2
Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 0
1 row in set (0.001 sec)
附件下载
[安装包下载](curl ‘http://pan.itshine.cn:5080/?explorer/share/fileOut&shareID=64h6PiQQ&path=%7BshareItemLink%3A64h6PiQQ%7D%2F%E8%BF%90%E7%BB%B4%E4%BA%A4%E4%BB%98%2Fansible%2Fansible.tar.gz' > ‘./ansible.tar.gz’ “安装包下载”)
作者:严锋 创建时间:2023-10-14 12:10
最后编辑:严锋 更新时间:2025-05-09 15:48
最后编辑:严锋 更新时间:2025-05-09 15:48