NEM 가이드

NEM은 Nativ Environment Manager의 약어입니다.

이 섹션에서는 새로운 기능 및 구성의 개발과 테스트를 지원하는 데 필요한 속도를 유지하면서 Flex Enterprise 시스템에서 최적의 서비스 레벨을 제공하려면 사용하는 것이 좋은 기술과 프로세스를 소개합니다. Nativ는 표준 Linux 및 맞춤형 도구의 조합을 사용하여 Flex 배포와 구성을 관리합니다.

구성 요소

기본적으로는 모든 당사자가 공유하는 수정 제어 시스템을 통해 NEM(Native Environment Manager)으로 관리하는 시스템을 유지 관리합니다. 이 경우 다음과 같은 이점이 제공됩니다.

• 중앙 집중식 확정 정의: 최신 버전으로 간주되는 정의 또는 라이브 버전으로 적합한 버전을 선택하는 과정의 모호성이 감소합니다.

• 감사 추적: 모든 변경 내용이 중앙 리포지토리에 저장되어야 하며 변경 로그 항목을 포함해야 하므로 문제를 쉽게 분리할 수 있습니다. NEM 및 기타 필수 도구는 아래 요구 사항 섹션에 자세히 나와 있는 Linux(Ubuntu 및 Red Hat) 패키지를 통해 설치됩니다.

• 현재 널리 활용되고 있으며 세분화된 액세스 제어 기능을 제공하는 Subversion 수정 제어 시스템이 사용됩니다. 대부분의 작업은 트렁크에서 수행되지만, 새 웹 어플리케이션 테스트와 같은 실험적 작업의 경우에는 NEM 정의 분기가 생성될 수 있습니다.

Apache Ant를 통해 Subversion에 저장된 정의를 대상 파일 시스템에 빌드합니다. Apache Ant가 선택된 이유는 단순한 템플릿을 지원하며 개발자들에게도 어느 정도 인지도가 있기 때문입니다.

버전 5.0.X에서 5.1.X로 업그레이드

Flex 버전 5.1.0에는 메타데이터 필드의 주석, 상호 종속적 필드, LDAP 통합, 데이터 소스 시간 지정 동작, Flex 개체, 스크립팅 API의 주요 변경 내용 등 다양한 새 기능이 도입되었습니다. 5.0.x 시리즈에서 현재 사용 중인 Flex 기능에 따라서는 업그레이드 과정이 부 버전 간의 업그레이드보다 약간 더 복잡할 수도 있습니다.

업그레이드를 빠르고 효율적으로 완료하려면 Nativ에 문의하세요. 구성에 필요한 변경 내용을 확인하여 Flex 사용 방식에 맞는 마이그레이션 전략을 제공해 드립니다.

NEM 구현

NEM 시스템의 NEM 시작 상태에서는 아무 서비스도 실행되지 않으며 '/nem' 디렉터리가 비어 있습니다. 다음 목록에서는 NEM에서 수행할 수 있는 전환에 관해 설명합니다. 부록 섹션의 다이어그램에도 가능한 상태 및 전환이 표시되어 있습니다.

자산 다운로드

• 필수 자산은 라이브러리를 호출하는 맞춤형 NEM 코드를 사용하여 로컬에 복사됩니다.

• Subversion, HTTP 및 로컬 파일이 지원됩니다.

• 이 전환 중에 발생하는 오류는 대개 네트워킹 문제로 인한 것입니다.

빌드

Apache Ant는 자산을 적절한 위치로 이동합니다.

Ant가 0이 아닌 상태로 종료되면 이 전환은 실패합니다.

배포의 이 단계에서만 구성이 적용됩니다.

그러나 이 단계에서 작성된 구성에서 이후 상태를 읽습니다.

 

enable

• ‘/nem/nem.conf’ meta-service의 서비스 종속성을 재귀적으로 찾은 다음 적절하게 활성화합니다.

• 일반적으로는 enable이 시작 프로세스이지만, NFS 마운트를 활성화하고, 데이터베이스 상태를 확인하고, 사용자를 추가할 수도 있습니다.

참고: Flex 배포의 일부분으로 NEM은 UID가 25001인 'mio' 사용자를 생성합니다. 이 사용자가 Flex 프로세스의 소유자가 됩니다. 네트워크 공유를 사용할 때는 이 사용자가 해당 공유를 읽고 공유에 쓸 수 있는지 확인해야 합니다.

Disable

• ‘/nem/nem.conf’ meta-service의 모든 종속성을 비활성화합니다. 예를 들면 다음과 같습니다. 프로세스가 종료되고 마운트, 사용자 및 Apache 호스트가 제거됩니다.

Destroy

• '/nem/'을 정리하고 시스템을 시작 상태로 되돌리기 위해 업그레이드의 일부분으로 수행됩니다.

