文章目录
前言
目前常见的运维自动化管理工具主要是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
其实用一句命令就能解决。。。不过有剧本以后就可以随时一键启动,不用每次都打了。
总结
本文都是一些比较基础的东西,欢迎指正。