您的位置:首页 > 数据库 > Redis

Ansible:实现一键部署redis主从复制的playbook

2020-08-22 15:14 1721 查看

文章目录

  • 总结
  • 前言

    目前常见的运维自动化管理工具主要是Puppet、SaltStack、Ansible,其中Ansible是最简单易用的,本文主要探讨使用ansible来部署redis主从复制的playbook。(阅读本文需要对ansible有所了解)

    一、Ansible是什么?

    ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
    优点主要有:

    • 模块可以用任何语言开发
    • 被管理节点不需要安装任何代理软件
    • 有web管理界面、可配置用户、组、资源清单和可执行的playbook

    二、使用步骤

    1.安装ansible

    直接使用yum安装即可

    # yum install ansible -y

    2.配置资源清单

    将要管理的节点的机器信息写入/etc/ansible/hosts中,写法非常丰富,这里不展开探讨。本文主要使用的是先在 本机添加域名解析,再写资源清单的方法:

    vim /etc/hosts
    192.168.186.161  master1
    192.168.186.146  master2
    192.168.186.162  slaver2-1
    192.168.186.163  slaver1-1
    /etc/ansible/hosts
    master1
    master2
    slaver2-1
    slaver1-1

    3.给所有主机传密钥

    机器之间连接需要验证,传密钥方便管理,当然也可以不传,这个根据实际管理场景决定,这里我写了个脚本进行传密钥,在上一篇博客已经展示过,有需要可以查看:Linux:批量给主机传密钥的脚本

    4.准备redis压缩包

    只需要在管理节点准备一个压缩包即可,我使用的是 redis-4.0.10.tar.gz
    官方:redis官网

    5.手动安装获得redis主配置文件

    进行这一步主要是为了得到redis的配置文件,我们要用它来做一份jinja2的模板。(redis的安装也非常简单,官网上就有,或者下次我再写一篇关于redis的安装)

    cp /usr/local/redis-4.0.10/redis.conf /root/redis.conf.j2

    然后对模板进行修改
    修改部分如下:

    bind {{ ansible_ens33['ipv4']['address'] }}
    protected-mode no
    daemonize yes
    slaveof 192.168.186.161 6379
    masterauth 123
    requirepass 123

    6.playbook

    准备工作做完之后,就可以开始写剧本了,直接看剧本redis_deploy.yaml:

    ---
    - name: Deploy redis.
    hosts: all
    user: root
    tasks:
    - name: Remove redis existed.
    shell: rm -rf /usr/local/redis*
    - name: Unarchive redis package.
    unarchive:
    src: /root/redis-4.0.10.tar.gz
    dest: /usr/local/
    - name: Install redis.
    shell:
    cmd: make MALLOC=libc
    chdir: /usr/local/redis-4.0.10
    notify: Next we will deploy all redis.conf
    handlers:
    - name: Next we will deploy all redis.conf
    template:
    src: /root/redis.conf.j2
    dest: /usr/local/redis-4.0.10/redis.conf
    backup: yes
    notify: lineinfile will work
    - name: lineinfile will work
    lineinfile:
    dest: /usr/local/redis-4.0.10/redis.conf
    regexp: ^slaveof
    state: absent
    when: ansible_ens33['ipv4']['address'] == "192.168.186.161"

    以上使用到的都是很基本的剧本用法,主要用到shell、unarchive、template、lineinfile模块,使用了notify_handlers,when来简单进行简单的逻辑安排。

    #检查剧本:

    ansible-playbook redis_deploy.yaml --syntax-check

    这里不用再进行模拟执行,-C不怎么好用,会报错,但是剧本是没有问题,主要是因为-C执行的步骤和实际的执行是不同的,所以有些逻辑再模拟执行时会被当作错误处理。
    #开演

    ansible-playbook redis_deploy.yaml

    (过程应该会比较慢,耐心等待,不报错就可以了)

    7.启动所有节点的redis

    还是写个剧本开启动吧,很简单

    ---
    - name: start redis clusters
    hosts: all
    gather_facts: false
    user: root
    tasks:
    - name: shell will take this.
    shell:
    cmd: /usr/local/redis-4.0.10/src/redis-server /usr/local/redis-4.0.10/redis.conf

    其实用一句命令就能解决。。。不过有剧本以后就可以随时一键启动,不用每次都打了。

    总结

    本文都是一些比较基础的东西,欢迎指正。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: