2024广东省职业技能大赛云计算赛项实战——Ansible部署Zabbix

news2024/10/6 1:38:22

Ansible部署Zabbix

前言

今年的比赛考了一道Ansible部署Zabbix的题目,要求就是用两台centos7.5的云主机,一台叫ansible,一台叫node,使用对应的软件包,通过ansible节点控制node节点安装zabbix服务。这道题还是算比较简单的题,不过也是有坑就是了。

Ansible 是一个开源的自动化工具,用于配置管理、应用程序部署、任务自动化和 IT 编排,可以简化和自动化繁琐的运维任务。
关于zabbix的了解和基础的搭建,我在这篇文章中有讲:1+X云计算运维与开发(中级)实战案例——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?pwd=2s9q
提取码: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-45,mariadb则一样,是5.5.56-2,安装时默认安装最新版本,不会影响到过程
我用7.4的替代,php的版本更低,是php-5.4.16-42,也不会影响

节点规划如下:

主机名IP/24节点
ansible192.168.100.21ansible节点
node192.168.100.22node节点

操作过程

更改主机名

#两个节点修改好主机名
[root@localhost ~]# hostnamectl set-hostname ansible
[root@localhost ~]# bash
[root@ansible ~]# 

[root@localhost ~]# hostnamectl set-hostname node
[root@localhost ~]# bash
[root@node ~]# 

上传软件包

将我提供的软件包上传至ansible节点
在这里插入图片描述

解压软件包

#ansible包含了安装ansible的软件包以及依赖,我们把ansbile的软件仓库解压至/opt目录
[root@ansible ~]# tar -zxf ansible.tar.gz -C /opt
[root@ansible ~]# ls /opt/ansible/
packages  repodata
#install_zabbix.tar.gz是ansible执行任务需要用到的文件,我们把它解压到主目录即可
[root@ansible ~]# tar -zxf install_zabbix.tar.gz
[root@ansible ~]# ls install_zabbix
group_vars  install_zabbix.yaml  roles
[root@ansible ~]# ls install_zabbix/roles/zabbix/
files  handlers  meta  tasks  templates  vars
[root@ansible ~]# 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源

#删除系统自带源
[root@ansible ~]# rm -rf /etc/yum.repos.d/*
#创建新的仓库文件
[root@ansible ~]# vi /etc/yum.repos.d/local.repo
[ansible]
name=ansible
baseurl=file:///opt/ansible
gpgcheck=0
enabled=1
#检查可用性
[root@ansible ~]# yum clean all && yum repolist
源标识                                源名称                                状态
ansible                               ansible                               22
repolist: 22
#安装ansible
[root@ansible ~]# yum -y install ansible

配置主机映射

#编辑系统的主机映射文件
[root@ansible ~]# cat >> /etc/hosts << EOF
> 192.168.100.21 ansible
> 192.168.100.22 node
> EOF
#编辑ansible的主机清单文件,可以说是ansible的主机映射文件
#我们定义一个zabbix的主机组,把node节点的ip写上
[root@ansible ~]# cat >> /etc/ansible/hosts << EOF
> [zabbix]
> 192.168.100.22
> EOF

配置免密登录

#执行ansible剧本的时候需要远程连接主机,所以我们配置ssh免密登录
[root@ansible ~]# 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节点
[root@ansible ~]# ssh-copy-id root@node
...
Are you sure you want to continue connecting (yes/no)? yes
...
root@node's password: #输入node节点密码

配置node节点

