TokuDB 설치하기 0










기존 Mysql Innodb engine을 사용하다가 TokuDB Engine이 좋다기에, 마침 웹 리뉴얼을 하게 되어 TokuDB Engine 을 설치해 보았다.
일반 mysql-server 에 설치를 하자니, 방법이 없는건지.. 내가 못찾는건지 아무리 봐도 모르겠다..

그래서 Percona-mysql로 설치를 진행하였다. 
혹시 일반 mysql에 Toku Engine 설치하는 방법이 있다면 공유 부탁드리겠습니다... 


1. percona-mysql 설치

yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm

yum install -y http://repo.percona.com/centos/7/RPMS/x86_64/Percona-Server-selinux-56-5.6.42-rel84.2.el7.noarch.rpm

yum install -y Percona-Server-server-56

yum install -y Percona-Server-tokudb-56.x86_64


2. THP(Transparent huge page) 활성화 여부 확인

cat /sys/kernel/mm/transparent_hugepage/enabled


비활성화 일때

always madvise [never]


활성화 일때

[always] madvise never



3. THP 비활성화 ( vi /etc/rc.local) 아래 내용 추가

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag


4. ToKuDB 스토리지 엔진 설치 및 활성화

ps_tokudb_admin --enable -uroot


5. my.cnf에 내용 추가 ( vi /etc/my.cnf)

[mysqld_safe]

malloc-lib=/usr/lib64/libjemalloc.so.1


6. mysql_log 폴더 생성 ( /etc/my.cnf  에 설정한 내용에 따라 경로는 달라짐)

mkdir -p /var/lib/mysql_log/

chown -R mysql:mysql /var/lib/mysql_log/


touch /var/log/mysqld_log

chown mysql: /var/log/mysqld_log


7. 서비스 시작

service mysql start


8. 엔진, 플러그인, tokudb 버전 확인

mysql -uroot

show engines;

show plguins;

select @@tokudb_version;







http -> https 로 리다이렉트 해제 [웹서버에서] 0


Web 서버에서 vhosts 와 ssl 설정을 한 이후 https 최초 접속 이후 http로 페이지를 들어가도 https로 자동 리다이렉트가 되었다.

실 운영 웹서버에서는 안그랬는데.. 테스트 서버에서는 왜그러지.. 실서버는 프록시가 있어서 그런가.. 일단 찾자..
문제점을 찾으려 설정을 이것저것 찾아봤는데도 잘 모르겠다. 
삽질을 하다가 브라우저 캐시를 지우고 http로 접속을 하니 http로 접속이 잘 된다..! 

브라우저 캐시 관련 설정을 이것저것 구글링 하다보니 HSTS 관련된 내용들이 많이 나왔다.


설정파일을 열어보니 Header always set Strict-Transport-Security "max-age=63072000" 로 설정이 되어있다..!
설정파일은 httpd.conf나 httpd-vhosts.conf 를 보면 될것같다..

아래와 같이 수정!
Header always set Strict-Transport-Security "max-age=0"

아파치를 재시작하고 http와 https로 연결을 체크해보니 리다이렉트가 안된다. 

삽질 끝에 해결!


HTML5 이미지태그 사용하기 0



<Marquee> loop 반복!
   스크롤 반복 횟수를 지정

(결과)


<basefont size="5" />

스크롤을 한번만 함.

 

스크롤을 두번함.

 

스크롤을 세번함.



이미지 태그 사용하기
ㅁ 이미지 연결하기
 <형식>
    <img src="경로명/파일명">
    <속성>
    1) src="경로명/파일명"

     - 절대경로 또는 상대경로로 사용 가능.

 src = "C:\pic/dog.jpg"   (절대경로(그림이 있는곳의 경로를 상세하게 적어주는것))

 src = "pic/dog.jpg"  (상대경로(html 파일이 저장되있는곳을 기준으로 간략하게 적어줄수있음))

 

2) align = top or middle or bottom (이미지 옆 텍스트 위치)

   -이미지 옆에 텍스트를 보여줄 때 이미지 오른쪽 상산, 중간, 하단에 보여줌

   align = "top", align = "middle", bottome은 디폴트.

 

 3) align = left or right (텍스트 옆 이미지 위치)

   align = left 지정하면 텍스트 왼쪽에 이미지 위치함

   align = right 지정하면 텍스트 오른쪽에 이미지 위치함

 

 4) border = 숫자(픽셀수)

   - 이미지의 테두리선을 픽셀수로 지정

 

 5) alt="이미지 파일 설명"

   - 커서를 이지미 위에 올리면 말풍선 형식으로 보여줌.

 

Ex)


(결과)



6) vspace="픽셀수", hspace="픽셀수"

  - 이미지와 텍스트 사이에 여백을 줌.

