Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 15 additions & 8 deletions AppController/djinn.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2653,18 +2653,23 @@ def start_load_balancer()
@state = "Starting up Load Balancer"
Djinn.log_debug("Starting up Load Balancer")

my_ip = my_node.public_ip
HAProxy.create_app_load_balancer_config(my_node.private_ip, LoadBalancer.proxy_port)
Nginx.create_app_load_balancer_config(my_ip, LoadBalancer.proxy_port)
my_public = my_node.public_ip
my_private = my_node.private_ip
HAProxy.create_app_load_balancer_config(my_public, my_private,
LoadBalancer.proxy_port)
Nginx.create_app_load_balancer_config(my_public, my_private,
LoadBalancer.proxy_port)
LoadBalancer.start
Nginx.restart
Collectd.restart

head_node_ip = get_public_ip(@creds['hostname'])
if my_ip == head_node_ip
if my_public == head_node_ip
# Only start monitoring on the head node
HAProxy.create_app_monitoring_config(my_node.private_ip, Monitoring.proxy_port)
Nginx.create_app_monitoring_config(my_ip, Monitoring.proxy_port)
HAProxy.create_app_monitoring_config(my_public, my_private,
Monitoring.proxy_port)
Nginx.create_app_monitoring_config(my_public, my_private,
Monitoring.proxy_port)
Nginx.restart
Monitoring.start
end
Expand Down Expand Up @@ -2804,7 +2809,8 @@ def start_appengine()
proxy_port = HAProxy.app_listen_port(app_number)
login_ip = get_login.public_ip
if my_node.is_login? and !my_node.is_appengine?
success = Nginx.write_fullproxy_app_config(app, app_number, my_public, proxy_port, login_ip, get_all_appengine_nodes())
success = Nginx.write_fullproxy_app_config(app, app_number, my_public,
my_private, proxy_port, login_ip, get_all_appengine_nodes())
if success
Nginx.reload
else
Expand All @@ -2822,7 +2828,8 @@ def start_appengine()
static_handlers = HelperFunctions.parse_static_data(app)
proxy_port = HAProxy.app_listen_port(app_number)
login_ip = get_login.public_ip
success = Nginx.write_app_config(app, app_number, my_public, proxy_port, static_handlers, login_ip)
success = Nginx.write_app_config(app, app_number, my_public,
proxy_port, static_handlers, login_ip)
if not success
Djinn.log_debug("ERROR: Failure to create valid nginx config file for application #{app}.")
next
Expand Down
21 changes: 13 additions & 8 deletions AppController/lib/haproxy.rb
Original file line number Diff line number Diff line change
Expand Up @@ -72,29 +72,34 @@ def self.app_listen_port(app_number)
end

# Create the configuration file for the AppLoadBalancer Rails application
def self.create_app_load_balancer_config(my_ip, listen_port)
self.create_app_config(my_ip, listen_port, LoadBalancer.server_ports, LoadBalancer.name)
def self.create_app_load_balancer_config(my_public_ip, my_private_ip,
listen_port)
self.create_app_config(my_public_ip, my_private_ip, listen_port,
LoadBalancer.server_ports, LoadBalancer.name)
end

# Create the configuration file for the AppMonitoring Rails application
def self.create_app_monitoring_config(my_ip, listen_port)
self.create_app_config(my_ip, listen_port, Monitoring.server_ports, Monitoring.name)
def self.create_app_monitoring_config(my_public_ip, my_private_ip, listen_port)
self.create_app_config(my_public_ip, my_private_ip, listen_port,
Monitoring.server_ports, Monitoring.name)
end

# Create the config file for PBServer applications
def self.create_pbserver_config(my_ip, listen_port, table)
self.create_app_config(my_ip, listen_port, PbServer.get_server_ports(table), PbServer::NAME)
self.create_app_config(my_ip, my_ip, listen_port,
PbServer.get_server_ports(table), PbServer::NAME)
end

