2019-09-17

AWS BigData Specialty

###########################################
# Cerfification info
###########################################

https://aws.amazon.com/ru/certification/certified-big-data-specialty/

###########################################
# FAQ/Limits
###########################################

Amazon Elasticsearch Service
https://aws.amazon.com/ru/elasticsearch-service/faqs/

Amazon Kinesis Data Firehose
https://aws.amazon.com/kinesis/firehose/faqs/

Amazon Kinesis Data Streams
https://aws.amazon.com/ru/kinesis/data-streams/faqs/
https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html

Amazon Redshift
https://aws.amazon.com/ru/redshift/faqs/

###########################################
# Whitepapers
###########################################

https://aws.amazon.com/ru/whitepapers/#database
https://aws.amazon.com/ru/whitepapers/#analytics

###########################################
# STACK
###########################################

What should i know about each:
 * restrictions
 * relations with others
 * main functions
 * best practices
 * whitepapers
 * use cases
 * anti patterns

Athena
 * AVRO
 * Apache ORC
 * Apache Parquet
 * Snappy
Cognito
Data Pipeline
DynamoDB
ElasticSearch
EMR
 * Flink
 * Flum
 * HBase
 * HDFS
 * HCatalog
 * Hive
 * Ganglia
 * Impala
 * Mahout
 * MLLib
 * S3DistCp
 * Spark
 * Spark Streaming
 * Sqoop
 * Pig
 * Presto
 * Tez
 * Oozie
Glue
IoT
Kinesis Data Analytics
Kinesis Data Firehose
Kinesis Data Streams
Lambda
Machine
 * RANDOM_CUT_FOREST
 * MXNet
 * Tensorflow
RDS
RedShift
 * Amazon Redshift Database Loader
RedShift Spectrum
S3
SageMaker
SQS
QuickSight
VPC
 * VPC Enhanced Routing
 * VPC Flow Logs

###########################################
# Small
###########################################

--- ---
--- Apache Flume
--- ---

Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data. It has a simple and flexible architecture based on streaming data flows. It is robust and fault tolerant with tunable reliability mechanisms and many failover and recovery mechanisms. It uses a simple extensible data model that allows for online analytic application.

--- ---
--- Apache Flink
--- ---

Apache Flink является распределенной платформой обработки данных с открытым исходным кодом, разработанной Apache Software Foundation для использования данных в больших приложениях, прежде всего, для анализа данных, хранящихся в кластерах Hadoop. Поддерживает комбинацию обработки в оперативной памяти и на основе диска.
Flink, что на немецком языке означает быстрый или проворный, является открытым исходным кодом платформы для распределенного потока и пакетной обработки данных. Первоначально названный Стратосфера (2010) перед добавлением в программу инкубатор от Apache (2014), Flink был разработан в Техническом университете Берлина, чтобы быть заменой для Hadoop MapReduce (в рамках программного обеспечения для распределенных вычислений больших наборов данных), используя подход ориентированного графа, устраняя необходимость в отображении и сокращения.

--- ---
--- Kinesis Stream
--- ---

Scenarios:
* Fast log and data feed intake and processing
* Real time metrics and reporting
* Real time data analytics
* Complex stream processing

Kinesis Data Streams does not provide data transformation and record format conversion

Benefits:
* Real time aggregation of data
* Loading the aggregate data into a data warehouse/map reduce cluster
* Durability and Elasticity
* parrallel application readers

Methods to load/get data
* KPL (Kinesis Producer Library)
* KCL (get data)
* Kinesis Agent
* Kinesis Rest API

Where Kinesis Data Stream send data to:
* S3(with Java based connector library)
* EMR(with Java based connector library)
* DynamoDB(with Java based connector library)
* RedShift(with Java based connector library)
* ElasticSearch(with Java based connector library)
* Lambda(use on the stream and can send data to S3, DynamoDB, RedShift)

Single shard capacity
* 1 MB/sec data input
* 2 MB/sec data output
* 5 transaction/sec for read
* 1000 records/sec for write

Max size of data record(data blob payload) = 1MB

Retention period:
* default = 24hours
* max = 7days

KPL antipatterns:
* when it is critical not to have delay in producer application

KPL batching:
* Aggregation(combine multiple user record in single stream record)
* Collection(multiple stream records combined in single http request)

Kinesis Agent features:
* convert multi record line to one record
* convert from delimiter to JSON format
* convert record from log format to JSON format
* uses CloudWatch

Kinesis Connector Library
    This is a pre-built library that helps you easily integrate Amazon Kinesis Data Streams with other AWS services and third-party tools. Amazon Kinesis Client Library (KCL) is required for using this library.
Can connect with
* DynamoDB
* Redshift
* S3
* Elasticsearch

Amazon Kinesis Data Streams can automatically encrypt sensitive data as a producer enters it into a stream. Kinesis Data Streams uses AWS KMS master keys for encryption.

Encryption
    Client side encryption does not provide protection for kinesis data streams. Data protection can only be enabled through Server side encryption. Server-side encryption using AWS Key Management Service (AWS KMS) keys can be enabled to meet strict data management requirements by encrypting your data at rest within Amazon Kinesis Data Streams. This encrypts data before it's at rest by using an AWS KMS customer master key (CMK) you specify. Data is encrypted before it's written to the Kinesis stream storage layer, and decrypted after it’s retrieved from storage. As a result, your data is encrypted at rest within the Kinesis Data Streams service.
    Server-side encryption is a feature in Amazon Kinesis Data Streams that automatically encrypts data before it's at rest by using an AWS KMS customer master key (CMK) you specify. Data is encrypted before it's written to the Kinesis stream storage layer, and decrypted after it’s retrieved from storage. As a result, your data is encrypted at rest within the Kinesis Data Streams service. This allows you to meet strict regulatory requirements and enhance the security of your data.

--- ---
--- KCL
--- ---

* Uses DynamoDB for checkpointing
* Creates DynamoDB table with name = application name
* DynamoDB table creates with 10 RCU and 10 WCU

When you start a KCL application, it calls the KCL to instantiate a worker. This call provides the KCL with configuration information for the application, such as the stream name and AWS credentials.
The KCL performs the following tasks:
             Connects to the stream
             Enumerates the shards
             Coordinates shard associations with other workers (if any)
             Instantiates a record processor for every shard it manages
             Pulls data records from the stream
             Pushes the records to the corresponding record processor
             Checkpoints processed records
             Balances shard-worker associations when the worker instance count changes
             Balances shard-worker associations when shards are split or merged

--- ---
--- Kinesis Firehose
--- ---

Input:
* Amazon Kinesis Agent
* AWS SDK

Output:
* S3
* RedShift
* ElasticSearch
* Splunk

Max record size = 1MB
Buffer size from 1MB to 128MB
Buffer interval from 60s to 900s

Frequency:
* S3: depends on buffer size
* ElasticSearch: depends on buffer size
* RedShift: bow fast RedShift finish COPY command, firehose will launch new COPY command automatically

Failures:
* S3: retry delivery for up to 24h
* RedShift: you can specify retry duration 0-7200 seconds from S3
* ElasticSearch: you can specify retry duration 0-7200 seconds from S3

Can do:
* Record format conversion
* Data transformation(Lambda blueprints)

Kinesis Data Firehose provides the following Lambda blueprints that you can use to create a Lambda function for data transformation.
    General Firehose Processing — Contains the data transformation and status model described in the previous section. Use this blueprint for any custom transformation logic.
    Apache Log to JSON — Parses and converts Apache log lines to JSON objects, using predefined JSON field names.
    Apache Log to CSV — Parses and converts Apache log lines to CSV format.
    Syslog to JSON — Parses and converts Syslog lines to JSON objects, using predefined JSON field names.
    Syslog to CSV — Parses and converts Syslog lines to CSV format.
    Kinesis Data Firehose Process Record Streams as source — Accesses the Kinesis Data Streams records in the input and returns them with a processing status.
    Kinesis Data Firehose CloudWatch Logs Processor — Parses and extracts individual log events from records sent by CloudWatch Logs subscription filters.

--- ---
--- Kinesis Analytics
--- ---

Streaming Sources:
* Amazon Kinesis Data Streams
* Amazon Kinesis Data Firehose

Destination:
* Amazon Kinesis Data Firehose (Amazon S3, Amazon Redshift, Amazon Elasticsearch Service, and Splunk)
* AWS Lambda
* Amazon Kinesis Data Streams

Stagger Windows
    Using stagger windows is a windowing method that is suited for analyzing groups of data that arrive at inconsistent times. It is well suited for any time-series analytics use case, such as a set of related sales or log records.
    For example, VPC Flow Logs have a capture window of approximately 10 minutes. But they can have a capture window of up to 15 minutes if you're aggregating data on the client. Stagger windows are ideal for aggregating these logs for analysis.
    Stagger windows address the issue of related records not falling into the same time-restricted window, such as when tumbling windows were used.
Tumbling Windows (Aggregations Using GROUP BY)
    When a windowed query processes each window in a non-overlapping manner, the window is referred to as a tumbling window. In this case, each record on an in-application stream belongs to a specific window. It is processed only once (when the query processes the window to which the record belongs).
    Tumbling Windows query, A query that aggregates data using distinct time-based windows that open and close at regular intervals.
Sliding Windows
    Sliding windows query, A query that aggregates data continuously, using a fixed time or rowcount interval.
Continuous Queries
    Continuous Query is a query over a stream executes continuously over streaming data. This continuous execution enables scenarios, such as the ability for applications to continuously query a stream and generate alerts.

--- ---
--- SQS
--- ---

MAX message size 256Kb
MAX retention period 14 days

--- ---
--- IoT
--- ---

IoT Rule Engine can send data to:
* Elasticsearch
* Kinesis Firehose
* Kinesis Stream
* DynamoDB
* ML
* CloudWatch
* S3
* SQS
* SNS
* Lambda

AWS IoT Authentication
AWS IoT supports four types of identity principals for authentication:
    X.509 certificates
    IAM users, groups, and roles
    Amazon Cognito identities
    Federated identities

Typically, AWS IoT devices use X.509 certificates, while mobile applications use Amazon Cognito identities. Web and desktop applications use IAM or federated identities.

--- ---
--- Data Pipeline
--- ---

Move data across regions

AWS Data Pipeline supports the following types of databases:
1) JdbcDatabase - A JDBC database
2) RdsDatabase - An Amazon RDS database
3) RedshiftDatabase - An Amazon Redshift database

--- ---
--- DynamoDB
--- ---

Use cases:
* Mobile
* Web
* Gaming
* IoT
* Live online voting
* Session management
* Store S3 object metadata

MAX item size = 400KB

1 WCU(Write Capacity Unit) = 1KB blocks write per secong. Round to 1KB(500K read will take 1 WCU)
1 RCU(Read Capacity Unit) = 4KB blocks read per second. Round to 4KB(2KB read will take 1 RCU)

Strong Consistent Read = 1 RCU
Eventually Consistent Read  = 0.5 RCU

Partition Key = Hash Key
Sort Key = Range Key
Primary Key = Partition Key only = Partition Key + Sort Key

Integration:
* RedShift - direct COPY from DynamoDB
* EMR - DynamoDB integrated with Hive(read/write)
* S3 - export/import from/to DynamoDB via Data Pipeline
* Lambda - can be triggered from DynamoDB
* Kinesis Stream - KCL from Stream to DynamoDB

Partition:
* Can store 10Gb of data MAXIMUM
* 3000 RCU MAX
* 1000 WCU MAX

New partition create when >10GB or >3000RCU or >1000WCU

Total partitions for desired performance = (Desired RCU / 3000 RCU) + (Desired WCU / 1000 WCU)
Total partitions for desired storage = Desired capacity in GB / 10GB
Total partitions = MAX(Total partitions for desired performance, Total partitions for desired capacity)

--- ---
--- EMR HDFS
--- ---

Default block size = 64Mb
We can set block size per file

Default replication factor:
* <= 3 nodes = 1
* 4-9 nodes = 2
* >= 10 nodes = 3

--- ---
--- EMR Hive
--- ---

It is Data Warehous infrastructure built on top of hadoop
It allows to summarize, query and analyze very large data sets
Uses SQL-like interface (HiveSL)

Use cases:
* Process and analyze logs
* Join very large tables
* Batch jobs
* Ad-hoc interactive queries over HDFS/S3 data

You can connect to Hive via JDBC/ODBC drivers

