Ansible部署zabbix-server端

文章描述了一个使用Ansible脚本在CentOS系统上部署Zabbix-server的过程,包括下载Zabbix仓库,安装相关软件包,配置MySQL数据库,创建Zabbix数据库和用户,并处理了在执行过程中遇到的表已存在错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文档作者:MINE_菜鸟
写作时间:2023/6/10
操作环境:Centos yml 食用方法看最后文章
1.因为剧本写的可能会受到系统环境影响,可能会出现问题,具体问题再看看吧,目前只遇到1个问题,文章最后写的处理办法。其他的还没发现。
2.写剧本首先要将你要执行的任务列出来,然后根据python模块一点一点去垒代码,最后测试达到效果,yml格式就不用说了,写多了,就会格式了。
3.只在server执行该剧本,别整错了 ,主机清单添加server机器

本来zabbix-server端就单台的,用不到Ansible,但是练习yml语法,所以写了部署zabbix-server端的yml剧本
 **_只在server执行该剧本,别整错了_**
  • zabbix-server剧本
--- 
- hosts: all 
  remote_user: root 
  gather_facts: yes  
  tasks:
  - name: wget zabbix_repo
    get_url: 
      url: "https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm"
      dest: "/tmp/zabbix-release-5.0-1.el7.noarch.rpm"
      validate_certs: no
  - name: yum install zabbix-release-5.0
    yum: 
      name: "/tmp/zabbix-release-5.0-1.el7.noarch.rpm"
      state: present
  - name: clean 
    shell: yum clean all;yum makecache fast
  - name: install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql  epel-release
    yum: 
      name: "{{ item }}"
      state: present
    with_items:
      #- epel-release
      - zabbix-agent 
      - zabbix-get
      - zabbix-sender
      - zabbix-server-mysql
      - bind-utils
  - name: touch mariadb.repo
    file: 
      path: "/etc/yum.repos.d/mariadb.repo"
      state: touch
      mode: 0644
  - name: insert mariadbrepo 
    lineinfile:
      path: "/etc/yum.repos.d/mariadb.repo"
      insertafter: EOF
      line: "[mariadb]"
  - name: insert baseurl gpgkey gpgcheck
    lineinfile:
      path: "/etc/yum.repos.d/mariadb.repo"
      insertafter: '[mariadb]'
      line: |
        name = MariaDB 
        baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64 
        gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB 
        gpgcheck=0
  - name: install mariadb
    yum:
     name: "MariaDB-server,MariaDB-client,MySQL-python"
     state: present 
  - name: touch /etc/my.cnf.d/server.cnf
    file:
      path: "/etc/my.cnf.d/server.cnf"
      state: "touch"
  - name: "insert mariadbdata"
    lineinfile:
      path: "/etc/my.cnf.d/server.cnf"
      insertafter: EOF
      line: "[mysqld]"
  - name: "mariadbdata"
    lineinfile:
      path: "/etc/my.cnf.d/server.cnf"
      insertafter: '[mysqld]'
      line: |
       skip_name_resolve = ON
       innodb_file_per_table = ON
       innodb_buffer_pool_size = 256M
       max_connections = 2000
       log-bin = master-log
  - name: "service start mariadb"
    service:
     name: mariadb
     state: started
  - name: "Login to MySQL and create a database" 
    mysql_db:
     name: zabbix
     encoding: utf8
     collation: utf8_bin
     login_user: root
     login_host: localhost
     state: present
  - name: "grant all zabbix and set password keer"
    mysql_user:
     name: zabbix
     password: "keer"
     priv: "zabbix.*:ALL"
     host: "%"
     login_host: localhost
     state: present
  - name: "exec flush privileges"
    community.mysql.mysql_query:
     query: "flush privileges;"
  - name: "zcat data"
    vars: 
     sqldata: "/usr/share/doc/zabbix-server-mysql-*/create.sql.gz"
    shell:
     zcat {{ sqldata }} | mysql -uzabbix -pkeer -h 127.0.0.1 zabbix 
  - name: "backup /etc/zabbix/zabbix_server.conf"
    vars:
     zabbix_server: "/etc/zabbix/zabbix_server.conf"
     zabbix_server_bak: "/etc/zabbix/zabbix_server.conf_bak"
    copy:
     src: "{{ zabbix_server }}"
     dest: "{{ zabbix_server_bak }}"
     backup: "yes"
  - name: "change ListenPort"
    vars:
     file: /etc/zabbix/zabbix_server.conf
     db_passwd: keer
     db_port: 3306
    shell: |
     sed -ri 's/# ListenPort=10051/ListenPort=10051/' {{ file }};
     #sed -ri 's/# SourceIP=/SourceIP="{{ ansible_default_ipv4 }}"/' {{ file }};
     #sed -ri 's/# DBHost=/DBHost="{{ ansible_default_ipv4 }}"/' {{ file }};
     sed -i "s/# SourceIP=/SourceIP=$(dig +short myip.opendns.com @resolver1.opendns.com)/" {{ file }};
     sed -i "s/# DBHost=/DBHost=$(dig +short myip.opendns.com @resolver1.opendns.com)/"   {{ file }};
     sed -ri 's/# DBPassword=/DBPassword={{ db_passwd }}/' {{ file }};
     sed -ri 's/# DBPort=/DBPort={{ db_port }}/' {{ file }}
  - name: systemctl start zabbix-server
    systemd:
     name: zabbix-server
     state: started
  #- name: replace enabled=1
  #   lineinfile:
  #   path: /etc/yum.repos.d/zabbix.repo  
  #   regexp: '^enabled='
  #   line: 'enabled=1'
  #   section: '[zabbix-frontend]'
  - name: change zabbix.repo 
    shell:
      sed -ri '11s/enabled=0/enabled=1/'  /etc/yum.repos.d/zabbix.repo
  - name: install centos-release-scl-rh centos-release-scl zabbix-web-mysql-scl zabbix-nginx-conf-scl
    package:
      name: "{{ item }}"
      state: present
    with_items:
     - centos-release-scl
     - zabbix-web-mysql-scl
     - zabbix-nginx-conf-scl
  - name: detele nginx model
    vars: 
      zabbix: /etc/opt/rh/rh-nginx116/nginx/nginx.conf
    shell:
      sed -i '38,80d'  {{ zabbix }}
  - name: change date and set
    vars:
      datetime: "/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf"
    shell: |
      sed -ri 's/listen.acl_users = apache/listen.acl_users = apache,nginx/' {{ datetime }}
      sed -ri 's/; php_value\[date.timezone\] = Europe\/Riga/php_value[date.timezone] = Asia\/Shanghai/' {{ datetime }}
  - name: systemctl restart zabbix-server zabbix-agent rh-nginx116-nginx rh-php72-php-fpm
    systemd: 
     name: zabbix-server
     state: restarted
     enabled: yes
  - name: restart zabbix-agent
    systemd:
     name: zabbix-agent
     state: restarted
     enabled: yes 
  - name: restart rh-nginx116-nginx
    systemd:
     name: rh-nginx116-nginx
     state: restarted
     enabled: yes
  - name: restart rh-php72-php-fpm
    systemd:
     name: rh-php72-php-fpm
     state: restarted
     enabled: yes

  • 最后试了一下mariadb启动了,但是接下来要进mariadb数据库操作,但是我不知道Ansible有没有关于python模块进入数据库,创建数据库,增加字段等操作,所以还没研究,等有时间在看,yml代码没问题,可以直接部署:(已经解决)

  • yml代码,等有时间在添加注释(估计没时间了)
  • ansible-galaxy collection install community.mysql 这个用到python的第三方模块community.mysql
  • #这个用到python的第三方模块community.mysql 才能执行授权sql语句(见代码区)