#我们做一下node节点的环境准备
#挂载好node节点的系统源
#先创建给挂载目录
[root@node ~]# mkdir /opt/centos
#挂载系统镜像
[root@node ~]# 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的文件完善一下
[root@ansible ~]# cd install_zabbix
[root@ansible install_zabbix]# 
#all文件是全局变量文件,可以通过设置值,写剧本的时候用变量替代,这里写个数据库密码的变量就行了,数据库主机名的变量没必要,就模板文件有一处用到,我们直接删掉。
[root@ansible install_zabbix]# vi group_vars/all 
DB_PASS: zabbix
#变量和值直接有空格,看清楚了
#yum.repo文件是后面我们要传给node节点的仓库文件
[root@ansible install_zabbix]# vi roles/zabbix/files/yum.repo 
[zabbix]
name=zabbix
baseurl=
gpgcheck=0
enabled=1
#我们把它补充好:
[root@ansible install_zabbix]# vi roles/zabbix/files/yum.repo 
[zabbix]
name=zabbix
baseurl=file:///root/zabbix
gpgcheck=0
enabled=1
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
#main文件是我们安装zabbix的任务列表
[root@ansible install_zabbix]# vi roles/zabbix/tasks/main.yaml 
---
	###
  - name: selinux config
    shell: "{{item}}"
    with_items:
      - sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

  - name: Selinux Config Setenforce
    shell: getenforce
    register: info
    #执行getenforce命令查看Selinux的执行模式,并把值赋给info

  - name: when_Selinux
    shell: setenforce 0
    when: info['stdout'] == 'Enforcing'
    #当info的值为Enforcing时,执行setenforce 0命令临时关闭selinux

  - name: firewalld
    shell: systemctl stop firewalld && systemctl disable firewalld
    ignore_errors: yes
    ###这段是关闭防火墙和Selinux的操作,不需要我们补齐
    
	#通过name的描述我们可知这里是移动系统默认源的操作,需要我们补齐
  - name: mv yum config
    shell: mv     
	#这里是复制仓库文件的地方,需要我们补齐命令,把补充完整的yum.repo移过来
  - name: copy repo 
    copy: 
	#这里则是移动zabbix软件源压缩包的地方,需要我们补齐命令,把zabbix.tar.gz移过来
  - name: Copy Repo Tar
    copy: 
	#这里是解压zabbix.tar.gz的地方,需要我们补齐
  - name: Decompression Package
    shell: 

	#这里是安装http服务并启动的地方,需要我们补齐
  - name: Yum Install httpd
    yum: 
      name:
        - httpd 
      state: 
  - name: Start Service
    systemd:
      name: httpd
      state: restarted
      enabled: yes
	
	###
  - name: Install Mariadb
    yum: 
      name: 
        - mariadb-server
        - mariadb  
      state: present
  - name: Start Service
    systemd:
      name: mariadb
      state: restarted
      enabled: yes
     ###这一段都不需要补齐,是安装数据库并启动的操作

	###
  - name: Config Mariadb User
    shell: mysqladmin -uroot password {{ DB_PASS }}
    ignore_errors: yes

  - name: Mariadb Create zabbix
    shell: mysql -uroot -p{{ DB_PASS }} -e ""
    ignore_errors: yes
    
  - name: privileages mariadb
    shell: "{{ item }}"
    with_items:
      - mysql -uroot -p{{ DB_PASS }} -e ""
      - mysql -uroot -p{{ DB_PASS }} -e ""
	###这段是配置数据库的地方,需要我们补齐命令
	###"{{ item }}"是Jinja2的模板语法,可以依次操作with_items写的的命令,而不用写两段任务。
	
	#这里是安装zabbix服务的地方,需要我们补齐需要安装的组件
  - name: Install zabbix
    yum: 
      name:
        - 
        - 
        - 
        - 
      state: present
  #这里是导入数据库文件的地方,无需补齐   
  - name: sql config mariadb
    shell: chdir=/usr/share/doc/zabbix-server-mysql-3.4.15/ zcat create.sql.gz |mysql -uroot -p{{ DB_PASS }} zabbix
    ignore_errors: yes

  #这里是设置时区的地方,无需补齐
  - name: Php Timezone
    shell: "{{item}}"
    with_items:
      - sed -i "s/^;date.timezone.*/;date.timezone=RPC/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.conf
    template: src=zabbix_server.conf.j2 dest=

  #这里是重启http和zabbix服务的地方,无需我们补齐
  - name: Restart Httpd And zabbix-server
    systemd:
      name: "{{item}}"
      state: restarted
      enabled: yes
    with_items:
      - httpd
      - zabbix-server
