Add support for vertica backend

Change-Id: I4edefce014eab465ea34c92663d33acc9d04eef2
This commit is contained in:
bklei 2015-04-30 10:15:07 -06:00
parent 3a1cabf778
commit 3fdd3e7f5e
8 changed files with 322 additions and 0 deletions

View File

@ -0,0 +1,12 @@
CREATE SCHEMA MonAlarms;
CREATE TABLE MonAlarms.StateHistory(
id AUTO_INCREMENT,
tenant_id VARCHAR,
alarm_id VARCHAR,
old_state VARCHAR,
new_state VARCHAR,
reason VARCHAR(65000),
reason_data VARCHAR(65000),
time_stamp TIMESTAMP NOT NULL
) PARTITION BY EXTRACT('year' FROM time_stamp)*10000 + EXTRACT('month' FROM time_stamp)*100 + EXTRACT('day' FROM time_stamp);

View File

@ -0,0 +1,14 @@
GRANT USAGE ON SCHEMA MonMetrics TO mon_persister;
GRANT USAGE ON SCHEMA MonAlarms TO mon_persister;
GRANT ALL ON TABLE MonMetrics.Measurements TO mon_persister;
GRANT ALL ON TABLE MonMetrics.Definitions TO mon_persister;
GRANT ALL ON TABLE MonMetrics.Dimensions TO mon_persister;
GRANT ALL ON TABLE MonMetrics.DefinitionDimensions TO mon_persister;
GRANT USAGE ON SCHEMA MonMetrics TO mon_api;
GRANT USAGE ON SCHEMA MonAlarms TO mon_api;
GRANT SELECT ON TABLE MonMetrics.Measurements TO mon_api;
GRANT SELECT ON TABLE MonMetrics.Definitions TO mon_api;
GRANT SELECT ON TABLE MonMetrics.Dimensions TO mon_api;
GRANT SELECT ON TABLE MonMetrics.DefinitionDimensions TO mon_api;
GRANT ALL ON TABLE MonAlarms.StateHistory TO mon_api;

View File

@ -0,0 +1,107 @@
DROP SCHEMA MonMetrics CASCADE;
CREATE SCHEMA MonMetrics;
CREATE TABLE MonMetrics.Measurements (
id IDENTITY(1, 1, 1),
definition_dimensions_id BINARY(20) NOT NULL,
time_stamp TIMESTAMP NOT NULL,
value FLOAT NOT NULL,
PRIMARY KEY(id)
) PARTITION BY EXTRACT('year' FROM time_stamp)*10000 + EXTRACT('month' FROM time_stamp)*100 + EXTRACT('day' FROM time_stamp);
CREATE TABLE MonMetrics.Definitions(
id BINARY(20) NOT NULL,
name VARCHAR(255) NOT NULL,
tenant_id VARCHAR(255) NOT NULL,
region VARCHAR(255) NOT NULL,
PRIMARY KEY(id),
CONSTRAINT MetricsDefinitionsConstraint UNIQUE(name, tenant_id, region)
);
CREATE TABLE MonMetrics.Dimensions (
dimension_set_id BINARY(20) NOT NULL,
name VARCHAR(255) NOT NULL,
value VARCHAR(255) NOT NULL,
CONSTRAINT MetricsDimensionsConstraint UNIQUE(dimension_set_id, name, value)
);
CREATE TABLE MonMetrics.DefinitionDimensions (
id BINARY(20) NOT NULL,
definition_id BINARY(20) NOT NULL,
dimension_set_id BINARY(20) NOT NULL,
CONSTRAINT MetricsDefinitionDimensionsConstraint UNIQUE(definition_id, dimension_set_id)
);
-- Projections
-- ** These are for a single node system with no k safety
CREATE PROJECTION Measurements_DBD_1_rep_MonMetrics /*+createtype(D)*/
(
id ENCODING AUTO,
definition_dimensions_id ENCODING RLE,
time_stamp ENCODING DELTAVAL,
value ENCODING AUTO
)
AS
SELECT id,
definition_dimensions_id,
time_stamp,
value
FROM MonMetrics.Measurements
ORDER BY definition_dimensions_id,
time_stamp,
id
UNSEGMENTED ALL NODES;
CREATE PROJECTION Definitions_DBD_2_rep_MonMetrics /*+createtype(D)*/
(
id ENCODING RLE,
name ENCODING AUTO,
tenant_id ENCODING RLE,
region ENCODING RLE
)
AS
SELECT id,
name,
tenant_id,
region
FROM MonMetrics.Definitions
ORDER BY id,
tenant_id,
region,
name
UNSEGMENTED ALL NODES;
CREATE PROJECTION Dimensions_DBD_3_rep_MonMetrics /*+createtype(D)*/
(
id ENCODING RLE,
name ENCODING AUTO,
value ENCODING AUTO
)
AS
SELECT dimension_set_id,
name,
value
FROM MonMetrics.Dimensions
ORDER BY dimension_set_id,
name
UNSEGMENTED ALL NODES;
CREATE PROJECTION DefinitionDimensions_DBD_4_rep_MonMetrics /*+createtype(D)*/
(
id ENCODING RLE,
definition_id,
dimension_set_id
)
AS
SELECT id,
definition_id,
dimension_set_id
FROM MonMetrics.DefinitionDimensions
ORDER BY definition_id,
dimension_set_id,
id
UNSEGMENTED ALL NODES;
select refresh('MonMetrics.Measurements, MonMetrics.Definitions, MonMetrics.Dimensions, MonMetrics.DefinitionDimensions');