用法:
1.首先先安装mysql第三方模块   
ansible-galaxy collection install community.mysql

2.关闭主机密钥检测 (将注释打开)
vim /etc/ansible/ansible.cfg
host_key_checking = False

3.主机清单里面的要执行主机用户加上sudo权限。(vim /etc/sudoer) 例如被执行的用户为tom用户
tom     ALL=(ALL)       NOPASSWD: ALL
加上就行
4.执行剧本
ansible-playbook -i 指定主机清单 -b 剧本文件

-b 提权 或者--become


问题合集:目前就发现一个
"changed": true, "cmd": "zcat /usr/share/doc/zabbix-server-mysql-*/create.sql.gz | 
mysql -uzabbix -pkeer -h 127.0.0.1 zabbix", "delta": "0:00:00.021476", "end": 
"2023-06-12 23:39:54.322874", "msg": "non-zero return code", 
"rc": 1, "start": "2023-06-12 23:39:54.301398", "stderr": 
"ERROR 1050 (42S01) at line 1: Table 'users' already exists", 
"stderr_lines": ["ERROR 1050 (42S01) at line 1: Table 'users' already exists"],
"stdout": "", "stdout_lines": []}
报错一: 只要执行过这个剧本就会导致包这个错误,就是剧本已经导入zabbix数据库
需要进数据库删除,然后在执行剧本
mysql -h localhost
drop database zabbix;

运行效果图

1686656469778.png
1686656669425.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值