diff --git a/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/defaults/main.yml b/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/defaults/main.yml
new file mode 100644
index 0000000000..55ac732350
--- /dev/null
+++ b/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+package_name: "vitam-{{ vitam_struct.vitam_component }}"
diff --git a/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/handlers/main.yml b/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/handlers/main.yml
new file mode 100644
index 0000000000..b6027f51b0
--- /dev/null
+++ b/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/handlers/main.yml
@@ -0,0 +1,14 @@
+---
+
+- name: daemon-reload
+  systemd:
+    daemon_reload: true
+
+- name: reload consul configuration
+  systemd:
+    name: vitam-consul
+    state: reloaded
+  when: not consul_disabled | default(false) | bool
+
+- name: reset-failed
+  command: "systemctl reset-failed {{ package_name }}"
diff --git a/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/tasks/main.yml b/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/tasks/main.yml
new file mode 100644
index 0000000000..28c74383ff
--- /dev/null
+++ b/deployment/ansible-vitam-exploitation/roles/remove_vitam_component/tasks/main.yml
@@ -0,0 +1,44 @@
+---
+
+- name: "Stopping {{ package_name }} service"
+  systemd:
+    name: "{{ package_name }}"
+    state: stopped
+  ignore_errors: true # Ignore errors if the service does not exist
+
+- name: "Removing {{ package_name }} package"
+  package:
+    name: "{{ package_name }}"
+    state: absent
+  register: result
+  retries: "{{ packages_install_retries_number }}"
+  until: result is succeeded
+  delay: "{{ packages_install_retries_delay }}"
+
+- name: "Removing {{ package_name }} systemd service file"
+  file:
+    path: "{{ '/lib/systemd/system' if ansible_os_family == 'Debian' else '/usr/lib/systemd/system' }}/{{ package_name }}.service"
+    state: absent
+  notify:
+    - daemon-reload
+    - reset-failed
+
+- name: "Removing {{ vitam_struct.vitam_component }} directories recursively (except log directory)"
+  file:
+    path: "{{ vitam_defaults.folder.root_path }}/{{ item }}/{{ vitam_struct.vitam_component }}"
+    state: absent
+  with_items:
+    - app
+    - bin
+    - conf
+    - data
+    - lib
+    - script
+    - tmp
+    - run
+
+- name: "Removing consul configuration file for {{ vitam_struct.vitam_component }}"
+  file:
+    path: "{{ consul_folder_conf }}/service-{{ vitam_struct.vitam_component }}.json"
+    state: absent
+  notify: reload consul configuration
diff --git a/deployment/ansible-vitam-exploitation/start_vitam_scheduler.yml b/deployment/ansible-vitam-exploitation/start_vitam_scheduler.yml
index 2f8577270d..31742e3a1c 100644
--- a/deployment/ansible-vitam-exploitation/start_vitam_scheduler.yml
+++ b/deployment/ansible-vitam-exploitation/start_vitam_scheduler.yml
@@ -1,6 +1,6 @@
 ---

-- hosts: hosts_scheduler
+- hosts: hosts_scheduler[0] # Starting only the first host in the group
   gather_facts: no
   any_errors_fatal: true
   roles:
diff --git a/deployment/ansible-vitam-exploitation/start_vitam_scheduling.yml b/deployment/ansible-vitam-exploitation/start_vitam_scheduling.yml
index 0d694bddac..c367b22b50 100644
--- a/deployment/ansible-vitam-exploitation/start_vitam_scheduling.yml
+++ b/deployment/ansible-vitam-exploitation/start_vitam_scheduling.yml
@@ -1,8 +1,7 @@
 ---

-- hosts: hosts_scheduler
+- hosts: hosts_scheduler[0]
   gather_facts: no
   any_errors_fatal: true
-  run_once: true
   roles:
     - start_scheduling
