sml-rubber 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +339 -0
- data/README +6 -0
- data/TODO +9 -0
- data/VERSION +1 -0
- data/generators/vulcanize/USAGE +6 -0
- data/generators/vulcanize/templates/apache/config/rubber/deploy-apache.rb +45 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/deflate.conf +10 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/expires.conf +9 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/headers.conf +6 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/setenvif.conf +52 -0
- data/generators/vulcanize/templates/apache/config/rubber/role/web/vhost.conf +27 -0
- data/generators/vulcanize/templates/apache/config/rubber/rubber-apache.yml +15 -0
- data/generators/vulcanize/templates/apache/templates.yml +1 -0
- data/generators/vulcanize/templates/base/Capfile +17 -0
- data/generators/vulcanize/templates/base/config/deploy.rb +77 -0
- data/generators/vulcanize/templates/base/config/rubber/common/crontab +16 -0
- data/generators/vulcanize/templates/base/config/rubber/common/profile.rc +9 -0
- data/generators/vulcanize/templates/base/config/rubber/deploy-setup.rb +56 -0
- data/generators/vulcanize/templates/base/config/rubber/rubber.yml +221 -0
- data/generators/vulcanize/templates/base/lib/tasks/rubber.rake +18 -0
- data/generators/vulcanize/templates/base/script/cron-rake +18 -0
- data/generators/vulcanize/templates/base/script/cron-runner +18 -0
- data/generators/vulcanize/templates/base/script/cron-sh +67 -0
- data/generators/vulcanize/templates/base/templates.yml +1 -0
- data/generators/vulcanize/templates/complete_mysql/templates.yml +6 -0
- data/generators/vulcanize/templates/complete_passenger_mysql/templates.yml +8 -0
- data/generators/vulcanize/templates/cruise/config/rubber/deploy-cruise.rb +74 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/cruise +40 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/my.cnf +165 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/production.rb +8 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/cruise/site_config.rb +76 -0
- data/generators/vulcanize/templates/cruise/config/rubber/role/web_tools/cruise-nginx.conf +11 -0
- data/generators/vulcanize/templates/cruise/config/rubber/rubber-cruise.yml +18 -0
- data/generators/vulcanize/templates/cruise/templates.yml +1 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/deploy-haproxy.rb +45 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy-default.conf +8 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/haproxy.conf +44 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/monit-haproxy.conf +9 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslog-haproxy.conf +6 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/haproxy/syslogd-default.conf +17 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/role/web_tools/haproxy-nginx.conf +10 -0
- data/generators/vulcanize/templates/haproxy/config/rubber/rubber-haproxy.yml +12 -0
- data/generators/vulcanize/templates/haproxy/templates.yml +1 -0
- data/generators/vulcanize/templates/memcached/config/memcached.yml +28 -0
- data/generators/vulcanize/templates/memcached/config/rubber/common/memcached.yml +14 -0
- data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached.conf +52 -0
- data/generators/vulcanize/templates/memcached/config/rubber/role/memcached/memcached_munin_plugin +249 -0
- data/generators/vulcanize/templates/memcached/config/rubber/rubber-memcached.yml +7 -0
- data/generators/vulcanize/templates/memcached/templates.yml +1 -0
- data/generators/vulcanize/templates/minimal_mysql/templates.yml +7 -0
- data/generators/vulcanize/templates/minimal_nodb/templates.yml +6 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/deploy-mongrel.rb +75 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/role/app/mongrel_cluster.yml +12 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/role/app/monit-mongrel.conf +20 -0
- data/generators/vulcanize/templates/mongrel/config/rubber/rubber-mongrel.yml +9 -0
- data/generators/vulcanize/templates/mongrel/templates.yml +1 -0
- data/generators/vulcanize/templates/monit/config/rubber/common/monit-default.conf +15 -0
- data/generators/vulcanize/templates/monit/config/rubber/common/monit.conf +251 -0
- data/generators/vulcanize/templates/monit/config/rubber/deploy-monit.rb +32 -0
- data/generators/vulcanize/templates/monit/config/rubber/role/web_tools/monit-admin-nginx.conf +10 -0
- data/generators/vulcanize/templates/monit/config/rubber/rubber-monit.yml +6 -0
- data/generators/vulcanize/templates/monit/templates.yml +1 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/monit-munin.conf +8 -0
- data/generators/vulcanize/templates/munin/config/rubber/common/munin-node.conf +48 -0
- data/generators/vulcanize/templates/munin/config/rubber/deploy-munin.rb +30 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-nginx.conf +8 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin-plugins.conf +31 -0
- data/generators/vulcanize/templates/munin/config/rubber/role/web_tools/munin.conf +80 -0
- data/generators/vulcanize/templates/munin/config/rubber/rubber-munin.yml +8 -0
- data/generators/vulcanize/templates/munin/script/munin/example_mysql_query.rb +57 -0
- data/generators/vulcanize/templates/munin/script/munin/example_simple.rb +24 -0
- data/generators/vulcanize/templates/munin/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql/config/rubber/common/database.yml +11 -0
- data/generators/vulcanize/templates/mysql/config/rubber/deploy-mysql.rb +178 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/crontab +14 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/monit-mysql.cnf +10 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/db/my.cnf +167 -0
- data/generators/vulcanize/templates/mysql/config/rubber/role/mysql_slave/mysql_slave_munin_plugin +51 -0
- data/generators/vulcanize/templates/mysql/config/rubber/rubber-mysql.yml +38 -0
- data/generators/vulcanize/templates/mysql/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/common/mysql_cluster_migrations.rb +13 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/deploy-mysql_cluster.rb +173 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_data/my.cnf +15 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_mgm/ndb_mgmd.cnf +39 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/monit-mysql_cluster_sql.cnf +10 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/role/mysql_sql/my.cnf +23 -0
- data/generators/vulcanize/templates/mysql_cluster/config/rubber/rubber-mysql_cluster.yml +32 -0
- data/generators/vulcanize/templates/mysql_cluster/templates.yml +1 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/database.yml +16 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/monit-mysql_proxy.cnf +10 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy +153 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.conf +10 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/common/mysql-proxy.lua +5 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/deploy-mysql_proxy.rb +52 -0
- data/generators/vulcanize/templates/mysql_proxy/config/rubber/rubber-mysql_proxy.yml +11 -0
- data/generators/vulcanize/templates/mysql_proxy/templates.yml +1 -0
- data/generators/vulcanize/templates/nginx/config/rubber/deploy-nginx.rb +45 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web/crontab +9 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web/monit-nginx.conf +9 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web/nginx.conf +133 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/index.html +23 -0
- data/generators/vulcanize/templates/nginx/config/rubber/role/web_tools/nginx-tools.conf +74 -0
- data/generators/vulcanize/templates/nginx/config/rubber/rubber-nginx.yml +33 -0
- data/generators/vulcanize/templates/nginx/templates.yml +1 -0
- data/generators/vulcanize/templates/passenger/config/rubber/deploy-passenger.rb +27 -0
- data/generators/vulcanize/templates/passenger/config/rubber/role/web/passenger.conf +8 -0
- data/generators/vulcanize/templates/passenger/config/rubber/rubber-passenger.yml +4 -0
- data/generators/vulcanize/templates/passenger/templates.yml +1 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/common/sphinx.yml +46 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/deploy-sphinx.rb +112 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/crontab +11 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/role/sphinx/monit-sphinx.conf +10 -0
- data/generators/vulcanize/templates/sphinx/config/rubber/rubber-sphinx.yml +6 -0
- data/generators/vulcanize/templates/sphinx/templates.yml +1 -0
- data/generators/vulcanize/vulcanize_generator.rb +67 -0
- data/lib/capistrano/hostcmd.rb +12 -0
- data/lib/rubber.rb +37 -0
- data/lib/rubber/capistrano.rb +1 -0
- data/lib/rubber/cloud.rb +13 -0
- data/lib/rubber/cloud/aws.rb +261 -0
- data/lib/rubber/cloud/base.rb +16 -0
- data/lib/rubber/configuration.rb +47 -0
- data/lib/rubber/dns.rb +13 -0
- data/lib/rubber/dns/base.rb +69 -0
- data/lib/rubber/dns/dyndns.rb +63 -0
- data/lib/rubber/dns/nettica.rb +56 -0
- data/lib/rubber/dns/zerigo.rb +121 -0
- data/lib/rubber/environment.rb +161 -0
- data/lib/rubber/generator.rb +197 -0
- data/lib/rubber/instance.rb +113 -0
- data/lib/rubber/recipes/rubber.rb +88 -0
- data/lib/rubber/recipes/rubber/bundles.rb +28 -0
- data/lib/rubber/recipes/rubber/deploy.rb +66 -0
- data/lib/rubber/recipes/rubber/instances.rb +298 -0
- data/lib/rubber/recipes/rubber/security_groups.rb +149 -0
- data/lib/rubber/recipes/rubber/setup.rb +285 -0
- data/lib/rubber/recipes/rubber/static_ips.rb +107 -0
- data/lib/rubber/recipes/rubber/utils.rb +195 -0
- data/lib/rubber/recipes/rubber/volumes.rb +263 -0
- data/lib/rubber/tasks/rubber.rb +218 -0
- data/lib/rubber/util.rb +33 -0
- data/test/environment_test.rb +118 -0
- data/test/generator_test.rb +323 -0
- data/test/instance_test.rb +38 -0
- data/test/test_helper.rb +4 -0
- data/test/util_test.rb +16 -0
- metadata +246 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
<%
|
2
|
+
|
3
|
+
mgm_nodes = rubber_instances.for_role('mysql_mgm')
|
4
|
+
mgm_host = mgm_nodes.first.full_name
|
5
|
+
|
6
|
+
@path = "/etc/mysql/my.cnf"
|
7
|
+
@post = <<-POST
|
8
|
+
mkdir -p #{rubber_env.db_data_dir}
|
9
|
+
POST
|
10
|
+
%>
|
11
|
+
|
12
|
+
# Generated by rubber for mysql_data role
|
13
|
+
|
14
|
+
[mysql_cluster]
|
15
|
+
ndb-connectstring=<%= mgm_host %>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<%
|
2
|
+
data_nodes = rubber_instances.for_role('mysql_data')
|
3
|
+
sql_nodes = rubber_instances.for_role('mysql_sql')
|
4
|
+
|
5
|
+
@path = "/etc/mysql/ndb_mgmd.cnf"
|
6
|
+
%>
|
7
|
+
|
8
|
+
# Generated by rubber for mysql_mgm role
|
9
|
+
|
10
|
+
# You can use the following formula for obtaining a rough estimate of how much
|
11
|
+
# RAM is needed for each data node in the cluster:
|
12
|
+
# (SizeofDatabase ? NumberOfReplicas ? 1.1 ) / NumberOfDataNodes
|
13
|
+
|
14
|
+
[NDBD DEFAULT]
|
15
|
+
NoOfReplicas=<%= data_nodes.size == 1 ? 1 : 2 %>
|
16
|
+
|
17
|
+
[MYSQLD DEFAULT]
|
18
|
+
[NDB_MGMD DEFAULT]
|
19
|
+
[TCP DEFAULT]
|
20
|
+
|
21
|
+
# Managment Server
|
22
|
+
[NDB_MGMD]
|
23
|
+
HostName=<%= rubber_env.full_host %>
|
24
|
+
|
25
|
+
# Data Nodes (Where your data is stored)
|
26
|
+
<% data_nodes.each do |data_node| %>
|
27
|
+
[NDBD]
|
28
|
+
HostName=<%= data_node.full_name %>
|
29
|
+
DataDir=<%= rubber_env.db_data_dir %>
|
30
|
+
<% end %>
|
31
|
+
|
32
|
+
# SQL Nodes (what your clients connect to)
|
33
|
+
<% sql_nodes.each do |sql_node| %>
|
34
|
+
[MYSQLD]
|
35
|
+
HostName=<%= sql_node.full_name %>
|
36
|
+
<% end %>
|
37
|
+
|
38
|
+
# One extra sql_node for use by things like ndb_restore from mgm node itself.
|
39
|
+
[MYSQLD]
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%
|
2
|
+
@path = '/etc/monit/monit.d/monit-mysql_cluster_sql.conf'
|
3
|
+
%>
|
4
|
+
|
5
|
+
check process mysql_cluster_sql with pidfile /var/lib/mysql/<%= rubber_env.full_host %>.pid
|
6
|
+
group mysql_cluster_sql-<%= RUBBER_ENV %>
|
7
|
+
start program = "/etc/init.d/mysql start"
|
8
|
+
stop program = "/etc/init.d/mysql stop"
|
9
|
+
if failed host 127.0.0.1 port 3306 protocol mysql then alert
|
10
|
+
if 5 restarts within 5 cycles then timeout
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<%
|
2
|
+
@path = "/etc/mysql/my.cnf"
|
3
|
+
|
4
|
+
# When sql nodes on same hosts as data nodes, then this config needs to be
|
5
|
+
# additive - the mysql_data node gets generated first due to generator order
|
6
|
+
self_instance = rubber_instances[rubber_env.host]
|
7
|
+
if self_instance.role_names.include?('mysql_data')
|
8
|
+
@additive = ['# mysql_sql start', '# mysql_sql end']
|
9
|
+
end
|
10
|
+
|
11
|
+
mgm_nodes = rubber_instances.for_role('mysql_mgm')
|
12
|
+
mgm_host = mgm_nodes.first.full_name
|
13
|
+
%>
|
14
|
+
|
15
|
+
# Generated by rubber for mysql_sql role
|
16
|
+
|
17
|
+
[client]
|
18
|
+
default-character-set = utf8
|
19
|
+
|
20
|
+
[mysqld]
|
21
|
+
default-character-set = utf8
|
22
|
+
ndbcluster
|
23
|
+
ndb-connectstring=<%= mgm_host %>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# MySQL user accounts and privileges are not automatically propagated between different MySQL servers accessing the same MySQL Cluster. Therefore, you must make sure that these are copied between the SQL nodes yourself.
|
2
|
+
|
3
|
+
# REQUIRED: The credentials for creating/accessong your app's database
|
4
|
+
#
|
5
|
+
db_user: "#{app_name}"
|
6
|
+
db_pass:
|
7
|
+
db_name: "#{app_name}_#{RUBBER_ENV}"
|
8
|
+
|
9
|
+
# REQUIRED: The command to use to do a full backup of your database using
|
10
|
+
# "rake rubber:backup_db"
|
11
|
+
db_backup_cmd: "nice mysqldump -h %host% -u %user% --password=%pass% %name% | gzip -c > %backup_file%"
|
12
|
+
# REQUIRED: The command to use to restore the database using
|
13
|
+
# "rake rubber:restore_db_s3"
|
14
|
+
# This command will receive the data generated by db_backup_cmd via
|
15
|
+
# its standard input
|
16
|
+
db_restore_cmd: "zcat - | mysql -h %host% -u %user% --password=%pass% %name%"
|
17
|
+
|
18
|
+
|
19
|
+
# REQUIRED: The directory the data nodes store the db data in
|
20
|
+
#
|
21
|
+
db_data_dir: /mnt/mysql_cluster_data
|
22
|
+
|
23
|
+
packages: [mysql-client, libmysql-ruby]
|
24
|
+
|
25
|
+
|
26
|
+
roles:
|
27
|
+
mysql_sql:
|
28
|
+
packages: [mysql-server]
|
29
|
+
mysql_mgm:
|
30
|
+
packages: [mysql-server]
|
31
|
+
mysql_data:
|
32
|
+
packages: [mysql-server]
|
@@ -0,0 +1 @@
|
|
1
|
+
description: The mysql cluster module
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<%
|
2
|
+
@path = "#{RUBBER_ROOT}/config/database.yml"
|
3
|
+
%>
|
4
|
+
|
5
|
+
# Sets up rails to talk to mysql-proxy load balancer running on localhost,
|
6
|
+
# which then then balances requests between sql nodes in the cluster
|
7
|
+
<%= RUBBER_ENV %>:
|
8
|
+
adapter: mysql
|
9
|
+
encoding: utf8
|
10
|
+
database: <%= rubber_env.db_name %>
|
11
|
+
username: <%= rubber_env.db_user %>
|
12
|
+
password: <%= rubber_env.db_pass %>
|
13
|
+
host: 127.0.0.1
|
14
|
+
port: 4040
|
15
|
+
|
16
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%
|
2
|
+
@path = '/etc/monit/monit.d/monit-mysql_proxy.conf'
|
3
|
+
%>
|
4
|
+
|
5
|
+
check process mysql_proxy with pidfile /var/run/mysql-proxy.pid
|
6
|
+
group mysql_proxy-<%= RUBBER_ENV %>
|
7
|
+
start program = "/etc/init.d/mysql-proxy start"
|
8
|
+
stop program = "/etc/init.d/mysql-proxy stop"
|
9
|
+
if failed host 127.0.0.1 port 4040 protocol mysql then alert
|
10
|
+
if 5 restarts within 5 cycles then timeout
|
@@ -0,0 +1,153 @@
|
|
1
|
+
<%
|
2
|
+
@path = "/etc/init.d/mysql-proxy"
|
3
|
+
@perms = 0755
|
4
|
+
%>#! /bin/sh
|
5
|
+
### BEGIN INIT INFO
|
6
|
+
# Provides: mysql-proxy
|
7
|
+
# Required-Start: $local_fs $remote_fs
|
8
|
+
# Required-Stop: $local_fs $remote_fs
|
9
|
+
# Default-Start: 2 3 4 5
|
10
|
+
# Default-Stop: S 0 1 6
|
11
|
+
# Short-Description: mysql-proxy daemon
|
12
|
+
# Description: Starts local proxy server
|
13
|
+
### END INIT INFO
|
14
|
+
|
15
|
+
# Author: Matt Conway (http://github.com/wr0ngway/rubber)
|
16
|
+
#
|
17
|
+
|
18
|
+
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
19
|
+
PATH=/usr/sbin:/usr/bin:/sbin:/bin
|
20
|
+
DESC="mysql-proxy"
|
21
|
+
NAME=mysql-proxy
|
22
|
+
DAEMON=/usr/sbin/$NAME
|
23
|
+
PIDFILE=/var/run/$NAME.pid
|
24
|
+
DAEMON_ARGS="--daemon --pid-file=${PIDFILE}"
|
25
|
+
SCRIPTNAME=/etc/init.d/$NAME
|
26
|
+
|
27
|
+
# Exit if the package is not installed
|
28
|
+
[ -x "$DAEMON" ] || exit 0
|
29
|
+
|
30
|
+
# Read configuration variable file if it is present
|
31
|
+
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
32
|
+
|
33
|
+
# Load the VERBOSE setting and other rcS variables
|
34
|
+
[ -f /etc/default/rcS ] && . /etc/default/rcS
|
35
|
+
|
36
|
+
# Define LSB log_* functions.
|
37
|
+
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
|
38
|
+
. /lib/lsb/init-functions
|
39
|
+
|
40
|
+
#
|
41
|
+
# Function that starts the daemon/service
|
42
|
+
#
|
43
|
+
do_start()
|
44
|
+
{
|
45
|
+
# Return
|
46
|
+
# 0 if daemon has been started
|
47
|
+
# 1 if daemon was already running
|
48
|
+
# 2 if daemon could not be started
|
49
|
+
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|
50
|
+
|| return 1
|
51
|
+
start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON -- \
|
52
|
+
$DAEMON_ARGS \
|
53
|
+
|| return 2
|
54
|
+
# Add code here, if necessary, that waits for the process to be ready
|
55
|
+
# to handle requests from services started subsequently which depend
|
56
|
+
# on this one. As a last resort, sleep for some time.
|
57
|
+
}
|
58
|
+
|
59
|
+
#
|
60
|
+
# Function that stops the daemon/service
|
61
|
+
#
|
62
|
+
do_stop()
|
63
|
+
{
|
64
|
+
# Return
|
65
|
+
# 0 if daemon has been stopped
|
66
|
+
# 1 if daemon was already stopped
|
67
|
+
# 2 if daemon could not be stopped
|
68
|
+
# other if a failure occurred
|
69
|
+
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
|
70
|
+
RETVAL="$?"
|
71
|
+
[ "$RETVAL" = 2 ] && return 2
|
72
|
+
# Wait for children to finish too if this is a daemon that forks
|
73
|
+
# and if the daemon is only ever run from this initscript.
|
74
|
+
# If the above conditions are not satisfied then add some other code
|
75
|
+
# that waits for the process to drop all resources that could be
|
76
|
+
# needed by services started subsequently. A last resort is to
|
77
|
+
# sleep for some time.
|
78
|
+
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
|
79
|
+
[ "$?" = 2 ] && return 2
|
80
|
+
# Many daemons don't delete their pidfiles when they exit.
|
81
|
+
rm -f $PIDFILE
|
82
|
+
return "$RETVAL"
|
83
|
+
}
|
84
|
+
|
85
|
+
#
|
86
|
+
# Function that sends a SIGHUP to the daemon/service
|
87
|
+
#
|
88
|
+
do_reload() {
|
89
|
+
#
|
90
|
+
# If the daemon can reload its configuration without
|
91
|
+
# restarting (for example, when it is sent a SIGHUP),
|
92
|
+
# then implement that here.
|
93
|
+
#
|
94
|
+
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
|
95
|
+
return 0
|
96
|
+
}
|
97
|
+
|
98
|
+
case "$1" in
|
99
|
+
start)
|
100
|
+
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
101
|
+
do_start
|
102
|
+
case "$?" in
|
103
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
104
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
105
|
+
esac
|
106
|
+
;;
|
107
|
+
stop)
|
108
|
+
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
109
|
+
do_stop
|
110
|
+
case "$?" in
|
111
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
112
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
113
|
+
esac
|
114
|
+
;;
|
115
|
+
#reload|force-reload)
|
116
|
+
#
|
117
|
+
# If do_reload() is not implemented then leave this commented out
|
118
|
+
# and leave 'force-reload' as an alias for 'restart'.
|
119
|
+
#
|
120
|
+
#log_daemon_msg "Reloading $DESC" "$NAME"
|
121
|
+
#do_reload
|
122
|
+
#log_end_msg $?
|
123
|
+
#;;
|
124
|
+
restart|force-reload)
|
125
|
+
#
|
126
|
+
# If the "reload" option is implemented then remove the
|
127
|
+
# 'force-reload' alias
|
128
|
+
#
|
129
|
+
log_daemon_msg "Restarting $DESC" "$NAME"
|
130
|
+
do_stop
|
131
|
+
case "$?" in
|
132
|
+
0|1)
|
133
|
+
do_start
|
134
|
+
case "$?" in
|
135
|
+
0) log_end_msg 0 ;;
|
136
|
+
1) log_end_msg 1 ;; # Old process is still running
|
137
|
+
*) log_end_msg 1 ;; # Failed to start
|
138
|
+
esac
|
139
|
+
;;
|
140
|
+
*)
|
141
|
+
# Failed to stop
|
142
|
+
log_end_msg 1
|
143
|
+
;;
|
144
|
+
esac
|
145
|
+
;;
|
146
|
+
*)
|
147
|
+
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
148
|
+
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
|
149
|
+
exit 3
|
150
|
+
;;
|
151
|
+
esac
|
152
|
+
|
153
|
+
:
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%
|
2
|
+
@path = "/etc/default/mysql-proxy"
|
3
|
+
|
4
|
+
proxy_cmd = "--proxy-lua-script=/etc/mysql/mysql-proxy.lua"
|
5
|
+
rubber_instances.for_role(rubber_env.mysql_proxy_role).each do |ic|
|
6
|
+
proxy_cmd << " --proxy-backend-addresses=#{ic.full_name}:3306"
|
7
|
+
end
|
8
|
+
%>
|
9
|
+
|
10
|
+
DAEMON_ARGS="${DAEMON_ARGS} <%= proxy_cmd %>"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
namespace :rubber do
|
3
|
+
|
4
|
+
namespace :mysql_proxy do
|
5
|
+
|
6
|
+
rubber.allow_optional_tasks(self)
|
7
|
+
|
8
|
+
# mysql-proxy needs to get stopped last and started first so that
|
9
|
+
# other processes that use db aren't affected
|
10
|
+
after "deploy:stop", "rubber:mysql_proxy:stop"
|
11
|
+
before "deploy:start", "rubber:mysql_proxy:start"
|
12
|
+
before "deploy:restart", "rubber:mysql_proxy:restart"
|
13
|
+
|
14
|
+
before "rubber:install_packages", "rubber:mysql_proxy:install"
|
15
|
+
|
16
|
+
task :install do
|
17
|
+
# Setup apt sources to getmysql-proxy (needs to happen for all roles)
|
18
|
+
# https://launchpad.net/~mysql-cge-testing/+archive
|
19
|
+
#
|
20
|
+
sources = <<-SOURCES
|
21
|
+
deb http://ppa.launchpad.net/ndb-bindings/ubuntu hardy main
|
22
|
+
deb-src http://ppa.launchpad.net/ndb-bindings/ubuntu hardy main
|
23
|
+
SOURCES
|
24
|
+
sources.gsub!(/^ */, '')
|
25
|
+
put(sources, "/etc/apt/sources.list.d/mysql_proxy.list")
|
26
|
+
end
|
27
|
+
|
28
|
+
desc <<-DESC
|
29
|
+
Starts the mysql proxy daemon
|
30
|
+
DESC
|
31
|
+
task :start do
|
32
|
+
sudo "/etc/init.d/mysql-proxy start"
|
33
|
+
end
|
34
|
+
|
35
|
+
desc <<-DESC
|
36
|
+
Stops the mysql proxy daemon
|
37
|
+
DESC
|
38
|
+
task :stop do
|
39
|
+
sudo "/etc/init.d/mysql-proxy stop"
|
40
|
+
end
|
41
|
+
|
42
|
+
desc <<-DESC
|
43
|
+
Restarts the mysql proxy daemon
|
44
|
+
DESC
|
45
|
+
task :restart do
|
46
|
+
sudo "/etc/init.d/mysql-proxy restart"
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# MySQL user accounts and privileges are not automatically propagated between different MySQL servers accessing the same MySQL Cluster. Therefore, you must make sure that these are copied between the SQL nodes yourself.
|
2
|
+
|
3
|
+
# Uses db credtial variables from mysql/mysql_cluster
|
4
|
+
# db_user, db_pass, db_name
|
5
|
+
|
6
|
+
# REQUIRED: The role of the servers mysql_proxy load balances sql requests to.
|
7
|
+
# e.g. 'mysql_sql' for mysql_cluster, or 'db' for both mysql master/slave,
|
8
|
+
# or 'mysql_master' for just master
|
9
|
+
mysql_proxy_role: mysql_sql
|
10
|
+
|
11
|
+
packages: [mysql-proxy]
|
@@ -0,0 +1 @@
|
|
1
|
+
description: The mysql_proxy module for load balancing to mysql servers
|
@@ -0,0 +1,45 @@
|
|
1
|
+
|
2
|
+
namespace :rubber do
|
3
|
+
|
4
|
+
namespace :nginx do
|
5
|
+
|
6
|
+
rubber.allow_optional_tasks(self)
|
7
|
+
|
8
|
+
# serial_task can only be called after roles defined - not normally a problem, but
|
9
|
+
# rubber auto-roles don't get defined till after all tasks are defined
|
10
|
+
on :load do
|
11
|
+
rubber.serial_task self, :serial_restart, :roles => [:web, :web_tools] do
|
12
|
+
run "/etc/init.d/nginx restart"
|
13
|
+
end
|
14
|
+
rubber.serial_task self, :serial_reload, :roles => [:web, :web_tools] do
|
15
|
+
run "if ! ps ax | grep -v grep | grep -c nginx &> /dev/null; then /etc/init.d/nginx start; else /etc/init.d/nginx reload; fi"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
before "deploy:stop", "rubber:nginx:stop"
|
20
|
+
after "deploy:start", "rubber:nginx:start"
|
21
|
+
after "deploy:restart", "rubber:nginx:reload"
|
22
|
+
|
23
|
+
desc "Stops the nginx web server"
|
24
|
+
task :stop, :roles => [:web, :web_tools], :on_error => :continue do
|
25
|
+
run "/etc/init.d/nginx stop"
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "Starts the nginx web server"
|
29
|
+
task :start, :roles => [:web, :web_tools] do
|
30
|
+
run "/etc/init.d/nginx start"
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "Restarts the nginx web server"
|
34
|
+
task :restart, :roles => [:web, :web_tools] do
|
35
|
+
serial_restart
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "Reloads the nginx web server"
|
39
|
+
task :reload, :roles => [:web, :web_tools] do
|
40
|
+
serial_reload
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|