Hive on EMR (in comparing to classic Apache Hive) has additional integrations:
* S3
* * read and write data to/from S3
* * EMRFS
* * Partitioning in Hive. Partitioning supported with S3. (s3://///
/somelogfilenames.log)
* DynamoDB(via EMR DynamoDB connector)
* * Join Hive and DynamoDB tables using HiveQL
* * Query data in DynamoDB tables using HiveQL
* * Copy data from DynamoDB tables to HDFS vice versa
* * Copy data from DynamoDB to S3
* * Copy data from S3 to DynamoDB
* Kinesis Streams

SerDe(Serializer/Desirealizer)
* It is like predefined/custom expression for data format conversion, something like that

--- ---
--- EMR Tez
--- ---

Представляет собой альтернативу традиционному MapReduce, который позволяет выполнять задания для удовлетворения требований быстрого реагирования и максимальной пропускной способности в масштабе петабайт.

It is default execution engine in EMR > 5.x (instead of MapReduce)
It is works on top of YARN

--- ---
--- EMR EC2 choosing
--- ---

MapReduce:
* batch oriented
* M3 or M4 instance types
* scale horisontally

Machine Learning:
* P2 instance types
* C3 or C4 instance types

Spark:
* R3 or R4 instance types

HDFS/MapRedure with high IO performance or high IOPS
* I2 or I3
* D2

Master node:
* <= 50 slave nodes: m3.xlarge or m4.xlarge
* >= 50 slave nodes: m3.2xlarge or m4.2xlarge

--- ---
--- EMR Oozie
--- ---

Scheduler. Workflow management system to manage hadoop jobs

--- ---
--- EMR Sqoop
--- ---

Database migration tool, from relational databases to hadoop

--- ---
--- EMR HBase
--- ---

Intergated with:
* Apache Hadoop
* Apache Hive
* Apache Phoenix
* HDFS
* EMRFS

Use cases:
* Massive data storage
* High speed of data processing

When to use HBase:
* Large amount of data - 100s of GBs to PBs
* High write throughput and update rates
* NoSQL, flexible schema
* Fast access to data, random and real-time.
* Fault tolerance in non-relational environment

When DO NOT USE HBase:
* Transactional applications
* Relational database type features
* Small amount of data

--- ---
--- EMR Phoenix
--- ---

SQL and JDBC API for HBase. OLAP and OLTP

--- ---
--- EMR Presto
--- ---

* Open-source in-memory distributed fast SQL query engine
* Run interactive analytic queries against a variety of data sources with sizes ranging from GBs to PBs.
* Faster than Hive

Advantages of using Presto:
* You can query different type of datasources - from RDBMS, NoSQL, framevorks like Hive to stream processing platform like Kafka, Cassandra, Hive, Kafka, MongoDB, MsSQL, PostgresSql, Redis
* High concurency, run thousand of queries per day
* In-memosy processing helps avoid unnecessary I/O, leading to low latency
* Queries runs directly on Presto engine, they do not need enterpreper like Hive does(Tez)

Metadata of Presto on EMR is stored in Glue Data Catalog

When not to use:
* Not database and not designed for OLTP
* Joining very large(100M plus rows) requires optimisation(use Hive instead)
* Batch processing

--- ---
--- EMR Spark
--- ---

Use cases:
* Interactive Analytics(Faster than run queries on Hive)
* Flexibility in terms of languages (Scala, Python etc)
* Flexibility in data sources(JDBC/ODBC; Files ORC,Parquet, AVRO, JSON; Hive tables etc) with data joins between them
* Run query against live data(Spark 2.0)
* * Structured Streaming
* Stream Processing
* * Disparate data sources
* * Small sizes
* * Process in real time for analyzisys
* Machine learning(MLLib)
* * Recomendation engine
* * Fraud detection
* * Customer segmentation
* * Security
* Data integration
* * ETL

When not to use:
* Not a database and not for OLTP
* Batch processing
* Many concurent requests(avoid for large multi-user reporting environments with high concurency)
* * Run ETL in Spark and copy the data to typical reporting database
* * Run batch jobs in Hive instead

Spark SQL:
* Run low latency interactive SQL queries against structured data
* RDD and DataFrame API for access datasources using Scala, Python, R or SQL
* Avro, Parquet, ORC, JSON
* JOIN across data sources
* Support querying Hive tables using HiveQL
* Quesy database via JDBC/ODBC

Spark Streaming:
* Sources:
* * Kafka
* * Flume
* * HDFS/S3
* * Kinesis
* * Twitter
* Targets:
* * HDFS
* * Databases
* * Dashboards

Spark MLLib algorithms:
    Classification: logistic regression, naive Bayes,...
    Regression: generalized linear regression, survival regression,...
    Decision trees, random forests, and gradient-boosted trees
    Recommendation: alternating least squares (ALS)
    Clustering: K-means, Gaussian mixtures (GMMs),...
    Topic modeling: latent Dirichlet allocation (LDA)
    Frequent itemsets, association rules, and sequential pattern mining

Spark on EMR integrates with services:
* DynamoDB(EMR-DynamoDB connector)
* RDS(JDBC data source with Spark SQL)
* ElasticSearch(elasticsearch connector)
* RedShift(Amazon RedShift Copy from HDFS)
* Kafka(streaming data connector)
* Kinesis(streaming data connector)
* S3(EMRFS)

--- ---
--- EMR File Storage and Compression
--- ---

Algorithm | Splittable ? | Compression Ratio | Compress/Decompress Speed |
----------|--------------|-------------------|---------------------------|
GZIP      | No           | High              | Medium                    |
bzip2     | Yes          | Very High         | Slow                      |
LZO       | Yes          | Low               | Fast                      |
Snappy    | No           | Low               | Very fast                 |

Files format supported by EMR
* Text (csv, tsv)
* Parquet (Columnar oriented file format)
* ORC (Optimized Row Columnar file format)
* Sequence (Flat files consisting of binary key/value pairs)
* Avro (Data serialization framework)

File sizes:
* GZIP files are not splittable, keep them in 1-2Gb Range
* Avoid using smaller files (100MB or less), plan for fewer files
* S3DictCp can be used to combine small files into larger files

--- ---
--- EMR Security
--- ---

At-rest data encryption for ec2 instances(instance store volumes and EBS volumes):
* open-source HDFS encryption
* LUKS encryption(Linux unified key setup)
Two files will be undated:
* /etc/hadoop/conf/core-site.xml
* * hadoop.rpc.protection   privacy
* /etc/hadoop/conf/hdfs-site.xml
* * dfs.encrypt.data.transfer   true

EMRFS encryption at-rest:
* SSE-S3
* SSE-KMS
* CSE-KMS
* CSE-Custom

--- ---
--- HCatalog
--- ---

Allow you to access Hive metastore tables with BigData tools:
* Pig
* SparkSQL
* Custom MapReduce applications

--- ---
--- AWS Glue
--- ---

Fully managed ETL service:
* Categorize, clean and enrich your data
* Move data between various data sources
* Provide data catalog

--- ---
--- RedShift
--- ---

Block size = 1Mb
Max Concurent user connections = 500
Total concurency level for all user-defined connections = 50
Max number of user-defined queues = 8
Super user queue = 1
Default concurency per queue = 5
Zone maps = min and max value for each block

HSM encryption is not supported for DC2 node types.

Use cases:
* Data warehouse
* BI application, usually used by users in business hours

Data nodes types:
* dc2.large   2vCPU,  15Gb RAM   0.16Tb SSD, 1-32 nodes,  Total capacity = 5.12Tb,      2 slices
* dc2.8xlarge 32vCPU, 244Gb RAM  2.56Tb SSD, 2-128 nodes, Total capacity = 327.68Tb,    16 slices(dc1.8xlarge - 32 slices)
* ds2.large   4vCPU,  31Gb RAM   2Tb HDD,    1-32 nodes,  Total capacity = 64Tb,        2 slices
* ds2.8xlarge 36vCPU, 244Gb RAM  16Tb HDD,   2-128 nodes, Total capacity = 2Pb(2048Tb), 16 slices

Integrates with:
* S3(COPY and UNLOAD)
* DynamoDB(COPY to RedShift)
* EMR(COPY to RedShift)
* EC2(COPY to RedShift via SSH)
* AWS Data Pipeline(Jobs on Data Pipeline)
* Lambda(COPY files, manage snapshots etc)
* QuickSight
* AWS Mirgation Service
* Kinesis(Streams, Firehose, Analytics)
* Amazon Machine Learning

When not to use columnar datrabase
* small amount of data(less than 100Gb)
* OLTP
* Binasy Large Objects

Sort key types:
* single column sort key
* compound:
* * all rows mentioned in sort key definition
* * it is default sort key
* * JOINS
* * ORDER BY, GROUP BY
* * PARTITION BY, ORDER BY window function
* * table sorted by columns listed in sort key
* * poor performance if the query does not include primary sort column
* interleaved
* * equal weight for each column in the sortkey
* * multiple queries/different filters
* * table maintenanse operarions - data load / vacuum are slower
* * use only with very large tables - 100 million plus rows
* * not good for data loaded in sort order

Recomendation about column for sort keys:
* TIMESTAMP column for recent data
* Columns that used in BETWEEN conditions and equality operations
* Column that are involved in a JOIN - Same column can be used for the Distribution Key and for the Sort Key

WLM Types(WorkLoad Management)
* User group - user groups assigned to WLM Group
* Query group - query assigned to WLM Group

Direct COPY to RedShift accessible from:
* S3
* EC2
* EMR
* DynamoDB

Copy to RedShift via S3:
* Kinesis Firehose
* Kinesis enabled application
* Database Migration Service

Amazon RedShift Database Loader - use Lambda to load data from S3 on even driven base

Files format for COPY comand:
* csv
* delimited (data separated by "|"), often *.tbl
* fixed width
* json
* Avro

Loading encrypted data:
* SSE-S3(auto recognised by COPY)
* SSE-KMS(auto recognised by COPY)
* client-side encryption using a client-side symmetric master key
Not supported by COPY:
* SSE-C(server side encription with customer-provided key)
* Client-side encryption using a KMS-managed customer master key
* Client-side encryption using a customer-provided asymmetric master key

UNLOAD command:
* unload to S3
* automatically create files usiong SSE-S3
* you can specify SSE-KMS
* you can specify customer-side encryption with a customer-managerd key (CSE-CMK)
UNLOAD not support:
* SSE-C - S3 server side encryption using customer-supplied key

Enhanced VPC Routing - avoid traffic from S3 to RedShift via internet(you will use VPC endpoint or NAT Gateway)

VACUUM utility is not recommended for tables over 700Gb, use deep copy instead.

Automatic snapshots takes every 8 hours or every 5 Gb of data changes by default.
To enable cross region KMS encrypted snapshot copy you need to create snapshot copy grant in the destination region

Encryption at rest:
* KMS
* HSM (CloudHSM or On-Prem HSM)
* You encrypted data blocks, system metadata and snapshots
* Encription is immutable. To create ununcrypted cluster from encrypted you need recreate cluster and reload data with UNLOAD/COPY

Encryption at rest - KMS:
4 tier hierarhy of encryption keys:
* master key
* cluster encription key
* database encription key
* data encryption key

STL system tables are generated from Amazon Redshift log files to provide a history of the system.
STV tables are actually virtual system tables that contain snapshots of the current system data.

Amazon Redshift database security is distinct from other types of Amazon Redshift security. In addition to database security, which is described in this section, Amazon Redshift provides these features to manage security:
* Sign-in credentials — Access to your Amazon Redshift Management Console is controlled by your AWS account privileges. For more information, see Sign-In Credentials.
* Access management — To control access to specific Amazon Redshift resources, you define AWS Identity and Access Management (IAM) accounts. For more information, see Controlling Access to Amazon Redshift Resources.
* Cluster security groups — To grant other users inbound access to an Amazon Redshift cluster, you define a cluster security group and associate it with a cluster. For more information, see Amazon Redshift Cluster Security Groups.
* VPC — To protect access to your cluster by using a virtual networking environment, you can launch your cluster in an Amazon Virtual Private Cloud (VPC). For more information, see Managing Clusters in Virtual Private Cloud (VPC).
* Cluster encryption — To encrypt the data in all your user-created tables, you can enable cluster encryption when you launch the cluster. For more information, see Amazon Redshift Clusters.
* SSL connections — To encrypt the connection between your SQL client and your cluster, you can use secure sockets layer (SSL) encryption. For more information, see Connect to Your Cluster Using SSL.
* Load data encryption — To encrypt your table load data files when you upload them to Amazon S3, you can use either server-side encryption or client-side encryption. When you load from server-side encrypted data, Amazon S3 handles decryption transparently. When you load from client-side encrypted data, the Amazon Redshift COPY command decrypts the data as it loads the table. For more information, see Uploading Encrypted Data to Amazon S3.
* Data in transit — To protect your data in transit within the AWS cloud, Amazon Redshift uses hardware accelerated SSL to communicate with Amazon S3 or Amazon DynamoDB for COPY, UNLOAD, backup, and restore operations.