View File

@ -0,0 +1,93 @@
#
# Class for vertica specific files
#
class monasca::vertica::config (
$db_user = 'dbadmin',
$db_group = 'verticadba',
$db_admin_password = unset,
$mon_api_password = unset,
$mon_persister_password = unset,
$monitor_password = unset,
) {
$files = 'puppet:///modules/monasca/vertica/'
$templates = 'monasca/vertica'
$install_dir = '/var/vertica'
$alarms_schema = 'mon_alarms_schema.sql'
$grants_schema = 'mon_grants.sql'
$metrics_schema = 'mon_metrics_schema.sql'
$config_schema = 'mon_schema.sql'
$users_schema = 'mon_users.sql'
$cluster_script = 'create_mon_db_cluster.sh'
$single_node_script = 'create_mon_db.sh'
file { $install_dir:
ensure => directory,
owner => $db_user,
group => $db_group,
mode => '0755',
}
file { "${install_dir}/${alarms_schema}":
ensure => file,
source => "${files}/${alarms_schema}",
mode => '0644',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
file { "${install_dir}/${grants_schema}":
ensure => file,
source => "${files}/${grants_schema}",
mode => '0644',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
file { "${install_dir}/${metrics_schema}":
ensure => file,
source => "${files}/${metrics_schema}",
mode => '0644',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
file { "${install_dir}/${config_schema}":
ensure => file,
content => template("${templates}/${config_schema}.erb"),
mode => '0644',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
file { "${install_dir}/${users_schema}":
ensure => file,
content => template("${templates}/${users_schema}.erb"),
mode => '0644',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
file { "${install_dir}/${cluster_script}":
ensure => file,
content => template("${templates}/${cluster_script}.erb"),
mode => '0755',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
file { "${install_dir}/${single_node_script}":
ensure => file,
content => template("${templates}/${single_node_script}.erb"),
mode => '0755',
owner => $db_user,
group => $db_group,
require => File[$install_dir],
}
}

View File

@ -0,0 +1,29 @@
#!/bin/sh -xe
#
# Build the mon data base
if [ $USER != 'dbadmin' ]; then
echo "Must be run by the dbadmin user"
exit
fi
# Make sure the locale settings are set correctly
. /etc/profile.d/vertica_node.sh
# create the db
/opt/vertica/bin/admintools -t create_db -s 127.0.0.1 -d mon -p <%= db_admin_password %>
# Add in the schemas
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_schema.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_metrics_schema.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_alarms_schema.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_users.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_grants.sql
# Set restart policy so a single node cluster comes back after a reboot
/opt/vertica/bin/admintools -t set_restart_policy -d mon -p always
# For ssl support link the cert/key and restart the db
ln /var/vertica/server* /var/vertica/catalog/mon/v*/
/opt/vertica/bin/admintools -t stop_db -F -p <%= db_admin_password %> -d mon
/opt/vertica/bin/admintools -t start_db -p <%= db_admin_password %> -d mon

View File

@ -0,0 +1,36 @@
#!/bin/sh -xe
#
# Build the mon data base
if [ $USER != 'dbadmin' ]; then
echo "Must be run by the dbadmin user"
exit
fi
# Make sure the locale settings are set correctly
. /etc/profile.d/vertica_node.sh
# Pull comma seperated list of nodes from the config
nodes=`grep install_opts /opt/vertica/config/admintools.conf | cut -d\ -f 4 |cut -d\' -f 2`
# create the db
/opt/vertica/bin/admintools -t create_db -s $nodes -d mon -p <%= db_admin_password %>
# Add in the schemas
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_schema.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_metrics_schema.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_alarms_schema.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_users.sql
/opt/vertica/bin/vsql -w <%= db_admin_password %> < /var/vertica/mon_grants.sql
# Set restart policy to ksafe
/opt/vertica/bin/admintools -t set_restart_policy -d mon -p ksafe
# For ssl support link the cert/key on each server and restart the db
IFS=','
for node in $nodes do
ssh $node 'ln -s /var/vertica/server* /var/vertica/catalog/mon/v*/'
done
/opt/vertica/bin/admintools -t stop_db -F -p <%= db_admin_password %> -d mon
/opt/vertica/bin/admintools -t start_db -p <%= db_admin_password %> -d mon

View File

@ -0,0 +1,29 @@
-- Tune the DB
SELECT SET_CONFIG_PARAMETER ('MaxClientSessions', 200);
-- Turn off messages in the log created by the load balancer/icinga checks
SELECT set_config_parameter('WarnOnIncompleteStartupPacket', 0);
-- Enable SSL ** Requires a db restart, also the restart will fail of the ssl cert is not in place on the server
-- The certs are placed in the root catalog dir by vertica and should be linked to the correct dir after db creation
-- ln /var/vertica/catalog/server* /var/vertica/catalog/mon/v*/'
SELECT SET_CONFIG_PARAMETER('EnableSSL', '1');
-- Enable SNMP alerts
SELECT SET_CONFIG_PARAMETER('SnmpTrapsEnabled', 1 );
SELECT SET_CONFIG_PARAMETER('SnmpTrapEvents', 'Low Disk Space, Read Only File System, Loss Of K Safety, Current Fault Tolerance at Critical Level, Too Many ROS Containers, WOS Over Flow, Node State Change, Recovery Failure, Recovery Error, Recovery Lock Error, Recovery Projection Retrieval Error, Refresh Error, Tuple Mover Error, Stale Checkpoint');
-- Set the snmp trap destination, the host name for the appropriate icinga server should be filled in before the port, ie
-- SELECT SET_CONFIG_PARAMETER('SnmpTrapDestinationsList', 'ops-aw1rdd1-monitoring0000.rndd.aw1.hpcloud.net 162 public' );
-- Set the WOS size large to handle lots of inserts and give it a dedicated bit of space so inserts can be constant,
-- The catch is every moveout makes a ROS and we quickly get lots of partitions, mergeouts are slow but keep partitions down
SELECT do_tm_task('moveout'); -- Do a moveout as the memory sizes won't change with active transactions.
ALTER RESOURCE POOL wosdata memorysize '250M' maxmemorysize '5G'; -- default 0 and 2GB
ALTER RESOURCE POOL tm plannedconcurrency 2 maxconcurrency 4; -- default 1 and 2
SELECT SET_CONFIG_PARAMETER ('MoveOutSizePct', 75); -- default 0
SELECT SET_CONFIG_PARAMETER ('MoveOutInterval', 300); -- default 300
SELECT SET_CONFIG_PARAMETER ('MergeOutInterval', 300); -- default 600
-- Create users
CREATE USER monitor IDENTIFIED BY '<%= monitor_password %>';
GRANT pseudosuperuser TO monitor; -- This is the only way I know to allow the monitor user to see some user permissions.
ALTER USER monitor DEFAULT ROLE pseudosuperuser;

View File

@ -0,0 +1,2 @@
CREATE USER mon_persister IDENTIFIED BY '<%= mon_persister_password %>';
CREATE USER mon_api IDENTIFIED BY '<%= mon_api_password %>';