w2ewe 发表于 2014-10-20 09:54:48

ansible批量搭建LAMP环境

对于大批量部署服务时,可能要扛着键盘到每台主机或是每个都ssh连上去,大量的时间耗费在这上面,岂不可惜,由于批量部署的自动化工具的出现,节省了我们大量的时间,其中,它们的原理主要是利用ssh协议或是使用ssl的https,使用ssl的这种,它们需要在客户端安装agent,而利用ssh的ansible就不需要了,可以在控制端执行一个脚本,可以实现将任意多个主机都批量部署上你所需要安装的服务。
                下面的实验,实现批量的部署LAMP环境搭建(在一台主机上)
                拓扑图如下


                后端的被控制节点,我只用了两台,可以自己取多台,上面的yum源和时间服务器在同一台主机上,在两个节点上,再添加两块硬盘,作为MySQL的二进制日志存放和数据存放,挂载等操作也会在ansible上行。

                首先,我们可以在ansible服务器上安装LAMP环境,然后,再将配置文件通过ansible拷贝到远程主机上

                第一步:安装httpd软件

1
# yum install httpd




                第二部:安装MySQL

1
# yum install mysql-server






                此时,我们要创建两个目录,同时,要挂载两个逻辑卷,作为数据存放和二进制日志存放位置

1
2
# mkdir -pv /mydata/{binlogs,data}   #后端的两个节点,都另外加了磁盘改变其属组和属主
# chown -R mysql:mysql /mydata/




                编辑配置文件

1
2
3
# vim /etc/my.cnf
datadir=/mydata/data   #改变数据存放目录
log-bin=/mydata/binlogs/mysql-bin      #添加此项,指定二进制日志存放位置




                启动MySQL服务

1
# service mysqld start






                第三步:安装PHP服务

1
# yum install php






                第四步:安装PHP和MySQL的交互所用到的模块

1
# yum install php-mysql






                第五步:更改httpd的配置文件,使其能够解析PHP
                添加下面选项

1
2
3
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
DirectoryIndex index.html index.phpindex.html.var   #添加主持php主页




                第六步:提供php的测试页

1
2
3
4
# vim /var/www/html/index.php
    phpinfo();
?>





                启动httpd服务,在浏览器中访问
                # service httpd start


                确保已经出现上面的测试页,而且,要看到MySQL已经被整合进来了,才能进行下一步操作

                在node1上安装ansible服务

1
# yum install ansible






                此时,我们再加入两个干净的CentOS6.5的主机,同时,这两台主机还有两块空闲的硬盘/dev/sdb和/dev/sdc,建立一个分区,sdb1和sdc1(使用fdisk)

                将原来的ansible的hosts文件备份,在文件中定义上面加入的两台主机,即要做批量安装的主机

1
2
3
4
5
6
# cd /etc/ansible/
# cp hosts hosts.bak
# vim hosts
   #定义组,名为nodes
192.168.81.130
192.168.81.131





                然后,ansible和两个节点间通过ssh进行连接

1
# ssh-keygen -t rsa -P ''   #生成密钥对





                将公钥信息复制到被控制节点(两个节点上)

1
# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.81.130





                开始我们的playbook吧,创建一个LAMP构建的任务

1
# mkdir -pv lamp/roles/{prepare,httpd,mysql,php}/{tasks,files,templates,vars,meta,default,handlers}






                我们将上面搭建成功的LAMP环境的httpd和MySQL的配置文件拷贝到对应目录下

1
2
# cp /etc/httpd/conf/httpd.conf lamp/roles/httpd/files/
# cp /etc/my.cnf lamp/roles/mysql/files/




                对于批量部署的状况,我们会使用到yum安装软件,这里,我自己有一台yum服务器,所以,
                我要将被控制端的yum源指向到我的yum服务器,而且,各服务器要保持时间一致

1
2
3
4
5
6
7
8
# vim prepare/tasks/main.yml
- name: provide yumrepo file
shell: rm -f /etc/yum.repos.d/*.repo      #删除原有的yum配置文件
shell: wget http://192.168.81.128/cshang.repo    #下载新的yum配置文件
- name: clean the yum repo
shell: yum clean all    #清除原有的yum缓存信息
- name: sync the time
cron: name="sync time" minute="*/5" job="/usr/sbin/ntpdate 192.168.81.128 &> /dev/null"




                #同步时间,保证两台后端节点的时间一致性

                首先,我们将部署我们的MySQL服务
                创建MySQL服务的任务,我们要做的是:
                安装MySQL服务,格式化分区,创建挂载点,改变属主信息,将分区进行挂载,启动MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# vim mysql/tasks/main.yml
