自动化运维工具ansible (4) 自动化部署zabbix

zabbix的部署
首先进入角色目录创建角色。

[ansible@server10 roles]$ ansible-galaxy init zabbix-server
- Role zabbix-server was created successfully

首先编写任务,本身第一步是安装,但是安装包自带的没有,所以第一步配置yum源。将所有软件包放在一个地方创建一个yum仓库。

[ansible@server10 ~]vim roles/zabbix-server/tasks/main.yml
---
- name: zabbix yum repo
  yum_repository:
    name: zabbix
    description: zabbix-4.4
    baseurl: http://192.168.122.1/pub/pag/4.4
    gpgcheck: no

任务编写完成,创建一个playbook文件

[ansible@server10 ~]$ cat zabbix.yml 
---
- hosts: server11
  roles:
    - role: zabbix-server  ##将源放到节点11上。

边写边推。

[ansible@server10 ~]$ ansible-playbook zabbix.yml

推完之后到相应的节点进行查看

[root@server11 ~]# cat /etc/yum.repos.d/zabbix.repo 
[zabbix]
baseurl = http://192.168.122.1/pub/pag/4.4
gpgcheck = 0
name = zabbix-4.4

将yum仓库设置完成后继续编写tasks文件。

- name: install zabbix-server zabbix-agent  ##安装server和agent
  yum:
    name:
      - zabbix-server
      - zabbix-agent
    state: present

- name: create zabbix databases ##创建数据库
  mysql_db:
    name: zabbix       ##数据库的名字
    state: present

- name: create zabbix user   ##创建用户
  mysql_user:
    name: zabbix             ##用户名
    host: localhost          
    password: "{{dbpasswd}}"  ##用户密码,这里设立变量不给明文更安全
    priv: 'zabbix.*:ALL'      ##将zabbix数据库的权限给出
    state: present

因为上面有变量,所以要将变量拿出设置。

[ansible@server10 ~]$ vim /home/ansible/roles/zabbix-server/vars/main.yml
---
dbpasswd: aekhg777

创建完成之后推一下。

[ansible@server10 ~]$ ansible-playbook zabbix.yml 
TASK [zabbix-server : create zabbix databases] ************************************************
fatal: [server11]: FAILED! => {"changed": false, "msg": "unable to find /root/.my.cnf. Exception message: (2002, \"Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)\")"}

在创建数据库的时候出错了,说不能连接到数据库,原因是没有启动和安装数据库。所以推远端的时候要一步步来,不然就忘了。
在playbook文件中添加

 pre_tasks:  ##在其他tasks之前运行
    - name: install mysql-server  ##安装数据库
      yum:
        name: mariadb-server
        state: present

    - name: config mysql_server ##配置数据库文件
      lineinfile:         ##添加文件的模块
        path: /etc/my.cnf.d/server.cnf  ##更改哪个文件
        insertafter: '^\[mysqld\]'   ##更改哪一行的设置,就是定位功能
        line: character-set-server=utf8  ##添加的文本信息

    - name: start mysql-server   ##启动数据库
      service:
        name: mariadb
        state: started

设置完成后再次推送远端,

[ansible@server10 ~]$ ansible-playbook zabbix.yml 
PLAY RECAP ************************************************************************************
server11                   : ok=8    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

这次就完成了推送,没有报错。切换到server11中进行查看。

[root@server11 ~]# mysql -u zabbix -paekhg777
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 119
Server version: 5.5.64-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 databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| zabbix             |
+--------------------+
3 rows in set (0.01 sec)

MariaDB [(none)]> use zabbix;
Database changed
MariaDB [zabbix]> show tables;
Empty set (0.01 sec)

这样的工作完成之后,下一步我没要将数据库进行初始化。数据库的初始化可以自动进行导入。首先我们在server11中找到zabbix数据库的文件。/usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz这个压缩文件。接下来进行初始化。
编辑tasks文件

- name: init zabbix db  ##初始化zabbix数据库
  mysql_db:
    name: zabbix
    state: import  ##导入
    target: /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz  ##导入的文件,这个文件在安装好之后自己生成,而且导入的时候支持压缩文件。

导入完成后进行查看。

MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |
| application_discovery      |
| application_prototype      |
| application_template       |

数据库已经导入完成,但是这个初始化只能导入一次,按理来说不能进行多次导入。当我们再次导入的时候会报错。

TASK [zabbix-server : init zabbix db] *********************************************************
fatal: [server11]: FAILED! => {"changed": false, "msg": "\ngzip: stdout: Broken pipe\n"}

所以我们在tasks中创建数据库的时候添加一个触发器。将初始化数据库的步骤作为触发器。

