通过ansible-playbook部署minio集群

系列文章目录

ansible相关知识入门文章
rpmbuild构建minio



前言

首先,查看本文章前先阅读一下顶部的两篇文章,因为本篇文章主要依赖于ansible-playbook和通过rpmbuild构建好的minio安装包进行编写的,如果需要用我构建好的minioRPM包,可以在该地址自行下载(https://download.csdn.net/download/weixin_50902636/89642252)。同时,写该篇文章不仅是为了加深playbook的使用,更是为了交付团队更好的交付。使得客户安装部署更加简洁明了,维护中间件更加方便。


一、部署目标

1、部署过程中可以指定部署服务器IP,并对这些ip进行存活性验证
2、部署过程中可以指定minio的数据目录和安装目录
3、结合构建好的minio-RPM包快速的部署出一个四节点的minio集群

二、部署流程

主要思想: 通过指定hosts文件中安装minio服务器IP的数量来判断,如果只有一个ip,则执行单节点minio安装,如果是多个ip,则执行集群minio安装。其中安装和启动单点或者集群都通过ip数量来控制

1.部署清单目录结构

├── hosts
├── minio
│   ├── files
│   │   └── minio-RELEASE_2023_05_18-1.x86_64.rpm
│   ├── handlers
│   ├── meta
│   ├── tasks
│   │   ├── check.yml
│   │   ├── config.yml
│   │   ├── install.yml
│   │   ├── main.yml
│   │   ├── setup.yml
│   │   └── start.yml
│   ├── templates
│   │   ├── cluster_run.sh.j2
│   │   ├── minio_restart.sh.j2
│   │   ├── single_run.sh.j2
│   │   └── stop.sh.j2
│   └── vars
│       └── main.yml
└── minio.yml

2.files目录解析

files目录一般用于存放安装包源文件

3.tasks目录解析

3.1、main.yml

指定在执行ansible-playbook过程中yml文件的执行顺序和名称。即执行哪些yml文件,就以下方的形式添加在此处即可

- include: setup.yml
- include: install.yml
- include: config.yml
- include: start.yml
- include: check.yml

3.2、setup.yml

在此处的作用是根据vars目录main.yml文件中定义的变量创建目录

- name: create data dir
  file:
    path: "{{DATA_DIR}}"
    state: directory

3.3、install.yml

执行RPM包安装的步骤,将rpm包拷贝到对应主机目录下,执行安装并删除对应主机上的rpm包,并判断安装命令是否执行成功

- name: copy minio rpm
  copy:
    src: "{{Package_Name}}"
    dest: /tmp/"{{Package_Name}}"
- name: install minio rpm package
  yum:
    name: /tmp/"{{Package_Name}}"
    state: present
  register: installResult             #将安装结果注册到installResult,然后通过下方的debug进行判断
- name: remove minio rpm package
  file:
    path: /tmp/"{{Package_Name}}"
    state: absent
- name: result
  debug:
    var: installResult.results
    #verbosity:debug的级别(默认是0级,全部显示)
    verbosity: 0

3.4、config.yml

在此处的作用是将template目录中jinja2模板文件安装到对应的宿主机位置

- name: config run shell
  template:
    src: single_run.sh.j2
    dest: "{{ HOME }}/single_run.sh"
    mode: 0755
- name: config stop shell
  template:
    src: stop.sh.j2
    dest: "{{ HOME }}/stop.sh"
    mode: 0755
- name: config restart shell
  template:
    src: minio_restart.sh.j2
    dest: "{{ HOME }}/minio_restart.sh"
    mode: 0755
- name: config run cluster shell
  template:
    src: cluster_run.sh.j2
    dest: "{{ HOME }}/cluster_run.sh"
    mode: 0755

3.5、start.yml

安装完成并且配置文件拷贝调试完成后,进行启动操作

#使用 set_fact 模块来设置一个新的变量 script_to_run。这个变量通过 ansible_play_hosts 的长度来判断要运行的脚本。
#如果 ansible_play_hosts 的长度为 1,则 script_to_run 设为 single_run.sh;否则,设为 cluster_run.sh。
#在执行 shell 模块时,使用 {{ HOME }}/{{ script_to_run }} 来动态选择脚本。
#debug 模块显示 startResult 的结果,并设置 verbosity 级别为 0

- name: Determine the script to run based on the number of hosts
  set_fact:  
    script_to_run: "{{ (ansible_play_hosts | length == 1) | ternary('single_run.sh', 'cluster_run.sh') }}"

- name: start minio node
  shell:
    cmd: "{{ HOME }}/{{ script_to_run }}"
  register: startResult

- name: result
  debug:
    var: startResult
    verbosity: 0

3.6、check.yml

主要用于检查minio是否成功启动

- name: Determine if Minio is running on single node
  shell: "ps aux | grep minio | grep -v grep"
  register: minio_status_single
  when: ansible_play_hosts | length == 1

- name: Determine if Minio is running on cluster nodes
  shell: "ps aux | grep minio | grep -v grep"
  register: minio_status_cluster
  when: ansible_play_hosts | length > 1
  run_once: false  #此处如果为true,它只会在hosts列表中选一个ip仅测试一次,这明显是不符合我们要求的。我们要每个节点都验证一次

- name: Debug Minio status on single node
  debug:
    msg: "Minio is {{ 'running' if minio_status_single.stdout else 'not running' }} on single node"
  when: ansible_play_hosts | length == 1

- name: Debug Minio status on cluster nodes
  debug:
    msg: "Minio is {{ 'running' if minio_status_cluster.stdout else 'not running' }} on cluster nodes"
  when: ansible_play_hosts | length > 1

4.templates目录解析

	该目录下存放的是jinja2模板文件.通俗易懂的就是将一个文件通过jinja2语法进行修改,结合vars目录下的变量,将文件修改成jinja2模板格式,然后通过vars目录传参或者是yml文件中传参来进行模板文件的替换。

下方的cluster_run.sh.j2模板文件中的变量来自于vars目录和hosts文件中指定的vars变量,结合jinja2语法,才会产生下方文件,提高灵活性,减少人为手动操作。

#!/bin/sh
export MINIO_ROOT_USER={{accessKey}}
export MINIO_ROOT_PASSWORD={{ secretKey }}
TIME=`date +%Y-%m-%d_%T`
MINIO_OPTS="--console-address :9001 --address :8021"  #指定minio-ui的访问端口和minio服务端口
nohup {{HOME}}/minio server $MINIO_OPTS  {% for host in groups.minioHost %}http://{{host}}{{DATA_DIR}} {% endfor %}  > {{HOME}}/minio_server_"$TIME".log 2>&1 &
echo $! > {{HOME}}/minio.pid

5.vars目录解析

该目录下存放的是全局变量文件,通过“{{参数名}}”方式来进行传参,它的格式是key:value

HOME: "/export/server/minio"
DATA_DIR: "/export/data/minio_data"
Package_Name: "minio-RELEASE_2023_05_18-1.x86_64.rpm"

6.minio.yml入口文件解析

- hosts: minioHost
  pre_tasks: ##在开始前对ip列表进行断言,即对ip是否存活进行验证,如果有一台验证不过,则会停止执行
    - name: Check ALL hosts are reacheable before doing the release
      assert:
        that:
          - ansible_play_hosts == groups.minioHost
        fail_msg: 1 or more host is UNREACHABLE
        success_msg: ALL hosts are REACHABLE, go on
      run_once: yes
  roles:
    - minio

三、验证测试

首先进行单节点minio部署测试

1、指定hosts文件,测试yml语法是否存在问题

[root@python2 ansiblePlaybook]# vim hosts
[minioHost]
192.168.56.130
#192.168.56.132
[minioHost:vars]
accessKey=OpsMinIO
secretKey=OpsAdmin0815

#检测yml文件语法是否存在问题
[root@python2 ansiblePlaybook]# ansible-playbook  minio.yml -C
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: minioHost

PLAY [minioHost] ****************************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP **********************************************************************************************************************************************

2、执行minio单节点安装

[root@python2 ansiblePlaybook]# ansible-playbook -i hosts minio.yml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,单节点minio通过playbook的方式部署成功

3、执行集群minio安装

[root@python2 ansiblePlaybook]# ansible-playbook -i hosts minio.yml

在这里插入图片描述
在这里插入图片描述
至此,minio集群安装验证也没有问题


  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Ansible部署MHA(MySQL高可用性解决方案),可以按照以下步骤进行操作: 1. 首先,创建一个playbook文件,比如playbook_mha.yml。在该playbook中,你需要指定你的目标主机和任务。 2. 在playbook_mha.yml中,使用ansible的shell模块来执行必要的命令。可以参考引用中的示例,使用ansible-playbook命令来执行playbook文件。 3. 在MHA节点上停止httpd服务,可以使用ansible的service模块。可以参考引用中的示例,使用ansible命令来停止httpd服务。 4. 在web服务器上安装httpd软件包,可以使用ansible的yum模块。可以参考引用中的示例,使用ansible命令来安装httpd软件包。 5. 在playbook_mha.yml中添加其他必要的任务,例如设置MHA配置文件、启动MHA等。 通过以上步骤,你可以使用ansible-playbook部署MHA。请根据你的具体需求进行相应的修改和配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ansible-playbook](https://blog.csdn.net/m0_61664359/article/details/120552327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [第二十周 ansible playbook实现httpd批量部署和MySQL高可用方案MHA](https://blog.csdn.net/hfhshwj/article/details/115911358)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值