Informatique
MongoDB
init d’un cluster
1 | rs.initiate( { _id: "myclust", version: 1, members: [ { _id: 0, host : "10.0.0.1" }, { _id: 2, host : "10.0.0.2" }, { _id: 2, host : "10.0.0.3" } ] } ) |
verif du cluster
1 | :> rs.status() |
add d’un membre dans le cluster
1 | :PRIMARY> rs.add('10.0.0.3') |
Sync du nouveau membre
1 | :SECONDARY> rs.syncFrom('10.0.0.1') |
Forcer un host a passer primary
Sur les autres slave1
:SECONDARY> rs.freeze(120)
Sur l’actuel master1
:PRIMARY> rs.stepDown(120)
show conf
1 | :> db.serverStatus() |
tools
1 | # mongostat # mongotop |
show cache
1 | :> db.serverStatus().wiredTiger.cache |
conf du cache dans mongod.conf
1 | storage: wiredTiger: engineConfig: configString : cache_size=1024M |
Dump
1 | # mongodump --host 127.0.0.1 -o mongoback/ |
Restore
1 | # mongorestore mongoback/ |
virer le warning :
WARNING: /sys/kernel/mm/transparent_hugepage/defrag is ‘always’1
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
PostgreSQL
change to postgres user and open psql prompt
1 | # su - postgres # psql |
list databases
1 | postgres=# \l |
list roles
1 | postgres=# \du |
create role
1 | postgres=# CREATE ROLE demorole1 WITH LOGIN ENCRYPTED PASSWORD 'password1' CREATEDB; |
create role with multiple privileges
1 | postgres=# CREATE ROLE demorole1 WITH LOGIN ENCRYPTED PASSWORD postgres=# 'password1' CREATEDB CREATEROLE REPLICATION SUPERUSER; |
alter role
1 | postgres=# ALTER ROLE demorole1 CREATEROLE CREATEDB REPLICATION SUPERUSER; |
drop role
1 | postgres=# DROP ROLE demorole1; |
create database
1 | postgres=# CREATE DATABASE demodb1 WITH OWNER demorole1 ENCODING 'UTF8'; |
grant privileges to new user
1 | postgres=# GRANT ALL PRIVILEGES ON DATABASE demodb1 TO demorole1; |
drop database
1 | postgres=# DROP DATABASE demodb1; |
connect to database
1 | postgres=# \c <databasename> |
list tables in connected database
1 | postgres=# \dt |
list columns on table
1 | postgres=# \d <tablename> |
show processlist;
1 | SELECT * from pg_stat_activity ; |
Kill session on a database
1 | SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydataabse' AND leader_pid IS NULL; |
nice output
1 | postgres=# \x on |
output in csv file
1 | postgres=# \copy ( select * from truc ) To 'output.csv' With CSV DELIMITER ';' HEADER |
kill query
1 | postgres=# SELECT pg_cancel_backend(<pid of the process>) postgres=# SELECT pg_terminate_backend(<pid of the process>) |
show tables
1 | SELECT * FROM pg_catalog.pg_tables; |
backup/restore database
1 | $ pg_dump -h ${TARGET_HOST} -p ${PG_PORT} -U ${PG_USER} -Fd -f ${TARGET_DIR} ${PG_DB} $ pg_restore -c -Fd -d ${PG_DB} ${BACKUP_DIR} |
or1
$ pg_dump -U username -h hostname dbname > dump.sql
$ psql -U username -d dbname -f dump.sql
check repli
coté master1
postgres=# select client_addr, state, sent_location, write_location,flush_location, replay_location from pg_stat_replication;
coté slave1
postgres=# select now() - pg_last_xact_replay_timestamp() AS replication_delay;
Pause de la repli
1 | select pg_xlog_replay_pause(); |
Resume repli
1 | select pg_xlog_replay_resume(); |
Some Tunning
max_connections = 3cores
shared_buffers = 4G < 64G RAM ; 8G > 64G RAM
work_mem = 8M < 32G ram ; 16M < 64G RAM ; 32M > 64G RAM ; if max_connections > 400 => work_mem/2
maintenance_work_mem = 1G
wal_level = hot_standby
archive_mode = on
archive_command = /bin/true
max_wal_senders = 5
wal_keep_segments = 3 checkpoint_segments
random_page_cost = 2.0 for raid, san ; 1.0 for SSD
effective_cache_size = RAM /2
log_min_duration_statement = 1000
log_checkpoints = on
Purge des pg_xlog
1 | /etc/init.d/postgresql stop /usr/lib/postgresql/9.5/bin/pg_controldata /var/lib/postgresql/9.5/main/ sudo -u postgres /usr/lib/postgresql/9.5/bin/pg_resetxlog -o $NEXTOID -x $NEXTXID -f /var/lib/postgresql/9.5/main/ /etc/init.d/postgresql start |
Point In Time Recovery
PTR
Mysql
Cluster Galera
sources.list
https://downloads.mariadb.org/mariadb/repositories/#mirror=urbach&distro=Debian
Bootstrapping a new cluster
1 | $ mysqld --wsrep-new-cluster & |
Adding node to a cluster
1 | $ mysqld --wsrep_cluster_address=gcomm://192.168.0.1 # DNS names work as well |
Cluster state
1 | mysql> show global status like '%wsrep%'; |
Cluster conf
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
#galera settings
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name=”my_wsrep_cluster”
wsrep_cluster_address=”gcomm://172.16.8.5,172.16.8.6,172.16.8.4”
wsrep_sst_method=rsync
more conf
- choose your donor
wsrep_sst_donor=”10.0.100.10,10.0.100.8”
obsolete query cache was disable prior to “5.5.40-galera”, “10.0.14-galera” and “10.1.2”.
query_cache_size=0
query_cache_type=0(http://www.ovaistariq.net/597/understanding-innodb-transaction-isolation-levels/)
MariaDB> select @@global.tx_isolation;
transaction-isolation = REPEATABLE-READ(https://mariadb.com/kb/en/mariadb/wsrep_provider_options/)
wsrep_provider_options =”gcs.fc_limit=256 ; gcache.size=2G”(https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_causal_reads) (default OFF)
wsrep_causal_reads = OFF(https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_slave_threads)
wsrep_slave_threads = 8(https://mariadb.com/kb/en/mariadb/galera-cluster-system-variables/#wsrep_sst_method)
wsrep_sst_auth = debian-sys-maint:C1WXqAscHm9mTi8r
wsrep_sst_method = xtrabackup-v2
Doc
Troubleshooting
- En cas de :
/usr//bin/wsrep_sst_rsync: 269: /usr//bin/wsrep_sst_rsync: [[: not found
remplacer /bin/sh par /bin/bash dans le shebang
- Si le start timeout à cause d’une sync trop long
ajouter TimeoutStartSec=0 au [Service] systemd
- Si tous les noeuds tombent en même temps.
~# mysqld –wsrep-cluster-address=”gcomm://“
- Si aucun des noeud ne veut boostrap starter :
dans
/var/lib/mysql/grastate.dat
passer “safe_to_bootstrap: 0” à 1
HAPROXY
==DRAFT==
#