一、Ansible简介

1
一款基于ssh的自动化运维工具,通过调用模块来实现特定的功能

二、Ansible参数、作用、配置

1
2
# 实验准备
一台控制机,多台节点机,此处为Openeuler

三、安装配置

1.控制节点

安装Ansible
1
2
3
4
5
6
# 安装ansible,centos需要安装拓展源才能下载,且ansible默认开启
yum install ansible -y

# 重命名
hostnamectl set-hostname controller
bash
修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改hosts
192.168.60.11 node1
192.168.60.12 node2
192.168.60.13 node3

# 建立主机清单
vim /etc/ansible/hosts
[group1]
node3

[group2]
node1
node2

# 查看创建的组
ansible-inventory --graph

建立无密码SSH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 生成密钥,在当前目录下的.ssh目录下
ssh-keygen

# ssh无密码登录
ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1

# 实验ping,必须先SSH登录上去,首次登录可能需要密码
ansible all -m ping

# 清除旧密钥
ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.0.1

其中 -f filename 指定密钥文件名。
-R hostname 从 known_hosts 文件中删除所有属于 hostname 的密钥。

Ansible的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
# -m -a ,模块、参数
"name=httpd state=present"

# 自定义

ansible group2 -m copy -a "src=/root/index.html"

# 模块的使用
ansible-doc -l
ansible-doc [模块名]

# 编辑剧本
vim installhttpd.yml

2.受控节点

1
2
3
4
5
6
7
# 重命名
hostnamectl set-hostname node1
bash
hostnamectl set-hostname node2
bash
hostnamectl set-hostname node3
bash

3.脚本搭建网页(示例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
- name: //描述信息,中间有空格
hosts: all //针对的对象
tasks:
- name:
yum: //使用的模块,yum的作用是安装
name: httpd //注意空一格再写参数,否则不生效
state: present //安装的意思

- name:
service: //使用的模块,功能是启动或关闭服务
name: httpd
state: started
enabled: yes
- name:
copy:
src: index.html
dest: /var/www/html/index.html

4.脚本搭建网站(实例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
---
- name:
hosts: all
tasks:
- name:
yum:
name: httpd
state: present
- name:
service:
name: httpd
state: started
enabled: yes
- name:
template:
src: index.html
dest: /var/www/html/index.html
- name:
file:
path: /var/www/html/index.html
state: file
owner: apache
group: apache
# 使用脚本搭建网页
ansible-playbook installhttp.yml

# 移除安装的软件
ansible all -m yum -a "naem=httpd state=remove"

5.普通分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 查看分区
fdisk /dev/sda

# 创建物理卷
pvcreate /dev/sda1 /dev/sda2

# 创建卷组
vgcreate data /dev/sda1 /dev/sda2

# 创建逻辑卷
lvcreate -n wwwroot -L 5G data

# 扩容
lvextend -L 15G /dev/data/wwwroot

# 减容
lvreduce -L 10G /dev/data/wwwroot

# 删除分区
lvremove /dev/data/wwwroot

6.ansible自动分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
---
- name: 创建逻辑卷
hosts: all
tasks:
- name: 创建卷组
lvg:
vg: data
pvs: /dev/sda
pesize: 20G
- name: 创建逻辑卷ftp
lvol:
vg: data
lv: ftp
size: 10G
- name: 创建逻辑卷samba
lvol:
vg: data
lv: samba
size: 10G

- name:
filesystem:
fstype: ext4
dev: /dev/data/ftp

- name:
filesystem:
fstype: ext4
dev: /dev/data/ftp

7.ansible实现LNMP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# LNMP,即Linux、Nginx、Mariadb和PHP,作用是部署网站

---
- name:
hosts: all
tasks:
- name: install mariadb
yum:
name: "{{ item }}"
state: installed
loop:
- MySQL-python
- mariadb
- mariadb-server

- name: start mariadb
service:
name: mariadb
state: started
enabled: yes

- name: set_password
mysql_user:
user: root
password: '123456'

- name: create_db
mysql_db:
login_user: root
login_password: '123456'
login_host: localhost
name: wordpress
state: present

- name: create_user
mysql_user:
login_user: root
login_password: '123456'
name: admin
password: 123456
host: localhost
priv: '*.*:ALL'
state: present

- name: resart_DB
service:
name: mariadb
state: restarted

# Nginx

---
- name:
hosts: group
tasks:
- name: yuan
copy:
src: /etc/yum.repos.d/epel.repo
dest: /etc/yum.repos.d/epel.repo

- name: 清除缓存
shell: yum clean all

- name: 生成缓存
shell: yum makecache

- name: install nginx
shell: yum -y install nginx

- name: start nginx
service:
name: nginx
state: started
enabled: yes


# PHP