--- ---
--- Redshift Spectrum
--- ---

Redshift Spectrum supports the following structured and semistructured data formats:
    AVRO
    PARQUET
    TEXTFILE
    SEQUENCEFILE
    RCFILE
    RegexSerDe
    Optimized row columnar (ORC)
    Grok
    OpenCSV
    Ion
    JSON

--- ---
--- Machine Learning
--- ---

Use cases:
* Fraud detection
* Customer Service
* Letigation/Legal
* Security
* Healthcare
* Sports predictions

Unsupervised Learning
* Unlabeled data
* No knowledge of output
* "Self-guided" learning algorithm
* Aum: Figure out the data patterns and groupings
* Does not supported by Amazon ML
* You can use EMR Spart/MLLib, that supports Unsupervised learning

Supervised Learning
* Labeled data
* Desired output is known
* Providing the algorithm training data to learn from
* Aim: Predictive analytics
* Amazon Machine Learning

Datasources for Amazon ML:
* S3(csv)
* RDS (MySQL)
* RedShift

Multiclass classification model:
* Use to generate prediction for multiple classes
* Average F1 score ranges from 0 to 1 and higher F1 score - better ML model quality

Binary classification model:
* true/false predictions
* AUC metric - Area under occur
* AUC from 0 to 1, as AUC closer to 1, as model is better
* AUC closer to 1 - good model
* AUC 0.500 - model equal to random choise
* AUC closer to 0 - you have an issue with data
* You can use your model if AUC > 0.5

Regression model:
* Predict numeric value
* RMSE number: root mean square error
* Lower RMSE - better ML quality model(lower than baseline)

--- ---
--- ElasticSearch
--- ---

Use cases:
* search
* logging and analysis
* distributed document store
* real time application monitoring
* clickstream weblog ingestion

Integration:
IoT              -> ElasticSearch
S3               -> Labmda -> ElasticSearch
DynamoDB         -> Labmda -> ElasticSearch
Kinesis Stream   -> Labmda -> ElasticSearch
Kinesis Firehose -> Labmda -> ElasticSearch
CloudWatch       -> Labmda -> ElasticSearch

AWS recomends to have 3 dedicated master nodes for each es service domain

--- ---
--- Athena
--- ---

Analyza data on S3 using standart SQL
* Full standart SQL support using Presto
* Hive is supported by Athena for DDL. Create/delete/modification of tables/partitions.
* Metadata is stored in Glue

Data format supported:
* CSV, TSV, JSON, Textfile
* ORC
* Parquet

Compression supported:
* Snappy
* ZLib
* LZO
* GZIP

--- ---
--- QuickSight
--- ---

* Build visualisations
* Ad-hoc analysis

Supported data sources:
* Redshift
* Aurora
* Athena
* RDS(MariaDB 10.0 >, SQL Server 2012 >, MySQL 5.1 >, PortgreSQL 9.3.1 >)
* Databases on ec2 or on-prem(SQL Server, MySQL, PostgreSQL)
* Files (S3 or on-prem)
* * CSV
* * TSV
* * Common log format (*.clf)
* * Extended log format (*.elf)
* Software as a service
* * Salesforce
* * * Enterprise
* * * Unlimited
* * * Developer

Spice(Super-fast in-memory calculation engine)
* 10Gb per user by default at start

Data preparation:
* change field names
* add calculating fields
* sql queries
* join tables (from same data source)
* change data types
* data set checks(skip unused rows, that can not be enterpreted properly)

20 visuals per Analyysis

Visual Types:
* AutoGraph
* Bar charts horisontal and vertical
* * single-measure - ome measure for one dimention
* * multi-measure - 2 or more measure for one dimention
* * clustered - values for a dimention grouped by related dimention
* Line Charts(compare chenges over perion of time) - gross sales by month, gross sales and net sales by month, mesaures for dimention over period of time
* Area line chart - same as line chart, but area under line are fulfilled by colors
* Pivot table - way to summarize data. You can change row sort order, apply statistical functions
* Scatter plot
* * two or three measures for a dimention
* * each bobble replresents an item in the dimention
* Tree map
* Pie chart
* Heat map (identify trends and outliers)

--- ---
--- Zeppelin
--- ---

Use cases:
* Zeppelin, SparkSQL, MLLib on EMR can be use together for exploratory Data Science and for recomendation engine
* Kinesis Streams, Zeppelin and Spark Streaming can be used together for analyzing realtime data

Zeppelin for Spark
Jupiter for Python

--- ---
--- D3.js
--- ---

Read data from csv, tsv, or json

--- ---
--- Microstrategy
--- ---

business intelligence and analytics software
Help business to make better decisions
Dashboards, scorecards, reports, queries
Web, desctop, mobile

Sources:
* Athena
* Aurora
* EMR
* Redshift

--- ---
--- Apache Impala
--- ---

Apache Impala is the open source, native analytic database for Apache Hadoop

###########################################
# Relations
###########################################

Kinesis Data Firehose Destinations:
    * S3
    * Redshift
    * Amazon ElasticSearch
    * Splunk

###########################################
# Limits
###########################################

Kinesis Data Firehose
https://docs.aws.amazon.com/firehose/latest/dev/limits.html

###########################################
# LinuxAcademy
###########################################

###########################################
# Udemy
###########################################

###########################################
# ACloudGuru
###########################################

INGESTED: Querying Amazon Kinesis Streams Directly with SQL and Spark Streaming
INGESTED: https://aws.amazon.com/ru/blogs/big-data/querying-amazon-kinesis-streams-directly-with-sql-and-spark-streaming/

INGESTED: Implementing Efficient and Reliable Producers with the Amazon Kinesis Producer Library
INGESTED: https://aws.amazon.com/ru/blogs/big-data/implementing-efficient-and-reliable-producers-with-the-amazon-kinesis-producer-library/

INGESTED: Amazon Kinesis Firehose Data Transformation with AWS Lambda
INGESTED: https://aws.amazon.com/ru/blogs/compute/amazon-kinesis-firehose-data-transformation-with-aws-lambda/

INGESTED: Core Tenets of IoT
INGESTED: https://d0.awsstatic.com/whitepapers/core-tenets-of-iot1.pdf

INGESTED: Amazon QuickSight Update – Geospatial Visualization, Private VPC Access, and More
INGESTED: https://aws.amazon.com/ru/blogs/aws/amazon-quicksight-update-geospatial-visualization-private-vpc-access-and-more/

INGESTED: Store, Protect, Optimize Your Healthcare Data with AWS: Part 1
INGESTED: https://aws.amazon.com/ru/blogs/architecture/store-protect-optimize-your-healthcare-data-with-aws/

INGESTED: Scaling Writes on Amazon DynamoDB Tables with Global Secondary Indexes
INGESTED: https://aws.amazon.com/ru/blogs/big-data/scaling-writes-on-amazon-dynamodb-tables-with-global-secondary-indexes/

Improving Data Access with Secondary Indexes
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html

DynamoDB Cross-Region Replication
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.CrossRegionRepl.html

Best Practicesfor AmazonEMR
https://d0.awsstatic.com/whitepapers/aws-amazon-emr-best-practices.pdf

Best Practices for Securing Amazon EMR
https://aws.amazon.com/ru/blogs/big-data/best-practices-for-securing-amazon-emr/

View Web Interfaces Hosted on Amazon EMR Clusters
https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html

Comparing the Use of Amazon DynamoDB and Apache HBase for NoSQL
https://d1.awsstatic.com/whitepapers/AWS_Comparing_the_Use_of_DynamoDB_and_HBase_for_NoSQL.pdf

Access HBase Tables with Hive
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hbase-access-hive.html

Combine NoSQL and Massively Parallel Analytics Using Apache HBase and Apache Hive on Amazon EMR
https://aws.amazon.com/ru/blogs/big-data/combine-nosql-and-massively-parallel-analytics-using-apache-hbase-and-apache-hive-on-amazon-emr/

Analyze Your Data on Amazon DynamoDB with Apache Spark
https://aws.amazon.com/ru/blogs/big-data/analyze-your-data-on-amazon-dynamodb-with-apache-spark/

Analyze Realtime Data from Amazon Kinesis Streams Using Zeppelin and Spark Streaming
https://aws.amazon.com/ru/blogs/big-data/analyze-realtime-data-from-amazon-kinesis-streams-using-zeppelin-and-spark-streaming/

Optimize Spark-Streaming to Efficiently Process Amazon Kinesis Streams
https://aws.amazon.com/ru/blogs/big-data/optimize-spark-streaming-to-efficiently-process-amazon-kinesis-streams/

Powering Amazon Redshift Analytics with Apache Spark and Amazon Machine Learning
https://aws.amazon.com/ru/blogs/big-data/powering-amazon-redshift-analytics-with-apache-spark-and-amazon-machine-learning/

Using Spark SQL for ETL
https://aws.amazon.com/ru/blogs/big-data/using-spark-sql-for-etl/

A Zero-Administration Amazon Redshift Database Loader
https://aws.amazon.com/ru/blogs/big-data/a-zero-administration-amazon-redshift-database-loader/

Ad Hoc Big Data Processing Made Simple with Serverless MapReduce
https://aws.amazon.com/ru/blogs/compute/ad-hoc-big-data-processing-made-simple-with-serverless-mapreduce/

Using AWS Lambda for Event-driven Data Processing Pipelines
https://aws.amazon.com/ru/blogs/big-data/using-aws-lambda-for-event-driven-data-processing-pipelines/

Using AWS Lambda with Amazon DynamoDB
https://docs.aws.amazon.com/lambda/latest/dg/with-ddb.html

Amazon Kinesis Firehose Data Transformation with AWS Lambda
https://aws.amazon.com/ru/blogs/compute/amazon-kinesis-firehose-data-transformation-with-aws-lambda/

Using AWS Lambda with Amazon Kinesis
https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html

Implementing a Serverless AWS IoT Backend with AWS Lambda and Amazon DynamoDB
https://aws.amazon.com/ru/blogs/compute/implementing-a-serverless-aws-iot-backend-with-aws-lambda-and-amazon-dynamodb/

Indexing Metadata in Amazon Elasticsearch Service Using AWS Lambda and Python
https://aws.amazon.com/ru/blogs/database/indexing-metadata-in-amazon-elasticsearch-service-using-aws-lambda-and-python/

Data Warehousing on AWS
https://d0.awsstatic.com/whitepapers/enterprise-data-warehousing-on-aws.pdf

Amazon Redshift Engineering’s Advanced Table Design Playbook: Preamble, Prerequisites, and Prioritization
https://aws.amazon.com/ru/blogs/big-data/amazon-redshift-engineerings-advanced-table-design-playbook-preamble-prerequisites-and-prioritization/

Optimizing for Star Schemas and Interleaved Sorting on Amazon Redshift
https://aws.amazon.com/ru/blogs/big-data/optimizing-for-star-schemas-and-interleaved-sorting-on-amazon-redshift/

Loading Encrypted Data Files from Amazon S3
https://docs.aws.amazon.com/redshift/latest/dg/c_loading-encrypted-files.html

Unloading Encrypted Data Files
https://docs.aws.amazon.com/redshift/latest/dg/t_unloading_encrypted_files.html

Amazon Redshift Clusters
https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html

Analyze & Vacuum Schema Utility
https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AnalyzeVacuumUtility

Performing a Deep Copy
https://docs.aws.amazon.com/redshift/latest/dg/performing-a-deep-copy.html

Amazon Redshift Snapshot Manager
https://github.com/awslabs/amazon-redshift-utils/tree/master/src/SnapshotManager

Redshift Advance Monitoring
https://github.com/awslabs/amazon-redshift-monitoring

Factors Affecting Query Performance
https://docs.aws.amazon.com/redshift/latest/dg/c-query-performance.html

Building a Multi-Class ML Model with Amazon Machine Learning
https://aws.amazon.com/ru/blogs/big-data/building-a-multi-class-ml-model-with-amazon-machine-learning/

