使用ansible结合keepalived高可用,nginx反向代理部署小型企业环境
2017-11-29 22:02
976 查看
前言:
ansible作为一款灵活、高效、功能丰富的自动化部署工具在企业运维管理中备受推崇。本文演示使用ansible部署小型企业服务框架,实现高可用、负载均衡的目标。如有错误敬请赐教。
目标环境拓扑:
环境介绍:
前端代理层由两台nginx实现,并安装keepalived实现地址滑动达成高可用。
web层由两套Apache+PHP+WordPress 构建应用环境。数据层由一台mariadb组成,篇幅限制这里并没有做数据库主从复制、读写分离(实际环境数据库一定要实现这两项功能)。
IP一览:
vip 172.18.43.88
环境准备:
1.管理端安装ansible,配置ssh秘钥使主机间实现基于秘钥的认证
vim /etc/ansible/hosts
3.为所有主机同步时间
1.创建tasks文件
放在/etc/ansible/roles/web/files/下 ① WordPress目录 ② httpd.conf #从别的地方考过来
4.修改WordPress连接数据库的配置文件
5.添加web主剧本
1.添加task任务
4.修改keepalived模板文件
1.配置mariadb的任务清单
1.目录结构
2.分别执行
项目总结:
1.在定义web的playbook时复制wordpress时开始用的是copy模块执行总是不成功,报错ERROR! A worker was found in a dead state。在确认自己没有语法错误后,百度查找原因无果最后在Google上找到了答案(英文不好不要心虚,技术问题语法都很简单很容易看懂,个别单词查查有道词典就好了),所以有在IT技术的问题问Google准没错。用synchronize模块要比copy模块高效安全的多,synchronize采用rsync复制文件,所以系统必须安装rsync 包否则无法使用这个模块。使用该模块的优点有①增量复制(只复制与目标主机有差异的文件) ② 复制时采用压缩,对复制大文件支持优秀(用copy复制大文件会出错),以下整理了一些synchronize参数:
archive # 是否采用归档模式同步,即以源文件相同属性同步到目标地址
copy_links # 同步的时候是否复制连接
links # Copy symlinks as symlinks
delete # 删除源中没有而目标存在的文件(即以推送方为主)
dest= # 目标地址
dest_port # 目标接受的端口,ansible配置文件中的 ansible_ssh_port 变量优先级高于该 dest_port 变量
dirs # 以非递归的方式传输目录
2.如mysql主机曾经安装过mariadb可能会出现导入SQL命令失败的情况,这时要将mysql的数据库删掉,默认位置在/var/lib/mysql/下
3.编辑nginx代理时注意语句的位置不要写错
4.出现错误仔细看看错误日志,耐心点问题肯没想的那么难。
ansible作为一款灵活、高效、功能丰富的自动化部署工具在企业运维管理中备受推崇。本文演示使用ansible部署小型企业服务框架,实现高可用、负载均衡的目标。如有错误敬请赐教。
目标环境拓扑:
环境介绍:
前端代理层由两台nginx实现,并安装keepalived实现地址滑动达成高可用。
web层由两套Apache+PHP+WordPress 构建应用环境。数据层由一台mariadb组成,篇幅限制这里并没有做数据库主从复制、读写分离(实际环境数据库一定要实现这两项功能)。
IP一览:
vip 172.18.43.88
环境准备:
1.管理端安装ansible,配置ssh秘钥使主机间实现基于秘钥的认证
ssh-keygen -t rsa #三次回车,中途的问题是问秘钥存放位置(默认/root/.ssh),是否加密秘钥。实验方便这里不加密 ssh-copy-id -i .ssh/id_rsa.pub root@172.18.43.71 #将公钥发送给目标主机 ssh-copy-id -i .ssh/id_rsa.pub root@172.18.43.72 ssh-copy-id -i .ssh/id_rsa.pub root@172.18.43.73 ssh-copy-id -i .ssh/id_rsa.pub root@172.18.43.61 ssh-copy-id -i .ssh/id_rsa.pub root@172.18.43.622.编辑ansible的hosts文件,定义所有的主机
vim /etc/ansible/hosts
3.为所有主机同步时间
ansible all -a 'ntpdate 172.18.0.1' #我这里是同步自己局域网的ntp服务器,实验的话选取同一台主机保证时间相同即可4.创建ansible相关角色的目录
mkdir -pv /etc/ansible/roles/{mysql,web,nginx}/{files,tasks,templates,vars,handlers,meta}配置web的playbook:
1.创建tasks文件
vim /etc/ansible/roles/web/task/main.yml - name: install web pakgs yum: name={{ item }} with_items: - httpd - php - php-mysql - name: config web copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf notify: restart the service # 注意这里要与handlers里定义的name相同 - name: copy wordpress synchronize: src=wordpress dest=/var/www/html/wordpress/ - name: restart the service service: name=httpd state=started2.创建handles
vim /etc/ansible/roles/web/handlers/main.yml - name: restart the service #就这 service: name=httpd state=restarted3.添加要复制过去的配置文件
放在/etc/ansible/roles/web/files/下 ① WordPress目录 ② httpd.conf #从别的地方考过来
4.修改WordPress连接数据库的配置文件
cd wordpress cp wp-sample-config.php wp-config.php vim wp-config.php
5.添加web主剧本
vim /etc/ansible/web.yml - hosts: web remote_user: root roles: - web6.测试,没问题的话就下一步
ansible-playbook -C /etc/ansible/web.yml配置代理层:
1.添加task任务
vim /etc/ansible/roles/nginx/tasks/main.yml - name: install package yum: name={{ item }} with_items: - nginx - keepalived - name: config keepalived template: src=keepalived.conf.j2 dest=/etc/keepalived/keepalived.conf notify: restart keepalived - name: config nginx template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: restart nginx - name: start service service: name={{ item }} state=started enabled=true with_items: - keepalived - nginx2.添加handlers
vim /etc/ansible/roles/nginx/handlers - name: restart keepalived service: name=keepalived state=restarted - name: restart nginx service: name=nginx state=restarted3.准备template文件 ①keepalived.conf.j2 ②nginx.conf.j2
4.修改keepalived模板文件
global_defs { notification_email { acassen@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id {{ ansible_hostname }} #自带变量,通过ansible 主机IP -m setup 查询 vrrp_mcast_group4 224.0.0.43 } vrrp_instance VI_1 { state {{ state }} #已通过hosts文件定义变量 interface ens33 #网卡名 virtual_router_id 51 priority {{ priority }} advert_int 1 authentication { auth_type PASS auth_pass lovelinux #设置密码 } virtual_ipaddress { 172.18.43.88 #虚拟IP } }5.修改nginx模板文件(定义在http段)
upstream web { #新增段 server 172.18.43.61; server 172.18.43.62; } server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { #新增段 proxy_pass } }6.添加nginx主剧本
vim /etc/ansible/nginx.yml - hosts: nginx remote_user: root roles: - nginx7.测试,没问题的话就下一步
ansible-playbook -C /etc/ansible/nginx.yml配置mariadb:
1.配置mariadb的任务清单
roles/mysql/tasks/main.yml - name: install mariadb yum: name=mariadb-server - name: copy sql file copy: src=mysql.sql dest=/tmp/mysql.sql - name: start mysql service service: name=mariadb state=started - name: config mysql shell: "mysql < /tmp/mysql.sql"2.设置files文件
vim roles/mysql/files/mysql.sql CREATE DATABASE wp; GRANT ALL ON wp.* TO 'wpuser'@'%' IDENTIFIED BY 'lovelinux';3.添加mysql主剧本
vim /etc/ansible/mysql.yml - hosts: mysql remote_user: root roles: - mysql4.测试,没问题的话就下一步
ansible-playbook -C /etc/ansible/mysql.yml开始表演(执行剧本):
1.目录结构
2.分别执行
ansible-playbook web.yml ansible-playbook nginx.yml ansible-playbook mysql.yml3.访问页面http://172.18.43.88/wordpress
项目总结:
1.在定义web的playbook时复制wordpress时开始用的是copy模块执行总是不成功,报错ERROR! A worker was found in a dead state。在确认自己没有语法错误后,百度查找原因无果最后在Google上找到了答案(英文不好不要心虚,技术问题语法都很简单很容易看懂,个别单词查查有道词典就好了),所以有在IT技术的问题问Google准没错。用synchronize模块要比copy模块高效安全的多,synchronize采用rsync复制文件,所以系统必须安装rsync 包否则无法使用这个模块。使用该模块的优点有①增量复制(只复制与目标主机有差异的文件) ② 复制时采用压缩,对复制大文件支持优秀(用copy复制大文件会出错),以下整理了一些synchronize参数:
archive # 是否采用归档模式同步,即以源文件相同属性同步到目标地址
copy_links # 同步的时候是否复制连接
links # Copy symlinks as symlinks
delete # 删除源中没有而目标存在的文件(即以推送方为主)
dest= # 目标地址
dest_port # 目标接受的端口,ansible配置文件中的 ansible_ssh_port 变量优先级高于该 dest_port 变量
dirs # 以非递归的方式传输目录
2.如mysql主机曾经安装过mariadb可能会出现导入SQL命令失败的情况,这时要将mysql的数据库删掉,默认位置在/var/lib/mysql/下
3.编辑nginx代理时注意语句的位置不要写错
4.出现错误仔细看看错误日志,耐心点问题肯没想的那么难。
相关文章推荐
- 智能一代云平台(二十):Keepalived+Nginx实现高可用,反向代理---模拟实现线上环境
- 智能一代云平台(十五):Keepalived+Nginx实现高可用,反向代理---Nginx安装及配置
- 部署Nginx反向代理三个web服务并调度算法使用加权轮询
- lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(二) LVS+Keepalived
- 智能一代云平台(十七):Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置
- lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(三) Nginx
- 【翻译】使用nginx作为反向代理服务器,uWSGI作为应用服务器来部署flask应用
- 告别LVS:使用keepalived+nginx实现负载均衡代理多个https
- 如何在企业环境中使用 Windows 部署服务 部署 Windows XP(实验手册)
- IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
- 反向代理软件nginx和Kangle及nat123的原理及使用
- (转)IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
- nginx做反向代理结合apache
- OpenERP的优化---使用Nginx反向代理
- Nginx安装配置,简单构建LNMP环境配置反向代理,实现动静分离,以及实现负载均衡。
- IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
- 求助:nginx反向代理后,使用Response.Redirect()页面长时间无响应
- 用HAProxy和KeepAlived构建高可用的反向代理系统
- IIS tomcat共用80端口解决一个IP多个域名:使用Nginx反向代理方式使两者兼容
- 使用Nginx/Lighttpd/Squid作为反向代理服务器 - [技术笔记]