(예)

   <img src="이미지명" vspace=30 hspace=50>

    <br clear=:left" or "right">

   - 이미지와 텍스트를 출력하고 다음 문자를 출력시 앞의 텍스트에 이어서 출력.

     이것을 벗어나기 위해 <br>태그를 여러개 사용 할 수 있으나 <br clear="left> 하면

     한번에 이전 이미지나 객체에서 벗어날 수 있음.

 

(Ex)

(결과)


7) 이미지 크기 조절하는 width, height 속성 

 <형식>

 <img src="이미지 파일명" width="픽셀수" or "숫자%" height="픽셀수" or "숫자%">

(예)

 <img src="피카추.jpg" width=100 height=100>

<img src="피카추.jpg" width=70% height=70%> 원래이미지 크기에 비례해 축소됨.

<img src="피카추.jpg" width=300> width 속성만 지정시 세로 크기는 자동으로 조정되서 보여짐.

 

(Ex)


(결과)



HTML5 DL태그 사용하기(움직이게) 0







<link rel="stylesheet" href="" />

<DL> 태그 

   - Definition List의 약자로 용어에 대한 설명 등을 나열할 때 사용

     1) <DL>의 포함된 목록 태그로

       ① <LH> - List Head, 목록의 제목

       ② <DT> - Definition Title, 용어(제목)

       ③ <DD> - Definition Data, 용어의 설명

 

    - <LH>, <DT>, <DD>는 자동으로 줄 바꿈이 이루어진다.

 

Ex)

 <dl>

          <lh>목록의 제목

          <dt> 용어

          <dd>용어의 설명 

</dl>

 

(Ex)





























(Ex)
















움직이는 텍스트 만들기

  <MARQUEE> ~ </MARQUEE> 차양이라는 뜻 글자가 수평방향으로 움직인다.

  <marquee> 태그의 속성은 다음과 같다.

    1) bgcolor - 영역의 바탕색 "색명(bgcolor="#ff0000", bgcolor="yellow"

    2) width, height - 넓이ㅡ 높이 (width=100, heightt= 50%)

    3) hspace, vspace - 텍스트 바깥쪽 좌우상하 영역내의 여백 처리

      (hspace=20, vspace=10)

    4) behavior - 문자열의 흐름을 제어한다.

         (1) behavior="scroll" 기본값으로 한 방향으로 계속 문자열이 흘러감

         (2) behavior="slide" 스크롤하던 문자열이 한 쪽 끝에서 멈춤.

         (3) behavior="alternate" 문자열이 상하좌우로 왔다 갔다 반복함.

    5) direction - 문자열의 흘러가는 방향을 지정.

         (direction="left" or "right" or "up" or "down") 으로 사용가능.

    

(Ex)


























(결과)

 

텍스트의 위치는 top, middle, bottom으로 지정할 수 있음. 

 

텍스트 바깥의 상하 좌우 여백 보기!텍스트의 기본 흐름.텍스트가 좌우로 왔다 갔다 함.텍스트가 끝에가서 멈춤. (Ex2)































(결과)

 

텍스트 왼쪽으로 가게하기!

 

텍스트 오른쪽으로 가게하기!

 

텍스트 위쪽으로 가게하기!

 

텍스트 아래쪽으로 가게하기!


<marquee> 태그의 scrolldelay, scrollamount 속성

   - scrolldelay=숫자 : 숫자가 클수록 속도가 느려짐.

   - scrollamount=픽셀수 : 숫자가 클수록 속도가 빨라짐


































(결과)

<basefont size="6" />


scrolldelay 속성은 스크롤 지연 속도를 지정.

scrolldelay 속성은 값이 클수록 느림.

scrollamount 속성은 한번에 스크롤 되는 픽셀 수를 지정.


Docker를 통한 grafana 설치 (1) (모니터링 서비스) 0







사내 모니터링 대쉬보드 서버 이전으로 Grafana, influxdb, kapacitor, chronograf 를 새로 구축 이전 작업을 진행하였다.
각 서버들은 telegraf를 통해 서버의 상태에 대한 정보를 Influxdb에 전달하고, Influxdb에 저장된 데이터를 Grafana 대쉬보드에 보여주는 형태가 된다.
서버가 비정상 상태일때 Slack을 통하여 알람 메세지를 받을 수 있도록 kapacitor와 chronograf를 연동 할 예정이다.

1. Grafana docker-compose 작성
  . 호스트와 컨테이너에서 파일을 같이 사용할 수 있게 볼륨을 지정해주었다.
  mkdir /home/docker/grafana
  vi /home/docker/grafana/docker-compose.yml
    grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: always
    ports:
       - 3000:3000
     volumes:
       - grafana:/var/lib/grafana
       - /home/docker/grafana/grafana.ini:/etc/grafana/grafana.ini
    user: "472"


