创建目录结构

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