All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ooklyn.brooklyn-software-webapp.0.12.0.source-code.catalog.bom Maven / Gradle / Ivy

There is a newer version: 1.1.0
Show newest version
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

brooklyn.catalog:
    version: "0.12.0" # BROOKLYN_VERSION
    itemType: entity
    items:
    - id: org.apache.brooklyn.entity.webapp.nodejs.NodeJsWebAppService
      item:
        type: org.apache.brooklyn.entity.webapp.nodejs.NodeJsWebAppService
        name: Node.JS Application
    - id: org.apache.brooklyn.entity.webapp.jboss.JBoss7Server
      item:
        type: org.apache.brooklyn.entity.webapp.jboss.JBoss7Server
        name: JBoss Application Server 7
        description: AS7 - an open source Java application server from JBoss
    - id: org.apache.brooklyn.entity.proxy.nginx.UrlMapping
      item:
        type: org.apache.brooklyn.entity.proxy.nginx.UrlMapping
        name: URL Mapping
    - id: org.apache.brooklyn.entity.webapp.DynamicWebAppFabric
      item:
        type: org.apache.brooklyn.entity.webapp.DynamicWebAppFabric
        name: Dynamic Web App Fabric
    - id: org.apache.brooklyn.entity.proxy.nginx.NginxController
      item:
        type: org.apache.brooklyn.entity.proxy.nginx.NginxController
        name: Nginx Server
        description: A single Nginx server. Provides HTTP and reverse proxy services
    - id: org.apache.brooklyn.entity.webapp.jboss.JBoss6Server
      item:
        type: org.apache.brooklyn.entity.webapp.jboss.JBoss6Server
        name: JBoss Application Server 6
        description: AS6 -  an open source Java application server from JBoss
    - id: org.apache.brooklyn.entity.webapp.tomcat.Tomcat8Server
      item:
        type: org.apache.brooklyn.entity.webapp.tomcat.Tomcat8Server
        name: Tomcat 8 Server
    - id: org.apache.brooklyn.entity.proxy.LoadBalancerCluster
      item:
        type: org.apache.brooklyn.entity.proxy.LoadBalancerCluster
        name: Load-balanced Cluster
        description: |
          A cluster of load balancers; configuring the cluster (through the LoadBalancer interface)
          will configure all load balancers in the cluster.
    - id: org.apache.brooklyn.entity.webapp.jetty.Jetty6Server
      item:
        type: org.apache.brooklyn.entity.webapp.jetty.Jetty6Server
        name: Jetty6 Server
        description: Old version (v6 @ Mortbay) of the popular Jetty webapp container
    - id: org.apache.brooklyn.entity.webapp.DynamicWebAppCluster
      item:
        type: org.apache.brooklyn.entity.webapp.DynamicWebAppCluster
        name: Dynamic Web-app Cluster
        description: A cluster of web-apps, which can be dynamically re-sized; this does not include a load-balancer
    - id: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
      item:
        type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
        name: Tomcat 7 Server
    - id: org.apache.brooklyn.entity.dns.geoscaling.GeoscalingDnsService
      item:
        type: org.apache.brooklyn.entity.dns.geoscaling.GeoscalingDnsService
        name: Geoscaling DNS Service
        description: A geo-DNS service using geoscaling.com
    - id: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
      item:
        type: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
        name: Controlled Dynamic Web-app Cluster
        description: A cluster of load-balanced web-apps, which can be dynamically re-sized

    - id: load-balancer
      item:
        type: org.apache.brooklyn.entity.proxy.nginx.NginxController
        name: Load Balancer (nginx)
        description: |
          Synonym for 'Nginx Server'.
          Create a load balancer which will point at members in the group entity
          referred to by the config key "serverPool".
          The sensor advertising the port can be configured with the "member.sensor.portNumber" config key,
          defaulting to `http.port`; all member entities which have published "service.up" will then be picked up.

    - id: resilient-bash-web-cluster-template
      itemType: template
      name: "Template: Resilient Load-Balanced Bash Web Cluster with Sensors"
      description: |
        Sample YAML to provision a cluster of the bash/python web server nodes,
        with sensors configured, and a load balancer pointing at them,
        and resilience policies for node replacement and scaling
      item:
        name: Resilient Load-Balanced Bash Web Cluster (Brooklyn Example)

        # this final example shows some of the advanced functionality:
        # defining custom sensors, and a cluster with a "spec",
        # policies for resilience and scaling based on that sensor,
        # and wiring a load balancer in front of the cluster

        # combining this with the riak cluster in the previous example
        # is left as a suggested exercise for the user

        services:

        # define a cluster of the web nodes
        - type:           cluster
          name:           Cluster of Bash Web Nodes
          id:             my-web-cluster
          brooklyn.config:
            initialSize:  1
            memberSpec:
              $brooklyn:entitySpec:
                # template bash-web-server-template is used as the spec for items in this cluster
                # with a new message overwriting the previous,
                # and a lot of sensors defined
                type:           bash-web-server-template
                name:           My Bash Web Server VM with Sensors
                # and clear the location defined there so it is taken from this template
                locations:      []

                brooklyn.config:
                  my.message:   "part of the cluster"

                brooklyn.initializers:
                # make a simple request-count sensor, by counting the number of 200 responses in output.txt
                - type: org.apache.brooklyn.core.sensor.ssh.SshCommandSensor
                  brooklyn.config:
                    name: reqs.count
                    targetType: int
                    period: 5s
                    command: "cat output.txt | grep HTTP | grep 200 | wc | awk '{print $1}'"
                # and publish the port as a sensor so the load-balancer can pick it up
                - type:           org.apache.brooklyn.core.sensor.StaticSensor
                  brooklyn.config:
                    name:         app.port
                    targetType:   int
                    static.value: $brooklyn:config("my.app.port")

                brooklyn.enrichers:
                # derive reqs.per_sec from reqs.count
                - type: org.apache.brooklyn.enricher.stock.YamlTimeWeightedDeltaEnricher
                  brooklyn.config:
                    enricher.sourceSensor: reqs.count
                    enricher.targetSensor: reqs.per_sec
                    enricher.delta.period: 1s
                # and take an average over 30s for reqs.per_sec into reqs.per_sec.windowed_30s
                - type: org.apache.brooklyn.enricher.stock.YamlRollingTimeWindowMeanEnricher
                  brooklyn.config:
                    enricher.sourceSensor: reqs.per_sec
                    enricher.targetSensor: reqs.per_sec.windowed_30s
                    enricher.window.duration: 30s

                brooklyn.policies:
                # restart if a failure is detected (with a max of one restart in 2m, sensor will propagate otherwise)
                - type: org.apache.brooklyn.policy.ha.ServiceRestarter
                  brooklyn.config:
                    failOnRecurringFailuresInThisDuration: 2m

          # back at the cluster, create a total per-sec and some per-node average
          brooklyn.enrichers:
          - type: org.apache.brooklyn.enricher.stock.Aggregator
            brooklyn.config:
              enricher.sourceSensor: reqs.per_sec
              enricher.targetSensor: reqs.per_sec
              transformation: sum
          - type: org.apache.brooklyn.enricher.stock.Aggregator
            brooklyn.config:
              enricher.sourceSensor: reqs.per_sec
              enricher.targetSensor: reqs.per_sec.per_node
              transformation: average
          - type: org.apache.brooklyn.enricher.stock.Aggregator
            brooklyn.config:
              enricher.sourceSensor: reqs.per_sec.windowed_30s
              enricher.targetSensor: reqs.per_sec.windowed_30s.per_node
              transformation: average

          brooklyn.policies:
          # resilience: if a per-node restart policy fails,
          # just throw that node away and create a new one
          - type: org.apache.brooklyn.policy.ha.ServiceReplacer

          # and scale based on reqs/sec
          - type: org.apache.brooklyn.policy.autoscaling.AutoScalerPolicy
            brooklyn.config:
              # scale based on reqs/sec (though in a real-world situation,
              # reqs.per_sec.windowed_30s.per_node might be a better choice)
              metric: reqs.per_sec.per_node

              # really low numbers, so you can trigger a scale-out just by hitting reload a lot
              metricUpperBound: 3
              metricLowerBound: 1

              # sustain 3 reqs/sec for 2s and it will scale out
              resizeUpStabilizationDelay: 2s
              # only scale down when sustained for 1m
              resizeDownStabilizationDelay: 1m

              maxPoolSize: 10

        # and add a load-balancer pointing at the cluster
        - type:           load-balancer
          id:             load-bal
          brooklyn.config:
            # point this load balancer at the cluster, specifying port to forward to
            loadbalancer.serverpool:  $brooklyn:entity("my-web-cluster")
            member.sensor.portNumber: app.port
            # disable sticky sessions to allow easy validation of balancing via browser refresh
            nginx.sticky: false

        brooklyn.enrichers:
        # publish a few useful info sensors and KPI's to the root of the app
        - type: org.apache.brooklyn.enricher.stock.Propagator
          brooklyn.config:
            uniqueTag:    propagate-load-balancer-url
            producer:     $brooklyn:entity("load-bal")
            propagating:
            - main.uri
        - type: org.apache.brooklyn.enricher.stock.Propagator
          brooklyn.config:
            uniqueTag:    propagate-reqs-per-sec
            producer:     $brooklyn:entity("my-web-cluster")
            propagating:
            - reqs.per_sec
            - reqs.per_sec.windowed_30s.per_node

        location:
          jclouds:aws-ec2:
            # edit these (or delete if credentials specified in brooklyn.properties)
            identity:     
            credential:   

            region:       eu-central-1
            minRam:       2gb




© 2015 - 2024 Weber Informatics LLC | Privacy Policy