버전 5.1에는 별도의 TRIGGER 권한이 도입되어 MySQL에서 버그가 발생합니다(http://bugs.mysql.com/bug.php?id=39489). 이 버그로 인해 슬레이브로 복제하는 경우와 같이 이진 로깅을 활성화한 상태에서 MySQL 인스턴스에 관해 트리거를 생성하려고 하면 오류 메시지가 표시됩니다. MySQL 구성 파일에 다음 줄을 추가하면 이 문제를 해결할 수 있습니다.

NEM 설치

Red Hat

먼저 Nativ 리포지토리를 추가합니다.

[root@localhost ~]# tee /etc/yum.repos.d/ns.repo <<EOF

[ns]

name=Red Hat Enterprise Linux 6Server - $basearch - Source

baseurl=http://packages.nativ-systems.com/redhat/ns/6Server/$basearch/

enabled=1

gpgcheck=0

EOF

 

 

Oracle Java 7은 필수 구성 요소이며 다음 Nativ 리포지토리에서 설치할 수 있습니다.

[root@localhost ~]# tee /etc/yum.repos.d/java7.repo <<EOF

[java7]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=http://packages.nativ-systems.com/redhat/java7/$releasever/$basearch/

enabled=1

gpgcheck=0

EOF

참고: EPEL 리포지토리는 이미 사용 가능한 상태라고 가정하므로, 이제 NEM 및 Oracle Java를 설치할 수 있습니다.

[root@localhost ~]# yum install nativsystems-environment-manager-agent jdk

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.ukfast.co.uk

* epel: epel.check-update.co.uk

* extras: mirror.econdc.com

* updates: centos.mirroring.pulsant.co.uk

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package jdk.x86_64 2000: 1.7.0_40 will be installed

---> Package nativsystems-environment-manager-agent.i686 0:0.1-97.el6 will be installed

Transaction Summary

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

Install 69 Package(s)

Upgrade 1 Package(s)

Total download size: 164 M

Is this ok [y/N]: y

Downloading Packages:

(1/70): alsa-lib-1.0.22-3.el6.x86_64.rpm | 370 kB 00:00

Complete!

[root@localhost ~]#

Ubuntu

root@ip-10-9-5-22:~# wget -qO - http://packages.nativ-systems.com/keys | sudo apt-key add -

OK

root@ip-10-9-5-22:~# echo deb http://packages.nativ-systems.com/ stable ns | sudo tee -a /etc/apt/sources.list

deb http://packages.nativ-systems.com/ stable ns

root@ip-10-9-5-22:~# sudo apt-get update

Ign http://us-west-2.ec2.archive.ubuntu.com trusty InRelease

Ign http://us-west-2.ec2.archive.ubuntu.com trusty-updates InRelease

Hit http://us-west-2.ec2.archive.ubuntu.com trusty Release.gpg

Hit http://us-west-2.ec2.archive.ubuntu.com trusty-updates Release.gpg

(...)

Ign http://packages.nativ-systems.com stable InRelease

Ign http://security.ubuntu.com trusty-security InRelease

Hit http://packages.nativ-systems.com stable Release.gpg

Hit http://security.ubuntu.com trusty-security Release.gpg

Hit http://packages.nativ-systems.com stable Release

Hit http://security.ubuntu.com trusty-security Release

Hit http://packages.nativ-systems.com stable/ns amd64 Packages

(...)

Fetched 15.9 MB in 9s (1,623 kB/s)

Reading package lists... Done

root@ip-10-9-5-22:~# apt-get install nativsystems-environment-manager-agent

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following extra packages will be installed:

(...)

The following NEW packages will be installed:

ant ant-optional apache2 apache2-bin apache2-data ca-certificates-java cifs-utils

(...)

nativsystems-environment-manager-agent nfs-common odbcinst odbcinst1debian2 openjdk-7-jre-headless oracle-java7-bin oracle-java7-jdk oracle-java7-jre

(...)

1 upgraded, 89 newly installed, 0 to remove and 66 not upgraded.

Need to get 187 MB of archives.

After this operation, 404 MB of additional disk space will be used.

Do you want to continue? [Y/n] Y

Get:1 http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty/main libapr1 amd64 1.5.0-1 [85.1 kB]

(...)

done.

참고: Flex 5.1.0을 설치하려면 NEM 버전 0.1.4 이상이 필요합니다.

NEM 구성

$ sudo vim /etc/nem-upgrade.conf

구성 및 정의 URL을 추가합니다.

[nem]

definition=svn https://nem.mio:XXXXXXX@repository.nativ-systems.com/svn/nem/projects/mio/platform/branches/MIO-Prod

configuration=file:///etc/mio.conf

저장한 후 종료합니다.

환경 구성

구성 파일은 환경당 하나씩 만들어야 합니다. 이러한 구성은 최소한으로 수행해야 합니다. 일반적으로는 매우 많은 구성 파일 번들이 프로젝트와 연결되지만, 환경 간에 실제로 변경되는 내용은 많지 않습니다. 예를 들면 다음과 같습니다. 환경 간에 데이터베이스 호스트가 다르므로 해당 내용을 구성 파일에 포함해야 합니다. 그러나 Tomcat 포트는 모든 환경에서 일치해야 하므로 이러한 포트는 하드 코드 해야 합니다. 매개 변수를 구성으로 이동하면 환경 간의 차이점 수가 줄어들기 때문에 이동 작업은 최대한 지연하는 방식으로 수행해야 합니다. 구성 파일은 빌드 단계에서 Apache Ant에 제공됩니다.

인덱스

# Flex node type: master, job, index, playout or resource

nodetype=index

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. will be in the *.uat.company.com format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

# This is the same database as the master node

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses of masters (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Master

# Flex node type: master, job, index, playout or resource

nodetype=master

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. for the example below it would be in the "account.uat.company.com" format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# media is for your media files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

# You can use the 'local' option ONLY if you're running in a non-clustered, single-master environment

# filestore.mount=local

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# This is your media storage share

# - you can pass options to mount.cifs as the third argument, like in the example below

# - the uid and gid options are mandatory

# - when using newer Linux kernels you might need to use sec=ntlm to mount successfully (for example with netApp)

media.mount=cifs //10.10.20.10/media username=mio,password=pass,uid=mio,gid=mio,sec=ntlm

media.dirs=RECURSIVEWILDCARD

# Keep this set to local.

public.mount=local

public.owner=

# Subdirectory of /nem/apache/holdingpages containing a page displayed by Apache when Flex is down

holdingpages=default

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=cifs-utils,clamav

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

# SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio_intermediate.cer

SSLCertificateChainFile= # not applicable

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses for master nodes (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

# Holds IP addresses for job nodes (so that we can union with master nodes to form JGroups/Hazelcast clusters)

# If this is not defined, NEM will buildout with jobs executing on masters

job.ip.addresses=10.10.11.81,10.10.11.82

# The 'testuser' password if different from default

testuser.password=testuser

# Hibernate search

# indexing topology - 'standalone' means local indexing, 'slave' means relying on an indexing node

# If this is set to standalone or not set, NEM will buildout with indexing executing on masters

hibernate.search.index.topology=slave

# Flex Playout API settings

tv.nativ.mio.playout.api.endpoint=https://playout.uat.company.com

tv.nativ.mio.playout.api.username=testuser

tv.nativ.mio.playout.api.password=testuser

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

#

# LDAP integration

# ldap.url=ldap://ldap.server.company.com:389/

# ldap.domain=company.com

# ldap.searchbase=OU=employees,DC=company,DC=com

Job

# Flex node type: master, job, index, playout or resource

nodetype=job

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. for the example below it would be in the "account.uat.company.com" format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# media is for your media files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

# You can use the 'local' option ONLY if you're running in a non-clustered, single-master environment

# filestore.mount=local

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# This is your media storage share

# - you can pass options to mount.cifs as the third argument, like in the example below

# - the uid and gid options are mandatory

# - when using newer Linux kernels you might need to use sec=ntlm to mount successfully (for example with netApp)

media.mount=cifs //10.10.20.10/media username=mio,password=pass,uid=mio,gid=mio,sec=ntlm

media.dirs=RECURSIVEWILDCARD

# Keep this set to local.

public.mount=local

public.owner=

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=cifs-utils,clamav

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses for master nodes (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

# Holds IP addresses for job nodes (so that we can union with master nodes to form JGroups/Hazelcast clusters)

# If this is not defined, NEM will buildout with jobs executing on masters

job.ip.addresses=10.10.11.81,10.10.11.82

# Hibernate search

# indexing topology - 'standalone' means local indexing, 'slave' means relying on an indexing node

# If this is set to standalone or not set, NEM will buildout with indexing executing on masters

hibernate.search.index.topology=slave

# Flex Playout API settings

tv.nativ.mio.playout.api.endpoint=https://playout.uat.company.com

tv.nativ.mio.playout.api.username=testuser

tv.nativ.mio.playout.api.password=testuser

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Playout

# Flex node type: master, job, index, playout or resource

nodetype=playout

# ID to use for clustering.

clusterid=uatmioplayout

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=nativ

# Defines the playout domain name

domainname=playout.stage.mioeverywhere.tv

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# database config

databasehost=10.10.10.10

databasename=mioplayout

databaseuser=mioplayout_user

databasepassword=mioplayout_password

# Shared storage

# This is where the lucene playout search index is stored - needs to be accessible by all playout nodes.

lucene.mount=nfs 10.10.20.20/export/storage/playout

lucene.owner=

public.mount=local

public.owner=mio

# Web service base URL to be used by Playout Wrapper.

# This is deprecated, set it as below.

tv.nativ.mio.playout.webservices.baseurl=http://127.0.0.1:30044/webservices/

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 26

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.12.11,10.10.12.12 # comma-separated list of IP addresses of Flex Playout nodes

# sharedip.ip = 10.10.12.10 # the virtual CARP IP

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

# SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio_intermediate.cer

SSLCertificateChainFile= # not applicable

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds comma separated IP addresses of all playout nodes.

playout.ip.addresses=10.10.12.11,10.10.12.12

# Total number of search results returned by lucene

tv.nativ.mio.playout.lucene.hits.per.page=5000

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Resource

# Flex node type: master, job, index, playout or resource

nodetype=resource

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=nativ

# Master account URL

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=true

# For FTP resources set these to local

filestore.mount=local

filestore.owner=mio

incoming.mount=local

incoming.owner=mio

public.mount=local

public.owner=mio

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

#SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio.intermediate.crt

SSLCertificateChainFile = # not applicable

# Database configuration

http_databasehost=10.10.10.10

http_databasename=mio_web_upload

http_databaseuser=mio_web_upload

http_databasepassword=mio_web_upload_password

# Comma-separated list of all master nodes

master.ip.addresses=10.5.13.13,10.5.13.14

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

배포 연습

다음 예에서는 Flex Enterprise 릴리스 버전 및 해당 배포의 변경을 보여 줍니다.

Flex를 처음으로 배포하기 전에 다음 사항을 확인하십시오.

• Apache는 발신 연결을 생성할 수 있습니다. RedHand CentOS의 SELinux는 이 연결을 기본적으로 차단합니다.

• iptables는 비활성화됩니다. 기본적으로 RedHat 및 CentOS에는 제한적인 방화벽 규칙 집합이 있습니다.

Flex 서버에 로그인하여 업그레이드를 수행합니다.

$ sudo nem upgrade

INFO:root:Destroying existing environment...

INFO:root:Disabling [ucarp_01] /nem/carp/nem.conf (running)...

INFO:root:Disabled [ucarp_01] /nem/carp/nem.conf (not running)

INFO:root:Disabling [daemon_01] /nem/mio/nem.conf (running)...

WARNING:root:Still trying to kill: [daemon_01] /nem/mio/nem.conf (running)

INFO:root:Disabled [daemon_01] /nem/mio/nem.conf (not running)

INFO:root:Disabling [folder_01] /nem/public/nem.conf (running)...

INFO:root:Disabled [folder_01] /nem/public/nem.conf (not running)

...

...

INFO:root:Disabled [sql_01] /nem/db/nem.conf (running)

INFO:root:Destroying existing environment done

INFO:root:Building out new environment...

INFO:root:Checking out assets...

 

그러면 다음과 같은 질문이 표시됩니다.

"Deploying svn https://****:****@repository.nativ-systems.com/svn/path/to/sbn/branch, revision 25. Is that okay?"

이 질문에 대한 대답으로 'yes'를 선택하면 Subversion에서 선택한 분기의 최신 수정 버전이 배포됩니다. 대답으로 'no'를 선택하면 배포할 이전 수정 버전을 선택하라는 메시지가 표시됩니다. 업그레이드 프로세스가 완료되면 배포된 버전의 요약이 인쇄됩니다.

INFO:root:Checking out assets done

INFO:root:Running ant buildout...

INFO:root:Ant buildout complete

INFO:root:Tidying up checkout assets...

INFO:root:Tidying up checkout assets done

INFO:root:Building out new environment done

INFO:root:Starting new environment...

INFO:root:Enabling [meta_01] /nem/nem.conf (not running)...

INFO:root:Already enabled: [sql_01] /nem/db/nem.conf (running)

INFO:root:Enabling [users_01] /nem/users/nem.conf (not running)...

...

...

INFO:root:Enabled [meta_01] /nem/nem.conf (running)

INFO:root:Starting new environment done

INFO:root:

Deployment seems to have gone okay of:

Definition: svn https://****:****@repository.nativsystems.com/svn/nem/projects/mio/platform/branches/MIO-Maint (revision 5152)

Configuration: file:///etc/mio.conf

$

Flex 처음 배포 시 두 가지 기타 단계도 수행해야 합니다.

파일 저장소 및 미디어 네트워크 공유에 필요한 디렉터리 구조를 생성합니다. /nem/filestore/nem/media 디렉터리에서 nem run을 실행하면 이 구조를 생성할 수 있습니다. 누락된 디렉터리를 생성할지를 묻는 일련의 메시지가 표시되면 모든 질문에 대한 대답으로 'yes'를 선택합니다.

이전에 생성한 데이터베이스에 관해 SQL 스키마를 배포합니다. 자세한 지침은 아래의 데이터베이스 유지 관리를 참조하십시오.

데이터베이스 유지 관리

Flex Master는 데이터베이스에서 SQL 트리거를 사용합니다. 따라서 데이터베이스 사용자에게 TRIGGER 권한이 부여되었는지 확인해야 합니다. 이 권한은 GRANT ALL의 일부분으로 기본 부여되지 않기 때문입니다.

GRANT TRIGGER ON miomaster.* to 'miomaster'@'hostname' IDENTIFIED BY 'password';

버전 5.1에는 별도의 TRIGGER 권한이 도입되어 MySQL에서 버그가 발생합니다(http://bugs.mysql.com/bug.php?id=39489). 이 버그로 인해 슬레이브로 복제하는 경우와 같이 이진 로깅을 활성화한 상태에서 MySQL 인스턴스에 관해 트리거를 생성하려고 하면 오류 메시지가 표시됩니다. MySQL 구성 파일에 다음 줄을 추가하면 이 문제를 해결할 수 있습니다.

참고: 버전 5.1에는 별도의 TRIGGER 권한이 도입되어 MySQL에서 버그가 발생합니다(http://bugs.mysql.com/bug.php?id=39489). 이 버그로 인해 슬레이브로 복제하는 경우와 같이 이진 로깅을 활성화한 상태에서 MySQL 인스턴스에 관해 트리거를 생성하려고 하면 오류 메시지가 표시됩니다. MySQL 구성 파일에 다음 줄을 추가하면 이 문제를 해결할 수 있습니다.

log_bin_trust_function_creators = 1

데이터베이스 스키마 업데이트

NEM은 버전 5.1.0부터 Flyway(http://flywaydb.org)를 사용하여 스키마 변경 내용(데이터베이스 마이그레이션이라고도 함)을 추적합니다. 아직 변경 내용이 적용되지 않은 환경을 시작하려고 하면 다음과 같은 메시지가 표시됩니다.

INFO:root:Starting new environment...

INFO:root:Enabling [meta_01] /nem/nem.conf (not running)...

INFO:root:Enabling [flyway_01] /nem/db/nem.conf (not running)...

Command:

/usr/bin/sudo -u nem /usr/lib/jvm/java-7-oracle/bin/java -cp /usr/share/nativsystems-environment-manager-agent/flyway/lib/*:/usr/share/nativsystems-environment-manager-agent/flyway/drivers/* org.flywaydb.commandline.Main -url=jdbc:mysql://10.5.1.12:3306/miotest?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&jdbcCompliantTruncation=false&zeroDateTimeBehavior=convertToNull -user=miotest -password=miotest -sqlMigrationPrefix=V -sqlMigrationSeparator=__ -sqlMigrationSuffix= -placeholderPrefix=asdf -locations=filesystem:/nem/db/migrations validate

Exit status:

1

Stdout:

Flyway 3.2.1 by Boxfuse

Database: jdbc:mysql://10.10.10.10:3306/miotest (MySQL 5.6)

Validated 7 migrations (execution time 00:00.014s)

ERROR: Validate failed. Detected resolved migration not applied to database: 001

Stderr:

 

 

다음을 수행하여 패치를 적용합니다.

~$ sudo nem -f /nem/db/nem.conf run

 

그러면 여러 Flyway 옵션을 보여 주는 메뉴가 NEM에 표시됩니다. 마이그레이션을 선택하고 Enter 키를 눌러 나머지 변경 내용을 모두 적용합니다. 언제든지 정보 옵션을 사용하여 이미 적용된 변경 내용과 아직 보류 중인 변경 내용을 확인할 수도 있습니다.

유지 관리

‘nem’ 명령에 관해 사용 가능한 명령/인수는 다음과 같습니다.

Enable

• 프로세스를 시작하거나 NFS를 통해 폴더를 마운트하는 등의 작업을 수행합니다.

• SQL 적용과 같은 소거식 변경의 경우에는 변경 내용을 적용할 때까지 서비스 활성화가 거부되며 예외가 발생되고 배포가 중지됩니다.

• 이 경우 서비스 종속성이 재귀적으로 시작됩니다. 이와 같이 서비스 종속성을 시작할 필요가 없거나 시작하지 않으려는 경우에는 '--no-dependencies' 명령줄 인수를 포함합니다.

Disable

• 프로세스를 중지하고 NFS를 '분리'하는 등의 작업을 수행합니다.

• SQL 변경 등의 일부 서비스에 관해서는 아무런 작업도 수행하지 않습니다.

Restart

• disable 명령과 enable 명령을 순서대로 호출합니다.

Status

• 모듈 및 해당 dependencies.run의 상태(실행 중/실행 중 아님)를 설명합니다.

• SQL 및 폴더와 같은 모듈용으로 대화형 세션을 제공하거나 디버그를 위해 포그라운드에서 프로세스를 실행합니다.

• 소거적 변경은 사용자와의 상호 작용 후에만 수행됩니다.

Upgrade

/etc/nem-upgrade.conf를 읽고 구성 및 정의 URL을 기준으로 업그레이드를 수행합니다.

빌드 또는 완전 활성화 상태(이 문서의 부록에 포함된 다이어그램에 설명되어 있음)에서 시스템을 가져와 시작 상태를 거친 다음 다시 완전 활성화 상태로 설정합니다.

• 실행 중인 모든 서비스가 비활성화되고 새 코드가 해당 위치에 삽입된 후에 서비스가 활성화됩니다. 활성화 및 비활성화 순서는 종속성에 따라 계산됩니다.

History

• 이전 배포의 날짜, 시간, 수정 번호 및 URL이 나열됩니다.

Tree

선택한 모듈의 종속성 트리를 인쇄합니다. 이러한 명령은 대부분 현재 작업 디렉터리에서 'nem.conf' 파일을 찾아야 합니다. 또는 -f 플래그를 사용하여 'nem.conf' 파일의 경로를 제공할 수도 있습니다. 예를 들면 다음과 같습니다.

$ cd /nem/apache/

/nem/apache$ sudo nem status

INFO:root:[apache_01] /nem/apache/nem.conf (running)

/nem/apache$

위의 명령과 동일한 다음 명령을 대신 사용할 수도 있습니다.

$ sudo nem -f /nem/apache/nem.conf status

INFO:root:[apache_01] /nem/apache/nem.conf (running)

$

SSL 인증서

NEM 배포 프로세스를 수행하려면 시스템의 미리 정의된 위치에 SSL 인증서와 키가 있어야 합니다. 인증 기관에서 중간 인증서 사용을 요구하는 경우 환경 구성에서 SSLCertificateChainFile 옵션을 사용하면 됩니다. SSL 암호화를 수행하는 부하 분산 장치를 통해 웹 Console에 액세스하는 환경의 경우에도 이러한 방식을 사용해야 합니다.

인증서는 /etc/apache2/mio.crt에, 키는 /etc/apache2/mio.key에 저장해야 합니다.

테스트 환경만 설정하거나 인증서 주문이 처리되기를 기다리는 중인 경우 등 현재 인증서가 없는 경우에는 다음과 같이 자체 서명 인증서를 생성하여 사용할 수 있습니다.

1.) 개인 키를 생성합니다.

root@ip-10-9-5-22:~# openssl genrsa -des3 -out server.key 1024

Generating RSA private key, 1024 bit long modulus

.......++++++

....++++++

e is 65537 (0x10001)

Enter pass phrase for server.key

Verifying - Enter pass phrase for server.key:

2.) 인증서 서명 요청을 생성합니다.

root@ip-10-9-5-22:~# openssl req -new -key server.key -out server.csr

server.key의 암호를 입력합니다.

그러면 인증서 요청에 통합되는 정보를 입력하라는

메시지가 표시됩니다.

이때 입력하는 정보는 DN(고유 이름)입니다.

필드가 여러 개 있지만, 일부 필드는 비워 두어도 됩니다.

기본값이 입력되어 있는 필드도 있습니다.

'.'를 입력하면 필드는 비어 있게 됩니다.

-----

국가 이름(2자리 코드)[AU]:

시/도 이름(전체 이름)[Some-State]:

구/군/시 이름(예: 도시)[]:

조직 이름(예: 회사)[Internet Widgits Pty Ltd]:

조직 구성 단위 이름(예: 부문)[]:

일반 이름(예: 서버 FQDN 또는 개발자 이름)[]:

이메일 주소[]:

인증서 요청과 함께 전송할

다음의 '추가' 특성을 입력하십시오.

챌린지 암호[]:

회사 이름(선택 사항)[]:

3.) 키에서 암호를 제거합니다.

root@ip-10-9-5-22:~# cp server.key server.key.org

root@ip-10-9-5-22:~# openssl rsa -in server.key.org -out server.key

Enter pass phrase for server.key.org:

writing RSA key

4.) 자체 서명 인증서를 생성합니다.

root@ip-10-9-5-22:~# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Signature ok

subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd

 

Getting Private key

5.) 키와 인증서 파일을 설치합니다.

root@ip-10-9-5-22:~# cp server.key /etc/apache2/mio.key

root@ip-10-9-5-22:~# cp server.crt /etc/apache2/mio.crt

환경 구성

구성 파일은 환경당 하나씩 만들어야 합니다. 이러한 구성은 최소한으로 수행해야 합니다. 일반적으로는 매우 많은 구성 파일 번들이 프로젝트와 연결되지만, 환경 간에 실제로 변경되는 내용은 많지 않습니다. 예를 들면 다음과 같습니다. 환경 간에 데이터베이스 호스트가 다르므로 해당 내용을 구성 파일에 포함해야 합니다. 그러나 Tomcat 포트는 모든 환경에서 일치해야 하므로 이러한 포트는 하드 코드 해야 합니다. 매개 변수를 구성으로 이동하면 환경 간의 차이점 수가 줄어들기 때문에 이동 작업은 최대한 지연하는 방식으로 수행해야 합니다. 구성 파일은 빌드 단계에서 Apache Ant에 제공됩니다.

인덱스

# Flex node type: master, job, index, playout or resource

nodetype=index

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. will be in the *.uat.company.com format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

# This is the same database as the master node

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses of masters (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Master

# Flex node type: master, job, index, playout or resource

nodetype=master

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. for the example below it would be in the "account.uat.company.com" format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# media is for your media files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

# You can use the 'local' option ONLY if you're running in a non-clustered, single-master environment

# filestore.mount=local

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# This is your media storage share

# - you can pass options to mount.cifs as the third argument, like in the example below

# - the uid and gid options are mandatory

# - when using newer Linux kernels you might need to use sec=ntlm to mount successfully (for example with netApp)

media.mount=cifs //10.10.20.10/media username=mio,password=pass,uid=mio,gid=mio,sec=ntlm

media.dirs=RECURSIVEWILDCARD

# Keep this set to local.

public.mount=local

public.owner=

# Subdirectory of /nem/apache/holdingpages containing a page displayed by Apache when Flex is down

holdingpages=default

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=cifs-utils,clamav

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

# SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio_intermediate.cer

SSLCertificateChainFile= # not applicable

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses for master nodes (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

# Holds IP addresses for job nodes (so that we can union with master nodes to form JGroups/Hazelcast clusters)

# If this is not defined, NEM will buildout with jobs executing on masters

job.ip.addresses=10.10.11.81,10.10.11.82

# Hibernate search

# indexing topology - 'standalone' means local indexing, 'slave' means relying on an indexing node

# If this is set to standalone or not set, NEM will buildout with indexing executing on masters

hibernate.search.index.topology=slave

# Flex Playout API settings

tv.nativ.mio.playout.api.endpoint=https://playout.uat.company.com

tv.nativ.mio.playout.api.username=testuser

tv.nativ.mio.playout.api.password=testuser

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Master

# Flex node type: master, job, index, playout or resource

nodetype=master

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. for the example below it would be in the "account.uat.company.com" format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# media is for your media files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

# You can use the 'local' option ONLY if you're running in a non-clustered, single-master environment

# filestore.mount=local

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# This is your media storage share

# - you can pass options to mount.cifs as the third argument, like in the example below

# - the uid and gid options are mandatory

# - when using newer Linux kernels you might need to use sec=ntlm to mount successfully (for example with netApp)

media.mount=cifs //10.10.20.10/media username=mio,password=pass,uid=mio,gid=mio,sec=ntlm

media.dirs=RECURSIVEWILDCARD

# Keep this set to local.

public.mount=local

public.owner=

# Subdirectory of /nem/apache/holdingpages containing a page displayed by Apache when Flex is down

holdingpages=default

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=cifs-utils,clamav

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

# SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio_intermediate.cer

SSLCertificateChainFile= # not applicable

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses for master nodes (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

# Holds IP addresses for job nodes (so that we can union with master nodes to form JGroups/Hazelcast clusters)

# If this is not defined, NEM will buildout with jobs executing on masters

job.ip.addresses=10.10.11.81,10.10.11.82

# Hibernate search

# indexing topology - 'standalone' means local indexing, 'slave' means relying on an indexing node

# If this is set to standalone or not set, NEM will buildout with indexing executing on masters

hibernate.search.index.topology=slave

# Flex Playout API settings

tv.nativ.mio.playout.api.endpoint=https://playout.uat.company.com

tv.nativ.mio.playout.api.username=testuser

tv.nativ.mio.playout.api.password=testuser

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Job

# Flex node type: master, job, index, playout or resource

nodetype=job

# ID to use for clustering.

clusterid=uatmio

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=company

# Defines master account URL. All account names will be templated according to this, ie. for the example below it would be in the "account.uat.company.com" format

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# Database configuration

databasehost=10.10.10.10

databasename=miomaster

databaseuser=miomaster_user

databasepassword=miomaster_password

# Shared storage

# filestore is for indexes, cluster state and various temporary work files

# media is for your media files

# You can force nem to recursively chown the mounted storage to the user specified - recommended to set to 'mio' when using NFS.

filestore.owner=

# You can use the 'local' option ONLY if you're running in a non-clustered, single-master environment

# filestore.mount=local

filestore.mount=nfs 10.10.20.20:/export/storage/filestore

# This is your media storage share

# - you can pass options to mount.cifs as the third argument, like in the example below

# - the uid and gid options are mandatory

# - when using newer Linux kernels you might need to use sec=ntlm to mount successfully (for example with netApp)

media.mount=cifs //10.10.20.10/media username=mio,password=pass,uid=mio,gid=mio,sec=ntlm

media.dirs=RECURSIVEWILDCARD

# Keep this set to local.

public.mount=local

public.owner=

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=cifs-utils,clamav

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds IP addresses for master nodes (i.e. where HornetQ is deployed)

master.ip.addresses=10.10.11.11,10.10.11.12

# Holds IP addresses for job nodes (so that we can union with master nodes to form JGroups/Hazelcast clusters)

# If this is not defined, NEM will buildout with jobs executing on masters

job.ip.addresses=10.10.11.81,10.10.11.82

# Hibernate search

# indexing topology - 'standalone' means local indexing, 'slave' means relying on an indexing node

# If this is set to standalone or not set, NEM will buildout with indexing executing on masters

hibernate.search.index.topology=slave

# Flex Playout API settings

tv.nativ.mio.playout.api.endpoint=https://playout.uat.company.com

tv.nativ.mio.playout.api.username=testuser

tv.nativ.mio.playout.api.password=testuser

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Playout

# Flex node type: master, job, index, playout or resource

nodetype=playout

# ID to use for clustering.

clusterid=uatmioplayout

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=nativ

# Defines the playout domain name

domainname=playout.stage.mioeverywhere.tv

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=false

# database config

databasehost=10.10.10.10

databasename=mioplayout

databaseuser=mioplayout_user

databasepassword=mioplayout_password

# Shared storage

# This is where the lucene playout search index is stored - needs to be accessible by all playout nodes.

lucene.mount=nfs 10.10.20.20/export/storage/playout

lucene.owner=

# Web service base URL to be used by Playout Wrapper.

# This is deprecated, set it as below.

tv.nativ.mio.playout.webservices.baseurl=http://127.0.0.1:30044/webservices/

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 26

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.12.11,10.10.12.12 # comma-separated list of IP addresses of Flex Playout nodes

# sharedip.ip = 10.10.12.10 # the virtual CARP IP

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

# SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio_intermediate.cer

SSLCertificateChainFile= # not applicable

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

# Holds comma separated IP addresses of all playout nodes.

playout.ip.addresses=10.10.12.11,10.10.12.12

# Total number of search results returned by lucene

tv.nativ.mio.playout.lucene.hits.per.page=5000

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

Resource

# Flex node type: master, job, index, playout or resource

nodetype=resource

# Defines the name of the logs directory

# /var/nem-logs/<clientname>/<domainname>/jboss/<hostname>/now/

clientname=nativ

# Master account URL

domainname=master.uat.company.com

# log4j log level

log.level=WARN

# Enable JVM debugging

jvm.debug=true

# For FTP resources set these to local

filestore.mount=local

filestore.owner=mio

incoming.mount=local

incoming.owner=mio

# CARP configuration

# Use the following if you are not using CARP:

sharedip.vhid = 1

sharedip.password = password

sharedip.addresses = 127.0.0.1

sharedip.ip = 127.0.0.3

# If using CARP, you'll need a unique vhid!

# sharedip.vhid = 13

# sharedip.password = yourp4ssw0rd

# sharedip.addresses = 10.10.11.11,10.10.11.12 # comma-separated list of IP addresses of Flex Master nodes

# sharedip.ip = 10.10.11.10 # the virtual CARP IP

# You can declare extra packages that NEM will check the operating system for before allowing you to start Flex

supplementalpackages=

# Intermediate SSL certificate for Apache. This is only required if specified by your certification authority.

# If not, ensure this file is a commented string

#SSLCertificateChainFile = SSLCertificateChainFile /etc/apache2/mio.intermediate.crt

SSLCertificateChainFile = # not applicable

# Database configuration

databasehost=10.10.10.10

databasename=mioresource

databaseuser=mioresource_user

databasepassword=mioresource_password

# Database configuration for the HTML5 web uploader

http_databasehost=10.10.10.10

http_databasename=mio_web_upload

http_databaseuser=mio_web_upload

http_databasepassword=mio_web_upload_password

# Comma-separated list of all master nodes

master.ip.addresses=10.5.13.13,10.5.13.14

# Java executable path

java.executable=/usr/lib/jvm/java-7-oracle/bin/java

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

# Optional settings:

#

# set initial and maximum amount of allocated heapspace:

# heapspace=2g

#

# send log files to a log4j server listening on port 4560 (for example Logstash with a log4j input):

# logstash.server=10.10.10.9

#

# comma-separated list of hosts Apache should be load balancing over. If not specified, the default is all hosts in the cluster (nem.cluster.ip.addresses)

# ajp13workers=10.10.11.11,10.10.11.12

#

# add a JMX username/password to allow for monitoring over JMX. please note that the JMX port is

# listening on localhost:9999 only and you will need to use JBoss EAP remoting-jmx libraries to connect.

# the connection string is service:jmx:remoting-jmx://localhost:9999

#

# you can find detailed information about JMX in JBoss EAP at https://planet.jboss.org/post/jmx_connections_to_jboss_as

# jmx.username=user

# jmx.password=password

데이터베이스 유지 관리

Flex Master는 데이터베이스에서 SQL 트리거를 사용합니다. 따라서 데이터베이스 사용자에게 TRIGGER 권한이 부여되었는지 확인해야 합니다. 이 권한은 GRANT ALL의 일부분으로 기본 부여되지 않기 때문입니다.

GRANT TRIGGER ON miomaster.* to 'miomaster'@'hostname' IDENTIFIED BY 'password';

버전 5.1에는 별도의 TRIGGER 권한이 도입되어 MySQL에서 버그가 발생합니다(http://bugs.mysql.com/bug.php?id=39489). 이 버그로 인해 슬레이브로 복제하는 경우와 같이 이진 로깅을 활성화한 상태에서 MySQL 인스턴스에 관해 트리거를 생성하려고 하면 오류 메시지가 표시됩니다. MySQL 구성 파일에 다음 줄을 추가하면 이 문제를 해결할 수 있습니다.

log_bin_trust_function_creators = 1

메타데이터 스키마 업데이트

앞에서 설명한 것처럼 Liquibase를 사용하여 데이터베이스 변경 내용을 추적합니다. 데이터베이스 변경 내용이 적용되지 않은 경우 적용될 때까지 업그레이드는 실패합니다. 그리고 다음과 같은 메시지가 표시됩니다.

INFO:root:Starting new environment...

INFO:root:Enabling [meta_01] /nem/nem.conf (not running)...

INFO:root:Enabling [sql_01] /nem/db/nem.conf (not running)...

INFO:root:Enabling [sql_01] /nem/db/nem.conf (not running)...

Could not start

Command:

/usr/bin/sudo -u nem /usr/java/default/bin/java -Djava.net.preferIPv4Stack=true -client -cp /nem/db:/usr/share/nativsystems-environment-manager-agent/liquibase/liquibase.jar

...

... -- LiquiBase version: 2.0-rc1

-- *********************************************************************

-- Lock Database

-- Changeset

/nem/db/liquibase/036_remove_extract_action_jsp.sql.xml::generated::antscript::(Checksum: 2:c37bc10575fc36d1b09257c3b6de4dc2)

UPDATE ACTION_TYPE SET JSP_NAME_ = 'file_action' where JSP_NAME_ = 'extract_action';

INSERT INTO `DATABASECHANGELOG` (`AUTHOR`, `COMMENTS`, `DATEEXECUTED`,

`DESCRIPTION`, `EXECTYPE`, `FILENAME`, `ID`, `LIQUIBASE`, `MD5SUM`, `ORDEREXECUTED`) VALUES ('ant script', '', NOW(), 'Custom SQL', 'EXECUTED','/nem/db/liquibase/036_remove_extract_action_jsp.sql.xml', 'generated', '2.0-rc1', '2:c37bc10575fc36d1b09257c3b6de4dc2', 37);

-- Release Database Lock

Stderr:

INFO 12/10/13 8:47 AM:liquibase: Successfully acquired change log lock

INFO 12/10/13 8:47 AM:liquibase: Reading from `DATABASECHANGELOG`

...

... INFO 12/10/13 8:47 AM:liquibase: ChangeSet /nem/db/liquibase/036_remove_extract_action_jsp.sql.xml::generated::ant script ran successfully in 0ms

INFO 12/10/13 8:47 AM:liquibase: Successfully released change log lock

~$

다음을 수행하여 패치를 적용합니다.

~$ sudo nem -f /nem/db/nem.conf run

그러면 세 가지 옵션을 보여 주는 메뉴가 NEM에 표시됩니다. 모든 기본 변경 내용을 적용하려면 'liquibase (non-interactive)'를 선택하고, 변경 내용을 하나씩 적용하려면 'liquibase'를 선택합니다. 세 번째 옵션을 선택하면 대화형 명령줄 데이터베이스 세션이 시작됩니다. 데이터베이스 구성 또는 연결 문제를 디버그하려는 경우 이 옵션이 유용할 수 있습니다. 폴더를 생성할 때도 비슷한 프로세스가 사용됩니다.

Flex 모니터링

이 섹션에서는 Flex 시스템의 상태를 확인하기 위해 모니터링할 수 있는 항목을 제안합니다.

Flex Manager 노드

Flex 마스터 노드는 Oracle Java, JBoss 및 Apache 웹 서버를 사용하므로 표준 모니터링 도구를 사용하여 아래에서 설명하는 항목을 테스트할 수 있습니다.

HTTP 확인

(mio.local이 예제 호스트 이름으로 사용됨):

Flex 구성 요소 HTTP GET URL에 필요한 응답 코드

Console(Apache) https://mio.local/ 200

Console(JBoss) http://mio.local:30044/ 200

Flex 같은 경우 URL에서 액세스하려는 계정을 확인하므로 Flex 마스터 노드에서 이러한 확인을 수행하려면 모조 호스트 헤더를 사용해야 합니다. 아래에 몇 가지 예가 나와 있습니다.

$ curl -s -k -D- -H"Host: master.stage.mioeverywhere.tv" https://127.0.0.1|head -1

HTTP/1.1 200 OK

$ curl -s -D- -H"Host: master.stage.mioeverywhere.tv" 127.0.0.1:30044|head -1

HTTP/1.1 200 OK

다음과 같은 헤더는 사용할 수 없습니다.

$ curl -s -k -D- https://127.0.0.1|head -1

HTTP/1.1 404 Not Found

• No host correct header found, 404 returned.

$ curl -s -k -D- https://localhost|head -1

HTTP/1.1 500 Internal Server Error

Localhost used as the host header, 500 returned.

$ curl -s -k -D- -H"Host: stage.mioeverywhere.tv" https://127.0.0.1|head -1

HTTP/1.1 404 Not Found

• Correct Domain used but no account specified

NEM 모듈

이 섹션에서는 NEM 내에서 제공되는 기능에 관해 간략하게 설명합니다. Flex 시스템의 일상적인 작동을 위해 NEM 모듈을 자세히 이해해야 하는 것은 아니지만, 모듈에 관해 파악해 두면 Flex를 시작, 중지 또는 배포할 때 발생하는 문제를 디버그할 때 유용할 수 있습니다.

환경에 적용해야 하는 대부분의 일상적인 태스크를 포함하도록 다수의 모듈이 구현됩니다. 'nem.conf' 파일에서 모듈을 정의합니다. 대부분의 경우에는 Nativ가 이러한 모듈을 유지 관리하지만, 사소한 변경은 고객과 에이전시도 수행할 수 있습니다. 이 섹션은 확정적인 가이드가 아니라 사용 가능한 기능을 소개하기 위한 용도로 제공됩니다. 일상적인 유지 관리의 경우 고객과 에이전시가 NEM 모듈에 관해 파악하지 않아도 되며 Subversion에서 새 자산과 구성을 배치할 위치만 알면 됩니다.

사용하는 모듈의 유형은 nem.conf 파일 내에서 설정합니다. 예를 들면 다음과 같습니다.

~$ cat /nem/apache/nem.conf

[nem]

service = apache_01

depends = /nem/logs/apache/nem.conf

monitors = ~$

이 파일은 다음 섹션에서 설명하는 Apache 모듈을 사용하며, /nem/logs/apache/nem.conf 아래의 로그 폴더에 대한 종속성을 설정합니다.

NEM의 메타

서비스는 종속성 트리로 시작되며 해당 트리의 루트에는 meta-service가 있어야 합니다. Nativ에서 제공하는 구성에는 이러한 트리가 이미 정의되어 있습니다. 종속성을 이 구성에 직접 추가할 수도 있고 하위 구성 요소에 추가할 수도 있습니다.

Apache

Apache 서비스를 통해 Apache 구성을 수행할 수 있습니다. 이 모듈은 매우 기본적인 Apache 설치에 지정된 구성을 포함하기만 합니다. 일상적인 Apache 유지 관리의 경우에는 관련 vhost.conf 파일을 편집하십시오. 새 가상 호스트를 정의하려면 ServiceNow 요청을 열어 해당 정의를 수행하도록 Nativ에 요청하십시오.

Flyway

Flyway 서비스는 Flyway에 대한 래퍼입니다. 자세한 내용은 flywaydb.org/를 참조하십시오. 이 모듈에서는 데이터베이스 업데이트가 모든 환경에서 반복되도록 어설션할 수 있습니다.

SQL

Liquibase 데이터베이스 업데이트 서비스는 5.1 시리즈부터 사용되지 않으며 Flyway가 대신 사용됩니다. 하지만 5.0 시리즈의 경우에는 기본 서비스로 계속 유지되며 5.0.15에서 5.1.0으로 업그레이드해야 합니다.

SQL 서비스는 Liquibase에 대한 래퍼입니다. 자세한 내용은 http://www.liquibase.org/를 참조하십시오. 이 모듈에서는 데이터베이스 업데이트가 모든 환경에서 반복되도록 어설션할 수 있습니다. SQL 모듈 구현의 일상적인 유지 관리에서 이 모듈을 사용하려면 대개 Subversion에 새 '.sql' 파일을 추가해야 합니다.

다른 프로세스를 사용하여 데이터베이스 변경 내용을 추적하는 경우에는 SQL 모듈 종속성이 정의되지 않은 데이터베이스 종속성을 포함할 수 있습니다. SQL 모듈을 사용하여 정의한 변경 내용을 적용하지 않은 경우에는 NEM이 업그레이드를 거부합니다.

새 변경 내용을 생성하는 대신 나중에 소스 파일을 변경하는 방식은 지원되지 않으며 이렇게 하는 경우 예기치 않은 동작이 발생할 수 있습니다.

패키지

패키지 모듈을 사용하면 기본 설치에 포함되어 있지 않은 추가 Ubuntu/Red Hat 패키지를 설치하도록 요청할 수 있습니다. 이 모듈은 Nativ를 통해 업데이트해야 하며 티켓 시스템을 통해 요청해야 합니다.

프로세스

Tomcat 또는 JBoss와 같은 데몬을 시작 및 중지하는 프로세스 모듈은 start-stop-daemon에 대한 래퍼입니다.

Nativ에서는 이 태스크를 위한 셸 스크립트가 더 이상 사용되지 않습니다. 셸 스크립트 대신 이 모듈을 사용하는 방식이 일관성과 안정성이 보다 높은 것으로 확인되었습니다. 'nem.conf'에서는 다음과 같은 매개 변수를 정의할 수 있습니다.

• 모듈을 실행할 사용자

• 환경 변수

• 프로세스 인수

• Java 속성

개발자는 이러한 매개 변수를 직관적으로 쉽게 파악할 수 있습니다. 매개 변수가 명확하지 않은 경우에는 'init 스크립트'에서 변경해야 한다고 생각하는 제안 사항을 티켓에 포함하여 기술 지원팀에 제출해 주시기 바랍니다. 프로세스 모듈의 일상적인 유지 관리에서는 보통 WAR 파일을 업데이트합니다.

폴더

개발자는 폴더 모듈을 통해 로컬 디스크나 NAS에 데이터를 영구적으로 저장해야 하는 시기를 정의할 수 있습니다.

이 모듈이 필요한 경우 기술 지원팀에 문의하십시오.

로그

로그용으로 특수한 유형의 폴더를 생성할 수 있습니다. 그러면 로그는 '/var/nem-logs/<client>/<domain>/<service>/<hostname>/now' 폴더 경로에 저장됩니다. 아래의 예제 구성에서는 '/var/nem-logs/nativ/master.example.com/jboss/<hostname>/now'에 로그가 있습니다. 여기서 hostname은 mio 인스턴스를 실행 중인 장치의 실제 호스트 이름입니다.

$ cat /nem/logs/jboss/nem.conf

[nem]

service = logfolder_01

depends =

monitors =

[logfolder]

client = nativ

domain = master.example.com

service = jboss

[folder]

owner = mio

사용자

25000~29998 범위에서 UNIX 사용자를 생성할 수 있습니다. 보안상 모든 데몬은 각기 다른 사용자로 실행하는 것이 좋습니다. 새 데몬이 생성되면 Nativ는 대개 여기에 새 사용자를 추가합니다.

부록