# A generic function for creating haproxy config files used by appscale services
def self.create_app_config(my_ip, listen_port, server_ports, name)
def self.create_app_config(my_public_ip, my_private_ip, listen_port,
server_ports, name)
servers = []
server_ports.each_with_index do |port, index|
servers << HAProxy.server_config(name, index, my_ip, port)
servers << HAProxy.server_config(name, index, my_private_ip, port)
end

config = "# Create a load balancer for the #{name} application \n"
config << "listen #{name} #{my_ip}:#{listen_port} \n"
config << "listen #{name} #{my_private_ip}:#{listen_port} \n"
config << servers.join("\n")

config_path = File.join(SITES_ENABLED_PATH, "#{name}.#{CONFIG_EXTENSION}")
Expand Down
23 changes: 14 additions & 9 deletions AppController/lib/nginx.rb
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,8 @@ def self.write_app_config(app_name, app_number, my_public_ip, proxy_port, static
end

# Creates a Nginx config file for the provided app name on the load balancer
def self.write_fullproxy_app_config(app_name, app_number, my_public_ip, proxy_port, login_ip, appengine_server_ips)
def self.write_fullproxy_app_config(app_name, app_number, my_public_ip,
my_private_ip, proxy_port, login_ip, appengine_server_ips)
listen_port = Nginx.app_listen_port(app_number)
ssl_listen_port = listen_port - SSL_PORT_OFFSET
blob_servers = []
Expand Down Expand Up @@ -296,13 +297,17 @@ def self.clear_sites_enabled
end

# Create the configuration file for the AppLoadBalancer Rails application
def self.create_app_load_balancer_config(my_ip, proxy_port)
self.create_app_config(my_ip, proxy_port, LoadBalancer.listen_port, LoadBalancer.name, LoadBalancer.public_directory, LoadBalancer.listen_ssl_port)
def self.create_app_load_balancer_config(my_public_ip, my_private_ip,
proxy_port)
self.create_app_config(my_public_ip, my_private_ip, proxy_port,
LoadBalancer.listen_port, LoadBalancer.name,
LoadBalancer.public_directory, LoadBalancer.listen_ssl_port)
end

# Create the configuration file for the AppMonitoring Rails application
def self.create_app_monitoring_config(my_ip, proxy_port)
self.create_app_config(my_ip, proxy_port, Monitoring.listen_port, Monitoring.name, Monitoring.public_directory)
def self.create_app_monitoring_config(my_public_ip, my_private_ip, proxy_port)
self.create_app_config(my_public_ip, my_private_ip, proxy_port,
Monitoring.listen_port, Monitoring.name, Monitoring.public_directory)
end

# Create the configuration file for the pbserver
Expand Down Expand Up @@ -379,11 +384,12 @@ def self.create_pbserver_config(my_ip, proxy_port)


# A generic function for creating nginx config files used by appscale services
def self.create_app_config(my_ip, proxy_port, listen_port, name, public_dir, ssl_port=nil)
def self.create_app_config(my_public_ip, my_private_ip, proxy_port,
listen_port, name, public_dir, ssl_port=nil)

config = <<CONFIG
upstream #{name} {
server #{my_ip}:#{proxy_port};
server #{my_private_ip}:#{proxy_port};
}
CONFIG

Expand All @@ -392,7 +398,7 @@ def self.create_app_config(my_ip, proxy_port, listen_port, name, public_dir, ssl
config += <<CONFIG
server {
listen #{listen_port};
rewrite ^(.*) https://#{my_ip}:#{ssl_port}$1 permanent;
rewrite ^(.*) https://#{my_public_ip}:#{ssl_port}$1 permanent;
}

server {
Expand Down Expand Up @@ -450,7 +456,6 @@ def self.create_app_config(my_ip, proxy_port, listen_port, name, public_dir, ssl
end



# Set up the folder structure and creates the configuration files necessary for nginx
def self.initialize_config
config = <<CONFIG
Expand Down