2. grafana.ini 파일 작성
  아래 내용 중 노란색 부분만 설정 변경해주면 됨.

  vi /home/docker/grafana/grafana.ini

##################### Grafana Configuration Example #####################
#
# Everything has defaults so you only need to uncomment things you want to
# change

# possible values : production, development
; app_mode = production

# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
; instance_name = ${HOSTNAME}

#################################### Paths ####################################
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
#
;data = /var/lib/grafana
#
# Directory where grafana can store logs
#
;logs = /var/log/grafana
#
# Directory where grafana will automatically scan and look for plugins
#
;plugins = /var/lib/grafana/plugins

#
#################################### Server ####################################
[server]
# Protocol (http or https)
protocol = http

# The ip address to bind to, empty will bind to all interfaces
#http_addr = 

# The http port  to use
http_port = 3000

# The public facing domain name used to access grafana from a browser
;domain = localhost

# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
;enforce_domain = false

# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
; root_url = http://localhost:3000
root_url = http://IP:3000

# Log web requests
;router_logging = false

# the path relative working path
static_root_path = public

# enable gzip
;enable_gzip = false

# https certs & key file
;cert_file =
;cert_key =

#################################### Database ####################################
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as seperate properties or as on string using the url propertie.

# Either "mysql", "postgres" or "sqlite3", it's your choice
;type = sqlite3
;host = 127.0.0.1:3306
;name = grafana
;user = root
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
;password =

# Use either URL or the previous fields to configure the database
# Example: mysql://user:secret@host:port/database
;url =

# For "postgres" only, either "disable", "require" or "verify-full"
;ssl_mode = disable

# For "sqlite3" only, path relative to data_path setting
;path = grafana.db

#################################### Session ####################################
[session]
# Either "memory", "file", "redis", "mysql", "postgres", default is "file"
;provider = file

# Provider config options
# memory: not have any config yet
# file: session dir path, is relative to grafana data_path
# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=grafana`
# mysql: go-sql-driver/mysql dsn config string, e.g. `user:password@tcp(127.0.0.1:3306)/database_name`
# postgres: user=a password=b host=localhost port=5432 dbname=c sslmode=disable
;provider_config = sessions

# Session cookie name
;cookie_name = grafana_sess

# If you use session in https only, default is false
;cookie_secure = false

# Session life time, default is 86400
;session_life_time = 86400

#################################### Analytics ####################################
[analytics]
# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
# No ip addresses are being tracked, only simple counters to track
# running instances, dashboard and error counts. It is very helpful to us.
# Change this option to false to disable reporting.
;reporting_enabled = true

# Set to false to disable all checks to https://grafana.net
# for new vesions (grafana itself and plugins), check is used
# in some UI views to notify that grafana or plugin update exists
# This option does not cause any auto updates, nor send any information
# only a GET request to http://grafana.net to get latest versions
;check_for_updates = true

# Google Analytics universal tracking code, only enabled if you specify an id here
;google_analytics_ua_id =

#################################### Security ####################################
[security]
# default admin user, created on startup
;admin_user = admin

# default admin password, can be changed before first start of grafana,  or in profile settings
;admin_password = admin

# used for signing
;secret_key =

# Auto-login remember days
;login_remember_days = 7
;cookie_username = grafana_user
;cookie_remember_name = grafana_remember

# disable gravatar profile images
;disable_gravatar = false

# data source proxy whitelist (ip_or_domain:port separated by spaces)
;data_source_proxy_whitelist =

[snapshots]
# snapshot sharing options
;external_enabled = true
;external_snapshot_url = https://snapshots-origin.raintank.io
;external_snapshot_name = Publish to snapshot.raintank.io

# remove expired snapshot
;snapshot_remove_expired = true

# remove snapshots after 90 days
;snapshot_TTL_days = 90

#################################### Users ####################################
[users]
# disable user signup / registration
;allow_sign_up = true

# Allow non admin users to create organizations
;allow_org_create = true

# Set to true to automatically assign new users to the default organization (id 1)
;auto_assign_org = true

# Default role new users will be automatically assigned (if disabled above is set to true)
;auto_assign_org_role = Viewer

# Background text for the user field on the login page
;login_hint = email or username

# Default UI theme ("dark" or "light")
;default_theme = dark

[auth]
# Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false
;disable_login_form = false

#################################### Anonymous Auth ##########################
[auth.anonymous]
# enable anonymous access
;enabled = false

# specify organization name that should be used for unauthenticated users
;org_name = Main Org.

# specify role for unauthenticated users
;org_role = Viewer