#将其补齐后的内容如下:
---
  - name: selinux config
    shell: "{{item}}"
    with_items:
      - sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

  - name: Selinux Config Setenforce
    shell: getenforce
    register: info

  - name: when_Selinux
    shell: setenforce 0
    when: info['stdout'] == 'Enforcing'

  - name: firewalld
    shell: systemctl stop firewalld && systemctl disable firewalld
    ignore_errors: yes

  - name: mv yum config
    shell: mv /etc/yum.repos.d/* /media/

  - name: copy repo 
    copy: src=yum.repo dest=/etc/yum.repos.d/

  - name: Copy Repo Tar
    copy: src=zabbix.tar.gz dest=/root/

  - name: Decompression Package
    shell: tar -zxf /root/zabbix.tar.gz


  - name: Yum Install httpd
    yum: 
      name:
        - httpd 
      state: present
  - name: Start Service
    systemd:
      name: httpd
      state: restarted
      enabled: yes


  - name: Install Mariadb
    yum: 
      name: 
        - mariadb-server
        - mariadb  
      state: present
  - name: Start Service
    systemd:
      name: mariadb
      state: restarted
      enabled: yes

  - name: Config Mariadb User
    shell: mysqladmin -uroot password {{ DB_PASS }}
    ignore_errors: yes

  - name: Mariadb Create zabbix
    shell: mysql -uroot -p{{ DB_PASS }} -e "create database zabbix character set utf8 collate utf8_bin;"
    ignore_errors: yes
    
  - name: privileages mariadb
    shell: "{{ 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 zabbix@localhost identified by 'zabbix';"

  - name: Install zabbix
    yum: 
      name:
        - zabbix-server-mysql
        - zabbix-web-mysql
        - zabbix-agent
      state: present
  - name: sql config mariadb
    shell: chdir=/usr/share/doc/zabbix-server-mysql-3.4.15/ zcat create.sql.gz |mysql -uroot -p{{ DB_PASS }} zabbix
    ignore_errors: yes

  - name: Php Timezone
    shell: "{{item}}"
    with_items:
      - sed -i "s/^;date.timezone.*/;date.timezone=RPC/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.conf
    template: src=zabbix_server.conf.j2 dest=/etc/zabbix/zabbix_server.conf

  - name: Restart Httpd And zabbix-server
    systemd:
      name: "{{item}}"
      state: restarted
      enabled: yes
    with_items:
      - httpd
      - zabbix-server

#如果你了解zabbix的搭建流程,且看过我之前搭建zabbix的文章,你就会发现补充的部分,与我那篇文章的命令是一模一样的
#zabbix_server.conf.j2模板文件是我们复制给node节点当zabbix的配置文件的
#我们编辑一下先,只需要添加101行DBHost的值即可
#添加前:
[root@ansible install_zabbix]# sed -n '100,104p' roles/zabbix/templates/zabbix_server.conf.j2
DBName=zabbix
DBHost=
DBPassword=zabbix
DBSocket=/tmp/mysql.sock
#添加后:
[root@ansible install_zabbix]# sed -n '100,104p' roles/zabbix/templates/zabbix_server.conf.j2
DBName=zabbix
DBHost=localhost
DBPassword=zabbix
DBSocket=/tmp/mysql.sock

执行剧本