Building a Binary Classification Model with Amazon Machine Learning and Amazon Redshift
https://aws.amazon.com/ru/blogs/big-data/building-a-binary-classification-model-with-amazon-machine-learning-and-amazon-redshift/

Building a Numeric Regression Model with Amazon Machine Learning
https://aws.amazon.com/ru/blogs/big-data/building-a-numeric-regression-model-with-amazon-machine-learning/

How to Visualize and Refine Your Network’s Security by Adding Security Group IDs to Your VPC Flow Logs
https://aws.amazon.com/ru/blogs/security/how-to-visualize-and-refine-your-networks-security-by-adding-security-group-ids-to-your-vpc-flow-logs/#more-3559

Managing Amazon Elasticsearch Service Domains
https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-managedomains.html

Analyze Realtime Data from Amazon Kinesis Streams Using Zeppelin and Spark Streaming
https://aws.amazon.com/ru/blogs/big-data/analyze-realtime-data-from-amazon-kinesis-streams-using-zeppelin-and-spark-streaming/

Run Jupyter Notebook and JupyterHub on Amazon EMR
https://aws.amazon.com/ru/blogs/big-data/running-jupyter-notebook-and-jupyterhub-on-amazon-emr/

Hadoop: Encrypted Shuffle
https://hadoop.apache.org/docs/r2.7.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/EncryptedShuffle.html

Amazon Redshift Database Encryption
https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-db-encryption.html


###########################################
# Whizlabs
###########################################

INGESTED: Top 8 Best Practices for High-Performance ETL Processing Using Amazon Redshift:
INGESTED: https: //aws.amazon.com/ru/blogs/big-data/top-8-best-practices-for-high-performance-etl-processing-using-amazon-redshift/

INGESTED: Export, Import, Query, and Join Tables in DynamoDB Using Amazon EMR
INGESTED: https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMRforDynamoDB.html

INGESTED: Amazon Redshift Snapshots
INGESTED: https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html

INGESTED: Strategies for Reducing Your Amazon EMR Costs
INGESTED: https://aws.amazon.com/ru/blogs/big-data/strategies-for-reducing-your-amazon-emr-costs/

INGESTED: Best Practices for Storing Large Items and Attributes
INGESTED: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-use-s3-too.html

INGESTED: Rules for AWS IoT
INGESTED: https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html

INGESTED: Choosing the Right DynamoDB Partition Key
INGESTED: https://aws.amazon.com/ru/blogs/database/choosing-the-right-dynamodb-partition-key/

INGESTED: Processing DynamoDB Data With Apache Hive on Amazon EMR
INGESTED: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html

INGESTED: Озера данных и аналитика в AWS
INGESTED: https://aws.amazon.com/ru/big-data/datalakes-and-analytics/

INGESTED: Amazon Redshift Can Now COPY from Parquet and ORC File Formats
INGESTED: https://aws.amazon.com/ru/about-aws/whats-new/2018/06/amazon-redshift-can-now-copy-from-parquet-and-orc-file-formats/

How to access and analyze on-premises data stores using AWS Glue
https://aws.amazon.com/ru/blogs/big-data/how-to-access-and-analyze-on-premises-data-stores-using-aws-glue/

INGESTED: Optimizing Performance for Amazon EMR Operations in DynamoDB
INGESTED: https://docs.aws.amazon.com/emr/latest/ReleaseGuide/EMR_Hive_Optimizing.html

EMR Kinesis
https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-kinesis.html

Processing VPC Flow Logs with Amazon EMR
https://aws.amazon.com/ru/blogs/big-data/processing-vpc-flow-logs-with-amazon-emr/

Encryption of Data at Rest for Amazon Elasticsearch Service
https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/encryption-at-rest.html

Best Practices for Querying and Scanning Data
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-query-scan.html

Читать далее

2017-05-16

mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table

In some cases you cane receive error when use mysqldump on tables with longblog columns.

For example:
mysqldump somedb Attachment > somedb.Attachment.mysqldump
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `Attachment` at row: 1005

In spite of the fact that on server side you setup enough value for max_allowed_packet, you will still receive this error.

As we can read in official documentation(Packet Too Large), max_allowed_packet must be set on both sides(client and server) to enough value.

The way you can do this:
mysqldump --max_allowed_packet=1024M somedb Attachment > somedb.Attachment.mysqldump

It is highly recommended to use mysqldump in this way in all cases when you work with databases with longblog, because it is have no bad influence on any things, but you will always have good backups.
Читать далее

2016-10-19

JBoss 4 init for centos 7

touch /usr/lib/systemd/system/jboss.service

