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


前言

目前常见的运维自动化管理工具主要是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

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

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值