- name: create zabbix databases
  mysql_db:
    name: zabbix
    state: present
  notify: init zabbix db  ##调用触发器

数据库初始化完成后还是启动服务。
在tasks中编写

- name: config zabbix-server  ##配置服务
  template:
    src: zabbix_server.conf.j2   ##模版
    dest: /etc/zabbix/zabbix_server.conf
  notify: restart zabbix-server  ##触发器

- name: start zabbix-server zabbix-agent  ##启动两个服务
  service:
    name: "{{item}}"
    state: started
  loop:
    - zabbix-server
    - zabbix-agent

编写完成设置触发器

- name: restart zabbix-server
  service:
    name: zabbix-server
    state: restarted  ##更改完配置文件后重启服务

设置模版

cd /home/ansible/roles/zabbix-server/templates/
[ansible@server10 templates]$ sudo scp server11:/etc/zabbix/zabbix_server.conf .  ##将配置文件复制过来并改为jinja2后缀
[ansible@server10 templates]$ sudo chown ansible zabbix_server.conf  ##更改拥有人,使普通用户可以编辑。

进入模版文件添加DBpasswd中的密码,使可以登陆数据库。
设置完成后推送远端。
全部完成之后我们还缺前端服务。
直接编写playbook文件

  post_tasks:
    - name: install zabbix front
      yum:
        name:
          - zabbix-web-mysql
          - httpd
        state: present

    - name: config zabbix front
      lineinfile:
        path: /etc/httpd/conf.d/zabbix.conf
        insertafter: '# php_value'
        line: '        php_value date.timezone Asia/Shanghai'
      notify: restart httpd

    - name: start httpd
      service:
        name: httpd
        state: started

  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted

    - name: restart mysql-server
      service:
        name: mariadb
        state: restarted

编写完成进行推送,之后进入网页进行查看。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
用户名和密码分别是admin和zabbix进行登陆。

下来是所有配置
[ansible@server10 ~]$ vim roles/zabbix-server/tasks/main.yml ##任务文件

---
- name: zabbix yum repo
  yum_repository:
    name: zabbix
    description: zabbix-4.4
    baseurl: http://192.168.122.1/pub/pag/4.4
    gpgcheck: no


- name: install zabbix-server zabbix-agent
  yum:
    name:
      - zabbix-server
      - zabbix-agent
    state: present

- name: create zabbix databases
  mysql_db:
    name: zabbix
    state: present
  notify: init zabbix db

- name: create zabbix user
  mysql_user:
    name: zabbix
    host: localhost
    password: "{{dbpasswd}}"
    priv: 'zabbix.*:ALL'
    state: present

- name: config zabbix-server
  template:
    src: zabbix_server.conf.j2
    dest: /etc/zabbix/zabbix_server.conf
  notify: restart zabbix-server

- name: start zabbix-server zabbix-agent
  service:
    name: "{{item}}"
    state: started
  loop:
    - zabbix-server
    - zabbix-agent

[ansible@server10 ~]$ vim roles/zabbix-server/vars/main.yml ##变量文件

---
dbpasswd: aekhg777

[ansible@server10 ~]$ ll roles/zabbix-server/templates/

-rw-r----- 1 ansible root 17578 3月  10 14:37 zabbix_server.conf.j2 ##模版文件

[ansible@server10 ~]$ vim roles/zabbix-server/handlers/main.yml ##触发器文件

---
- name: init zabbix db
  mysql_db:
    name: zabbix
    state: import
    target: /usr/share/doc/zabbix-server-mysql-4.4.1/create.sql.gz
    single_transaction: yes

- name: restart zabbix-server
  service:
    name: zabbix-server
    state: restarted

[ansible@server10 ~]$ vim zabbix.yml ##playbook文件

---
- hosts: test
  roles:
    - role: zabbix-server
  pre_tasks:
    - name: install mysql-server
      yum:
        name: mariadb-server
        state: present

    - name: config mysql_server
      lineinfile:
        path: /etc/my.cnf.d/server.cnf
        insertafter: '^\[mysqld\]'
        line: character-set-server=utf8
      notify: restart mysql-server

    - name: start mysql-server
      service:
        name: mariadb
        state: started
  
  post_tasks:
    - name: install zabbix front
      yum:
        name:
          - zabbix-web-mysql
          - httpd
        state: present

    - name: config zabbix front
      lineinfile:
        path: /etc/httpd/conf.d/zabbix.conf
        insertafter: '# php_value'
        line: 'php_value date.timezone Asia/Shanghai'
      notify: restart httpd

    - name: start httpd
      service:
        name: httpd
        state: started

  handlers:
    - name: restart httpd
      service:
        name: httpd
        state: restarted

    - name: restart mysql-server
      service:
        name: mariadb
        state: restarted
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值