内容简介:注意点:1、添加密钥2、设置sudo免密
本文,目标是使用ansible安装lnmp+haproxy。
共四台主机,都是ubuntu14 server版,一台作为ansible管理机,另外三台作为ansible客户机用来部署服务。
客户机A安装nginx+php+mysql,客户机B安装nginx+php,客户机C安装haproxy用来负载均衡。如下图:
设计
项目结构参考 最佳实践-Content Organization ,如下图:
注意点:
- 角色分配简单明确。
- 在hosts中分组添加变量,指定安装软件。
- 二次执行脚本时不能影响已经安装的服务。
安装流程
1、添加密钥
2、设置sudo免密
3、更新安装源
4、时间同步
5、安装nginx+php+mysql+haproxy
6、检查安装
实践
文件准备
1、创建项目lnmp
mkdir lnmp && cd lnmp
2、创建角色目录
mkdir roles
mkdir -p roles/{1_key,2_sudo,3_sources,4_chrony,5_software,6_check}/{tasks,handlers,vars,files,templates}
3、创建变量目录
mkdir group_vars host_vars
4、创建hosts文件,分配安装组,内容如下:
[base] 192.168.56.102 192.168.56.103 192.168.56.104 [nginx_php_mysql] 192.168.56.102 [nginx_php] 192.168.56.103 [haproxy] 192.168.56.104 [base:vars] install_nginx=false install_php=false install_mysql=false install_haproxy=false [nginx_php_mysql:vars] install_nginx=true install_php=true install_mysql=true install_haproxy=false [nginx_php:vars] install_nginx=true install_php=true install_mysql=false install_haproxy=false [haproxy:vars] install_nginx=false install_php=false install_mysql=false install_haproxy=true
5、创建site.yml文件,内容为:
---
- hosts: all
gather_facts: false
roles:
- 1_key
- 2_sudo
- 3_sources
- 4_chrony
- 5_software
- 6_check
6、关闭第一次使用ansible连接客户端时命令提示
sudo vim /etc/ansible/ansible.cfg ,如下修改
# line 62, uncomment host_key_checking = False
添加密钥
1、设置用户和密码
vim group_vars/base.yml ,内容为:
--- ansible_ssh_user: voidking ansible_ssh_pass: voidking ansible_sudo: voidking ansible_sudo_pass: voidking
2、 vim test.yml ,内容为:
---
- hosts: all
vars_files:
- group_vars/base.yml
roles:
- 1_key
3、 vim roles/1_key/tasks/main.yml ,内容为:
---
- name: copy public key
copy:
src: /home/voidking/.ssh/id_rsa.pub
dest: /home/voidking/.ssh/id_rsa.pub.tmp
owner: voidking
group: voidking
mode: 0600
force: yes
- name: add public key
shell: cd /home/voidking/.ssh && cat id_rsa.pub.tmp | tee >> authorized_keys
4、 vim test_hosts ,内容为:
[test] 192.168.56.102
5、执行脚本
ansible-playbook test.yml -i test_hosts --syntax-check ansible-playbook test.yml -i test_hosts
5、在客户端查看结果
ll .ssh
6、测试登录
ssh voidking@192.168.56.102
sudo免密
1、 vim test.yml ,内容为:
---
- hosts: all
vars_files:
- group_vars/base.yml
roles:
#- 1_key
- 2_sudo
2、 vim roles/2_sudo/tasks/main.yml ,内容为:
--- - name: add sudo user shell: 'sudo sh -c "echo voidking ALL = NOPASSWD: ALL >> /etc/sudoers"' #shell: 'echo "voidking ALL = NOPASSWD: ALL" | sudo tee >> /etc/sudoers'
3、执行脚本
ansible-playbook test.yml -i test_hosts --syntax-check ansible-playbook test.yml -i test_hosts -s
4、在客户端查看结果
sudo ls
sudo免密2
上面的方法,虽然成功添加了sudo,但是从提示我们看出,在 shell 模块中sudo马上就不能使用了。
1、 vim roles/2_sudo/tasks/main.yml ,修改如下:
--- - name: add sudo user become_user: root become: true shell: "echo voidking ALL = NOPASSWD: ALL >> /etc/sudoers"
2、执行脚本
ansible-playbook test.yml -i test_hosts --syntax-check ansible-playbook test.yml -i test_hosts
更新安装源
1、 vim test.yml ,内容为:
---
- hosts: all
vars_files:
- group_vars/base.yml
roles:
#- 1_key
#- 2_sudo
- 3_sources
2、 vim roles/3_sources/files/sources.list ,内容为:
deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse deb http://cn.archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse ##測試版源 deb http://cn.archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse # 源碼 deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse ##測試版源 deb-src http://cn.archive.ubuntu.com/ubuntu/ trusty-proposed main restricted universe multiverse # Canonical 合作夥伴和附加 # deb http://archive.canonical.com/ubuntu/ trusty partner # deb http://extras.ubuntu.com/ubuntu/ trusty main
3、 vim roles/3_sources/tasks/main.yml ,内容为:
---
- name: replace sources.list
copy:
src: ../files/sources.list
dest: /etc/apt/sources.list
force: yes
- name: update
become_user: root
become: true
shell: apt update
- name: upgrade
become_user: root
become: true
apt:
upgrade: yes
4、执行脚本
ansible-playbook test.yml -i test_hosts --syntax-check ansible-playbook test.yml -i test_hosts
时间同步
管理机准备
1、管理机安装chrony
apt -y install chrony
2、重启chrony
service chrony restart
3、拷贝chrony.conf
cp /etc/chrony/chrony.conf roles/4_chrony/files/
4、 vim roles/4_chrony/files/chrony.conf ,如下修改:
# line 20,comment #server 0.debian.pool.ntp.org offline minpoll 8 #server 1.debian.pool.ntp.org offline minpoll 8 #server 2.debian.pool.ntp.org offline minpoll 8 #server 3.debian.pool.ntp.org offline minpoll 8 # line 24,add server 192.168.56.101 iburst
playbook配置
1、 vim test.yml ,内容为:
---
- hosts: all
vars_files:
- group_vars/base.yml
roles:
#- 1_key
#- 2_sudo
#- 3_sources
- 4_chrony
2、 vim group_vars/base.yml ,内容为:
--- ansible_ssh_user: voidking ansible_ssh_pass: voidking ansible_sudo: voidking ansible_sudo_pass: voidking ansible_become_user: root ansible_become_pass: voidking ansible_become: true
3、 vim roles/4_chrony/tasks/main.yml ,内容为:
---
- name: install chrony
apt:
name: chrony
state: latest
- name: change config
copy:
src: ../files/chrony.conf
dest: /etc/chrony/chrony.conf
owner: root
group: root
mode: 0644
force: yes
- name: restart chrony
service:
name: chrony
state: restarted
4、执行脚本
ansible-playbook test.yml -i test_hosts --syntax-check ansible-playbook test.yml -i test_hosts
5、在客户机验证chrony
chronyc sources
安装核心软件
1、 vim test_hosts ,内容为:
[test] 192.168.56.102 [test:vars] install_nginx=true install_php=true install_mysql=true install_haproxy=true
2、 vim test.yml ,内容为:
---
- hosts: all
vars_files:
- group_vars/base.yml
roles:
#- 1_key
#- 2_sudo
#- 3_sources
#- 4_chrony
- 5_software
3、 vim roles/5_software/tasks/main.yml ,内容为:
---
- name: install nginx
apt:
name: nginx
state: latest
when: install_nginx
- name: install php
apt:
name: "{{item}}"
state: latest
update_cache: yes
with_items:
- php5
- libapache2-mod-php5
- php5-mcrypt
- php5-curl
- php5-imagick
- php5-cli
- php5-json
- php5-fpm
- php5-mysql
when: install_php
- name: install mysql
apt:
name: "{{item}}"
state: latest
with_items:
- mysql-common
- mysql-server
- mysql-client
- python-mysqldb
when: install_mysql
- name: config mysql passwd
mysql_user:
login_user: root
login_password: "\n"
name: root
password: "voidking"
host: "{{item}}"
priv: '*.*:ALL,GRANT'
state: present
check_implicit_admin: yes
with_items:
- "localhost"
- "%"
when: install_mysql
- name: comment bind-address
shell: sed -i 's/^bind-address/#bind-address/g' /etc/mysql/my.cnf
when: install_mysql
- name: restart mysql service
service:
name: mysql
state: restarted
enabled: true
when: install_mysql
- name: install haproxy
apt:
name: haproxy
state: latest
environment:
RUNLEVEL: 1
when: install_haproxy
- name: config haproxy
shell: sed -i 's/ENABLED=0/ENABLED=1/g' /etc/default/haproxy
when: install_haproxy
- name: config haproxy port
copy:
src: ../files/haproxy.cfg
dest: /etc/haproxy/haproxy.cfg
force: yes
when: install_haproxy
- name: restart haproxy
service:
name: haproxy
state: restarted
when: install_haproxy
4、 vim roles/5_software/files/haproxy.cfg ,内容为
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull contimeout 5000 clitimeout 50000 srvtimeout 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend http_front bind *:8080 stats uri /haproxy?stats default_backend http_back backend http_back balance roundrobin option httpchk GET /index.html option forwardfor header X-Forwarded-For server node1 192.168.56.102:80 check inter 2000 rise 3 fall 3 weight 30 server node2 192.168.56.103:80 check inter 2000 rise 3 fall 3 weight 30
5、执行脚本
ansible-playbook test.yml -i test_hosts --syntax-check ansible-playbook test.yml -i test_hosts
6、在客户机测试
mysql -uroot -p -h 192.168.56.102
curl localhost
curl localhost:8080
整合所有步骤
1、执行脚本
ansible-playbook site.yml -i hosts --syntax-check ansible-playbook site.yml -i hosts
2、查看安装
curl 192.168.56.102 curl 192.168.56.103 curl 192.168.56.104:8080
检查安装
1、 vim site.yml ,修改为:
---
- hosts: all
gather_facts: false
roles:
#- 1_key
#- 2_sudo
#- 3_sources
#- 4_chrony
#- 5_software
- 6_check
2、 vim roles/6_check/tasks/main.yml ,内容为:
---
- name: copy index.html
template:
src: ../templates/index.j2
dest: /usr/share/nginx/html/index.html
force: yes
when: install_nginx
3、 vim roles/6_check/templates/index.j2 ,内容为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home Page</title>
</head>
<body>
{{ ansible_eth0.ipv4.address }}
</body>
</html>
PS:查看变量 ansible 192.168.56.102 -m setup > var.txt
4、执行脚本
ansible-playbook site.yml -i hosts --syntax-check ansible-playbook site.yml -i hosts
5、测试访问
curl 192.168.56.104:8080
多次执行,可以看到两个不同的IP会来回切换。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 「Flask实战」鱼书项目实战一
- 「Flask实战」鱼书项目实战三
- 「Flask实战」鱼书项目实战四
- 「Flask实战」鱼书项目实战六
- RocketMQ实战系列从理论到实战
- 「Flask实战」flask鱼书项目实战二
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法设计、分析与实现
徐子珊 / 2012-10 / 65.00元
《算法设计、分析与实现:c、c++和java》由徐子珊编著,第1章~第6章按算法设计技巧分成渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法。每章针对一些经典问题给出解决问题的算法,并分析算法的时间复杂度。这样对于初学者来说,按照算法的设计方法划分,算法思想的阐述比较集中,有利于快速入门理解算法的精髓所在。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以结合已......一起来看看 《算法设计、分析与实现》 这本书的介绍吧!