#首先带你们看一下剧本的内容
[root@ansible 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检查一下剧本有没有语法错误
[root@ansible install_zabbix]# ansible-playbook install_zabbix.yaml --syntax-check
#如果显示这样就说明语法没有问题,有语法错误的话会给你指出具体错误的地方
playbook: install_zabbix.yaml
#OK,一切准备就绪,我们执行剧本
[root@ansible 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             : ok=20   changed=19   unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

验证实验结果

我们打开浏览器,在地址栏输入node节点ip/zabbix,如果跳转到了zabbix的安装界面,则说明我们剧本执行成功,没有任何问题了

在这里插入图片描述

后语

关于zabbix的一些基础使用,设置中文界面和监控主机啥的,我也在这篇文章也有提及,感兴趣的可以看一下:1+X云计算运维与开发(中级)实战案例——Zabbix分布式监控系统搭建_实战案例——zabbix 分布式监控系统-CSDN博客

ansible搭建应用考察的题目还有部署ELK、Kafka、ZooKeeper、FTP还有Mariadb的,其实只要了解了ansible,这些都不难,后续可能会再讲个ELK的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1847414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缓存雪崩(主从复制、哨兵模式(脑裂)、分片集群)

缓存雪崩&#xff1a; 在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 方法一&#xff1a; 给不同key的TTL添加随机值&#xff0c;以此避免同一时间大量key失效。&#xff08;用于解决同一时间大量key过期&…

环境配置04:Pytorch下载安装

说明&#xff1a; 显存大于4G的建议使用GPU版本的pytorch&#xff0c;低于4G建议使用CPU版本pytorch&#xff0c;直接使用命令安装对应版本即可 GPU版本的pytorch的使用需要显卡支持&#xff0c;需要先安装CUDA&#xff0c;即需要完成以下安装 1.查看已安装CUDA版本 GPU对应…

Zabbix 监控 Kubernetes 集群

Zabbix 监控 Kubernetes 集群 Zabbix作为一个成熟且功能强大的监控系统&#xff0c;被许多企业广泛采用。它能够对各种IT基础设施进行全面的监控&#xff0c;包括服务器、网络设备、应用程序等。而将Zabbix与Kubernetes结合&#xff0c;可以实现对Kubernetes集群的全面监控&am…

qt 简单实验 画一个等边三角形

1.概要 2.代码 2.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr)…

3.3 Ubuntu24使用kubeadm部署高可用K8S集群

Ubuntu24使用kubeadm部署高可用K8S集群 使用kubeadm部署一个k8s集群&#xff0c;3个master1个worker节点。 1. 环境信息 操作系统&#xff1a;ubuntu24.04内存: 2GBCPU: 2网络: 能够互访&#xff0c;能够访问互联网 hostnameip备注k8s-master1192.168.0.51master1k8s-maste…

可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)

在当今金融科技迅速发展的时代&#xff0c;自动机器学习&#xff08;AutoML&#xff09;逐步成为了信贷风控领域的重要工具。随着大数据和人工智能技术的进步以及信贷风险环境的快速变化&#xff0c;传统人工建模模式的时效性已经难以应对复杂多变的挑战。自动机器学习框架将数…

【linux】操作系统使用wget下载网络文件,内核tcpv4部分运行日志

打印日志代码及运行日志(多余日志被删除了些)&#xff1a; 登录 - Gitee.comhttps://gitee.com/r77683962/linux-6.9.0/commit/55a53caa06c1472398fac30113c9731cb9e3b482 测试步骤和手段&#xff1a; 1、清空 kern.log&#xff1b; 2、使用wget 下载linux-6.9.tar.gz&…

芯片方案SIC88336血氧仪方案

血氧仪利用红外线光源照射患者手指末梢&#xff0c;在经过血液的时候&#xff0c;光线会被血液中的氧合血红蛋白和脱氧血红蛋白吸收。传感器感知到吸收的光强度变化&#xff0c;并将其转化为电信号发送给主机。主机通过处理这些信号&#xff0c;计算出血氧饱和度值&#xff0c;…

数字贸易变革:新模式、新机遇、新发展

树莓集团通过积极探索数字贸易的新模式和新机遇&#xff0c;不断推动数字贸易的发展和创新。未来&#xff0c;树莓集团将继续秉承开放、合作、共赢的理念&#xff0c;与全球优秀的企业和合作伙伴共同探索新的发展路径&#xff0c;为实现数字贸易的升级贡献一份力量。 一、数字贸…

使用ASP.NET Core封装接口请求参数格式

有些人获取接口请求参数是直接使用数据库实体类来获取的&#xff0c;这种方式虽然写起来很方便&#xff0c;但是会导致swagger接口文档出现很多没用的参数&#xff0c;让人看着不舒服。 比如&#xff0c;新增用户只需要传用户名、密码、邮箱就可以了&#xff0c;但是实体类也包…

C语言之顺序结构以及程序调试的debug宏