diff --git a/deployment/ansible-vitam-exploitation/status_vitam.yml b/deployment/ansible-vitam-exploitation/status_vitam.yml
index 8bab703050..32ba5e1dc8 100644
--- a/deployment/ansible-vitam-exploitation/status_vitam.yml
+++ b/deployment/ansible-vitam-exploitation/status_vitam.yml
@@ -310,7 +310,7 @@
   gather_facts: no

 ### scheduler
-- hosts: hosts_scheduler
+- hosts: hosts_scheduler[0]
   any_errors_fatal: false
   roles:
     - { role: vitam_autotest, when: ( primary_site | lower == "true" ) or ( vitam_component in vitam_secondary_site_components ) }
diff --git a/deployment/ansible-vitam-exploitation/stop_vitam_scheduling.yml b/deployment/ansible-vitam-exploitation/stop_vitam_scheduling.yml
index 3721e521ff..38d0d6bff7 100644
--- a/deployment/ansible-vitam-exploitation/stop_vitam_scheduling.yml
+++ b/deployment/ansible-vitam-exploitation/stop_vitam_scheduling.yml
@@ -1,9 +1,8 @@
 ---

-- hosts: hosts_scheduler
+- hosts: hosts_scheduler[0]
   gather_facts: no
   any_errors_fatal: true
-  serial: 1
   roles:
     - stop_scheduling
   tags:
diff --git a/deployment/ansible-vitam-extra/roles/prometheus-server/templates/prometheus.yml.j2 b/deployment/ansible-vitam-extra/roles/prometheus-server/templates/prometheus.yml.j2
index 16cc4ef950..604512a420 100644
--- a/deployment/ansible-vitam-extra/roles/prometheus-server/templates/prometheus.yml.j2
+++ b/deployment/ansible-vitam-extra/roles/prometheus-server/templates/prometheus.yml.j2
@@ -296,7 +296,8 @@ scrape_configs:
   - job_name: vitam-scheduler
     metrics_path: {{ prometheus.metrics_path | default('/admin/v1/metrics') }}
     static_configs:
