sr-scripts 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/bin/sr-detect-slaves +88 -0
- data/bin/sr-start-slave +7 -2
- data/lib/sr-scripts/version.rb +1 -1
- data/lib/sr-scripts.rb +15 -3
- data/sr-scripts.gemspec +3 -0
- metadata +18 -5
data/.gitignore
CHANGED
@@ -0,0 +1,88 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
$:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
5
|
+
require 'fog'
|
6
|
+
require 'mysql'
|
7
|
+
require 'optparse'
|
8
|
+
require 'sr-scripts'
|
9
|
+
|
10
|
+
def get_public_ip(fog, instance_id)
|
11
|
+
return fog.servers.get(instance_id).public_ip_address
|
12
|
+
end
|
13
|
+
|
14
|
+
options = {}
|
15
|
+
|
16
|
+
optparse = OptionParser.new do|opts|
|
17
|
+
opts.on( '--master-alias-tag MASTER_ALIAS', 'AWS Tag For Master Alias') do |o|
|
18
|
+
options[:master_alias_tag] = o
|
19
|
+
end
|
20
|
+
opts.on( '--mysql-user USER', 'Mysql User') do |o|
|
21
|
+
options[:mysql_user] = o
|
22
|
+
end
|
23
|
+
opts.on( '--mysql-pass PASSWORD', 'Mysql Password') do |o|
|
24
|
+
options[:mysql_password] = o
|
25
|
+
end
|
26
|
+
opts.on( '-h', '--help', 'Display this screen' ) do
|
27
|
+
puts opts
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
optparse.parse!
|
33
|
+
|
34
|
+
if(options[:master_alias_tag] == nil)
|
35
|
+
p "Must specify --master-alias-tag"
|
36
|
+
exit
|
37
|
+
end
|
38
|
+
|
39
|
+
mysql_user = options[:mysql_user]
|
40
|
+
mysql_pass = options[:mysql_password]
|
41
|
+
|
42
|
+
connection = SrScripts::Compute.get
|
43
|
+
|
44
|
+
all_servers = []
|
45
|
+
connection.servers.all.each do |server|
|
46
|
+
all_servers.push(server) if server.tags["master_alias"] == options[:master_alias_tag] && server.state == "running"
|
47
|
+
end
|
48
|
+
|
49
|
+
p "Found #{all_servers.length} Running Servers: " + all_servers.map {|s| s.id}.join(", ")
|
50
|
+
|
51
|
+
def print_server (server, padding)
|
52
|
+
printf "%#{padding}s: %90s\n", server.id, server.created_at
|
53
|
+
end
|
54
|
+
|
55
|
+
def print_all_slaves (server, all_servers, padding)
|
56
|
+
slave_servers = all_servers.find_all { |s| s.tags["master_instance_id"] == server.id }
|
57
|
+
slave_servers.each do |slave|
|
58
|
+
padding += 6
|
59
|
+
print_server(slave, padding)
|
60
|
+
|
61
|
+
print_all_slaves(slave, all_servers, padding) unless slave.tags["master_status"] == "master"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
master_servers = all_servers.find_all { |server| server.tags["master_status"] == "master" }
|
66
|
+
p master_servers.length
|
67
|
+
|
68
|
+
master_servers.each do |master|
|
69
|
+
p "FOUND MASTER: #{master.id}"
|
70
|
+
padding = 10
|
71
|
+
print_server(master, padding)
|
72
|
+
print_all_slaves(master, all_servers, padding)
|
73
|
+
end
|
74
|
+
|
75
|
+
all_servers.each do |server|
|
76
|
+
mysql_conn = Mysql.new(server.public_ip_address, mysql_user, mysql_pass)
|
77
|
+
result = mysql_conn.query("SHOW SLAVE STATUS;")
|
78
|
+
result.each_hash do |row|
|
79
|
+
p row
|
80
|
+
p "SECONDS BEHIND: #{row['Seconds_Behind_Master']}"
|
81
|
+
if row['Seconds_Behind_Master'] == nil
|
82
|
+
p "Doesn't have a master"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
puts "END SERVER: #{server.id}"
|
87
|
+
|
88
|
+
end
|
data/bin/sr-start-slave
CHANGED
@@ -106,8 +106,8 @@ latest_snapshots.each_index do |index|
|
|
106
106
|
vol.save
|
107
107
|
p vol
|
108
108
|
|
109
|
-
until vol.state == "in-use" do
|
110
|
-
sleep
|
109
|
+
until vol.state == "in-use" || vol.state == "attached" do
|
110
|
+
sleep 3
|
111
111
|
vol.reload
|
112
112
|
end
|
113
113
|
end
|
@@ -126,6 +126,8 @@ while disks_attaching
|
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
|
+
puts "All Disks Are Attached"
|
130
|
+
|
129
131
|
|
130
132
|
`mkdir /mnt/mysql`
|
131
133
|
# NEED TO FIND OUT IF NUMBER OF DISKS IS GREATER THAN 1, IF SO, THEN use mdadm to create an array and mount, if not, then just mount
|
@@ -150,3 +152,6 @@ connection.tags.create(:resource_id => current_instance.id, :key => "master_inst
|
|
150
152
|
connection.tags.create(:resource_id => current_instance.id, :key => "mysql_disks", :value => current_master.tags["mysql_disks"])
|
151
153
|
connection.tags.create(:resource_id => current_instance.id, :key => "master_alias", :value => current_master.tags["master_alias"])
|
152
154
|
connection.tags.create(:resource_id => current_instance.id, :key => "master_status", :value => "slave")
|
155
|
+
|
156
|
+
p `mysql -e "SHOW SLAVE STATUS\G"`
|
157
|
+
puts "SERVER COMPLETED SETUP"
|
data/lib/sr-scripts/version.rb
CHANGED
data/lib/sr-scripts.rb
CHANGED
@@ -2,9 +2,21 @@ require 'yaml'
|
|
2
2
|
require 'logger'
|
3
3
|
|
4
4
|
module SrScripts
|
5
|
+
class ConfigFile
|
6
|
+
def self.get
|
7
|
+
if File.exists? '.sr-scripts.yml'
|
8
|
+
return YAML.load_file '.sr-scripts.yml'
|
9
|
+
elsif File.exists? '/etc/sr-scripts.yml'
|
10
|
+
return YAML.load_file '/etc/sr-scripts.yml'
|
11
|
+
else
|
12
|
+
puts "Config File Is Missing: searching for ./.sr-scripts.yml or /etc/sr-scripts.yml"
|
13
|
+
exit 1
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
5
17
|
class Compute
|
6
18
|
def self.get
|
7
|
-
|
19
|
+
yml = ConfigFile.get
|
8
20
|
@aws_access_key = yml["aws_access_key"]
|
9
21
|
@aws_secret_key = yml["aws_secret_key"]
|
10
22
|
return Fog::Compute.new(:provider => "AWS", :aws_access_key_id => @aws_access_key, :aws_secret_access_key => @aws_secret_key, :region => "us-west-1")
|
@@ -12,7 +24,7 @@ module SrScripts
|
|
12
24
|
end
|
13
25
|
class SimpleDB
|
14
26
|
def self.get
|
15
|
-
|
27
|
+
yml = ConfigFile.get
|
16
28
|
@aws_access_key = yml["aws_access_key"]
|
17
29
|
@aws_secret_key = yml["aws_secret_key"]
|
18
30
|
return Fog::AWS::SimpleDB.new(:aws_access_key_id => @aws_access_key, :aws_secret_access_key => @aws_secret_key, :host => "sdb.amazonaws.com")
|
@@ -20,7 +32,7 @@ module SrScripts
|
|
20
32
|
end
|
21
33
|
class SES
|
22
34
|
def self.get
|
23
|
-
|
35
|
+
yml = ConfigFile.get
|
24
36
|
@aws_access_key = yml["aws_access_key"]
|
25
37
|
@aws_secret_key = yml["aws_secret_key"]
|
26
38
|
return Fog::AWS::SES.new(:aws_access_key_id => @aws_access_key, :aws_secret_access_key => @aws_secret_key)
|
data/sr-scripts.gemspec
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 9
|
9
|
+
version: 0.1.9
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Davy Campano
|
@@ -14,16 +14,28 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-03-
|
17
|
+
date: 2012-03-21 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: fog
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
21
32
|
description: Admin scripts
|
22
33
|
email:
|
23
34
|
- dcampano@gmail.com
|
24
35
|
executables:
|
25
36
|
- sr-backup-mysql
|
26
37
|
- sr-check-slave
|
38
|
+
- sr-detect-slaves
|
27
39
|
- sr-ec2-consistent-snapshot
|
28
40
|
- sr-log-monitor
|
29
41
|
- sr-promote-to-master
|
@@ -41,6 +53,7 @@ files:
|
|
41
53
|
- Rakefile
|
42
54
|
- bin/sr-backup-mysql
|
43
55
|
- bin/sr-check-slave
|
56
|
+
- bin/sr-detect-slaves
|
44
57
|
- bin/sr-ec2-consistent-snapshot
|
45
58
|
- bin/sr-log-monitor
|
46
59
|
- bin/sr-promote-to-master
|