一&#xff1a;C语言中的顺序结构 1:最浅显的顺序结构理解&#xff1a;三种结构之一 &#xff08;1&#xff09;代码执行的时候没有遇到判断跳转或者循环&#xff0c;默认是顺序执行的。执行完上一句则开始执行下一句。 &#xff08;2&#xff09;顺序结构说明cpu的工作状态&a…

GD32学习

参考视频13.立创开发板GD32教程&#xff1a;串口配置_哔哩哔哩_bilibili 固件库跟用户手册基本上差不多&#xff0c;只不过用用户手册编写程序的话会更加的底层&#xff0c;固件库的话就是把一些函数封装起来&#xff0c;用的时候拿过来即可&#xff0c;目前我还没有找到固件库…

AI日报|我国人工智能核心产业规模已达5784亿元!阿里通义Qwen2成斯坦福大模型榜单最强开源模型!

⭐️搜索“可信AI进展“关注公众号&#xff0c;动手做AI Agent书籍&#xff0c;限量免费赠送&#xff01;快来参与吧&#xff5e; 文章链接&#xff1a; 福利来啦&#xff01;动手做AI Agent书籍&#xff0c;限量免费赠送&#xff01; 今日热点&#xff1a; 我国人工智能企业…

6.21 移动语义与智能指针

//先构造&#xff0c;再拷贝构造//利用"hello"这个字符串创建了一个临时对象//并复制给了s3//这一步实际上new了两次String s3 "hello"; 背景需求&#xff1a; 这个隐式创建的字符串出了该行就直接销毁掉&#xff0c;效率比较低 可以让_pstr指向这个空间…

AI赋能前端:你的Chrome 控制台需要AI(爱)

像会永生那样去学习,像明天就要死亡那样去生活。——圣雄甘地 大家好,我是柒八九。一个专注于前端开发技术/Rust及AI应用知识分享的Coder 此篇文章所涉及到的技术有 AI(Gemini)ChromeDevTool🪜魔法接码平台因为,行文字数所限,有些概念可能会一带而过亦或者提供对应的学习…

刘亦菲新剧玫瑰的故事

刘亦菲新剧《玫瑰的故事》&#xff1a;开放结局&#xff0c;无限遐想 当刘亦菲再次踏入荧屏&#xff0c;与导演汪俊携手打造的《玫瑰的故事》便引发了无数观众的期待与关注。这部剧不仅汇聚了众多实力派演员&#xff0c;更以其独特的剧情和精致的制作成为了近期热门的话题。《…

生成模型的两大代表:VAE和GAN

生成模型 给定数据集&#xff0c;希望生成模型产生与训练集同分布的新样本。对于训练数据服从\(p_{data}(x)\)&#xff1b;对于产生样本服从\(p_{model}(x)\)。希望学到一个模型\(p_{model}(x)\)与\(p_{data}(x)\)尽可能接近。 这也是无监督学习中的一个核心问题——密度估计…

服装连锁实体店如何做好会员营销管理

在现代商业环境中&#xff0c;会员营销管理已经成为服装连锁实体店提升客户忠诚度和增加销售额的重要手段。随着消费者对个性化服务需求的不断增加&#xff0c;如何通过有效的会员营销管理来满足客户需求、提高客户满意度和增强品牌粘性&#xff0c;已经成为服装连锁实体店亟需…

FFmpeg源码:AV_RB32宏定义分析

一、AV_RB32宏定义的作用 AV_RB32是FFmpeg源码中经常出现的一个宏&#xff0c;其定义如下&#xff1a; #ifndef AV_RB32 # define AV_RB32(p) AV_RB(32, p) #endif 该宏定义有多层。把它简化为函数&#xff0c;其函数声明可以等价于&#xff1a; uint32_t AV_RB32(uint…

网络爬虫设置代理服务器

目录 1&#xff0e;获取代理 IP 2&#xff0e;设置代理 IP 3. 检测代理 IP 的有效性 4. 处理异常 如果希望在网络爬虫程序中使用代理服务器&#xff0c;就需要为网络爬虫程序设置代理服务器。 设置代理服务器一般分为获取代理 IP 、设置代理 IP 两步。接下来&#xff0c;分…