- name: install the mysql
yum: name=mysql-server state=present    #安装mysql服务
- name: make mount directories
shell: mkdir -p /mydata/{binlogs,data}    #创建挂载点目录
- name: remove the dmsetup use
shell: dmsetup remove_all      #避免分区被dm服务占用
- name: make filesystem
filesystem: fstype=ext4 dev={{ item }}    #格式化文件系统
with_items:
– /dev/sdb1
– /dev/sdc1
- name: mount the binlogs partition
mount: name=/mydata/binlogs src=/dev/sdb1 fstype=ext4 state=present    #挂载分区
- name: mount the data partition
mount: name=/mydata/data src=/dev/sdc1 fstype=ext4 state=present
- name: mount fstab
shell: mount -a    #挂载fstab上的所有设备
- name: provide configration file
copy: src=my.cnf dest=/etc/my.cnf    #提供mysql的配置文件爱你
- name: chage the owner
shell: chown -R mysql:mysql /mydata/*    #更改属主和属组
- name: start mysql
service: name=mysqld enabled=yes state=started    #启动mysql服务





注意事项:mount选项,官方第一句是这么说的
This module controls active and configured mount points in

`/etc/fstab'.
意思是,写进配置文件的,我们用df -h是看不到挂载的,要再加mount -a命令

                构建PHP的任务

1
2
3
4
5
# vim php/tasks/main.yml
- name: install php
yum: name=php state=present    #安装php
- name: install php-mysql
yum: name=php-mysql state=present    #安装php与mysql交互的插件





                构建httpd的任务

1
2
3
4
5
6
7
8
9
# mv /var/www/html/index.php httpd/files/
# vim tasks/main.yml   #任务
- name: web server install
yum: name=httpd state=present    #安装httpd服务
- name: provide test page
copy: src=index.php dest=/var/www/html    #提供测试页
- name: provide configuration file
copy:src=httpd.conf dest=/etc/httpd/conf/httpd.conf    #提供httpd的配置文件
notify:restart httpd





                构建httpd的handlers

1
2
3
# vim httpd/handlers/main.yml
- name: restart httpd
service: name=httpd enabled=yes state=restarted




                定义整个的任务

1
2
3
4
5
6
7
8
9
# vim site.yml   #在roles目录中创建
- name: LAMP build
remote_user: root
hosts: nodes
roles:
    – prepare
    – mysql
    – php
    – httpd






                各目录下的文件结构图如下

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
82
83
84
85
lamp/

      └── roles

            ├── httpd

            │   ├── default

            │   ├── files

            │   │   ├── httpd.conf

            │   │   └── index.php

            │   ├── handlers

            │   │   └── main.yml

            │   ├── meta

            │   ├── tasks

            │   │   └── main.yml

            │   ├── templates

            │   └── vars

            ├── mysql

            │   ├── default

            │   ├── files

            │   │   └── my.cnf

            │   ├── handlers

            │   ├── meta

            │   ├── tasks

            │   │   └── main.yml

            │   ├── templates

            │   └── vars

            ├── php

            │   ├── default

            │   ├── files

            │   ├── handlers

            │   ├── meta

            │   ├── tasks

            │   │   └── main.yml

            │   ├── templates

            │   └── vars

            ├── prepare

            │   ├── default

            │   ├── files

            │   ├── handlers

            │   ├── meta

            │   ├── tasks

            │   │   └── main.yml

            │   ├── tmplates

            │   └── vars

            └── site.yml






                然后,在浏览器中访问这两台节点主机


                     实验到这里就结束了,通过ansible批量部署的形式搭建LAMP环境,而且,MySQL的二进制日志和数据也分开存放了,但是,还是要人为的分区,其实,也可以使用ansible的script模块,在shell脚本中对磁盘进行分区,这样就不需要手动去分区了,更加的傻瓜化。

页: [1]
查看完整版本: ansible批量搭建LAMP环境