Skip to content

Commit 01d63bf

Browse files
committed
Tune for large deployments
1 parent 3d7272f commit 01d63bf

14 files changed

+227
-9
lines changed

README_ADVANCED.md

+27
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,33 @@ module "server" {
881881
}
882882
```
883883

884+
## Large deployments
885+
886+
In the case of the Build Validation test suite, or when trying to reproduce situations with a large number of clients, it is adviced to use `large_deployment` option. This option is inspired by the documentation at https://documentation.suse.com/suma/4.3/en/suse-manager/specialized-guides/large-deployments/tuning.html, and it will apply the following settings on the server:
887+
888+
```
889+
### /etc/rhn/rhn.conf
890+
taskomatic.com.redhat.rhn.taskomatic.task.MinionActionExecutor.parallel_threads = 3
891+
hibernate.c3p0.max_size = 50
892+
893+
### /etc/tomcat/server.xml
894+
changed `maxThreads` to 256
895+
896+
### /var/lib/pgsql/data/postgresql.conf
897+
max_connections = 450
898+
work_mem = 10MB
899+
```
900+
901+
An example follows:
902+
903+
```hcl
904+
module "server" {
905+
...
906+
large_deployment = true
907+
...
908+
}
909+
```
910+
884911
## Debugging facilities
885912

886913
The `server` module has options to automatically capture more diagnostic information, off by default:

modules/cucumber_testsuite/main.tf

+12-8
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ locals {
2929
additional_packages = { for host_key in local.hosts :
3030
host_key => lookup(var.host_settings[host_key], "additional_packages", []) if var.host_settings[host_key] != null }
3131
additional_grains = { for host_key in local.hosts :
32-
host_key => lookup(var.host_settings[host_key], "additional_grains", {}) if var.host_settings[host_key] != null }
32+
host_key => lookup(var.host_settings[host_key], "additional_grains", {}) if var.host_settings[host_key] != null }
3333
images = { for host_key in local.hosts :
3434
host_key => lookup(var.host_settings[host_key], "image", "default") if var.host_settings[host_key] != null ? contains(keys(var.host_settings[host_key]), "image") : false }
3535
names = { for host_key in local.hosts :
@@ -44,12 +44,14 @@ locals {
4444
host_key => lookup(var.host_settings[host_key], "runtime", "podman") if var.host_settings[host_key] != null }
4545
container_repositories = { for host_key in local.hosts :
4646
host_key => lookup(var.host_settings[host_key], "container_repository", null) if var.host_settings[host_key] != null }
47-
helm_chart_urls = { for host_key in local.hosts :
47+
helm_chart_urls = { for host_key in local.hosts :
4848
host_key => lookup(var.host_settings[host_key], "helm_chart_url", null) if var.host_settings[host_key] != null }
49-
repository_disk_size = { for host_key in local.hosts :
49+
repository_disk_size = { for host_key in local.hosts :
5050
host_key => lookup(var.host_settings[host_key], "repository_disk_size", 0) if var.host_settings[host_key] != null }
51-
database_disk_size = { for host_key in local.hosts :
51+
database_disk_size = { for host_key in local.hosts :
5252
host_key => lookup(var.host_settings[host_key], "database_disk_size", 0) if var.host_settings[host_key] != null }
53+
large_deployment = { for host_key in local.hosts :
54+
host_key => lookup(var.host_settings[host_key], "large_deployment", false) if var.host_settings[host_key] != null }
5355
}
5456

5557
module "server" {
@@ -85,11 +87,12 @@ module "server" {
8587
additional_packages = lookup(local.additional_packages, "server", [])
8688
login_timeout = var.login_timeout
8789

88-
saltapi_tcpdump = var.saltapi_tcpdump
89-
provider_settings = lookup(local.provider_settings_by_host, "server", {})
90+
saltapi_tcpdump = var.saltapi_tcpdump
91+
provider_settings = lookup(local.provider_settings_by_host, "server", {})
9092
server_mounted_mirror = lookup(local.server_mounted_mirror, "server", {})
9193
repository_disk_size = lookup(local.repository_disk_size, "server", {})
9294
database_disk_size = lookup(local.database_disk_size, "server", {})
95+
large_deployment = lookup(local.large_deployment, "server", false)
9396
}
9497

9598
module "server_containerized" {
@@ -126,9 +129,10 @@ module "server_containerized" {
126129
additional_packages = lookup(local.additional_packages, "server_containerized", [])
127130
//login_timeout = var.login_timeout
128131

129-
//saltapi_tcpdump = var.saltapi_tcpdump
130-
provider_settings = lookup(local.provider_settings_by_host, "server_containerized", {})
132+
//saltapi_tcpdump = var.saltapi_tcpdump
133+
provider_settings = lookup(local.provider_settings_by_host, "server_containerized", {})
131134
server_mounted_mirror = lookup(local.server_mounted_mirror, "server_containerized", {})
135+
large_deployment = lookup(local.large_deployment, "server", false)
132136
}
133137

134138
module "proxy" {

modules/server/main.tf

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ module "server" {
8585
db_configuration = var.db_configuration
8686
c3p0_connection_timeout = var.c3p0_connection_timeout
8787
c3p0_connection_debug = var.c3p0_connection_debug
88+
large_deployment = var.large_deployment
8889
}
8990

9091

modules/server/variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,12 @@ variable "c3p0_connection_debug" {
305305
default = false
306306
}
307307

308+
variable "large_deployment" {
309+
description = "set up for a deployment with a great number of clients"
310+
type = bool
311+
default = false
312+
}
313+
308314
variable "quantity" {
309315
description = "number of hosts like this one"
310316
default = 1

modules/server_containerized/main.tf

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ module "server_containerized" {
2828
ipv6 = var.ipv6
2929
connect_to_base_network = true
3030
connect_to_additional_network = false
31-
image = var.image == "default" ? var.images[var.product_version] : var.image
31+
image = var.image == "default" ? var.images[var.product_version] : var.image
3232
provision = var.provision
3333
provider_settings = var.provider_settings
3434
additional_disk_size = var.additional_disk_size
@@ -60,6 +60,7 @@ module "server_containerized" {
6060
publish_private_ssl_key = var.publish_private_ssl_key
6161
auto_accept = var.auto_accept
6262
disable_auto_bootstrap = var.disable_auto_bootstrap
63+
large_deployment = var.large_deployment
6364
}
6465
}
6566

modules/server_containerized/variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -312,3 +312,9 @@ variable "server_mounted_mirror" {
312312
description = "hostname of a mounted mirror in the server (to get packages from it)"
313313
default = null
314314
}
315+
316+
variable "large_deployment" {
317+
description = "set up for a deployment with a great number of clients"
318+
type = bool
319+
default = false
320+
}

salt/server/init.sls

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ include:
1616
- server.initial_content
1717
- server.iss
1818
- server.testsuite
19+
- server.large_deployment
1920
- server.salt_master
2021
- server.tcpdump
2122

salt/server/large_deployment.sls

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# See https://documentation.suse.com/suma/4.3/en/suse-manager/specialized-guides/large-deployments/tuning.html
2+
3+
{% if grains.get('large_deployment') | default(false, true) %}
4+
5+
include:
6+
- server
7+
8+
large_deployment_increase_tasko_parallel_threads:
9+
file.replace:
10+
- name: /etc/rhn/rhn.conf
11+
- pattern: 'taskomatic.com.redhat.rhn.taskomatic.task.MinionActionExecutor.parallel_threads = (.*)'
12+
- repl: 'taskomatic.com.redhat.rhn.taskomatic.task.MinionActionExecutor.parallel_threads = 3'
13+
- append_if_not_found: True
14+
- require:
15+
- cmd: server_setup
16+
17+
large_deployment_increase_hibernate_max_connections:
18+
file.replace:
19+
- name: /etc/rhn/rhn.conf
20+
- pattern: 'hibernate.c3p0.max_size = (.*)'
21+
- repl: 'hibernate.c3p0.max_size = 50'
22+
- append_if_not_found: True
23+
- require:
24+
- cmd: server_setup
25+
26+
large_deployment_tune_tomcat_stylesheet:
27+
file.managed:
28+
- name: /tmp/large_deployment_tune_tomcat.xslt
29+
- source: salt://server/large_deployment_tune_tomcat.xslt
30+
31+
large_deployment_tune_tomcat_maxthreads:
32+
cmd.run:
33+
- name: xsltproc /tmp/large_deployment_tune_tomcat.xslt /etc/tomcat/server.xml > /tmp/tomcat_server.xml && mv /tmp/tomcat_server.xml /etc/tomcat/server.xml
34+
- require:
35+
- cmd: server_setup
36+
- file: large_deployment_tune_tomcat_stylesheet
37+
38+
large_deployment_tomcat:
39+
service.running:
40+
- name: tomcat
41+
- watch:
42+
- file: large_deployment_increase_tasko_parallel_threads
43+
- file: large_deployment_increase_hibernate_max_connections
44+
- cmd: large_deployment_tune_tomcat_maxthreads
45+
46+
large_deployment_increase_database_max_connections:
47+
file.replace:
48+
- name: /var/lib/pgsql/data/postgresql.conf
49+
- pattern: 'max_connections = (.*)'
50+
- repl: 'max_connections = 450'
51+
- append_if_not_found: True
52+
- require:
53+
- cmd: server_setup
54+
55+
large_deployment_increase_database_work_memory:
56+
file.replace:
57+
- name: /var/lib/pgsql/data/postgresql.conf
58+
- pattern: 'work_mem = (.*)'
59+
- repl: 'work_mem = 10MB'
60+
- append_if_not_found: True
61+
- require:
62+
- cmd: server_setup
63+
64+
large_deployment_postgresql:
65+
service.running:
66+
- name: postgresql
67+
- watch:
68+
- file: large_deployment_increase_database_max_connections
69+
- file: large_deployment_increase_database_work_memory
70+
71+
{% endif %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2+
<!-- XSL transformation to tune tomcat server configuration for large deployments -->
3+
4+
<xsl:output omit-xml-declaration="yes" />
5+
6+
<!-- increase maximum number of threads -->
7+
<xsl:template match="Service[@name='Catalina']/Connector/@maxThreads">
8+
<xsl:attribute name="maxThreads">256</xsl:attribute>
9+
</xsl:template>
10+
11+
<!-- just copy the rest -->
12+
<xsl:template match="node()|@*">
13+
<xsl:copy>
14+
<xsl:apply-templates select="node()|@*" />
15+
</xsl:copy>
16+
</xsl:template>
17+
</xsl:stylesheet>

salt/server/testsuite.sls

+1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ tomcat:
155155
- watch:
156156
- file: enable_salt_content_staging_window
157157
- file: enable_salt_content_staging_advance
158+
- file: enable_kiwi_os_image_building
158159

159160
dump_salt_event_log:
160161
cmd.run:

salt/server_containerized/init.sls

+1
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ include:
55
- server_containerized.install_mgradm
66
- server_containerized.initial_content
77
- server_containerized.testsuite
8+
- server_containerized.large_deployment
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# See https://documentation.suse.com/suma/4.3/en/suse-manager/specialized-guides/large-deployments/tuning.html
2+
3+
{% if grains.get('large_deployment') | default(false, true) %}
4+
5+
include:
6+
- server_containerized.install_{{ grains.get('container_runtime') | default('podman', true) }}
7+
8+
large_deployment_increase_tasko_parallel_threads:
9+
cmd.run:
10+
- name: mgrctl exec 'echo "taskomatic.com.redhat.rhn.taskomatic.task.MinionActionExecutor.parallel_threads = 3" >> /etc/rhn/rhn.conf'
11+
- require:
12+
- pkg: uyuni-tools
13+
14+
large_deployment_increase_hibernate_max_connections:
15+
cmd_run:
16+
- name: mgrctl exec 'echo "hibernate.c3p0.max_size = 50" >> /etc/rhn/rhn.conf'
17+
- require:
18+
- pkg: uyuni-tools
19+
20+
large_deployment_tune_tomcat_stylesheet_host:
21+
file.managed:
22+
- name: /tmp/large_deployment_tune_tomcat.xslt
23+
- source: salt://server_containerized/large_deployment_tune_tomcat.xslt
24+
25+
large_deployment_tune_tomcat_stylesheet_copy:
26+
cmd.run:
27+
- name: mgrctl cp /tmp/large_deployment_tune_tomcat.xslt server:/tmp/large_deployment_tune_tomcat.xslt
28+
- onchanges:
29+
- file: large_deployment_tune_tomcat_stylesheet_host
30+
31+
large_deployment_tune_tomcat_maxthreads:
32+
cmd.run:
33+
- name: mgrctl exec 'xsltproc /tmp/large_deployment_tune_tomcat.xslt /etc/tomcat/server.xml > /tmp/tomcat_server.xml && mv /tmp/tomcat_server.xml /etc/tomcat/server.xml'
34+
- onchanges:
35+
- cmd: large_deployment_tune_tomcat_stylesheet_copy
36+
37+
large_deployment_tomcat_restart:
38+
cmd.run:
39+
- name: mgrctl exec systemctl restart tomcat
40+
- watch:
41+
- cmd: large_deployment_increase_tasko_parallel_threads
42+
- cmd: large_deployment_increase_hibernate_max_connections
43+
- cmd: large_deployment_tune_tomcat_maxthreads
44+
45+
large_deployment_increase_database_max_connections:
46+
cmd.run:
47+
- name: mgrctl exec 'sed -i "s/max_connections = (.*)/max_connections = 450/" /var/lib/pgsql/data/postgresql.conf'
48+
- require:
49+
- pkg: uyuni-tools
50+
51+
large_deployment_increase_database_work_memory:
52+
cmd.run:
53+
- name: mgrctl exec 'sed -i "s/work_mem = (.*)/work_mem = 10MB/" /var/lib/pgsql/data/postgresql.conf'
54+
- require:
55+
- pkg: uyuni-tools
56+
57+
large_deployment_postgresql_restart:
58+
cmd.run:
59+
- name: mgrctl exec systemctl restart postgresql
60+
- watch:
61+
- cmd: large_deployment_increase_database_max_connections
62+
- cmd: large_deployment_increase_database_work_memory
63+
64+
{% endif %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2+
<!-- XSL transformation to tune tomcat server configuration for large deployments -->
3+
4+
<xsl:output omit-xml-declaration="yes" />
5+
6+
<!-- increase maximum number of threads -->
7+
<xsl:template match="Service[@name='Catalina']/Connector/@maxThreads">
8+
<xsl:attribute name="maxThreads">256</xsl:attribute>
9+
</xsl:template>
10+
11+
<!-- just copy the rest -->
12+
<xsl:template match="node()|@*">
13+
<xsl:copy>
14+
<xsl:apply-templates select="node()|@*" />
15+
</xsl:copy>
16+
</xsl:template>
17+
</xsl:stylesheet>

salt/server_containerized/testsuite.sls

+1
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ tomcat_restart:
185185
- watch:
186186
- cmd: enable_salt_content_staging_window
187187
- cmd: enable_salt_content_staging_advance
188+
- cmd: enable_kiwi_os_image_building
188189
189190
salt_event_service_file:
190191
file.managed:

0 commit comments

Comments
 (0)