[Unit]
Description=JBoss 4.0 App Server
[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/jboss/bin/run.sh
ExecStop=/opt/jboss/bin/shutdown.sh
[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable jboss.service
systemctl start jboss.service




Обычный init script(плохой вариант для systemd):

#! /bin/sh                                                                                                                            
                                                                                                                                      
start(){                                                                                                                              
        echo "Starting jboss.."                                                                                                       
        # su -l jboss -c '/opt/jboss/current/bin/run.sh > /dev/null 2> /dev/null &'
        /opt/jboss/bin/run.sh > /dev/null 2> /dev/null &
        }

stop(){
        echo "Stopping jboss.."
        # su -l jboss -c '/opt/jboss/current/bin/shutdown.sh -S &'
        /opt/jboss/bin/shutdown.sh -S &
        }

restart(){
        stop
        sleep 60
        killall java
        start
        }

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    *)
        echo "Usage: jboss {start|stop|restart}"
exit 1
esac

exit 0


Читать далее

2016-10-10

Установка ВМ по VNC на XenServer

Раньше я писал о том, как это сделать, но вот нашел способ лучше:

Исходник: https://habrahabr.ru/sandbox/48567/

Для подключения к консоли свежесозданной виртуальной машины используется VNC:

  • выясним текущий номер домена для VM:

    xe vm-param-list uuid=[VM uuid] | grep dom-id

  • выясним порт vnc для этого домена:

    xenstore-read /local/domain/[domain]/console/vnc-port

  • удаленное подключение:

    vncviewer -via root@[xenserver] localhost:[port]
    в качестве [port] используются последние две цифры полученного порта

Читать далее

2016-08-17

Citrix XenServer 7.0.0 host pool eject ERROR (The SR.shared flag cannot be set to false while the SR remains connected to multiple hosts)

Итак, есть пул на XenServer 7.0
При попытке извлечь хост из пула получаем ошибку:


[root@xenserver01 ~]# xe pool-eject host-uuid=e0f891b7-0b7d-495d-9acc-5139f8ed220e
WARNING: Ejecting a host from the pool will reinitialise that host's local SRs.
WARNING: Any data contained with the local SRs will be lost.
The following VDI objects will be destroyed:
VDI: 28e82487-e10d-4c4b-a62c-b1d849801149 (SCSI 1:0:0:0)
VDI: 8bacebfe-97c2-4827-a587-7406deab639c (disp1root)
VDI: dd2fa215-f949-4b35-b92f-26f7ac70fe15 (disp2u02)
Type 'yes' to continue
yes
The SR.shared flag cannot be set to false while the SR remains connected to multiple hosts
PBD: 72c8bb77-7c88-8a28-6d28-930b7af4af2c
: 622cd4ec-d1a6-2412-8c18-425a8d53a651
: 3c2b6013-cc37-d7f9-e508-33680e42ead3

Вот последовательно весь набор операций с выводом консоли для лечения



ssh root@xenserver01
[root@xenserver01 ~]# xe host-list

uuid ( RO) : e0f891b7-0b7d-495d-9acc-5139f8ed220e
name-label ( RW): xenserver01
name-description ( RW): Default install

uuid ( RO) : 6a6ea57f-0b4a-4df1-b861-9a58064d72ab
name-label ( RW): xen06
name-description ( RW): Default install

uuid ( RO) : 19d1baa4-7b26-46e9-bdbf-9e1e15d227a6
name-label ( RW): xen04
name-description ( RW): Default install

uuid ( RO) : 20aecdd0-d91f-47ba-833b-1d92bb8ddb36
name-label ( RW): xenserver02
name-description ( RW): Pool Master

[root@xenserver01 ~]# xe pool-eject host-uuid=e0f891b7-0b7d-495d-9acc-5139f8ed220e
WARNING: Ejecting a host from the pool will reinitialise that host's local SRs.
WARNING: Any data contained with the local SRs will be lost.
The following VDI objects will be destroyed:
VDI: 28e82487-e10d-4c4b-a62c-b1d849801149 (SCSI 1:0:0:0)
VDI: 8bacebfe-97c2-4827-a587-7406deab639c (disp1root)
VDI: dd2fa215-f949-4b35-b92f-26f7ac70fe15 (disp2u02)
Type 'yes' to continue
yes
The SR.shared flag cannot be set to false while the SR remains connected to multiple hosts
PBD: 72c8bb77-7c88-8a28-6d28-930b7af4af2c
: 622cd4ec-d1a6-2412-8c18-425a8d53a651
: 3c2b6013-cc37-d7f9-e508-33680e42ead3

[root@xenserver01 ~]# xe pbd-list uuid=72c8bb77-7c88-8a28-6d28-930b7af4af2c
uuid ( RO) : 72c8bb77-7c88-8a28-6d28-930b7af4af2c
host-uuid ( RO): 19d1baa4-7b26-46e9-bdbf-9e1e15d227a6
sr-uuid ( RO): b15d8a95-adb2-e7ef-ad64-d54f61a84a4c
device-config (MRO): location: /opt/xensource/packages/iso; legacy_mode: true
currently-attached ( RO): false

[root@xenserver01 ~]# xe pbd-destroy uuid=72c8bb77-7c88-8a28-6d28-930b7af4af2c

[root@xenserver01 ~]# xe pool-eject host-uuid=e0f891b7-0b7d-495d-9acc-5139f8ed220e
WARNING: Ejecting a host from the pool will reinitialise that host's local SRs.
WARNING: Any data contained with the local SRs will be lost.
The following VDI objects will be destroyed:
VDI: 28e82487-e10d-4c4b-a62c-b1d849801149 (SCSI 1:0:0:0)
VDI: 8bacebfe-97c2-4827-a587-7406deab639c (disp1root)
VDI: dd2fa215-f949-4b35-b92f-26f7ac70fe15 (disp2u02)
Type 'yes' to continue
yes
The SR.shared flag cannot be set to false while the SR remains connected to multiple hosts
PBD: 622cd4ec-d1a6-2412-8c18-425a8d53a651
: 3c2b6013-cc37-d7f9-e508-33680e42ead3

[root@xenserver01 ~]# xe pbd-list uuid=622cd4ec-d1a6-2412-8c18-425a8d53a651
uuid ( RO) : 622cd4ec-d1a6-2412-8c18-425a8d53a651
host-uuid ( RO): e0f891b7-0b7d-495d-9acc-5139f8ed220e
sr-uuid ( RO): b15d8a95-adb2-e7ef-ad64-d54f61a84a4c
device-config (MRO): location: /opt/xensource/packages/iso; legacy_mode: true
currently-attached ( RO): false

[root@xenserver01 ~]# xe pbd-destroy uuid=622cd4ec-d1a6-2412-8c18-425a8d53a651


Читать далее

2016-07-19

Информативно grep bucardo.log

Часто нужно видеть, что добавляется в bucardo.log на ходу. А добавляется туда куча всякого мусора, особенно когда процесс репликации длительный.

Пользуюсь такой командой:

tail -f bucardo.log | grep -E 'delta count|COPY|chunk|Finished|Pushdelta|bucardo_track'

или такой:

tail -f bucardo.log | grep -v ' MCP ' | grep -v ' CTL '

или такой tail -f bucardo.log | grep ' KID ' | grep -v 'Got a notice for'

Вывод выглядит так:

Jul 19 08:41:01 netrep Bucardo[10239]: KID Begin COPY to net.scinvoice
Jul 19 08:41:02 netrep Bucardo[10239]: KID Begin COPY to net.encustomer04
Jul 19 08:41:02 netrep Bucardo[10239]: KID Begin COPY to net.enactintechcond2enact
Jul 19 08:41:02 netrep Bucardo[10239]: KID Begin COPY to net.finexecutor
Jul 19 08:41:02 netrep Bucardo[10239]: KID Begin COPY to net.rqfkorder2finservices
Jul 19 08:41:02 netrep Bucardo[10239]: KID Begin COPY to net.rqorderitem2enestimttm
Jul 19 08:41:03 netrep Bucardo[10239]: KID Deleting chunk 1
Jul 19 08:41:04 netrep Bucardo[10239]: KID Deleting chunk 2
Jul 19 08:41:04 netrep Bucardo[10239]: KID Begin COPY to net.enact2humen
Jul 19 08:49:36 netrep Bucardo[10239]: KID Copying chunk 1
Jul 19 08:49:46 netrep Bucardo[10239]: KID Copying chunk 2
Jul 19 08:49:48 netrep Bucardo[10239]: KID Begin COPY to net.enmetrologycounter
Jul 19 08:49:49 netrep Bucardo[10239]: KID Begin COPY to net.entravelsheetfuelremns
Jul 19 08:50:41 netrep Bucardo[10239]: KID Begin COPY to net.enline04
Jul 19 08:50:41 netrep Bucardo[10239]: KID Begin COPY to net.ensubst150owntrans
Jul 19 08:50:42 netrep Bucardo[10239]: KID Begin COPY to net.entechconditionsservcs
Jul 19 08:50:43 netrep Bucardo[10239]: KID Begin COPY to net.epren
Jul 19 08:50:43 netrep Bucardo[10239]: KID Begin COPY to net.rqorgbank
Jul 19 08:50:43 netrep Bucardo[10239]: KID Begin COPY to net.ensubst150disconnector
Jul 19 08:50:43 netrep Bucardo[10239]: KID Begin COPY to net.enotherobject
Jul 19 08:50:44 netrep Bucardo[10239]: KID Begin COPY to net.ensubst150separator
Jul 19 08:50:44 netrep Bucardo[10239]: KID Begin COPY to net.eninsulator
Jul 19 08:50:44 netrep Bucardo[10239]: KID Begin COPY to net.tktransportreal
Jul 19 08:50:44 netrep Bucardo[10239]: KID Begin COPY to net.endestinationpoint
Jul 19 08:50:44 netrep Bucardo[10239]: KID Begin COPY to net.rqorderitem
Jul 19 08:50:57 netrep Bucardo[10239]: KID Begin COPY to net.encalchumensalary
Jul 19 08:51:45 netrep Bucardo[10239]: KID Begin COPY to net.scusageinputitemoz
Jul 19 08:51:49 netrep Bucardo[10239]: KID Begin COPY to net.enservicesfromsidebjct
Jul 19 08:51:49 netrep Bucardo[10239]: KID Begin COPY to net.enestimateitemsttshstr
Jul 19 08:51:49 netrep Bucardo[10239]: KID Begin COPY to net.ensubst150discharger
Jul 19 08:51:50 netrep Bucardo[10239]: KID Begin COPY to net.entransportorder
Jul 19 08:53:29 netrep Bucardo[10239]: KID Begin COPY to net.rqfkorderitem2osdata
Jul 19 08:53:29 netrep Bucardo[10239]: KID Deleting chunk 1
Jul 19 08:53:30 netrep Bucardo[10239]: KID Deleting chunk 2
Jul 19 08:53:30 netrep Bucardo[10239]: KID Deleting chunk 3
Jul 19 08:53:30 netrep Bucardo[10239]: KID Begin COPY to net.enplanworkitem2humen

Очень удобно получается

Читать далее

2016-02-03

openSUSE 42.1 virtualbox driver setup

Итак, есть проблема. При установке на openSUSE 42.1 virtualbox 5 нужно собрать модули ядра.
То есть выполнить инструкцию от virtualbox:

/sbin/rcvboxdrv setup

Но при ее выполнении получаем ошибку:

Bad argument setup

Нашел рекомендацию следующую:

sudo /usr/lib/virtualbox/vboxdrv.sh setup

Читать далее

2015-12-09

PostgreSQL 9.1 Streaming Replication Example

=======================================
2015.12.08Step by step streaming replication instructions
100.100.100.22 - master(p03)
100.100.100.13 - slave(p03rep)
user replicator password somepassword
CREATE ROLE replicator LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE REPLICATION;
PostgreSQL version = 9.1
=======================================

ssh postgres@100.100.100.22

# Check replication connection settings
grep "100.100.100.13" /var/lib/pgsql/data/pg_hba.conf
host replication replicator 100.100.100.13/32 md5
# GOOD!!!

# Check database replication settings
grep -E "(max_wal_senders|wal_level|wal_keep_segments|archive_mode|archive_command)" postgresql.conf
max_wal_senders = 5
wal_level = hot_standby
wal_keep_segments = 100
archive_mode = on
archive_command = 'test ! -f /u04/pgarch/%f && cp %p /u04/pgarch/%f'
# GOOD!!!

ssh root@100.100.100.13

service postgresql stop

ssh postgres@100.100.100.13

cd /u02/pgwork/pgbb
rm -rfv p03.pgbb
pg_basebackup -h 100.100.100.22 -U replicator -W -D p03.pgbb -v -Ft -x -z -P
rm -rfv /var/lib/pgsql/data/*
rm -rfv /u02/pgdata/oblbase/*
rm -rfv /u03/pgdata/oblbase_ix/*                                                                                                
tar -C /var/lib/pgsql/data -xvzf p03.pgbb/base.tar.gz                                                                           
rm -rfv /var/lib/pgsql/data/pg_log/*                                                                                            
tar -C /var/lib/pgsql/data/pg_tblspc/16475 -xvzf p03.pgbb/16475.tar.gz                                                          
tar -C /var/lib/pgsql/data/pg_tblspc/16476 -xvzf p03.pgbb/16476.tar.gz                                                          
chmod 0700 /var/lib/pgsql/data                                                                                                  
mv -v /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.workonproduction                                  
cat << EOF > /var/lib/pgsql/data/postgresql.conf                                                                                
listen_addresses = '*'                                                                                                          
max_connections = 3000                                                                                                          
shared_buffers = 500MB #40000MB                                                                                                 
max_prepared_transactions = 2000
work_mem = 10MB #360MB
maintenance_work_mem = 102MB #1024MB
synchronous_commit = off
checkpoint_segments = 8 #20
join_collapse_limit = 100
seq_page_cost = 0.0000001
random_page_cost = 2.0
cpu_operator_cost = 0.0000001
constraint_exclusion = on
log_destination = 'stderr'
logging_collector = on
log_line_prefix = '%d %u %h %a %s %t %p '
log_min_duration_statement = 15000
log_statement = ddl
log_hostname = on
log_temp_files = 0
log_lock_waits = on
autovacuum = off
datestyle = 'iso, dmy'
lc_messages = 'ru_RU.UTF-8'
lc_monetary = 'ru_RU.UTF-8'
lc_numeric = 'ru_RU.UTF-8'
lc_time = 'ru_RU.UTF-8'
default_text_search_config = 'pg_catalog.russian'
max_locks_per_transaction = 250
max_pred_locks_per_transaction = 250
max_wal_senders = 5
wal_level = hot_standby
hot_standby = on
wal_keep_segments = 100
archive_mode = on
archive_command = 'test ! -f /u04/pgarch/%f && cp %p /u04/pgarch/%f'
max_standby_archive_delay = -1
max_standby_streaming_delay = -1
EOF
chmod 600 /var/lib/pgsql/data/postgresql.conf
cat << EOF > /var/lib/pgsql/data/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=100.100.100.22 port=5432 user=replicator password=somepassword'
restore_command = 'cp /u04/pgarch/%f %p'
archive_cleanup_command = 'pg_archivecleanup /u04/pgarch %r'
EOF
chmod 600 /var/lib/pgsql/data/recovery.conf

ssh root@100.100.100.13

service postgresql start

=======================================

Monitoring of replication state on master:
select * from pg_stat_replication;
Читать далее

2015-07-03

Пример скрипта для Live Backup VM on XenServer

Скрипт проверен на версии Citrix XenServer 6.2.
Главное правильно определить переменные, остальное все будет сделано автоматом.

# BackUp Virtual Machine
# Citrix XenServer 6.2
# Nuance 1: XenServer Tools are not needed on the VM

export REMOTEHOST=120.71.111.41
export REMOTEDIR=vm
export REMOTEUSER=ksjhfksjdhfk
export REMOTEPASSWD=kdsfksdhfkjsdhfkhf
export VMNAME=xs62rectest
export VMSPEC=xs62_snap_xen10
export CURDATE=$(date +%Y-%m-%d.%H.%M.%S)
export MOUNTPOINT=/mnt/backup$VMNAME
export VMFILENAME=$VMNAME-$VMSPEC-$CURDATE

echo $(date +%Y-%m-%d.%H.%M.%S): START backup VM $VMNAME
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: mkdir $MOUNTPOINT
mkdir $MOUNTPOINT -p
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: mount //$REMOTEHOST/$REMOTEDIR to $MOUNTPOINT
mount -t cifs "//$REMOTEHOST/$REMOTEDIR" -o username=$REMOTEUSER,password=$REMOTEPASSWD $MOUNTPOINT
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: creating snapshot
export SNAPUUID=`xe vm-snapshot vm=$VMNAME new-name-label=$VMFILENAME.snapshot`
echo $(date +%Y-%m-%d.%H.%M.%S): DONE: spapshot uuid = $SNAPUUID
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: converting snapshot to VM
xe template-param-set is-a-template=false ha-always-run=false uuid=$SNAPUUID
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: exporting snapshot to $MOUNTPOINT/$VMFILENAME.xva.gz
xe vm-export vm=$SNAPUUID compress=true filename=$MOUNTPOINT/$VMFILENAME.xva.gz
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: deleting snapshot
xe vm-uninstall uuid=$SNAPUUID force=true
echo $(date +%Y-%m-%d.%H.%M.%S): STEP: umount -l $MOUNTPOINT
umount -l $MOUNTPOINT
echo $(date +%Y-%m-%d.%H.%M.%S): FINISH backup VM $VMNAME


Читать далее

Установка mc на xenserver

Проверено на 6.2.
mc реально нехватает. Ставится в полпинка, при условии наличия интернет

export http_proxy=http://xxx.xxx.xxx.xxx:3128
yum install --enablerepo=base mc

Читать далее

2015-06-26

Live Backup VM on XenServer 6.2

# BackUp Virtual Machine
# Citrix XenServer 6.2
# Manual
# Nuance 1: XenServer Tools are not needed on the VM

#########################################################################################################

mkdir /mnt/backup
mount -t cifs "//10.77.11.200/w4a" -o username=username,password=password /mnt/backup

#########################################################################################################

# First look for the uuid of the VMs to backup.
# We don’t want to backup the control domain itself,
# so we add is-control-domain=false to the vm-list command
# and we also don’t want backups of snapshots
# so we add is-a-snapshot=false

xe vm-list is-control-domain=false is-a-snapshot=false

uuid ( RO)           : 9814bca5-7cef-5b67-84a9-25b4ce078c86
     name-label ( RW): OpenMeetings
    power-state ( RO): halted


uuid ( RO)           : fb6f41cc-6051-96d8-ad88-6e93db6f873c
     name-label ( RW): xs62rectest
    power-state ( RO): running


uuid ( RO)           : befb8299-3e4b-cf21-db4d-117c46da7da5
     name-label ( RW): res-j-p
    power-state ( RO): running


uuid ( RO)           : 34f543c2-fc96-8271-770c-01c2a12db006
     name-label ( RW): stock03
    power-state ( RO): running


uuid ( RO)           : cee0d00c-977e-1bb0-83cb-477fac5f6f9c
     name-label ( RW): Xackup-portal
    power-state ( RO): running

#########################################################################################################

# Now we create a snapshot of the VMs we want to backup,
# replacing the vm(uuid) one by one with the ones we found
# with the previous command. Also replace the name of
# the snapshot if desired

#xe vm-snapshot uuid=fb6f41cc-6051-96d8-ad88-6e93db6f873c new-name-label=xs62rectest-snapshot-20150625001.snapshot
xe vm-snapshot vm=xs62rectest new-name-label=xs62rectest-snapshot-20150625002.snapshot

7a237b62-9c13-e579-c4f3-f4d71b4fafaa

xe snapshot-list

uuid ( RO)                : 7a237b62-9c13-e579-c4f3-f4d71b4fafaa
          name-label ( RW): xs62rectest-snapshot-20150625004.snapshot
    name-description ( RW): Test VM for backup&restore process
CentOS6.6

#########################################################################################################

# Previous command has a return value: the uuid of the created snapshot.
# Then we transform the snapshot into a VM to be able to save it to
# a file, replacing uuid with the return value of the previous command

xe template-param-set is-a-template=false ha-always-run=false uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa

#########################################################################################################

# Now we can export created snapshot to .xva file,
# which can be easily restored from command line or XenCenter.
# .xva file is saved on a remote filesystem.

xe vm-export vm=7a237b62-9c13-e579-c4f3-f4d71b4fafaa filename=/mnt/backup/xs62rectest-20150625002.xva

#########################################################################################################

# Finally as we have already taken backup to xva file,
# so we can destroy created snapshot from xenserver

xe vm-uninstall uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa force=true
#xe snapshot-uninstall uuid=7d4c20e1-8fd3-27c6-c79b-68cb258af952 force=true

#########################################################################################################
#########################################################################################################
#########################################################################################################

# Script

mkdir /mnt/backup
mount -t cifs "//10.77.11.200/w4a" -o username=username,password=password /mnt/backup
xe vm-list is-control-domain=false is-a-snapshot=false
xe vm-snapshot vm=xs62rectest new-name-label=xs62rectest-snapshot-20150625002.snapshot
xe template-param-set is-a-template=false ha-always-run=false uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa
xe vm-export vm=7a237b62-9c13-e579-c4f3-f4d71b4fafaa filename=/mnt/backup/xs62rectest-20150625002.xva
xe vm-uninstall uuid=7a237b62-9c13-e579-c4f3-f4d71b4fafaa force=true
cd /mnt/backup
tar -cvzf xs62rectest-20150625002.xva.tar.gz xs62rectest-20150625002.xva
rm xs62rectest-20150625002.xva
cd ~
umount /mnt/backup
Читать далее

2015-06-19

There is not enough space to upload the update location: /var/patch

При очередном обновлении Citrix XenServer 6.2 получил ошибку:

There is not enough space to upload the update
location: /var/patch

Как оказалось, в данной директории лежат все патчи, что были применены с самого начала работы сервера. Поковырявшись в интернете нашел решение(http://www.visions.se/xenserver-command-line-commands/)

В консоли xenserver необходимо выполнить:

for i in `xe patch-list --minimal|tr "," " "`;do xe patch-pool-clean uuid=$i;done

Также данную команду рекомендую выполнить после перезагрузки сервера(после того, как на него поставили патчи)

Читать далее

2015-06-09

Zimbra. Первый раз в первый класс. Базовая настройка.


В ПРОЦЕССЕ НАПИСАНИЯ!!!!

Пока идет непримеримая борьба с thunderbird, ldap, cyrus-imapd, postfix и другими коммунистическими товариСЧами, решил попробовать госпожу ZIMBRA, ибо там эти товарисчи уже приведены в капиталистический облик.

Итак, Zimbra проставлена на CentOS6.6. Сразу куча вопросов, и вот тут будет маленький склерозник.

[zimbra@zimbra ~]$ zmcontrol -v
Release 8.6.0_GA_1153.RHEL6_64_20141215151155 RHEL6_64 FOSS edition, Patch 8.6.0_P1.

Что мы собственно хотим получить:
+++ 1. Мультидоменность
--- 2. Квотирование ящиков
+++ 3. Нотификацию пользователей о новых письмах/событиях
+++ 4. Глобальная адресная книга (частично автоматически наполняемая, если это возможно, например при создании/изменении ящиков). Перенос существующей с openLDAP.
+++ 5. Запрет пользователям менять свои реквизиты самостоятельно (ФИО, должность, подразделение, телефон и т.д.).
+++ 6. Доступ к ящикам и письмам при необходимости без участия пользователя
+++ 7. Глобальное управление настройками доменов (квотирование, модули интерфейса и т.д.)
--- 8. Возможность зачистки старой почты по определенным правилам.
+++ 9. Псевдонимы(алиасы) доменов/ящиков (см. п.1 МУЛЬТИДОМЕННОСТЬ).
+++ 10. Инструкция по расширению места на дисковой подсистеме centos. Я так редко это делаю, что постоянно забываю. А тут виртуалка, так что без этого никак.
+++ 11. Списки рассылок.
+++ 12. Обработку заголовков и bcc_maps на уровне MTA.
+++ 13. Антивирусная защита
+++ 14. Маршрутизация почты на уровне ящиков(ящики одного домена на разных серверах, для реализации постепенной миграции).
--- 15. Доступ по http/https.
+++ 16. Антиспам. Не рассматриваем пока. В составе что-то есть, пока вообще не приоритет.
+++ 17. План переезда отдельных учетных записей.
--- 18. Настройка нескольких почтовых ящиков на одном рабочем месте
+++ 19. Понятное резервное копирование
+++ 20. Изменение допустимых размеров вложений и писем

--- Автоматическую подпись с реквизитами пользователя, предприятия, логотипом, формируемую на основе адресной книги
--- План переезда с существующей структуры на Zimbra.


Что нужно помнить:
Ручные изменения конфигов в папке .opt/zimbra/conf перетираются при обновлении ПО. Так что из нужно бэкапить дабы не убить при обновлении, И ПОМНИТЬ О ТОМ, ЧТО ТАМ ЧТО_ТО СДЕЛАНО РУЧКАМИ!!!!!
Админка работает на порту 7071
10) Web server HTTP port:                    8080
11) Web server HTTPS port:                   8443
12) Web server mode:                         https
13) IMAP server port:                        7143
14) IMAP server SSL port:                    7993
15) POP server port:                         7110
16) POP server SSL port:                     7995

################################################
1. МУЛЬТИДОМЕННОСТЬ
################################################

Есть такое дело, причем все достаточно просто. Даже алиасы на домены делать можно. Вот например есть у нас домен *.domain.com.ua, и устаревший *.domain.er.gov.ua, на который до сих пор работают подрядчики в районы, банки там, почтамт и т.д.
Делаем домен new.domain.com.ua, где клепаем ящики, и делаем алиас на него, old.domain.er.gov.ua. Теперь вся почта домена old.domain.er.gov.ua будет автоматом заворачиваться на соответствующий ящик домена new.domain.com.ua.

################################################
2. КВОТИРОВАНИЕ
################################################

Должно работать хитро. Квотирование не должно влиять на получение почты, только на отправку.
Квотирование настраивается в COS. А вот как настроить мою хитрую необходимость пока не понятно...

################################################
3. НОТИФИКАЦИЯ ПОЛЬЗОВАТЕЛЕЙ
################################################

Можно настроить только два момента - Подсветка вкладки "Почта" при получении сообщения и мерцание заголовка браузера при получении сообщения . Все в том же COS. Правда окно у меня при проверке так и не замигало. Кроме того есть еще zimlet что-то типа "Zimbra Notifier", который ставится в систему и маячит в трее о новых сообщениях.

Пока будет пытаться использовать штатные решения и учить пользователей регулярно проверять почту, а если будет надо, будем использовать zimlet.

################################################
4. ГЛОБАЛЬНАЯ АДРЕСНАЯ КНИГА
################################################ 

Нужно включить GAL(Clobal Address List) так, чтобы он был доступен всем доменам. Это типа должна быть такая адресная книга. По умолчанию она видима только внутри домена, но так как у нас из будет целый зоопарк, да еще и с псевдонимами(или алиасами, как их еще называют).

Делаем так:

su - zimbra
zmprov mcf zimbraGalInternalSearchBase ROOT
zmprov mcf zimbraGalSyncInternalSearchBase ROOT

Далее проводим следственный эксперимент.  То есть тупо проверяем, что все у нас будет работать.

Есть домен по умолчанию - zimbra.xoe.com.ua. К нему конечно есть вопросы, он выпадает из общей идеологии адресного пространства компании, так как был создан первым во время установки системы и отсутствия понимания принципов. Но пока его оставим.

Создаем новый домен - ks.com.ua, в котором создается учетная запись GAL galsync@ks.com.ua прямо во время настройки домена.

Создаем поддомены - co.ks.com.ua и gs.ks.com.ua, там аналогичным образом создается запись GAL. В каждом домене создаем пользователя и максимально заполняем реквизиты(test_ivanov@co.ks.com.ua, test_petrov@gs.ks.com.ua), после чего выполняем принудительную синхронизацию:

zmgsautil forceSync -a galsync@ks.com.ua -n zimbra
, где zimbra - имя источника данных для внутреннего GAL. И так как у нас все записи GAL видно из любого домена, данную команду нужно выполнить для каждого домена. Или тупо подождать, пока само не просинхронизируется (настройка GAL домена).

Кстати, есть простой вариант, который мне, например, подходит. Как я сделал: в домене ks.com.ua сделал учетку addr@ks.com.ua, пошарил ее адресную книгу всем на чтение. Вношу адреса в нее, а ее подключаю в учетках пользователей. Таком образом пользователям доступен GAL и подключенная адресная книга addr@ks.com.ua. На этапе переезда, если он будет, нашей системы из 900 адресов на zimbra это может быть промежуточным решением до того, как все контакты появятся в GAL. Кроме того книга addr@ks.com.ua организована древовидно, что удобно.

Ну а теперь по поводу того, как нам свою влить сюда.
Нашел такую утилиту, как http://ldap-csvexport.sourceforge.net. Я тут как раз собирался начать изучать perl, так вот код скрипта очень красивый, как для perl :).

./ldap-csvexport.pl -H ip_old_ldap_server -a ou,cn,sn,givenName,title,mail -b dc=ks,dc=com,dc=ua > ldap.csv

В получившемся ldap.csv меняем первую строку

"ou";"cn";"sn";"givenName";"title";"mail"

на строку

"department";"fullName";"lastName";"firstName";"jobTitle";"email"

и удаляем из файла ненужный нам мусор:

cat ldap.csv | grep -v '"";"";""' > ldap-mod2.csv

После сей замечательное процедуры в пользователе адресной книги создаем каталог, куда импортируем файл ldap-mod2.csv. Шарим этот каталог и отдаем в работу.
Нужно учитывать, что данная адресная книга ВРЕМЕННАЯ, так как там все в одной куче.
По мере создания учетных записей будет актуальная GAL, ну и адресную книгу лучше сделать по человечески. В этой все в куче.

################################################
5. ЗАПРЕТ ПОЛЬЗОВАТЕЛЮ МЕНЯТЬ СВОИ РЕКВИЗИТЫ
################################################

Тут такое дело. В адресной книге юзер ничего не поменяет. Но может поменять в своем ящике в настройках. Но на что это влияет я не понял. Вбил Иванову в настройках полный бред и отправил на Петрова. И порадовался. Ибо отправителя Петров увидел так, как написано в адресной книге.

################################################
6. ДОСТУП К ЯЩИКАМ И ПИСЬМАМ ПРИ
НЕОБХОДИМОСТИ БЕЗ УЧАСТИЯ ПОЛЬЗОВАТЕЛЯ
################################################

Ну это просто какая-то прелесть :)
Вообще все просто проще некуда.
Идем в управление учетными записями, щелкаем на интересующей правой кнопкой мышки, выбираем "Просмотр почты" И ВСЕ!!!!! 

################################################
7. ГЛОБАЛЬНОЕ УПРАВЛЕНИЕ НАСТРОЙКАМИ ДОМЕНОВ
################################################

Делается  это все через классы обслуживания, или COS(Class of Service) и сами домены, к которым привязывается COS. Плюшек там много, и ими надо пользоваться.
Самое приятное, что можно сделать при помощи COS:
--- настроить в COS квоту пользователя и привязать COS к домену. Теперь все, кто в нем создается имеют квоту из COS.
--- настроить доступные протоколы(IMAP, POP), зимлеты, задачи(почта, календарь, ежедневник, настройки). Вот уберешь галочку с настроек, и будет пользователь горько плакать, ибо из у него не будет.
--- можно запретить создавать общие ресурсы.
--- настроить темы, периодичность проверки почты, проверку орфографии...
--- и еще много-много всякой полезной всячины.

Осадок в душе оставило то, что я не смог поменять COS на домена. Черег GUI получил ошибку, через zmprov не нашел возможности. Но она есть, просто я бросил искать, ибо не приоритет.

А нет, вот нужда заставила. Оказывается ошибка при смене cos через gui тянется еще с 8.5 версии. Засранцы, до сих пор не полатали. А исправить можно так. например на домен co.ks.com.ua нужно поставить cos all:

[zimbra@zimbra ~]$ zmprov gc all | grep zimbraId
zimbraId: e3793f8c-6853-4cfb-9bb9-97114b8a5ffb
zimbraIdentityMaxNumEntries: 20
[zimbra@zimbra ~]$ zmprov md co.ks.com.ua zimbraDomainDefaultCOSId e3793f8c-6853-4cfb-9bb9-97114b8a5ffb

Однако бубен, однако работает :)

################################################
8. ВОЗМОЖНОСТЬ ЗАЧИСТКИ СТАРОЙ ПОЧТЫ
ПО ОПРЕДЕЛЕННЫМ ПРАВИЛАМ
################################################ 

В настройках COS есть такая фишка, как "политики сохранения". Такие же есть на глобальном уровне. Там можно настроить, сколько может жить сообщение. По окончанию срока жизни сообщение удаляется. Это все. Если нужно что-то большее - сами, сами, ручками, скриптиками, костыликами, думайте...

################################################
10. РАСШИРЕНИЕ РАЗДЕЛА CENTOS
################################################

[root@zimbra /]# export http_proxy=http://10.11.11.70:3128
[root@zimbra /]# umount /dev/xvdb1
[root@zimbra /]# yum install parted
[root@zimbra ~]# parted /dev/xvdb
GNU Parted 2.1
Используется /dev/xvdb
Добро пожаловать в GNU Parted! Наберите 'help' для просмотра списка команд.
(parted) print                                                           
Модель: Виртуальное блочное устройство Xen (xvd)
Диск /dev/xvdb: 26,8GB
Размер сектора (логич./физич.): 512B/512B
Таблица разделов: msdos

Номер  Начало  Конец   Размер  Тип      Файловая система  Флаги
 1     1049kB  10,7GB  10,7GB  primary  ext4

(parted) resize 1
Конец? 26,8GB                                                            
(parted) quit                                                            
Информация: Не забудьте обновить /etc/fstab.                             

Попробовали, нихрена не сработало. Оказывается parted до сих пор не поддерживает ext4.

А потом когда баловался в resize2fs и fdisk раздел был успешно пересоздан вот этими самыми кривыми руками :( Так что сейчас займусь восстановлением, а потом продолжим.

КАРОЧИ!!!! ТУПО БЕРЕМ LIVE DVD OPENSUSE, ГРУЗИМСЯ С НЕГО И МЕНЯЕМ РАЗМЕР РАЗДЕЛА. ВСЕГДА РАНЬШЕ ТАК ДЕЛАЛ И НЕ БЫЛО НИ ОДНОЙ ОСЕЧКИ!!!НЕ ЗАБЫВАЕМ ПЕРЕД ЭТИМ СДЕЛАТЬ БЭКАП РАЗДЕЛА!!!!

################################################
11. СПИСКИ РАССЫЛОК
################################################

Создаются в админке. Автоматом из всех конечно из нашего постфикса туда не перефигачишь, но в принципе при желании за полчасика активного кнопконажимательства и мышкодвиганья это реально сделать.
Важный момент - предлагаю делать списки рассылки в самом вышестоящем домене(это логично, ибо ими пользуются все домена и в адресном пространстве такая логика правильно), а для обратной совместимости делать на них псевдонимы на старые адреса.

################################################
12. ОБРАБОТКА ЗАГОЛОВКОВ ПИСЕМ НА УРОВНЕ MTA
################################################

В postfix у нас есть такой замечательный файлик /etc/postfix/header_checks, в котором настроено перекидывание банковских выписок. Цель - получить аналогичное в zimbra.
В zimbra используется postfix, но файлы конфигурации его динамические и при выполнении команды

zmmtactl reload

перетираются неизвестнооткудаберущимися.

Соответственно напрямую менять параметры postfix бессмыссленно.
Нас интересует параметр header_checks. Вот как мы его можем посмотреть:

[zimbra@zimbra ~]$ zmprov gacf | grep zimbraMtaHeaderChecks
zimbraMtaHeaderChecks: pcre:/opt/zimbra/conf/postfix_header_checks

А вот что в зимбровском постфиксе:

[root@zimbra conf]# /opt/zimbra/postfix/sbin/postconf header_checks
header_checks =

Как видим, настройки отличаются.

Логично предположить, что раз указывается на файл, то если таковой будет в наличии, то перетираться он не будет, а будет использоваться по прямому назначению.
Создаем файл /opt/zimbra/conf/header_checks, заполняем его и меняем настройку:

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaHeaderChecks regexp:/opt/zimbra/postfix/conf/header_checks
[zimbra@zimbra conf]$ zmprov mcf zimbraMtaBlockedExtensionWarnRecipient FALSE
[zimbra@zimbra conf]$ zmmtactl reload
[root@zimbra conf]# /opt/zimbra/postfix/sbin/postconf header_checks
header_checks = regexp:/opt/zimbra/postfix/conf/header_checks 

Ты гля, совпало... И, кстати, заработало. Так что радуемся. 

Ну и еще, у нас настроен дубляж почты по адресам отправителей/получателей на отдельные архивные ящики, которые частенько используются для разбора полетов. Для этого используются параметры
recipient_bcc_maps=hash:/etc/postfix/bcc_maps_r
sender_bcc_maps=hash:/etc/postfix/bcc_maps_s
, это на старом сервере. Переносим аналогичную настройку на новый.
Первым делом копируем соответствующие файлы (bcc_maps_r, bcc_maps_s) со старого сервера (/etc/postfix/) на новый (/opt/zimbra/postfix/conf)
После чего

[zimbra@zimbra ~]$ zmlocalconfig -e postfix_recipient_bcc_maps = lmdb:/opt/zimbra/postfix/conf/bcc_maps_r
[zimbra@zimbra ~]$ zmlocalconfig -e postfix_sender_bcc_maps = lmdb:/opt/zimbra/postfix/conf/bcc_maps_s
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/bcc_maps_r
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/bcc_maps_s

Ну и после этого еще одну неправильную вещь. Редактируем файл /opt/zimbra/conf/zmconfigd.cf.
В секцию "SECTION mta DEPENDS amavis" перед строкой "RESTART mta" добавляем две строки:

POSTCONF recipient_bcc_maps     lmdb:/opt/zimbra/postfix/conf/bcc_maps_r
POSTCONF sender_bcc_maps     lmdb:/opt/zimbra/postfix/conf/bcc_maps_s

и делаем zmmtactl reload.

ВНИМАНИЕ!!! При обновлении zimbra файл zmconfigd.cf с вероятностью 99% будет ликвидирован и заменен на новый. Но другого способа как сделать то, что я хотел, я не нашел!!! Это надо учитывать при обновлении. Указанное выше применение zmlocalconfig вроде как должно не дать поломаться системе при обновлении, но проверить пока не могу - нечего обновлять.

################################################
13. АНТИВИРУСНАЯ ЗАЩИТА
################################################

Не мудрствуя лукаво ZIMBRA, как и я ( :) ) использует clamav, только не через clamsmtpd, а через amavisd. Но не суть. Единственное, что нам надо сделать, это настроить прокси для freshclam для обновления антивирусных баз. Почему-то системные настройки proxy freshclam использовать упорно не хочет.
Для этого редактируем файл /opt/zimbra/conf/freshclam.conf.in (freshclam.conf будет перетерт им при перезапуски антивируса). В файле меняем настройки прокси (HTTPProxyServer, HTTPProxyPort) и перезапускаем антивирусную защиту.

[zimbra@zimbra ~]$ zmantivirusctl restart 

################################################
14. МАРШРУТИЗАЦИЯ ПОЧТЫ НА
УРОВНЕ ПОЧТОВЫХ ЯЩИКОВ
################################################

Собственно в чем суть. Адресов и доменов дофига, и переезд на зимбру планируется сделать плавный и постепенный. Когда мы переезжали на cyrus-imapd, postfix через transport был настроен на ручную маршрутизацию. То есть например, Васю Пупкина отправляем на хост такой-то, Папу Курицина туда-то, всех остальных в сад, то есть на третий сервер. Так постепенно все и переехали. Здесь мне надо так-же. Так как постфикс тут с шифрами, то посмотреть настройки transport можно так:

[zimbra@zimbra ~]$ zmprov gacf | grep zimbraMtaTransportMaps
zimbraMtaTransportMaps: proxy:ldap:/opt/zimbra/conf/ldap-transport.cf
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf transport_maps     
transport_maps = proxy:ldap:/opt/zimbra/conf/ldap-transport.cf

Настраиваем зимбропостфикс на использование /opt/zimbra/postfix/conf/transport, такой родной и привычный:

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaTransportMaps "proxy:ldap:/opt/zimbra/conf/ldap-transport.cf, lmdb:/opt/zimbra/postfix/conf/transport"
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/transport
[zimbra@zimbra ~]$ zmmtactl reload

Теперь так. У нас есть домен co.ks.com.ua на старом сервере. Такой же на новом сервере. Шо робыть???
На старом сервере понятно: адрес, который переехал на новый сервер пробиваем в transport таким вот образом:

address1@co.ks.com.ua smbt:ip_of_new_server_zimbra

А вот что на зимбре??? Там у нас будет так:

co.ks.com.ua          smtp:ip_of_old_server_postfix
fa@co.ks.com.ua       local:zimbra

Теперь по мере переезда адресов подрихтовываем файлы transport на обеих серверах. Когда все переедет, соответствующие записи в transport на зимбре просто удалим.

Не забываем после изменения transport делать postmap и zmmtact.

И еще весьма мутный момент. Например, есть домен gs.ks.com.ua и алиас на него gs.old.some.com.ua. Мы их создали в zimbra и начали перенос ящиков. НО. Как оказалось, алиасы отрабатывают РАНЬШЕ правил в transport. То есть приходит нам письмо со старого сервера от user@gs.old.some.com.ua и мы на него отвечаем. При этом в transport прописан маршрут, куда ехать smtp для данного домена. Но он не срабатывает, мы получаем ошибку, что ящик user@gs.ks.com.ua не существует. Перечитайте еще раз, тут надо прочувствовать. И вот как нам иметь ящики домена gs.old.some.com.ua на старом сервере, а алиас в zimbra?

Наверное сделаем так. Алиасы переименовываем по принципу такому:

zmprov -l rd gs.old.some.com.ua temp.gs.old.some.com.ua

Как только домен переедет целиком, алиас вертаем в зад. Зимбру настраиваем на использование алиасов постфикса:

[zimbra@zimbra ~]$ zmprov gacf zimbraMtaAliasMaps
[zimbra@zimbra ~]$ zmprov mcf zimbraMtaAliasMaps "lmdb:/etc/aliases, lmdb:/opt/zimbra/postfix/conf/ali4migrate"
[zimbra@zimbra ~]$ touch /opt/zimbra/postfix/conf/ali4migrate
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postalias /opt/zimbra/postfix/conf/ali4migrate
[zimbra@zimbra ~]$ zmmtactl reload

Теперь на сервере зимбры для учетки, которая меняет доменное имя при переезде добавляем
в ali4migrate:

fname.lname:        fname.lname@gs.ks.com.ua

в transport:

fname.lname@gs.ks.com.ua                  local:zimbra
fname.lname@gs.old.some.com.ua             local:fname.lname

Применяем изменения:
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postalias /opt/zimbra/postfix/conf/ali4migrate
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/transport
[zimbra@zimbra ~]$ zmmtactl reload

Теперь на сервере, где живет gs.old.some.com.ua

в ali4migrate:

fname.lname:    fname.lname@gs.ksoe.com.ua

в transport:

fname.lname@gs.old.some.com.ua         local:fname.lname

Далее дописано 2015.04.29

Когда у меня по указанным выше правилам ничего не получилось с некоторыми адресами, т.к. я начал получать ошибку


: mail forwarding loop for
    nach_insp@gs.....ua



я нашел другой способ. Он как всегда немного неправильный с точки зрения того, что при обновлении версии zimbra придется все повторять ручками, как в обработках заголовков MTA, но на форуме сами разрабы рекомендуют так делать, но предупреждают о том же.

Обходимся без всяких алиасов, транспортов и т.д.

[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf smtpd_recipient_restrictions
smtpd_recipient_restrictions = reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, check_recipient_access lmdb:/opt/zimbra/postfix/conf/recipient_redirect, permit

Редактируем файл/opt/zimbra/conf/zmconfigd/smtpd_recipient_restrictions.cf. ПЕРВОЙ строкой (чтобы обрабатывалось раньше всех) добавляем:

check_recipient_access lmdb:/opt/zimbra/postfix/conf/recipient_redirect

[zimbra@zimbra ~]$ touch /opt/zimbra/postfix/conf/recipient_redirect

В recipient_redirect добавляем примерно следующее

nach_insp@gs.....ua   REDIRECT  someothermail@fff.com

[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap -v /opt/zimbra/postfix/conf/recipient_redirect
[zimbra@zimbra ~]$ zmmtactl reload
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf smtpd_recipient_restrictions
smtpd_recipient_restrictions = check_recipient_access lmdb:/opt/zimbra/postfix/conf/recipient_redirect, reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unlisted_recipient, reject_invalid_helo_hostname, reject_non_fqdn_sender, permit

Вроде как настройки применены.

Далее дописано 2015.06.09

Вылезла очередная фигня. Предыдущая настрока не устраивает, потому что оказалось, что: если пользователь отправляет письмо на двух адресатов, один из которых перечислен в файле recipient_redirect, то письмо получит только он, второй получатель не получит ничего, ибо письмо уже было ПЕРЕНАПРАВЛЕНО перечисленному. И вот тут я не могу понять, то ли это баг, то ли это фича :) Фак в том, что пользователи у меня не всегда гарантировано получают почту, и это плохо...

Попробуем еще по другому сделать.

Смотрим следующие настройки:

[zimbra@zimbra ~]$ zmprov gacf | grep zimbraMtaVirtualAliasMaps
zimbraMtaVirtualAliasMaps: proxy:ldap:/opt/zimbra/conf/ldap-vam.cf
или так
[zimbra@zimbra ~]$ zmprov gacf zimbraMtaVirtualAliasMaps
zimbraMtaVirtualAliasMaps: proxy:ldap:/opt/zimbra/conf/ldap-vam.cf

Меняем:

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaVirtualAliasMaps "proxy:ldap:/opt/zimbra/conf/ldap-vam.cf, lmdb:/opt/zimbra/postfix/conf/virtual"

В /opt/zimbra/postfix/conf/virtual добавляем запись:
oldmail@olddomain.com     newmail@newdomain.com

Выполняем:

[root@zimbra ~]# chown zimbra:zimbra /opt/zimbra/postfix/conf/virtual
[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postmap /opt/zimbra/postfix/conf/virtual
[zimbra@zimbra ~]$ zmmtactl reload

################################################
15. ДОСТУП ПО HTTP/HTTPS
################################################

По умолчанию работает только по https. Включаем http и https вместе:

[zimbra@zimbra ~]$ /opt/zimbra/bin/zmtlsctl both
[zimbra@zimbra ~]$ zmcontrol stop
[zimbra@zimbra ~]$ zmcontrol start

Фигня в том, что при доступе по http нужно указывать порт 8080, а нам не хочется.
Но нам, по ходу, придется.

################################################
17. ПЛАН ПЕРЕЕЗДА ОТДЕЛЬНЫХ ПОЧТОВЫХ ЯЩИКОВ
################################################

1. На сервере zimbra создаем новый почтовый ящик. При создании МАКСИМАЛЬНО заполняем все атрибуты. Особенно внимание к ФИО, ОТОБРАЖЕНИЕ, ДОЛЖНОСТЬ, ОТДЕЛ, ОРГАНИЗАЦИЯ, ТЕЛЕФОН ВНУТРЕННИЙ И ВНЕШНИЙ. Основой для заполнения реквизитов являютпя ПК "Кадры" и "Зарплата", телефонный справочник. Безликие адреса, типа bt-01@ss.gg.tt выясняем с пользователями, такие адреса либо сервисные, то есть официальные, либо персональные, но сделанные через жопу в старые добрые времена, когда все делалось через жопу. Если ящик сервисный или официальный, так и оставляем, если черезжопный, делаем нормальный адрес, а этот оставляем синонимом на него. В качестве образца спросите меня какой ящик использовать.
2. В адресной книге addr@ksoe.com.ua создаем соответствующие контакт в соответствующей ветке дерева отделов. При создании МАКСИМАЛЬНО заполняем все атрибуты (смотри п.1). ВНИМАНИЕ!!! В адресной книге атрибутов больше, на ее основе будет составляться динамическая подпись. В качестве образца спросите меня какой ящик использовать.
3. Во временной импортированной адресной книге соответствующий контакт удаляем.
4.1. Если домен ящика не меняется, то в файлах transport старого и нового сервера вносим изменения:
на старом (/etc/postfix/transport)сервере добавляем:
address@co.ks.com.ua               smtp:10.11.11.84
на новом(/opt/zimbra/postfix/conf/transport) сервере добавляем:
address@co.ks.com.ua       local:zimbra
4.2 Если домен ящика меняется(например с aaa@gs.ks.old.somedomain.com.ua на aaa@gs.ks.com.ua ), то
на старом (/etc/postfix/transport) добавляем:
aaa@gs.ks.old.somedomain.com.ua         local:aaa
на старом (/etc/postfix/ali4migrate) добавляем:
aaa:    aaa@gs.ks.com.ua
на новом (/opt/zimbra/postfix/conf/transport)
aaa@gs.ks.old.somedomain.com.ua         local:aaa
aaa@gs.ks.com.ua                              local:zimbra
на новом (/opt/zimbra/postfix/conf/ali4migrate)
aaa:                    aaa@gs.ks.com.ua
5. На компе пользователя при помощи thunderbird переносим почту на новый сервер.

################################################
18. НАСТРОЙКА НЕСКОЛЬКИХ ПОЧТОВЫХ ЯЩИКОВ
НА ОДНОМ РАБОЧЕМ МЕСТЕ
################################################

В принципе настройки все делаются через вкладку "НАСТРОЙКИ", ну а как еще. Пользоваться только неудобно получается. Но ко всему можно привыкнуть. Минус в том, что видно все папки учетки, включая адресные книги, в том числе подключенные общие ресурсы. И отписаться от них, несмотря на то, что адрес настраивается как внешний IMAP, возможности нет. Но, опять же, все это можно терпеть.

Настройки работы с несколькими почтовыми ящиками тут оригинальные. Варианта 3, все есть в теме http://community.zimbra.com/collaboration/f/1886/t/1138637.
1. Подключать ящики как внешние IMAP. Вариант настолько кривой, шопипец. Во первых, сжирается квота твоего ящика, так как зимбра синхронизирует внешние ящики с твоим. Соответственно в твоем ящике будет сожрано ровно чтолько, сколько в присоединенных внешних IMAP. Кроме того этим неудобно пользоваться. Кроме того череж задницу организована проверка почты.
2. Создавать псевдонимы(алиасы), состоящие из ящиков, которые должны быть в одном профиле. Пока не попробовал, но там по ходу аналогичная шняга с квотой, как во внешних IMAP ящиках.
3. В ящике, который должен быть присоединен, нарезаются доступы на конкретные папки конкретным пользователям. И эти папки присоединяются в конкретные ящики. Есть минус - нельзя пошарить весь ящик целиком, соответственно если на рабочем месте, где присоединяемый ящик является основным, создали папку и не пошарили ее, то никто больше эту папку не увидит.

Как по мне, то третий вариант наиболее нормальный. У нас есть официальные ящики, их никому не ставить, а только подключать папками. Ну и в профиле пользователей посоздавать образов для нескольких подписей. чтоб от разных ящиков могли почту отправлять.

################################################
19. ПОНЯТНОЕ РЕЗЕРВНОЕ КОПИРОВАНИЕ
################################################


С понятным резервным копированием тяжело. Для community версии ничего толкового не нашел. В вики есть куча вариантов, но все они основаны на остановке сервисов зимбры и либо копирования всего тома целиком, либо его синхронизации, либо упаковке и копировании и т.д. Самое неприятное, что сервисы нужно останавливать. В нашем случае с планируемыми объемами хранения бэкап будет делаться долго, а не работать система долго (более часа) не может. Так что есть 2 варианта:
1. Резервное копирование виртуальной машины целиком на ходу.
2. Тупая упаковка /opt/zimbra тоже на ходу.
Совместив эти два незатейливых способа мы можем добиться желаемого результата. Для восстановления системы целиком подойдет способ 1, для восстановления отдельных писем - способ 2.
Есть еще 3-й вариант - сделать самому нечто человеческое. Но это тот еще факультативчик,  из разряды былобыуменянемеряновремени...
Полезности:
https://wiki.zimbra.com/wiki/Zimbra_DR_Strategy

################################################
20. ИЗМЕНЕНИЕ ДОПУСТИМЫХ РАЗМЕРОВ
ПИСЕМ И ВЛОЖЕНИЙ
################################################

[zimbra@zimbra ~]$ /opt/zimbra/postfix/sbin/postconf message_size_limit
message_size_limit = 10240000
[zimbra@zimbra ~]$ zmprov gacf zimbraMtaMaxMessageSize
zimbraMtaMaxMessageSize: 10240000
[zimbra@zimbra ~]$ zmprov gacf zimbraFileUploadMaxSize
zimbraFileUploadMaxSize: 10485760
[zimbra@zimbra ~]$ zmprov gacf zimbraMailContentMaxSize
 zimbraMailContentMaxSize: 10240000
[zimbra@zimbra ~]$ zmprov gs zimbra.ks.com.ua | grep zimbraFileUploadMaxSize
zimbraFileUploadMaxSize: 10485760
[zimbra@zimbra ~]$ zmprov gs zimbra.ks.com.ua | grep zimbraMailContentMaxSize
zimbraMailContentMaxSize: 10240000

[zimbra@zimbra ~]$ zmprov mcf zimbraMtaMaxMessageSize 38912000
[zimbra@zimbra ~]$ zmprov mcf zimbraFileUploadMaxSize 15360000
[zimbra@zimbra ~]$ zmprov mcf zimbraMailContentMaxSize 38912000
[zimbra@zimbra ~]$ zmprov ms zimbra.xoe.com.ua zimbraFileUploadMaxSize 15360000
[zimbra@zimbra ~]$ zmprov ms zimbra.xoe.com.ua zimbraMailContentMaxSize 38912000
[zimbra@zimbra ~]$ zmcontrol restart


################################################
АВТОМАТИЧЕСКАЯ ПОДПИСЬ С РЕКВИЗИТАМИ
ПОЛЬЗОВАТЕЛЯ, ПРЕДПРИЯТИЯ, ЛОГОТИПОМ,
ФОРМИРУЕМАЯ НА ОСНОВЕ АДРЕСНОЙ КНИГИ
################################################

Есть статейка (http://wiki.zimbra.com/index.php?title=Setting_automatic_Default_Signature, https://wiki.zimbra.com/wiki/Mail_signatures_with_images), в которой дается bash скрипт, который, как я понял, для всех учеток выставляет сигнатуры разово. То есть при добавлении, изменении и т.д. скрипт нужно прогонять по новой. Манипулирует он параметрами zimbraPrefMailSignatureEnabled, zimbraPrefMailSignatureStyle, zimbraPrefMailSignature.
Запоминаем это как вариант, хоть и весьма похожий на костыль. И ищем дальше.

В официальной доке есть раздел "Enabling Support for Domain Disclaimers".

Нужно нам будет настроить автоматическую подпись для писем. Для начала включаем эту фичу:

zmprov mcf zimbraDomainMandatoryMailSignatureEnabled TRUE

Потом при помощи команд

zmprov mcf zimbraDomainMandatoryMailSignatureText
zmprov mcf zimbraDomainMandatoryMailSignatureHTML

можно будет ее поднастроить.

Попробуем для домена co.ks.com.ua.... Описывать не буду - попробовал... Не пойдет - подпись статичная, со сложным html не получилось.

Ищем дальше.

А давай ка я напишу в community.zimbra.com...
Сказано - сделано:

http://community.zimbra.com/collaboration/f/1886/t/1138680

Время прошло, а никто так и не помог. Так что нашел статейку (https://wiki.zimbra.com/wiki/Setting_automatic_Default_Signature), на базе которой придется делать свой скрипт, который по счедулеру будет устанавливать подпись учетным записям.

################################################
ПЛАН ПЕРЕЕЗДА
################################################

050. Создаем все домены и псевдонимы доменов (п.1).Из-за кривизны GUI, COS назначаем через CLI (п.7) каждому домену.

070. Настраиваем маршрутизацию почты (п.14).
100. Переносим адресную книгу (п. 4).

200. Переносим списки рассылки (п. 11).


300. Переносим обработку заголовков header_checks и bcc_maps (п. 12).

400. Переносим поочередно учетные записи (п.17).



Читать далее