#################################### Github Auth ##########################
[auth.github]
;enabled = false
;allow_sign_up = true
;client_id = some_id
;client_secret = 
;scopes = user:email,read:org
;auth_url = https://github.com/login/oauth/authorize
;token_url = https://github.com/login/oauth/access_token
;api_url = https://api.github.com/user
;team_ids =
;allowed_organizations =

#################################### Google Auth ##########################
[auth.google]
;enabled = false
;allow_sign_up = true
;client_id = some_client_id
;client_secret = 
;scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
;auth_url = https://accounts.google.com/o/oauth2/auth
;token_url = https://accounts.google.com/o/oauth2/token
;api_url = https://www.googleapis.com/oauth2/v1/userinfo
;allowed_domains =

#################################### Generic OAuth ##########################
[auth.generic_oauth]
;enabled = false
;name = OAuth
;allow_sign_up = true
;client_id = some_id
;client_secret =
;scopes = user:email,read:org
;auth_url = https://foo.bar/login/oauth/authorize
;token_url = https://foo.bar/login/oauth/access_token
;api_url = https://foo.bar/user
;team_ids =
;allowed_organizations =

#################################### Grafana.net Auth ####################
[auth.grafananet]
;enabled = false
;allow_sign_up = true
;client_id = some_id
;client_secret =
;scopes = user:email
;allowed_organizations =

#################################### Auth Proxy ##########################
[auth.proxy]
;enabled = false
;header_name = X-WEBAUTH-USER
;header_property = username
;auto_sign_up = true
;ldap_sync_ttl = 60
;whitelist = 192.168.1.1, 192.168.2.1

#################################### Basic Auth ##########################
[auth.basic]
;enabled = true

#################################### Auth LDAP ##########################
[auth.ldap]
;enabled = false
;config_file = /etc/grafana/ldap.toml
;allow_sign_up = true

#################################### SMTP / Emailing ##########################
[smtp]
;enabled = false
;host = localhost:25
;user =
;password =
;cert_file =
;key_file =
;skip_verify = false
;from_address = admin@grafana.localhost

[emails]
;welcome_email_on_sign_up = false

#################################### Logging ##########################
[log]
# Either "console", "file", "syslog". Default is console and  file
# Use space to separate multiple modes, e.g. "console file"
;mode = console file

# Either "trace", "debug", "info", "warn", "error", "critical", default is "info"
;level = info

# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
;filters =


# For "console" mode only
[log.console]
;level =

# log line format, valid options are text, console and json
;format = console

# For "file" mode only
[log.file]
;level =

# log line format, valid options are text, console and json
;format = text

# This enables automated log rotate(switch of following options), default is true
;log_rotate = true

# Max line number of single file, default is 1000000
;max_lines = 1000000

# Max size shift of single file, default is 28 means 1 << 28, 256MB
;max_size_shift = 28

# Segment log daily, default is true
;daily_rotate = true

# Expired days of log file(delete after max days), default is 7
;max_days = 7

[log.syslog]
;level =

# log line format, valid options are text, console and json
;format = text

# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
;network =
;address =

# Syslog facility. user, daemon and local0 through local7 are valid.
;facility =

# Syslog tag. By default, the process' argv[0] is used.
;tag =


#################################### AMQP Event Publisher ##########################
[event_publisher]
;enabled = false
;rabbitmq_url = amqp://localhost/
;exchange = grafana_events

;#################################### Dashboard JSON files ##########################
[dashboards.json]
;enabled = false
;path = /var/lib/grafana/dashboards

#################################### Alerting ######################################
[alerting]
# Makes it possible to turn off alert rule execution.
;execute_alerts = true

#################################### Internal Grafana Metrics ##########################
# Metrics available at HTTP API Url /api/metrics
[metrics]
# Disable / Enable internal metrics
;enabled           = true

# Publish interval
;interval_seconds  = 10

# Send internal metrics to Graphite
[metrics.graphite]
# Enable by setting the address setting (ex localhost:2003)
;address =
;prefix = prod.grafana.%(instance_name)s.

#################################### Internal Grafana Metrics ##########################
# Url used to to import dashboards directly from Grafana.net
[grafana_net]
;url = https://grafana.net

#################################### External image storage ##########################
[external_image_storage]
# Used for uploading images to public servers so they can be included in slack/email messages.
# you can choose between (s3, webdav)
;provider =
provider = local

[external_image_storage.s3]
;bucket_url =
;access_key =
;secret_key =

[external_image_storage.webdav]
;url =
;username =
;password =

3. docker-compose 명령어를 통한 서비스 실행
  1) docker-compose.yml을 만든 디렉토리로 이동.
    cd /home/docker/grafana
    
  2) 서비스 실행
    docker-compose up -d
    

  



  3) 서비스 확인
    docker ps -a




4. Grafana Web page 접속 확인
  Grafana http://설치 서버 IP:3000


1 2 3 4 5 6 7 8 9 10