Skip to content

Commit

Permalink
Improved upgrade role for database nodes (#61)
Browse files Browse the repository at this point in the history
* extract linux preparation steps into a separate ydbd_prepare role
* put TLS options into the command line of storage node process
* more complete example of dynamic configuration
* database services listing unification
* fluentbit config fix
* rolling restart for the specified dbname
* db creation via command args
  • Loading branch information
zinal authored Dec 13, 2024
1 parent 459d381 commit 8eea148
Show file tree
Hide file tree
Showing 22 changed files with 483 additions and 243 deletions.
188 changes: 188 additions & 0 deletions examples/dynconf/large-sample.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
---
metadata:
kind: MainConfig
cluster: ""
version: 5
config:
yaml_config_enabled: true
table_profiles_config:
table_profiles:
- name: default
compaction_policy: default
execution_policy: default
partitioning_policy: default
storage_policy: default
replication_policy: default
caching_policy: default
compaction_policies:
- name: default
execution_policies:
- name: default
partitioning_policies:
- name: default
auto_split: true
auto_merge: true
size_to_split: 2147483648
storage_policies:
- name: default
column_families:
- storage_config:
sys_log:
preferred_pool_kind: ssd
log:
preferred_pool_kind: ssd
data:
preferred_pool_kind: ssd
replication_policies:
- name: default
caching_policies:
- name: default
interconnect_config:
merge_per_peer_counters: true
max_inflight_amount_of_data_in_kb: 10240
counter_merge_mode: PER_PEER
handshake_timeout_duration: { seconds: 1 }
encryption_mode: REQUIRED
path_to_certificate_file: "/opt/ydb/certs/node.crt"
path_to_private_key_file: "/opt/ydb/certs/node.key"
path_to_ca_file: "/opt/ydb/certs/ca.crt"

allowed_labels:
node_id:
type: string
host:
type: string
tenant:
type: string

selector_config:

- description: cookie=testdb-01
selector:
tenant: /cluster1/testdb
config:
shared_cache_config:
memory_limit: 51539607552
feature_flags: !inherit
enable_views: true
enable_data_shard_volatile_transactions: true
table_service_config:
sql_version: 1
index_auto_choose_mode: MAX_USED_PREFIX
enable_implicit_query_parameter_types: true
enable_kqp_data_query_stream_lookup: true
enable_kqp_data_query_stream_idx_lookup_join: true
resource_manager:
kqp_pattern_cache_compiled_capacity_bytes: 524288000
kqp_pattern_cache_capacity_bytes: 524288000
query_limits:
result_rows_limit: 20000
resource_broker_config:
queues:
- name: queue_restore
limit:
cpu: 8
- name: queue_backup
limit:
cpu: 8
actor_system_config:
executor:
- name: System
spin_threshold: '10'
threads: 2
max_threads: 11
type: BASIC
- name: User
spin_threshold: '1'
threads: 11
max_threads: 15
type: BASIC
- name: Batch
spin_threshold: '1'
threads: 2
max_threads: 6
type: BASIC
- name: IO
threads: 1
type: IO
- name: IC
spin_threshold: '10'
threads: 7
max_threads: 11
time_per_mailbox_micro_secs: 100
max_avg_ping_deviation: 500
type: BASIC
scheduler:
progress_threshold: '10000'
resolution: '64'
spin_threshold: '0'
sys_executor: 0
user_executor: 1
batch_executor: 2
io_executor: 3
service_executor:
- executor_id: 4
service_name: Interconnect

- description: cookie=admin-01
selector:
tenant: /cluster1/admin
config:
log_config:
default_level: 4
shared_cache_config:
memory_limit: 17179869184
feature_flags: !inherit
enable_views: false
enable_data_shard_volatile_transactions: false
table_service_config:
sql_version: 1
index_auto_choose_mode: DISABLED
enable_implicit_query_parameter_types: true
enable_kqp_data_query_stream_lookup: false
enable_kqp_data_query_stream_idx_lookup_join: false
resource_manager:
kqp_pattern_cache_compiled_capacity_bytes: 524288000
kqp_pattern_cache_capacity_bytes: 524288000
query_limits:
result_rows_limit: 20000
column_shard_config:
disabled_on_scheme_shard: false
actor_system_config:
executor:
- name: System
spin_threshold: '10'
threads: 1
max_threads: 4
type: BASIC
- name: User
spin_threshold: '1'
threads: 3
max_threads: 7
type: BASIC
- name: Batch
spin_threshold: '1'
threads: 1
max_threads: 4
type: BASIC
- name: IO
threads: 1
type: IO
- name: IC
spin_threshold: '10'
threads: 2
max_threads: 4
time_per_mailbox_micro_secs: 100
max_avg_ping_deviation: 500
type: BASIC
scheduler:
progress_threshold: '10000'
resolution: '64'
spin_threshold: '0'
sys_executor: 0
user_executor: 1
batch_executor: 2
io_executor: 3
service_executor:
- executor_id: 4
service_name: Interconnect
1 change: 1 addition & 0 deletions install-dynamic.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
- hosts: ydbd_dynamic
any_errors_fatal: true
roles:
- role: ydbd_prepare
- role: ydbd
- role: ydbd_config
- role: ydbd_dynamic
1 change: 1 addition & 0 deletions install-static.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
- hosts: ydbd_static
any_errors_fatal: true
roles:
- role: ydbd_prepare
- role: ydbd
- role: ydbd_config
- role: ydbd_static
Expand Down
3 changes: 3 additions & 0 deletions prepare-all.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- hosts: all
roles:
- role: ydbd_prepare
182 changes: 1 addition & 181 deletions roles/ydbd/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,168 +1,5 @@
---
# ydbd installation

- name: Display the distribution type
ansible.builtin.debug:
var: ansible_distribution

- name: Ensure libaio1t64 is installed
ansible.builtin.package:
name: libaio1t64
state: present
when: ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('24.04', '>=')

- name: Ensure libaio1 is installed
ansible.builtin.package:
name: libaio1
state: present
when: (ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('24.04', '<')) or ansible_distribution == 'Debian' or ansible_distribution == 'Astra Linux'

- name: Ensure libaio is installed
ansible.builtin.package:
name: libaio
state: present
when: ansible_distribution == 'CentOS' or ansible_distribution == 'AlmaLinux' or ansible_distribution == 'RED'

- name: Ensure acl is installed
ansible.builtin.package:
name: acl
state: present
when: ansible_distribution == 'Ubuntu' or ansible_distribution == 'Debian' or ansible_distribution == 'Astra Linux'

- name: Ensure chrony is installed
ansible.builtin.package:
name: chrony
state: present

- name: Ensure chrony is running
ansible.builtin.systemd:
enabled: true
state: started
name: chronyd

- name: Ensure jq is installed
ansible.builtin.package:
name: jq
state: present

- name: Copy the thp-config.sh script
copy:
src: thp-config.sh
dest: /usr/local/bin/ydbd-thp-config.sh
owner: root
group: bin
mode: '0755'

- name: Generate the THP service files
template:
src: thp-service.j2
dest: "/etc/systemd/system/ydb-hugepages.service"
owner: root
group: root
mode: '0644'

- name: Refresh systemd services configuration
ansible.builtin.systemd:
daemon_reload: true

- name: Activate THP
ansible.builtin.systemd:
enabled: true
state: started
name: ydb-hugepages

- name: Congestion control kernel module setup
block:
- name: Ensure kernel-modules-extra is installed on RHEL variants
ansible.builtin.package:
name: kernel-modules-extra
state: present
when: ansible_distribution == 'CentOS' or ansible_distribution == 'AlmaLinux'
- name: Build the kernel module customization for congestion control
template:
src: network-modules.j2
dest: /etc/modules-load.d/50-ydbd.conf
owner: root
group: root
mode: '0644'
- name: Load the {{ ydb_congestion_module }} module
command: "/sbin/modprobe {{ ydb_congestion_module }}"
when: ydb_congestion_module is defined

- name: Build the kernel settings adjustments file
template:
src: kernel-settings.j2
dest: /etc/sysctl.d/50-ydbd.conf
owner: root
group: root
mode: '0644'

- name: Refresh the current sysctl settings
command: "/sbin/sysctl --system"

- name: Create the YDB base directory
file:
state: directory
path: "{{ ydb_dir }}"
group: bin
owner: root
mode: '0755'

- name: Create the ydb group
group:
name: ydb
system: true

- name: Create the ydb user
user:
name: ydb
group: ydb
groups: disk
system: true
create_home: true
home: "{{ ydb_dir }}/home"
comment: "YDB Service Account"

- name: Create the Ansible remote_tmp for ydb user
file:
path: "{{ ydb_dir }}/home/.ansible/tmp"
state: directory
recurse: true
group: ydb
owner: ydb
mode: '0750'

- name: Create the YDB configuration directory
file:
state: directory
path: "{{ ydb_dir }}/cfg"
group: bin
owner: root
mode: '0755'

- name: Create the YDB audit base directory
file:
state: directory
path: "{{ ydb_dir }}/audit"
group: ydb
owner: ydb
mode: '0700'

- name: Create the YDB certs directory
file:
state: directory
path: "{{ ydb_dir }}/certs"
group: ydb
owner: ydb
mode: '0700'

- name: Create the YDB configuration backup directory
file:
state: directory
path: "{{ ydb_dir }}/reserve"
group: ydb
owner: ydb
mode: '0700'
# ydbd binaries installation

- name: Create the YDB release directory
file:
Expand Down Expand Up @@ -216,20 +53,3 @@
owner: root
mode: '0755'
force: yes

- name: Create the YDB CLI default binary directory
file:
state: directory
path: "{{ ydb_dir }}/home/ydb/bin"
recurse: true
group: ydb
owner: ydb
mode: '0755'

- name: Disable YDB CLI version checks
ansible.builtin.copy:
src: "ydb-cli-config.json"
dest: "{{ ydb_dir }}/home/ydb/bin/config.json"
group: ydb
owner: ydb
mode: '0644'
Loading

0 comments on commit 8eea148

Please sign in to comment.