怎样做分类网站,哪个网站做3d模型,做网站定制的一般什么价位,家电照明电子通用网站模板Ansible部署Zabbix
前言
今年的比赛考了一道Ansible部署Zabbix的题目#xff0c;要求就是用两台centos7.5的云主机#xff0c;一台叫ansible#xff0c;一台叫node#xff0c;使用对应的软件包#xff0c;通过ansible节点控制node节点安装zabbix服务。这道题还是算比较简…Ansible部署Zabbix
前言
今年的比赛考了一道Ansible部署Zabbix的题目要求就是用两台centos7.5的云主机一台叫ansible一台叫node使用对应的软件包通过ansible节点控制node节点安装zabbix服务。这道题还是算比较简单的题不过也是有坑就是了。
Ansible 是一个开源的自动化工具用于配置管理、应用程序部署、任务自动化和 IT 编排可以简化和自动化繁琐的运维任务。 关于zabbix的了解和基础的搭建我在这篇文章中有讲1X云计算运维与开发(中级)实战案例——Zabbix分布式监控系统搭建_实战案例——zabbix 分布式监控系统-CSDN博客 不了解的可以去看看看完你就会发现Ansible部署Zabbix根本没有难点主要就是避坑。
虚拟机使用的是自行创建的CentOS7如果你不会那虚拟机创建的流程可以参考我这篇文章职业技能大赛云计算赛项实战——OpenStack搭建-CSDN博客 需要的镜像Centos7.5为CentOS-7-x86_64-DVD-1804.iso可从阿里镜像站下载centos-vault-7.5.1804-isos-x86_64安装包下载_开源镜像站-阿里云 (aliyun.com) 因为我没有镜像也没那么多流量下载所以我用7.4的CentOS-7-x86_64-DVD-1708替代需要用到的软件包https://pan.baidu.com/s/1y9OckLD3HmIq40g_y-XYbQ?pwd2s9q 提取码2s9q
我为什么说这道题坑呢因为当时我还没有想到把里面的文件搞到本地的方法只能在他们那个平台做这道题题目要求用7.5的云主机而那个平台申请的主机全是7.9的。这就导致在后面安装软件包时出现依赖关系错误比如安装zabbix需要php的版本为5.4.16-46虽然在软件包里携带的zabbix软件仓库有但7.9的系统源的版本是5.4.16-48安装时系统默认安装更高版本的又比如mariadb需要的版本是5.5.56-2但7.9的版本更高是1:5.5.68-1同时系统还默认安装了更高版本的mariadb-libs。最后我是通过指定7.5的系统源再把mariadb-libs删掉做出来的。 7.5的系统源里php的版本是5.4.16-45mariadb则一样是5.5.56-2安装时默认安装最新版本不会影响到过程 我用7.4的替代php的版本更低是php-5.4.16-42也不会影响
节点规划如下
主机名IP/24节点ansible192.168.100.21ansible节点node192.168.100.22node节点
操作过程
更改主机名
#两个节点修改好主机名
[rootlocalhost ~]# hostnamectl set-hostname ansible
[rootlocalhost ~]# bash
[rootansible ~]# [rootlocalhost ~]# hostnamectl set-hostname node
[rootlocalhost ~]# bash
[rootnode ~]# 上传软件包
将我提供的软件包上传至ansible节点
解压软件包
#ansible包含了安装ansible的软件包以及依赖我们把ansbile的软件仓库解压至/opt目录
[rootansible ~]# tar -zxf ansible.tar.gz -C /opt
[rootansible ~]# ls /opt/ansible/
packages repodata
#install_zabbix.tar.gz是ansible执行任务需要用到的文件我们把它解压到主目录即可
[rootansible ~]# tar -zxf install_zabbix.tar.gz
[rootansible ~]# ls install_zabbix
group_vars install_zabbix.yaml roles
[rootansible ~]# ls install_zabbix/roles/zabbix/
files handlers meta tasks templates vars
[rootansible ~]# ls install_zabbix/roles/zabbix/files/
yum.repo zabbix.tar.gz
#files目录存放着需要复制到目标节点的静态文件这里包含仓库文件yum.repo和zabbix的软件包及其依赖包的压缩包它们将在执行任务时被直接复制到node节点上
#handlers目录存放着处理器handlers任务处理器会在特定条件下触发通常用于重启服务或执行其他操作这道题还用不到它
#meta目录包含角色的元数据如依赖关系和其他角色相关信息同样用不到
#tasks目录包含角色的主要任务列表定义了角色需要执行的各种操作和配置步骤
#templates目录存放着Jinja2模板文件这些模板可以在运行时渲染成目标节点上的配置文件使得配置文件可以根据变量或条件动态生成
#vars目录包含角色范围内的变量这些变量可以被任务和模板引用用于参数化配置和操作这里是被group_vars目录里的all文件替代了我们也用不到配置YUM源
#删除系统自带源
[rootansible ~]# rm -rf /etc/yum.repos.d/*
#创建新的仓库文件
[rootansible ~]# vi /etc/yum.repos.d/local.repo
[ansible]
nameansible
baseurlfile:///opt/ansible
gpgcheck0
enabled1
#检查可用性
[rootansible ~]# yum clean all yum repolist
源标识 源名称 状态
ansible ansible 22
repolist: 22
#安装ansible
[rootansible ~]# yum -y install ansible配置主机映射
#编辑系统的主机映射文件
[rootansible ~]# cat /etc/hosts EOF192.168.100.21 ansible192.168.100.22 nodeEOF
#编辑ansible的主机清单文件可以说是ansible的主机映射文件
#我们定义一个zabbix的主机组把node节点的ip写上
[rootansible ~]# cat /etc/ansible/hosts EOF[zabbix]192.168.100.22EOF配置免密登录
#执行ansible剧本的时候需要远程连接主机所以我们配置ssh免密登录
[rootansible ~]# ssh-keygen
...
Enter file in which to save the key (/root/.ssh/id_rsa):#回车
...
Enter passphrase (empty for no passphrase):#回车
...
Enter same passphrase again:#回车
...
#将公钥复制给node节点
[rootansible ~]# ssh-copy-id rootnode
...
Are you sure you want to continue connecting (yes/no)? yes
...
rootnodes password: #输入node节点密码配置node节点
#我们做一下node节点的环境准备
#挂载好node节点的系统源
#先创建给挂载目录
[rootnode ~]# mkdir /opt/centos
#挂载系统镜像
[rootnode ~]# mount -o loop /dev/sr0 /opt/centos
#如果你是使用CentOS-7-x86_64-DVD-2009.iso镜像在7.9的系统进行本实验的话你还需要删掉系统自带的mariadb-libs因为它的版本太高了yum -y remove mariadb-libs完善脚本
这道题简单的一部分原因就是我们不用从头写剧本提供给我们的软件包已经写好了大部分我们只需要补充关键部分即可。
#我们回到ansible节点把ansible的文件完善一下
[rootansible ~]# cd install_zabbix
[rootansible install_zabbix]#
#all文件是全局变量文件可以通过设置值写剧本的时候用变量替代这里写个数据库密码的变量就行了数据库主机名的变量没必要就模板文件有一处用到我们直接删掉。
[rootansible install_zabbix]# vi group_vars/all
DB_PASS: zabbix
#变量和值直接有空格看清楚了
#yum.repo文件是后面我们要传给node节点的仓库文件
[rootansible install_zabbix]# vi roles/zabbix/files/yum.repo
[zabbix]
namezabbix
baseurl
gpgcheck0
enabled1
#我们把它补充好
[rootansible install_zabbix]# vi roles/zabbix/files/yum.repo
[zabbix]
namezabbix
baseurlfile:///root/zabbix
gpgcheck0
enabled1
[centos]
namecentos
baseurlfile:///opt/centos
gpgcheck0
enabled1#main文件是我们安装zabbix的任务列表
[rootansible install_zabbix]# vi roles/zabbix/tasks/main.yaml
---###- name: selinux configshell: {{item}}with_items:- sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config- name: Selinux Config Setenforceshell: getenforceregister: info#执行getenforce命令查看Selinux的执行模式并把值赋给info- name: when_Selinuxshell: setenforce 0when: info[stdout] Enforcing#当info的值为Enforcing时执行setenforce 0命令临时关闭selinux- name: firewalldshell: systemctl stop firewalld systemctl disable firewalldignore_errors: yes###这段是关闭防火墙和Selinux的操作不需要我们补齐#通过name的描述我们可知这里是移动系统默认源的操作需要我们补齐- name: mv yum configshell: mv #这里是复制仓库文件的地方需要我们补齐命令把补充完整的yum.repo移过来- name: copy repo copy: #这里则是移动zabbix软件源压缩包的地方需要我们补齐命令把zabbix.tar.gz移过来- name: Copy Repo Tarcopy: #这里是解压zabbix.tar.gz的地方需要我们补齐- name: Decompression Packageshell: #这里是安装http服务并启动的地方需要我们补齐- name: Yum Install httpdyum: name:- httpd state: - name: Start Servicesystemd:name: httpdstate: restartedenabled: yes###- name: Install Mariadbyum: name: - mariadb-server- mariadb state: present- name: Start Servicesystemd:name: mariadbstate: restartedenabled: yes###这一段都不需要补齐是安装数据库并启动的操作###- name: Config Mariadb Usershell: mysqladmin -uroot password {{ DB_PASS }}ignore_errors: yes- name: Mariadb Create zabbixshell: mysql -uroot -p{{ DB_PASS }} -e ignore_errors: yes- name: privileages mariadbshell: {{ item }}with_items:- mysql -uroot -p{{ DB_PASS }} -e - mysql -uroot -p{{ DB_PASS }} -e ###这段是配置数据库的地方需要我们补齐命令###{{ item }}是Jinja2的模板语法可以依次操作with_items写的的命令而不用写两段任务。#这里是安装zabbix服务的地方需要我们补齐需要安装的组件- name: Install zabbixyum: name:- - - - state: present#这里是导入数据库文件的地方无需补齐 - name: sql config mariadbshell: chdir/usr/share/doc/zabbix-server-mysql-3.4.15/ zcat create.sql.gz |mysql -uroot -p{{ DB_PASS }} zabbixignore_errors: yes#这里是设置时区的地方无需补齐- name: Php Timezoneshell: {{item}}with_items:- sed -i s/^;date.timezone.*/;date.timezoneRPC/g /etc/php.ini- sed -i s/#\ php_value/php_value/g /etc/httpd/conf.d/zabbix.conf- sed -i s/date.timezone.*/date.timezone Asia\/Shanghai/g /etc/httpd/conf.d/zabbix.conf#这里是将模板文件复制到node节点成为其zabbix配置文件的地方需要我们补齐目标路径- name: Config zabbix_server.conftemplate: srczabbix_server.conf.j2 dest#这里是重启http和zabbix服务的地方无需我们补齐- name: Restart Httpd And zabbix-serversystemd:name: {{item}}state: restartedenabled: yeswith_items:- httpd- zabbix-server#将其补齐后的内容如下
---- name: selinux configshell: {{item}}with_items:- sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config- name: Selinux Config Setenforceshell: getenforceregister: info- name: when_Selinuxshell: setenforce 0when: info[stdout] Enforcing- name: firewalldshell: systemctl stop firewalld systemctl disable firewalldignore_errors: yes- name: mv yum configshell: mv /etc/yum.repos.d/* /media/- name: copy repo copy: srcyum.repo dest/etc/yum.repos.d/- name: Copy Repo Tarcopy: srczabbix.tar.gz dest/root/- name: Decompression Packageshell: tar -zxf /root/zabbix.tar.gz- name: Yum Install httpdyum: name:- httpd state: present- name: Start Servicesystemd:name: httpdstate: restartedenabled: yes- name: Install Mariadbyum: name: - mariadb-server- mariadb state: present- name: Start Servicesystemd:name: mariadbstate: restartedenabled: yes- name: Config Mariadb Usershell: mysqladmin -uroot password {{ DB_PASS }}ignore_errors: yes- name: Mariadb Create zabbixshell: mysql -uroot -p{{ DB_PASS }} -e create database zabbix character set utf8 collate utf8_bin;ignore_errors: yes- name: privileages mariadbshell: {{ item }}with_items:- mysql -uroot -p{{ DB_PASS }} -e grant all privileges on zabbix.* to zabbix% identified by zabbix;- mysql -uroot -p{{ DB_PASS }} -e grant all privileges on zabbix.* to zabbixlocalhost identified by zabbix;- name: Install zabbixyum: name:- zabbix-server-mysql- zabbix-web-mysql- zabbix-agentstate: present- name: sql config mariadbshell: chdir/usr/share/doc/zabbix-server-mysql-3.4.15/ zcat create.sql.gz |mysql -uroot -p{{ DB_PASS }} zabbixignore_errors: yes- name: Php Timezoneshell: {{item}}with_items:- sed -i s/^;date.timezone.*/;date.timezoneRPC/g /etc/php.ini- sed -i s/#\ php_value/php_value/g /etc/httpd/conf.d/zabbix.conf- sed -i s/date.timezone.*/date.timezone Asia\/Shanghai/g /etc/httpd/conf.d/zabbix.conf- name: Config zabbix_server.conftemplate: srczabbix_server.conf.j2 dest/etc/zabbix/zabbix_server.conf- name: Restart Httpd And zabbix-serversystemd:name: {{item}}state: restartedenabled: yeswith_items:- httpd- zabbix-server#如果你了解zabbix的搭建流程且看过我之前搭建zabbix的文章你就会发现补充的部分与我那篇文章的命令是一模一样的#zabbix_server.conf.j2模板文件是我们复制给node节点当zabbix的配置文件的
#我们编辑一下先只需要添加101行DBHost的值即可
#添加前
[rootansible install_zabbix]# sed -n 100,104p roles/zabbix/templates/zabbix_server.conf.j2
DBNamezabbix
DBHost
DBPasswordzabbix
DBSocket/tmp/mysql.sock
#添加后
[rootansible install_zabbix]# sed -n 100,104p roles/zabbix/templates/zabbix_server.conf.j2
DBNamezabbix
DBHostlocalhost
DBPasswordzabbix
DBSocket/tmp/mysql.sock执行剧本
#首先带你们看一下剧本的内容
[rootansible install_zabbix]# vi install_zabbix.yaml
#YAML文件的开始标记
---
#这里指定了执行这个剧本的主机组我们前面在/etc/ansible/hosts文件里定义了zabbix主机组里面包含了node节点
- hosts: zabbix
#这里则是指定了执行任务时使用的用户名执行任务时会用root用户连接对方主机remote_user: root
#制定了要应用的角色列表这个实验我们有且只有一个zabbix角色ansible会找到zabbix角色下的task目录执行里面的main.yaml任务roles:- zabbix#在执行剧本前我们使用--syntax-check检查一下剧本有没有语法错误
[rootansible install_zabbix]# ansible-playbook install_zabbix.yaml --syntax-check
#如果显示这样就说明语法没有问题有语法错误的话会给你指出具体错误的地方
playbook: install_zabbix.yaml
#OK一切准备就绪我们执行剧本
[rootansible install_zabbix]# ansible-playbook install_zabbix.yaml
...
#执行最后会给我们一个总结报告总共执行了20个任务19个导致了实际更改有1个被跳过(临时关闭selinux那里因为我提前关了不满足when的条件于是跳过了)
#其他的unreachable是主机不可达的数量。failed是任务失败的数量。rescued是被救回的任务数量这个需要在任务中使用rescue块在原先任务执行到一半失败了就会执行rescue块的内容进行恢复操作避免剧本执行中断。我们这个实验没有使用自然就没有救回的了。ignored是被忽略的任务数量我们在任务后面多处添加了ignore_errors: yes如果那个任务执行失败也会继续执行剧本相应的这个数字也会增加。
PLAY RECAP *****************************************************************************************
192.168.100.22 : ok20 changed19 unreachable0 failed0 skipped1 rescued0 ignored0验证实验结果
我们打开浏览器在地址栏输入node节点ip/zabbix如果跳转到了zabbix的安装界面则说明我们剧本执行成功没有任何问题了 后语
关于zabbix的一些基础使用设置中文界面和监控主机啥的我也在这篇文章也有提及感兴趣的可以看一下1X云计算运维与开发(中级)实战案例——Zabbix分布式监控系统搭建_实战案例——zabbix 分布式监控系统-CSDN博客
ansible搭建应用考察的题目还有部署ELK、Kafka、ZooKeeper、FTP还有Mariadb的其实只要了解了ansible这些都不难后续可能会再讲个ELK的。