使用ansible结合keepalived高可用,nginx反向代理部署小型企业环境

前言:

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 [email protected] #将公钥发送给目标主机
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]
ssh-copy-id -i .ssh/id_rsa.pub [email protected]

2.编辑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=started

2.创建handles

vim /etc/ansible/roles/web/handlers/main.yml
- name: restart the service  #就这
  service: name=httpd state=restarted

3.添加要复制过去的配置文件

放在/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:
  - web

6.测试,没问题的话就下一步

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
  - nginx

2.添加handlers

vim /etc/ansible/roles/nginx/handlers
- name: restart keepalived
  service: name=keepalived state=restarted
- name: restart nginx
  service: name=nginx state=restarted

3.准备template文件 ①keepalived.conf.j2  ②nginx.conf.j2

4.修改keepalived模板文件

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   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:
  - nginx

7.测试,没问题的话就下一步

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:
  - mysql

4.测试,没问题的话就下一步

ansible-playbook -C /etc/ansible/mysql.yml


开始表演(执行剧本):

1.目录结构

2.分别执行

ansible-playbook  web.yml
ansible-playbook  nginx.yml
ansible-playbook  mysql.yml

3.访问页面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.出现错误仔细看看错误日志,耐心点问题肯没想的那么难。

时间: 2024-10-11 00:43:37

使用ansible结合keepalived高可用,nginx反向代理部署小型企业环境的相关文章

keepalived实现高可用nginx反向代理的简单案例

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 案例拓扑图 安装keepalived和nginx 安装keepalived # yum -y install keepalived 创建nginx用户组及nginx用户 # groupadd -r nginx # useradd -g nginx -r nginx 编译安装nginx-1.4.7 # tar xf nginx-1.4.7.tar.gz  # cd nginx-1.4.7 # ./

Keepalived实现高可用Nginx反向代理和基于NAT的LVS及分析

1. 前言 keepalived是一个C语言开发的,能够基于Linux基础架构提供一个HA实现的软件.HA是基于VRRP协议实现,可以为LVS.Nginx.HAProxy等实现的LB提供高可用. 下图是keepalived的软件架构图 主要核心模块: Checkers:负责对Real Server进行健康检查. VRRP栈:实现了VRRP协议,实现了vrrp_sync_group扩展,不依赖于LVS可以独立的使用.例如下面第一个实验keepalived+nginx反代. IPVS Wrapper

keepalived高可用+nginx证书代理

安装nginx yum -y install gcc pcre-devel openssl-devel        #安装依赖包 wget   http://nginx.org/download/nginx-1.12.2.tar.gz     (也可配置阿里源用yum安装) tar -xf nginx-1.12.2.tar.gz ./configure  \ --prefix=/usr/local/nginx \                #指定安装路径 --user=nginx \   

Keepalived实现高可用Nginx反向代理

由于好久没有接触过负载相关的调试了复习一下 实验系统: (1)CentOS 6.5_x86_64: (2)共有二台主机,本实验以ip地址来命名主机,即10主机.11主机. 实验前提:防火墙和selinux都关闭,主机之间时间同步 实验软件:nginx-1.10.2-1.el6.x86_64.keepalived-1.2.13-5.el6_6.x86_64.httpd-2.2.15-59.el6.centos.x86_64为了方便实验只起了2台虚机方便测试,每台虚机上都安装nginx.keepal

用HAProxy和KeepAlived构建高可用的反向代理

用HAProxy和KeepAlived构建高可用的反向代理 前言对于访问量较大的网站来说,随着流量的增加单台服务器已经无法处理所有的请求,这时候需要多台服务器对大量的请求进行分流处理,即负载均衡.而如果实 现负载均衡,必须在网站的入口部署服务器(不只是一台)对这些请求进行分发,这台服务器即反向代理.由于反向代理服务器是网站的入口,其负载压力大且易遭 到攻击,存在单点故障的风险,所以我们需要一个高可用的方案来实现当一台反向代理服务器宕机的时候,另一台服务器会自动接管服务.基于以上要求,我们使用 H

实践:在CentOS7.3部署 keepalived 高可用nginx(负载均衡)

背景: 既然有了Lvs+keepalived这样高性能的组合,那为何还要有Nginx+keepalived呢,keepalived的初衷就是为了Lvs而设计的,我们都知道Lvs是一个四层的负载均衡设备,虽然有着高性能的优势,但同时它却没有后端服务器的健康检查机制,keepalived为lvs设计了一系列的健康检查机制TCP_CHECK,UDP_CHECK,HTTP_GET等.同时lvs也可以自己写健康检查脚脚本.或者结合ldirectory来实现后端检测.但是固LVS始终无法摆脱它是一个四层设备

4、keepalived高可用nginx负载均衡

keepalived: HTTP_GET        //使用keepalived获取后端real server健康状态检测 SSL_GET(https)  //这里以为这后端使用的是http协议 TCP_CHECK 下面演示基于TCP_CHECK做检测 # man keepalived    //查看TCP_CHECK配置段 # TCP healthchecker TCP_CHECK { # ======== generic connection options # Optional IP

lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(一) 简介

一. 为什么这样构架 1. 系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后 很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的 配置文件,并能实现无缝配置变更!nginx提供反向代理,而tomcat则提供web服务. 二.LVS LVS是Linux Virtual Server的简写,意即Linux虚拟

lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(二) LVS

一.安装lvs sudo apt-get install ipvsadm 二.安装keepalived sudo apt-get install keepalived 三.创建keepalived.conf文件 sudo gedit /etc/keepalived/keepalived.conf 四.配置keepalived.conf # Global Configuration global_defs { lvs_id director1 } # VRRP Configuration vrrp