-{% for host in groups['hosts_scheduler'] %}
+{# We currently limit scraping to the first scheduler instance #}
+{% for host in [groups['hosts_scheduler'] | first] %}
     - targets:
       - {{ hostvars[host]['ip_admin'] }}:{{ vitam.scheduler.port_admin | default(28799) }}
       labels:
diff --git a/deployment/ansible-vitam-extra/roles/reverse/templates/httpd_config b/deployment/ansible-vitam-extra/roles/reverse/templates/httpd_config
index 247e937cfa..2b01de0eaa 100644
--- a/deployment/ansible-vitam-extra/roles/reverse/templates/httpd_config
+++ b/deployment/ansible-vitam-extra/roles/reverse/templates/httpd_config
@@ -134,7 +134,7 @@
     ProxyPass /{{ vitam.functional_administration.baseuri }}{% if loop.index > 1 %}{{ loop.index }}{% endif %}/admin/v1 http://{{ hostvars[host]['ip_admin'] }}:{{ vitam.functional_administration.port_admin }}/admin/v1 {{ reverse_connection_params }}
     ProxyPassReverse  /{{ vitam.functional_administration.baseuri }}{% if loop.index > 1 %}{{ loop.index }}{% endif %}/admin/v1 http://{{ hostvars[host]['ip_admin'] }}:{{ vitam.functional_administration.port_admin }}/admin/v1
     {% endfor %}
-    {% for host in groups['hosts_scheduler'] %}
+    {% for host in [groups['hosts_scheduler'] | first] %}
     ProxyPass /{{ vitam.scheduler.baseuri }}{% if loop.index > 1 %}{{ loop.index }}{% endif %}/admin/v1 http://{{ hostvars[host]['ip_admin'] }}:{{ vitam.scheduler.port_admin }}/admin/v1 {{ reverse_connection_params }}
     ProxyPassReverse  /{{ vitam.scheduler.baseuri }}{% if loop.index > 1 %}{{ loop.index }}{% endif %}/admin/v1 http://{{ hostvars[host]['ip_admin'] }}:{{ vitam.scheduler.port_admin }}/admin/v1
     {% endfor %}
diff --git a/deployment/ansible-vitam/roles/vitam/defaults/main.yml b/deployment/ansible-vitam/roles/vitam/defaults/main.yml
index 4398cf20a1..92acae7e86 100644
--- a/deployment/ansible-vitam/roles/vitam/defaults/main.yml
+++ b/deployment/ansible-vitam/roles/vitam/defaults/main.yml
@@ -16,7 +16,7 @@ package_name: "vitam-{{ vitam_struct.vitam_component }}"

 vitam_worker_capacity: "{{ ansible_processor_vcpus }}"

-vitam_scheduler_thread_count: "{{ vitam.scheduler.schedulerThreadSize | default(3) }}"
+vitam_scheduler_thread_count: "{{ vitam.scheduler.schedulerThreadSize | default(10) }}"

 vitam_site_id: 1

diff --git a/deployment/ansible-vitam/roles/vitam/templates/logbook/logbook.conf.j2 b/deployment/ansible-vitam/roles/vitam/templates/logbook/logbook.conf.j2
index 97ba60a345..706dc090e7 100644
--- a/deployment/ansible-vitam/roles/vitam/templates/logbook/logbook.conf.j2
+++ b/deployment/ansible-vitam/roles/vitam/templates/logbook/logbook.conf.j2
@@ -108,6 +108,7 @@ operationTraceabilityTemporizationDelay: {{ vitam.logbook.operationTraceabilityT
 operationTraceabilityMaxRenewalDelay: {{ vitam.logbook.operationTraceabilityMaxRenewalDelay | default(690) }}
 operationTraceabilityMaxRenewalDelayUnit: {{ vitam.logbook.operationTraceabilityMaxRenewalDelayUnit | default('MINUTES') }}
 operationTraceabilityThreadPoolSize: {{ vitam.logbook.operationTraceabilityThreadPoolSize | default(16) }}
+operationTraceabilityMaxEntries: {{ vitam.logbook.operationTraceabilityMaxEntries | default(100000) }}
 lifecycleTraceabilityTemporizationDelay: {{ vitam.logbook.lifecycleTraceabilityTemporizationDelay | default(300) }}
 lifecycleTraceabilityMaxRenewalDelay: {{ vitam.logbook.lifecycleTraceabilityMaxRenewalDelay | default(690) }}
 lifecycleTraceabilityMaxRenewalDelayUnit: {{ vitam.logbook.lifecycleTraceabilityMaxRenewalDelayUnit | default('MINUTES') }}
diff --git a/deployment/ansible-vitam/roles/vitam/templates/scheduler/jobs/jobs-logbook.xml.j2 b/deployment/ansible-vitam/roles/vitam/templates/scheduler/jobs/jobs-logbook.xml.j2
index 7c470da9e1..f3a954971c 100644
--- a/deployment/ansible-vitam/roles/vitam/templates/scheduler/jobs/jobs-logbook.xml.j2
+++ b/deployment/ansible-vitam/roles/vitam/templates/scheduler/jobs/jobs-logbook.xml.j2
@@ -55,7 +55,7 @@
                 <group>Logbook</group>
                 <job-name>TraceabilityLFCObjectGroupJob</job-name>
                 <job-group>Logbook</job-group>
-                <cron-expression>{{ vitam_timers.logbook.frequency_traceability_lfc_objectgroup | default('* 15 0/1 * * ?')}}</cron-expression>
+                <cron-expression>{{ vitam_timers.logbook.frequency_traceability_lfc_objectgroup | default('0 15 * * * ?')}}</cron-expression>
             </cron>
         </trigger>
     </schedule>
@@ -79,7 +79,7 @@
                 <group>Logbook</group>
                 <job-name>TraceabilityLFCUnitJob</job-name>
                 <job-group>Logbook</job-group>
-                <cron-expression>{{ vitam_timers.logbook.frequency_traceability_lfc_unit | default('* 35 0/1 * * ?') }}</cron-expression>
+                <cron-expression>{{ vitam_timers.logbook.frequency_traceability_lfc_unit | default('0 35 * * * ?') }}</cron-expression>
             </cron>
         </trigger>
     </schedule>
@@ -133,7 +133,7 @@
                 <group>Logbook</group>
                 <job-name>OperationTraceabilityJob</job-name>
                 <job-group>Logbook</job-group>
-                <cron-expression>{{ vitam_timers.logbook.frequency_traceability_operations | default('* 05 0/1 * * ?') }}</cron-expression>
+                <cron-expression>{{ vitam_timers.logbook.frequency_traceability_operations | default('0 05 * * * ?') }}</cron-expression>
             </cron>
         </trigger>
     </schedule>
diff --git a/deployment/ansible-vitam/roles/vitam/templates/scheduler/quartz.properties.j2 b/deployment/ansible-vitam/roles/vitam/templates/scheduler/quartz.properties.j2
index adc31057b0..89279a0097 100644
--- a/deployment/ansible-vitam/roles/vitam/templates/scheduler/quartz.properties.j2
+++ b/deployment/ansible-vitam/roles/vitam/templates/scheduler/quartz.properties.j2
@@ -7,11 +7,29 @@ org.quartz.scheduler.interruptJobsOnShutdown=true
 org.quartz.threadPool.class=fr.gouv.vitam.scheduler.server.util.VitamQuartzExecutorThreadPool
 org.quartz.threadPool.threadCount={{ vitam_scheduler_thread_count }}

-org.quartz.jobStore.class=com.novemberain.quartz.mongodb.MongoDBJobStore
-org.quartz.jobStore.mongoUri=mongodb://{{ mongodb['mongo-data'].scheduler.user }}:{{ mongodb['mongo-data'].scheduler.password }}@{% for server in groups['hosts_mongos_data'] %}{{ hostvars[server]['ip_service'] }}:{{ mongodb.mongos_port }}{% if not loop.last %},{% endif %}{% endfor %}/scheduler
+## H2DB local non-clustered connector
+#
+org.quartz.jobStore.isClustered=false
+org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
+org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
+org.quartz.jobStore.dataSource=h2DS
+org.quartz.jobStore.tablePrefix=QRTZ_

-org.quartz.jobStore.isClustered=true
-org.quartz.jobStore.dbName=scheduler
-org.quartz.jobStore.collectionPrefix=vitam
+org.quartz.dataSource.h2DS.driver=org.h2.Driver
+org.quartz.dataSource.h2DS.provider=hikaricp
+org.quartz.dataSource.h2DS.URL=jdbc:h2:file:{{ vitam_folder_data }}/quartz-db;DB_CLOSE_ON_EXIT=FALSE
+org.quartz.dataSource.h2DS.maxConnections=10

-org.quartz.jobStore.checkInErrorHandler=com.novemberain.quartz.mongodb.cluster.NoOpErrorHandler
+## Postgres clustered connector:
+#
+# org.quartz.jobStore.isClustered=true
+# org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
+# org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
+# org.quartz.jobStore.dataSource=postgresDS
+#
+# org.quartz.dataSource.postgresDS.driver=org.postgresql.Driver
+# org.quartz.dataSource.postgresDS.provider=hikaricp
+# org.quartz.dataSource.postgresDS.URL = jdbc:postgresql://<postgres-server>:<postgres-port>/scheduler
+# org.quartz.dataSource.postgresDS.user=scheduler
+# org.quartz.dataSource.postgresDS.password=<password_changeit>
+# org.quartz.dataSource.postgresDS.maxConnections=10
\ No newline at end of file
diff --git a/deployment/ansible-vitam/services/vitam/scheduler.yml b/deployment/ansible-vitam/services/vitam/scheduler.yml
index 4b142b62c9..87c5368b30 100644
--- a/deployment/ansible-vitam/services/vitam/scheduler.yml
+++ b/deployment/ansible-vitam/services/vitam/scheduler.yml
@@ -1,6 +1,6 @@
 ---

-- hosts: hosts_scheduler
+- hosts: hosts_scheduler[0] # Configure only the first host in the group
   any_errors_fatal: true
   roles:
     - vitam
@@ -8,3 +8,11 @@
   vars:
     vitam_struct: "{{ vitam.scheduler }}"
   tags: scheduler
+
+- hosts: hosts_scheduler[1:] # Remove the scheduler in the other hosts if they exists
+  any_errors_fatal: true
+  roles:
+    - remove_vitam_component
+  vars:
+    vitam_struct: "{{ vitam.scheduler }}"
+  tags: scheduler
diff --git a/deployment/environments/group_vars/all/advanced/vitam_vars.yml b/deployment/environments/group_vars/all/advanced/vitam_vars.yml
index fd9f89f82c..4772460aac 100644
--- a/deployment/environments/group_vars/all/advanced/vitam_vars.yml
+++ b/deployment/environments/group_vars/all/advanced/vitam_vars.yml
@@ -105,11 +105,11 @@ vitam_timers:
   #    semiannually → 0 0 0 1 1/6 ?
   logbook: # all have to run on only one machine
     # Sécurisation des journaux des opérations
-    frequency_traceability_operations: "* 05 0/1 * * ?" # every hour
+    frequency_traceability_operations: "0 05 * * * ?" # every hour
     # Sécurisation des journaux du cycle de vie des groupes d'objets
-    frequency_traceability_lfc_objectgroup: "* 15 0/1 * * ?" # every hour
+    frequency_traceability_lfc_objectgroup: "0 15 * * * ?" # every hour
     # Sécurisation des journaux du cycle de vie des unités archivistiques
-    frequency_traceability_lfc_unit: "* 35 0/1 * * ?" # every hour
+    frequency_traceability_lfc_unit: "0 35 * * * ?" # every hour
     # Audit de traçabilité
     frequency_traceability_audit: "0 55 00 * * ?"
     # Reconstruction (uniquement sur site secondaire)
@@ -344,6 +344,8 @@ vitam:
     lifecycleTraceabilityMaxRenewalDelayUnit: MINUTES
     # Max entries selected per (Unit or Object Group) LFC traceability operation
     lifecycleTraceabilityMaxEntries: 100000
+    # Max entries selected per LogbookOperation traceability
+    operationTraceabilityMaxEntries: 100000
     # Reconstruction metrics cache in minutes (secondary site)
     reconstructionMetricsCacheDurationInMinutes: 15
   metadata:
diff --git a/deployment/environments/group_vars/all/main/repositories.yml b/deployment/environments/group_vars/all/main/repositories.yml
index 3582cb7ed3..078a73b2e0 100644
--- a/deployment/environments/group_vars/all/main/repositories.yml
+++ b/deployment/environments/group_vars/all/main/repositories.yml
@@ -20,4 +20,4 @@ install_mode: legacy
 #   username:
 #   password:
 # Add vitam_container_version for specific container version deployment (default: latest)
-vitam_container_version: '7.1.5'
+vitam_container_version: '7.1.5-1'
diff --git a/deployment/environments/hosts.example b/deployment/environments/hosts.example
index 1b53eecc41..7561e01e4c 100644
--- a/deployment/environments/hosts.example
+++ b/deployment/environments/hosts.example
@@ -137,7 +137,7 @@ hosts_workspace_collect

 [hosts_scheduler]
 # TODO: Put here servers where this service will be deployed : scheduler
-# Optional parameter after each host : vitam_scheduler_thread_count=<integer> ; This is the number of threads that are available for concurrent execution of jobs. ; default is 3 thread
+# WARNING: Only ONE server is currently supported for this service. Scheduler component will automatically be removed on other nodes (Mandatory while upgrading Vitam, do not modify this group before!).


 [hosts_processing]
