CentOSLinux系统中Ansible自动化运维的安装以及利用Ansible部署JDK和Hadoop
Ansible 安装和配置
Ansible 说明
- Ansible 官网:https://www.ansible.com/
- Ansible 官网 Github:https://github.com/ansible/ansible
- Ansible 官网文档:https://docs.ansible.com//
- 简单讲:它的作用就是把写 shell 这件事变成标准化、模块化。方便更好的自动化运维
安装
- 官网说明:https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
- CentOS:
sudo yum install -y ansible
- 查看版本:
ansible --version
- 查看版本:
配置基本概念
Ansible 基本配置文件顺序
- Ansible 执行的时候会按照以下顺序查找配置项,所以修改的时候要特别注意改的是哪个文件
ANSIBLE_CONFIG (环境变量)
ansible.cfg (脚本所在当前目录下)
~/.ansible.cfg (用户家目录下,默认没有)
/etc/ansible/ansible.cfg(安装后会自动生成)
配置远程主机地址 (Ansible 称这些地址为 Inventory)
- 假设我有 3 台机子:
- 192.168.0.223
- 192.168.0.70
- 192.168.0.103
- 官网对此的配置说明:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#hosts-and-groups
给这三台机子设置免密登录的情况(一般推荐方式)
- 编辑 Ansible 配置文件:
vim /etc/ansible/hosts
- 添加如下内容
[hadoop-host]
192.168.0.223
192.168.0.70
192.168.0.103
- 其中
[hadoop-host]
表示这些主机代表的一个组名
如果不设置免密,直接采用账号密码(容易泄露信息)
- 编辑 Ansible 配置文件:
vim /etc/ansible/hosts
- 添加如下内容
[hadoop-host]
hadoop-master ansible_host=192.168.0.223 ansible_user=root ansible_ssh_pass=123456
hadoop-node1 ansible_host=192.168.0.70 ansible_user=root ansible_ssh_pass=123456
hadoop-node2 ansible_host=192.168.0.103 ansible_user=root ansible_ssh_pass=123456
简单使用(ad hoc
方式)
运行 Ansible
- 运行 Ansible 的
ping
命令,看看配置正确时输出如下:
sudo ansible --private-key ~/.ssh/id_rsa all -m ping
- 让远程所有主机都执行
ps
命令,输出如下
ansible all -a 'ps'
- 让远程所有 hadoop-host 组的主机都执行
ps
命令,输出如下
ansible hadoop-host -a 'ps'
Playbook 脚本方式
- 官网:https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html
- 一些语法:https://docs.ansible.com/ansible/latest/modules/command_module.html
- playbook(剧本),顾名思义,就是需要定义一个脚本或者说配置文件,然后定义好要做什么。之后 ansible 就会根据 playbook 脚本对远程主机进行操作
简单脚本
- 下面脚本让所有远程主机执行
whoami
命令,并把结果(当前用户名)输出到/opt/whoami.txt
文件 - 创建脚本文件:
vim /opt/simple-playbook.yml
- hosts: all
tasks:
- name: whoami
shell: 'whoami > /opt/whoami.txt'
- 执行命令:
ansible-playbook /opt/simple-playbook.yml
,结果如下,并且 opt 下也有文件生成
PLAY [all] **************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************
ok: [192.168.0.223]
ok: [192.168.0.103]
ok: [192.168.0.70]
TASK [whoami] ***********************************************************************************************************************
changed: [192.168.0.103]
changed: [192.168.0.223]
changed: [192.168.0.70]
PLAY RECAP **************************************************************************************************************************
192.168.0.103 : ok=2 changed=1 unreachable=0 failed=0
192.168.0.223 : ok=2 changed=1 unreachable=0 failed=0
192.168.0.70 : ok=2 changed=1 unreachable=0 failed=0
平时用来测试
- 创建脚本文件:
vim /opt/test-playbook.yml
- hosts: hadoop-test
remote_user: root
vars:
java_install_folder: /usr/local
tasks:
# 按行的方式写入
- name: Set JAVA_HOME 1
lineinfile:
dest=/etc/profile
line="JAVA_HOME={{ java_install_folder }}/jdk1.8.0_181"
# 按块的方式写入,#{mark} 会被自动替换成:begin 和 end 字符来包裹整块内容(我这里自己定义了词语)
- name: Set JAVA_HOME 2
blockinfile:
path: /etc/profile
marker: "#{mark} JDK ENV"
marker_begin: "开始"
marker_end: "结束"
block: |
export JAVA_HOME={{ java_install_folder }}/jdk1.8.0_181
export PATH=$PATH:$JAVA_HOME/bin
- 执行命令:
ansible-playbook /opt/test-playbook.yml
更多 playbook 实战
禁用防火墙(CentOS 7.x)
- 创建脚本文件:
vim /opt/disable-firewalld-playbook.yml
- hosts: all
remote_user: root
tasks:
- name: Disable SELinux at next reboot
selinux:
state: disabled
- name: disable firewalld
command: "{{ item }}"
with_items:
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
基础环境(CentOS 7.x)
- 创建脚本文件:
vim /opt/install-basic-playbook.yml
- hosts: all
remote_user: root
tasks:
- name: Disable SELinux at next reboot
selinux:
state: disabled
- name: disable firewalld
command: "{{ item }}"
with_items:
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
- name: install-basic
command: "{{ item }}"
with_items:
- yum install -y zip unzip lrzsz git epel-release wget htop deltarpm
- name: install-vim
shell: "{{ item }}"
with_items:
- yum install -y vim
- curl https://raw.githubusercontent.com/wklken/vim-for-server/master/vimrc > ~/.vimrc
- name: install-docker
shell: "{{ item }}"
with_items:
- yum install -y yum-utils device-mapper-persistent-data lvm2
- yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- yum makecache fast
- yum install -y docker-ce
- systemctl start docker.service
- docker run hello-world
- name: install-docker-compose
shell: "{{ item }}"
with_items:
- curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
- docker-compose --version
- systemctl restart docker.service
- systemctl enable docker.service
- 执行命令:
ansible-playbook /opt/install-basic-playbook.yml
修改 hosts
- 创建脚本文件:
vim /opt/hosts-playbook.yml
- hosts: all
remote_user: root
tasks:
- name: update hosts
blockinfile:
path: /etc/hosts
block: |
192.168.0.223 linux01
192.168.0.223 linux02
192.168.0.223 linux03
192.168.0.223 linux04
192.168.0.223 linux05
- 执行命令:
ansible-playbook /opt/hosts-playbook.yml
部署 JDK
- 创建脚本文件:
vim /opt/jdk8-playbook.yml
- hosts: hadoop-host
remote_user: root
vars:
java_install_folder: /usr/local
tasks:
- name: copy jdk
copy: src=/opt/jdk-8u181-linux-x64.tar.gz dest={{ java_install_folder }}
- name: tar jdk
shell: chdir={{ java_install_folder }} tar zxf jdk-8u181-linux-x64.tar.gz
- name: set JAVA_HOME
blockinfile:
path: /etc/profile
marker: "#{mark} JDK ENV"
block: |
JAVA_HOME={{ java_install_folder }}/jdk1.8.0_181
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export JRE_HOME
export PATH
export CLASSPATH
- name: source profile
shell: source /etc/profile
- 执行命令:
ansible-playbook /opt/jdk8-playbook.yml
部署 Hadoop 集群
- 创建脚本文件:
vim /opt/hadoop-playbook.yml
- 刚学 Ansible,不好动配置文件,所以就只保留环境部分的设置,其他部分自行手工~
- hosts: hadoop-host
remote_user: root
tasks:
- name: Creates directory
file:
path: /data/hadoop/hdfs/name
state: directory
- name: Creates directory
file:
path: /data/hadoop/hdfs/data
state: directory
- name: Creates directory
file:
path: /data/hadoop/hdfs/tmp
state: directory
- name: set HADOOP_HOME
blockinfile:
path: /etc/profile
marker: "#{mark} HADOOP ENV"
block: |
HADOOP_HOME=/usr/local/hadoop
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME
export PATH
- name: source profile
shell: source /etc/profile
- 执行命令:
ansible-playbook /opt/hadoop-playbook.yml
CentOSLinux系统中Ansible自动化运维的安装以及利用Ansible部署JDK和Hadoop的更多相关文章
- Ansible自动化运维工具安装与使用实例
1.准备两台服务器,要确定网络是通的.服务器当然越多越好啦....Ansible的简介和好处我就不多说了,自己看百科去(*╹▽╹*) IP:192.168.139.100 IP:192.168.139 ...
- Ansible自动化运维工具-上
[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...
- Ansible 自动化运维工具
Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...
- 简单聊一聊Ansible自动化运维
一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...
- Ansible自动化运维工具及其常用模块
Ansible自动化运维工具及其常用模块 目录 Ansible自动化运维工具及其常用模块 一.Ansible简介 1. Ansible概述 2. Ansible作用 3. Ansible的工作模块 4 ...
- 一文详解 Ansible 自动化运维
开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...
- ansible 自动化运维
Ansible 自动化运维 ansible安装epel #yum list all *ansible*#yum install *ansible*#yum info ansible#rpm -ql a ...
- Ansible 自动化运维——剧本(playbook)
Ansible 自动化运维--剧本(playbook) 1.playbook介绍: playbook是ansible用于配置,部署,和管理被控节点的剧本.通过playbook的详细描述,执行其中的ta ...
- ansible自动化运维03
ansible自动化运维常用模块 常用模块实现的功能:安装软件包:修改配置文件:创建程序用户组:创建目录,并修改所属和权限:挂载:启动服务:测试. command模块: shell模块: 注意:com ...
随机推荐
- VB.NET Event RaiseEvent用处
一.代码 Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventA ...
- css实现div内凹角样式
平常的开发中我们一般使用到圆角都是外凸的,即border-radius属性.而如果有内凹角的情况,我们一般的考虑实现方法有2种.一种是直接使用背景图片,一种是使用css. 用到的属性则是backgro ...
- CCPC-Wannafly Winter Camp Day1 爬爬爬山 (最短路)
题目描述 爬山是wlswls最喜欢的活动之一. 在一个神奇的世界里,一共有nn座山,mm条路. wlswls初始有kk点体力,在爬山的过程中,他所处的海拔每上升1m1m,体力会减11点,海拔每下降1m ...
- codeforces 108D Basketball Team(简单组合)
D. Basketball Team time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- python3-使用__slots__
正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pa ...
- nginx的配置和基本参数说明
16 117 118 119 120 121 122 123 #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日 ...
- [洛谷P4823] TJOI2013 拯救小矮人
问题描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口. 对于每一个小矮人,我们知道他从 ...
- BZOJ 2427: [HAOI2010]软件安装 tarjan + 树形背包
Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和 ...
- 每隔2分钟,div元素顺序淡入
我们的官网,是游戏网站,需要很多的动画效果,下面就开写一个box有n个元素,这些元素顺序淡入,每隔2分钟,执行一次,代码开始: <div></div> <div>& ...
- AT2371 Placing Squares
题解 考虑\(dp\) \[ dp[i]=\sum_{i=0}^{i-1}dp[j]*(i-j)^2 \] 我们可以设\((i-j)\)为\(x\),那么随着\(i\)向右移动一格,每个\(x\)都是 ...