sr-scripts 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|