From c9a5f0c81eee40962c50410272d89b8df39c6716 Mon Sep 17 00:00:00 2001 From: jainish shah Date: Wed, 8 Aug 2018 11:30:35 -0700 Subject: [PATCH] Updated nginx config to support production load --- .../scripts/install_artifactory.sh | 20 +++++- CloudFormation/artifactory-enterprise.json | 67 ++++++++++++++++--- Terraform/inactiveServerCleaner.groovy | 23 +++++-- Terraform/userdata.sh | 20 +++++- Terraform/userdata_secondary.sh | 20 +++++- 5 files changed, 130 insertions(+), 20 deletions(-) diff --git a/AzureResourceManager/scripts/install_artifactory.sh b/AzureResourceManager/scripts/install_artifactory.sh index 2c03813..225964a 100644 --- a/AzureResourceManager/scripts/install_artifactory.sh +++ b/AzureResourceManager/scripts/install_artifactory.sh @@ -65,6 +65,24 @@ cat </etc/nginx/nginx.conf http { include mime.types; + variables_hash_max_size 1024; + variables_hash_bucket_size 64; + server_names_hash_max_size 4096; + server_names_hash_bucket_size 128; + types_hash_max_size 2048; + types_hash_bucket_size 64; + proxy_read_timeout 2400s; + client_header_timeout 2400s; + client_body_timeout 2400s; + proxy_connect_timeout 75s; + proxy_send_timeout 2400s; + proxy_buffer_size 32k; + proxy_buffers 40 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 250m; + proxy_http_version 1.1; + client_body_buffer_size 128k; + include /etc/nginx/conf.d/*.conf; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' @@ -100,7 +118,7 @@ server { chunked_transfer_encoding on; client_max_body_size 0; location /artifactory/ { - proxy_read_timeout 900; + proxy_read_timeout 2400; proxy_pass_header Server; proxy_cookie_path ~*^/.* /; proxy_pass http://127.0.0.1:8081/artifactory/; diff --git a/CloudFormation/artifactory-enterprise.json b/CloudFormation/artifactory-enterprise.json index c73d64d..59c2e07 100644 --- a/CloudFormation/artifactory-enterprise.json +++ b/CloudFormation/artifactory-enterprise.json @@ -626,6 +626,24 @@ "}\n", "http {\n", " include mime.types;\n", + " variables_hash_max_size 1024;\n", + " variables_hash_bucket_size 64;\n", + " server_names_hash_max_size 4096;\n", + " server_names_hash_bucket_size 128;\n", + " types_hash_max_size 2048;\n", + " types_hash_bucket_size 64;\n", + " proxy_read_timeout 2400s;\n", + " client_header_timeout 2400s;\n", + " client_body_timeout 2400s;\n", + " proxy_connect_timeout 75s;\n", + " proxy_send_timeout 2400s;\n", + " proxy_buffer_size 32k;\n", + " proxy_buffers 40 32k;\n", + " proxy_busy_buffers_size 64k;\n", + " proxy_temp_file_write_size 250m;\n", + " proxy_http_version 1.1;\n", + " client_body_buffer_size 128k;\n", + " include /etc/nginx/conf.d/*.conf;\n", " default_type application/octet-stream;\n", " log_format main '$remote_addr - $remote_user [$time_local] \"$request\" '\n", @@ -748,16 +766,27 @@ "import org.artifactory.storage.db.servers.service.ArtifactoryServersCommonService\n", "import org.artifactory.common.ConstantValues\n", "import org.slf4j.Logger\n", + "import java.util.concurrent.TimeUnit\n", "jobs {\n", - " clean(interval: 60000, delay: 600000) {\n", - " def artifactoryServersCommonService = ctx.beanForType(ArtifactoryServersCommonService)\n", - " def artifactoryInactiveServerCleaner = new ArtifactoryInactiveServersCleaner(artifactoryServersCommonService, log)\n", - " artifactoryInactiveServerCleaner.cleanInactiveArtifactoryServers()\n", + " clean(interval: 90000, delay: 900000) {\n", + " runCleanupHAInactiveServers()\n", " }\n", "}\n", + "executions {\n", + " cleanHAInactiveServers() { params ->\n", + " runCleanupHAInactiveServers()\n", + " }\n", + "}\n", + + "def runCleanupHAInactiveServers() {\n", + " def artifactoryServersCommonService = ctx.beanForType(ArtifactoryServersCommonService)\n", + " def artifactoryInactiveServerCleaner = new ArtifactoryInactiveServersCleaner(artifactoryServersCommonService, log)\n", + " artifactoryInactiveServerCleaner.cleanInactiveArtifactoryServers()\n", + "}\n", + "public class ArtifactoryInactiveServersCleaner {\n", " private ArtifactoryServersCommonService artifactoryServersCommonService\n", @@ -768,17 +797,17 @@ " this.log = log\n", " }\n", - " def cleanInactiveArtifactoryServers() {\n", + " def cleanInactiveArtifactoryServers() {\n", " log.info \"Executing inactive artifactory servers cleaner plugin\"\n", " List allMembers = artifactoryServersCommonService.getAllArtifactoryServers()\n", " for (member in allMembers) {\n", " def heartbeat = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - member.getLastHeartbeat())\n", " def noHeartbeat = heartbeat > ConstantValues.haHeartbeatStaleIntervalSecs.getInt()\n", - " if (member.getServerState() == ArtifactoryServerState.UNAVAILABLE || noHeartbeat) {\n", + " if (member.getServerState() == ArtifactoryServerState.UNAVAILABLE || ( noHeartbeat && member.getServerState() != ArtifactoryServerState.CONVERTING && member.getServerState() != ArtifactoryServerState.STARTING )) {\n", " try {\n", - " log.info \"Running inactive artifactory servers cleaning task, found ${member.serverId} inactive servers to \" +\n", - " \"remove\"\n", + " log.info \"Inactive artifactory servers cleaning task found server ${member.serverId} to remove\"\n", " artifactoryServersCommonService.removeServer(member.serverId)\n", + " }catch (Exception e){\n", " log.error \"Error: Not able to remove ${member.serverId}, ${e.message}\"\n", " }\n", @@ -833,7 +862,7 @@ " chunked_transfer_encoding on;\n", " client_max_body_size 0;\n", " location /artifactory/ {\n", - " proxy_read_timeout 900;\n", + " proxy_read_timeout 2400;\n", " proxy_pass_header Server;\n", " proxy_cookie_path ~*^/.* /;\n", " proxy_pass http://127.0.0.1:8081/artifactory/;\n", @@ -1011,6 +1040,24 @@ "}\n", "http {\n", " include mime.types;\n", + " variables_hash_max_size 1024;\n", + " variables_hash_bucket_size 64;\n", + " server_names_hash_max_size 4096;\n", + " server_names_hash_bucket_size 128;\n", + " types_hash_max_size 2048;\n", + " types_hash_bucket_size 64;\n", + " proxy_read_timeout 2400s;\n", + " client_header_timeout 2400s;\n", + " client_body_timeout 2400s;\n", + " proxy_connect_timeout 75s;\n", + " proxy_send_timeout 2400s;\n", + " proxy_buffer_size 32k;\n", + " proxy_buffers 40 32k;\n", + " proxy_busy_buffers_size 64k;\n", + " proxy_temp_file_write_size 250m;\n", + " proxy_http_version 1.1;\n", + " client_body_buffer_size 128k;\n", + " include /etc/nginx/conf.d/*.conf;\n", " default_type application/octet-stream;\n", " log_format main '$remote_addr - $remote_user [$time_local] \"$request\" '\n", @@ -1167,7 +1214,7 @@ " chunked_transfer_encoding on;\n", " client_max_body_size 0;\n", " location /artifactory/ {\n", - " proxy_read_timeout 900;\n", + " proxy_read_timeout 2400;\n", " proxy_pass_header Server;\n", " proxy_cookie_path ~*^/.* /;\n", " proxy_pass http://127.0.0.1:8081/artifactory/;\n", diff --git a/Terraform/inactiveServerCleaner.groovy b/Terraform/inactiveServerCleaner.groovy index 517a6e7..fd5b445 100644 --- a/Terraform/inactiveServerCleaner.groovy +++ b/Terraform/inactiveServerCleaner.groovy @@ -6,13 +6,23 @@ import org.slf4j.Logger import java.util.concurrent.TimeUnit jobs { - clean(interval: 60000, delay: 600000) { - def artifactoryServersCommonService = ctx.beanForType(ArtifactoryServersCommonService) - def artifactoryInactiveServerCleaner = new ArtifactoryInactiveServersCleaner(artifactoryServersCommonService, log) - artifactoryInactiveServerCleaner.cleanInactiveArtifactoryServers() + clean(interval: 90000, delay: 900000) { + runCleanupHAInactiveServers() } } +executions { + cleanHAInactiveServers() { params -> + runCleanupHAInactiveServers() + } +} + +def runCleanupHAInactiveServers() { + def artifactoryServersCommonService = ctx.beanForType(ArtifactoryServersCommonService) + def artifactoryInactiveServerCleaner = new ArtifactoryInactiveServersCleaner(artifactoryServersCommonService, log) + artifactoryInactiveServerCleaner.cleanInactiveArtifactoryServers() +} + public class ArtifactoryInactiveServersCleaner { private ArtifactoryServersCommonService artifactoryServersCommonService @@ -29,10 +39,9 @@ public class ArtifactoryInactiveServersCleaner { for (member in allMembers) { def heartbeat = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - member.getLastHeartbeat()) def noHeartbeat = heartbeat > ConstantValues.haHeartbeatStaleIntervalSecs.getInt() - if (member.getServerState() == ArtifactoryServerState.UNAVAILABLE || noHeartbeat) { + if (member.getServerState() == ArtifactoryServerState.UNAVAILABLE || ( noHeartbeat && member.getServerState() != ArtifactoryServerState.CONVERTING && member.getServerState() != ArtifactoryServerState.STARTING )) { try { - log.info "Running inactive artifactory servers cleaning task, found ${member.serverId} inactive servers to " + - "remove" + log.info "Inactive artifactory servers cleaning task found server ${member.serverId} to remove" artifactoryServersCommonService.removeServer(member.serverId) }catch (Exception e){ diff --git a/Terraform/userdata.sh b/Terraform/userdata.sh index be341e5..a0040c2 100644 --- a/Terraform/userdata.sh +++ b/Terraform/userdata.sh @@ -106,6 +106,24 @@ cat </etc/nginx/nginx.conf http { include mime.types; + variables_hash_max_size 1024; + variables_hash_bucket_size 64; + server_names_hash_max_size 4096; + server_names_hash_bucket_size 128; + types_hash_max_size 2048; + types_hash_bucket_size 64; + proxy_read_timeout 2400s; + client_header_timeout 2400s; + client_body_timeout 2400s; + proxy_connect_timeout 75s; + proxy_send_timeout 2400s; + proxy_buffer_size 32k; + proxy_buffers 40 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 250m; + proxy_http_version 1.1; + client_body_buffer_size 128k; + include /etc/nginx/conf.d/*.conf; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' @@ -141,7 +159,7 @@ server { chunked_transfer_encoding on; client_max_body_size 0; location /artifactory/ { - proxy_read_timeout 900; + proxy_read_timeout 2400; proxy_pass_header Server; proxy_cookie_path ~*^/.* /; proxy_pass http://127.0.0.1:8081/artifactory/; diff --git a/Terraform/userdata_secondary.sh b/Terraform/userdata_secondary.sh index 9b55efd..024d069 100644 --- a/Terraform/userdata_secondary.sh +++ b/Terraform/userdata_secondary.sh @@ -107,6 +107,24 @@ cat </etc/nginx/nginx.conf http { include mime.types; + variables_hash_max_size 1024; + variables_hash_bucket_size 64; + server_names_hash_max_size 4096; + server_names_hash_bucket_size 128; + types_hash_max_size 2048; + types_hash_bucket_size 64; + proxy_read_timeout 2400s; + client_header_timeout 2400s; + client_body_timeout 2400s; + proxy_connect_timeout 75s; + proxy_send_timeout 2400s; + proxy_buffer_size 32k; + proxy_buffers 40 32k; + proxy_busy_buffers_size 64k; + proxy_temp_file_write_size 250m; + proxy_http_version 1.1; + client_body_buffer_size 128k; + include /etc/nginx/conf.d/*.conf; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' @@ -142,7 +160,7 @@ server { chunked_transfer_encoding on; client_max_body_size 0; location /artifactory/ { - proxy_read_timeout 900; + proxy_read_timeout 2400; proxy_pass_header Server; proxy_cookie_path ~*^/.* /; proxy_pass http://127.0.0.1:8081/artifactory/;