InnoDB(MariaDB, MySQL) System Variables 전체 목록 및 상세 설명 문서 - https://mariadb.com/kb/en/innodb-system-variables/
DB 관리 목적의 SQL (예: show, backup, analyze, kill, reset, use) - https://mariadb.com/kb/en/administrative-sql-statements/
자세한 설명을 하기 전에 설정 파일 예제부터 보자.
$ cat /etc/mysql/conf.d/mariadb.cnf
[client-server]
port = 3306
socket = /run/mysqld/mysqld.sock
[mariadbd]
server-id = 1
bind-address = 0.0.0.0
lower_case_table_names = 1
... 중간 생략 ...
##
## NOTE: 성능 테스트를 위해 아래 4개 항목을 변경하면서 Query Per Second를 측정해봤다.
##
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT_NO_FSYNC
innodb_flush_sync = OFF
innodb_use_native_aio = OFF
... 중간 생략 ...
$
Transaction Commit Log에 대한 Flush 여부 설정
설정 항목: innodb_flush_log_at_trx_commit
##
## innodb_flush_log_at_trx_commit 설정 변경
##
MariaDB [(none)]> show variables like '%innodb_flush_log_at%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 0 |
+--------------------------------+-------+
2 rows in set (0.001 sec)
MariaDB [(none)]> set global innodb_flush_log_at_trx_commit=0;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> show variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 0 |
+--------------------------------+-------+
1 row in set (0.000 sec)
MariaDB [(none)]>
위 설정 관련 참고 문서: innodb_flush_log_at_trx_commit 개념 그림 및 튜닝 https://yunhyeonglee.tistory.com/41
- Link 내에서만 사용 가능한 Address. - 예를 들어, Router-A가 Link-Local Unicast Address를 Destination Address로 하는 패킷을 받으면 다른 Network로 Forward하지 않는다. - 그래서 1개 Link 구간에서 Network control message를 전달할 때, 이 주소를 사용한다. - 만약, 1개 물리적 포트에 Global Unicast Address와 Link-Local Unicast Address를 모두 설정한 경우라면 Global Unicast Address 값을 변경하는 경우에도 Link-Local Unicast Address로 통신이 가능하다. - 1개 Link 내에서만 통신이 가능하기 때문에 ICMPv6를 이용한 외부에서의 공격을 원천적으로 막을 수 있다. - IPv4의 자동 설정 IP 주소인 169.254.x.x에 유사한 목적으로 사용됨 - FE80::/10
Unique Local Unicast Address
- IPv4에 비유하자면 Private network address(10.0.0.0 172.16.0.0 192.168.0.0) 같은 IPv6 address. - 예를 들어, 1개 회사 빌딩 내부에서의 통신, 1개 대학 캠퍼스 내부에서의 통신만 할 때 이 주소를 사용한다. - FC00::/7
예시: Global Unicast Address
(예시) Global Unicast Address
예시: Link Local Unicast Address
(예시) Link Local Unicast Address
Multicast Address
ff00::/8 - IPv6 멀티캐스트를 위한 주소공간이다. IPv4에서 제공했던 브로드캐스트는 IPv6에서는 더 이상 지원되지 않으며, IPv6에서는 대신 멀티캐스트를 사용해야 한다.
Multicast Address 종류
Description
Solicited Node Multicast
- 이더넷 환경에서 Neighbor 탐색 과정(IPv4의 ARP 과정과 유사)에 사용 - Auto configuration 과정에서 DAD(Duplicate Address Detection) 과정을 거칠 때 사용 - Solicited Node Multicast 주소의 112비트 부분은 FF02::1:FF로 정해져 있으며 나머지 24비트는 IPv6의 최하위 24비트 부분을 차용하여 사용 (예: IPv6 주소-2001:1:1:1::1234:5678 → Solicited node multicast 주소- FF02::1:FF34:5678)
All Node Multicast
- 노드의 모든 IPv6 호스트와 라우터들이 소속되어 있는 그룹 - All node multicast주소는 FF02::1 사용
All Router Multicast
- 모든 IPv6 라우터들이 소속되어 있는 그룹 - All router multicast 주소는 FF02::2 사용
IPv6 Multicast Group
IPv6 Multicast Group
Anycast Address
Anycast 통신은 ‘1:가장 가까운 1’간의 통신방식이라고 정의할 수 있다.
동일한 주소를 가지는 여러 목적지 장비들 중 출발지 장비와 가장 가까운 장비가 응답을 하는 통신방식이다. 이러한 통신방식은 멀티캐스트와 유사하지만 멀티캐스트의 경우 동일 그룹에 소속된 장비들이 응답을 하는 반면, 애니캐스트의 경우는 동일 주소를 가지는 장비들 중 가장 가까운 장비 하나만 응답을 한다는 차이가 있다.
Broadcast domain 또는 Network interface가 직접 연결된 Link 영역
Site-Local Scope
[ 내 생각: 실제로 이 Site-Local Scope 개념이 사용되는지 모르겠음 ]
[ 내 생각: Site-Local Address는 2004년 10월 RFC3897에서 폐기되었음. 아마 Site-Local Scope의 모호성 때문에 폐기한 것이 아닌가 추정해봄 ]
한 조직의 관리자가 관리하는 Network 영역 (예: 특정 통신사, 회사, 호텔, 정부청사 같은 영역) 네트워크 관리자가 Site-Local Scope을 설정하는 것이므로 Scope의 경계를 설명하기 애매하다. 예를 들어, 네트워크 관리자가 A회사와 B호텔을 1개의 Site-Local Scope으로 지정하면, 의도하지 않게 Networking이 되는 상황이 발생
국내 IPv6 관리대행자별 IPv6 주소 목록 (2023.07.17 현재)
기관명
영문서비스명
시작주소
프리픽스
개수
할당일
에이비클
ABCLE
2001:0EF8::
/32
65536
20040524
(주)아프리카티비
AFREECATV
2406:6600::
/32
65536
20110124
(주)엘지유플러스
BORANET
2001:0270::
/32
65536
20000908
씨디네트웍스
CDNETWORKS
2401:C500::
/32
65536
20110830
(주) 씨엠비
CMBI-NETDJ
2403:6500::
/32
65536
20120326
주식회사 씨엠비영등포방송
CMBI-NETHK
2404:2300::
/32
65536
20120607
주식회사 씨엠비광주방송
CMBKWANGJUNET
2406:B000::
/32
65536
20080324
주식회사 씨엠비광주방송
CMBKWANGJUNET
2402:7000::
/32
65536
20080403
(주)다우기술
DAOU
2403:3E00::
/32
65536
20100707
디지털엣지코리아
DEK-NET
2400:FD60::
/32
65536
20230512
삼정데이타서비스(주)
DIRECT-HOSTING
2403:3700::
/32
65536
20120307
주식회사 딜라이브
DLIVE
2402:BE00::
/32
65536
20100608
드림라인(주)
DREAMX
2001:0C48::
/32
65536
20020812
두루안
DURUAN
2001:0390::
/32
65536
20020207
(주)이호스트아이씨티
EHOSTICT
2407:0B00::
/32
65536
20130529
(주)가비아
GABIA-IP
2401:9EC0::
/32
65536
20170811
한국케이블TV푸른방송(주)
GCS
2407:2000::
/32
65536
20070716
엔티티코리아 주식회사
GIN
2001:0D38::
/32
65536
20030515
하이온넷(주)
HAIONNET
2404:0800::
/32
65536
20080912
주식회사 에이치씨엔
HCN
2001:0EA0::
/32
65536
20040329
주식회사 하이라인닷넷
HINETWORKS
2407:B200::
/32
65536
20110314
호스트웨이아이디씨(주)
HOSTWAY
2406:AD00::
/32
65536
20130410
효성ITX
HYOSUNGCDN
2407:3500::
/32
65536
20130618
인천국제공항공사
IIAC
2400:A0A0::
/32
65536
20220816
주식회사 아이네트호스팅
INET
2001:0F48::
/32
65536
20040806
JCN울산중앙방송(주)
JCN
2402:1A00::
/32
65536
20100506
주식회사 제이엔디통신
JNDINFO
2402:6100::
/32
65536
20111101
금강방송주식회사
KCNNET
2403:6300::
/32
65536
20120326
한국데이타
KDATA
2406:6800::
/32
65536
20090402
(주)한국데이터통신
KDTIDC
2405:3500::
/32
65536
20120921
(주)엘지유플러스
KIDC
2001:0ED0::
/32
65536
20040418
주식회사 케이아이엔엑스
KINXINC
2001:07FA:0008::
/48
1
20020402
주식회사 케이아이엔엑스
KINXINC
2401:2700::
/32
65536
20110615
한국지능정보사회진흥원
KOREN
2407:C000::
/32
65536
20070522
한국지능정보사회진흥원
KOREN
2406:D000::
/32
65536
20080204
주식회사 케이티
KORNET
2001:0220::
/32
65536
19991006
주식회사 케이티
KORNET
2001:0280::
/32
65536
20000927
주식회사 케이티
KORNET
2001:02B0::
/32
65536
20010102
주식회사 케이티
KORNET
2001:0E60::
/32
65536
20040213
주식회사 케이티
KORNET
2001:0EA8::
/32
65536
20040331
주식회사 케이티
KORNET
2001:0EF0::
/32
65536
20040524
주식회사 케이티
KORNET
2400:0000::
/20
268435456
20050601
재단법인 한국교육전산망협의회
KREN
2001:0E70::
/32
65536
20040317
재단법인 한국교육전산망협의회
KREN
2402:0000::
/22
67108864
20061107
한국과학기술정보연구원
KREONet
2001:0320::
/32
65536
20010823
(주)한국무역정보통신
KTNET
2001:0EB8::
/32
65536
20040407
주식회사 엘지헬로비전
LG-HELLOVISION
2405:7B00::
/32
65536
20121017
(주) 엘지씨엔에스
LG-NET
2400:3300::
/32
65536
20110407
(주)엘지유플러스
LGTELECOM
2001:4430::
/32
65536
20050706
엘엑스(IP주소 인터넷 서비스 업체)
LXN
2402:3100::
/32
65536
20111012
네이버클라우드 주식회사
NBP-NET
2402:DE00::
/32
65536
20110107
(주)비트넷
NETIP
2405:5F00::
/32
65536
20121010
엔에이치엔클라우드
NHNCLOUD-NET
2405:D880::
/32
65536
20160630
남인천방송(주)
NIBDIGITAL
2407:B800::
/32
65536
20090520
피란하시스템즈
PIRANHA
2402:F400::
/32
65536
20100113
(주)엘지유플러스
PUBNETPLUS
2001:0E78::
/32
65536
20040317
삼성에스디에스(주)
SAMSUNGSDS
2001:0330::
/32
65536
20010920
삼성에스디에스(주)
SAMSUNGSDS
2404:0180::
/28
1048576
20060829
(주)에스비코리아
SBKOREACORP
2400:FDA6::
/32
65536
20230512
세종텔레콤 주식회사
SHINBIRO
2001:03A8::
/32
65536
20020402
세종텔레콤 주식회사
SHINBIRO
2001:0CF0::
/32
65536
20030122
SK(주)
SK-NET
2405:8600::
/32
65536
20101202
에스케이텔레콤(주)
SK-TELECOM-NET
2001:02D8::
/32
65536
20010406
에스케이텔레콤(주)
SK-TELECOM-NET
2001:0F28::
/32
65536
20040708
에스케이텔링크주식회사
SKTelink
2001:0E98::
/32
65536
20040329
케이디디아이코리아(주)
TELEHOUSE-SEOUL
2400:1800::
/32
65536
20090128
유엘네트웍스
ULNETWORKS
2405:4300::
/32
65536
20120925
주식회사 넥스지
VAAN
2402:5800::
/32
65536
20080703
주식회사 브이토피아
VTOPIA
2406:D700::
/32
65536
20130502
(주)엘지유플러스
Xpeed
2406:5900::
/32
65536
20130306
에스케이브로드밴드주식회사
broadNnet
2001:0290::
/32
65536
20001030
에스케이브로드밴드주식회사
broadNnet
2001:0378::
/32
65536
20011218
에스케이브로드밴드주식회사
broadNnet
2001:0EE8::
/32
65536
20040517
에스케이브로드밴드주식회사
broadNnet
2001:44D0::
/28
1048576
20051110
에스케이브로드밴드주식회사
broadNnet
2401:4000::
/32
65536
20070316
에스케이브로드밴드주식회사
broadNnet
2406:4000::
/32
65536
20070316
에스케이브로드밴드주식회사
broadNnet
2401:A800::
/32
65536
20080602
에스케이브로드밴드주식회사
broadNnet
2405:5800::
/32
65536
20081020
에스케이브로드밴드주식회사
broadNnet
2407:6500::
/32
65536
20130705
에스케이브로드밴드주식회사
broadNnet
2407:6700::
/32
65536
20130705
에스케이브로드밴드주식회사
broadNnet
2407:9100::
/32
65536
20130718
에스케이브로드밴드주식회사
broadNnet
2407:C700::
/32
65536
20130822
에스케이브로드밴드주식회사
broadNnet
2400:4980::
/32
65536
20131106
에스케이브로드밴드주식회사
broadNnet
2400:4780::
/32
65536
20131111
에스케이브로드밴드주식회사
broadNnet
2400:9E80::
/32
65536
20140213
에스케이브로드밴드주식회사
broadNnet
2400:9F80::
/32
65536
20140213
에스케이브로드밴드주식회사
broadNnet
2400:A580::
/32
65536
20140218
에스케이브로드밴드주식회사
broadNnet
2400:E180::
/32
65536
20140415
(주)이지오스
eGIOSNET
2405:C000::
/32
65536
20070509
Linux (Ubuntu)에서 IPv6 Address 사용
IPv6 Address 설정하기 (nmcli 명령 사용)
## ip addr 명령으로 설정
## a) IPv6 주소 설정
$ ip -6 addr add 2001:db8:0:1::a00:2/64 dev enp1s0
## b) IPv6 주소 삭제
$ ip -6 addr del 2001:db8:0:1::a00:2/64 dev enp1s0
## c) IPv6 주소 확인
$ ip -6 addr show dev enp1s0
## nmcli 명령으로 설정
## a) Network device list 출력
$ nmcli dev
## b) IPv6 주소 설정
$ nmcli con mod ens0 ipv6.address 2001:db8:0:1::a00:1/64 ipv6.gateway 2001:db8:0:1::1
##
## Elasticsearch 기동하기
##
$ bin/elasticsearch
##
## Kibana 기동하기
## 주의: 명령 옵션으로 --host를 지정하지 않으면, 기본값이 127.0.0.1로 설정된다.
## 만약 Web Browser가 kibana 서버와 다른 곳에 있다면 반드시 아래와 같이
## 외부에서 접근 가능한 서버 주소를 지정해주어야 한다.
$ bin/kibana --host=192.168.0.11
Elasticsearch 서버와 Kibana 서버를 설치했으면, 아래의 문서를 보면서 Python Example App을 작성한다.
Elasticsearch Python Client Example
2022년 11월 현재, 아래의 Web Docs가 가장 쉽게 설명된 것 같다.
Python PKG 설치, 인증/연결, 설정, Client Example Code 등 필요한 내용을 다 포함하고 있다.
그냥 Copy & Paste해서 `python3 myexample.py` 명령을 수행하면 된다.
Document 1개를 Elasticsearch에 저장하는 예제
from datetime import datetime
from elasticsearch import Elasticsearch
##
## NOTE : Configuration for multi node
##
NODES = [ "https://10.1.3.166:9200" ]
##
## Password for the 'elastic' user generated by Elasticsearch
##
ELASTIC_PASSWORD = "mypasswd"
##
## Create the client instance
##
es = Elasticsearch(
NODES,
ca_certs="/MyWorkSpace/elastic-stack-metal-install/elasticsearch-8.5.1/config/certs/http_ca.crt",
basic_auth=("elastic", ELASTIC_PASSWORD)
)
## Create documents
doc = {
'my-key-example-a': 'my-value-1',
'my-key-example-b': 'my-value-2',
'date': datetime.now(),
'msg': "my log message example... hello~ world ^^",
}
resp = es.index(index="example-index-0", id=0, document=doc)
print(resp['result'])
Bulk로 많은 Document를 Elasticsearch에 저장하는 예제
from datetime import datetime
from elasticsearch import Elasticsearch
from randmac import RandMac
NODES = [ "https://10.1.3.166:9200" ]
##
## Password for the 'elastic' user generated by Elasticsearch
##
ELASTIC_PASSWORD = "mypasswd"
##
## Create the client instance
##
es = Elasticsearch(
NODES,
ca_certs="/MyWorkSpace/elastic-stack-metal-install/elasticsearch-8.5.1/config/certs/http_ca.crt",
basic_auth=("elastic", ELASTIC_PASSWORD)
)
doc_id = 0
loop_cnt = 0
##
## Create documents
##
## 참고: 아래 for 문은 document 예시를 그럴듯하게 만들기 위함이다.
## 실제 Elasticsearch와는 아무런 관련이 없다. ^^
ip_networks = ["10", "172", "192"]
for ii in ip_networks:
for xx in range(254):
for yy in range(254):
for zz in range(254):
macaddress = str(RandMac())
doc = {
'app': 'nac-server',
'level': 'info',
'date': datetime.now(),
'ip-address': ii + '.' + str(xx) + '.' + str(yy) + '.' + str(zz),
'mac-address': macaddress,
'msg': 'Device ' + macaddress + ' is started',
}
doc_id += 1
loop_cnt += 1
resp = es.index(index="example-index-0", id=doc_id, document=doc)
print("Count: " + str(loop_cnt) + " " + str(resp['_index']) + " " + str(resp['_id']) + " " + str(resp['result']) + " shard:" + str(resp['_shards']) + " " + str(resp['_seq_no']))
print("\nTotal Document: " + str(doc_id))
Document를 조회하기
from datetime import datetime
from elasticsearch import Elasticsearch
NODES = [ "https://10.1.3.166:9200" ]
# Password for the 'elastic' user generated by Elasticsearch
ELASTIC_PASSWORD = "mypasswd"
# Create the client instance
es = Elasticsearch(
NODES,
ca_certs="/MyWorkSpace/elastic-stack-metal-install/elasticsearch-8.5.1/config/certs/http_ca.crt",
basic_auth=("elastic", ELASTIC_PASSWORD)
)
resp = es.get(index="test-index", id=5)
print(resp)
Kibana Web GUI로 결과 확인하기
Kibana Web GUI의 'dev tool'을 이용하여 아래와 같이 index, document를 조회할 수 있다.
Kibana Web UI
위 Web GUI에서 사용했던 Elasticsearch Query 참고.
##
## Index 정보를 가져온다.
##
GET _cat/indices?v
## 응답은 이런 모양이다.
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open example-index-0 Up1jqY3PTG2pLHdOLJcLGQ 1 1 18126912 739 2.9gb 2.9gb
yellow open test-index nGaLdNNORHKfJF1maBlNvw 1 1 2 0 11.2kb 11.2kb
##
## "example-index-0" 인덱스에 있는 모든 document 중에서 3개만 가져온다.
##
GET example-index-0/_search?size=3
{
"query": {
"match_all": { }
}
}
##
## "app" 항목 중에서 "server"라는 어휘가 포함돠ㅣㄴ 문서를 모두 가져온다.
##
GET example-index-0/_search
{
"query": {
"match": { "app": "server" }
}
}
##
## "mac-address" 항목 중에서 정확하게 "0e:c3:0d:97:ba:f0" 와 일치하는 document만 가져온다.
##
GET example-*/_search
{
"query": {
"match_phrase": { "mac-address": "0e:c3:0d:97:ba:f0" }
}
}
##
## Elasticsearch Cluster 상태 정보를 가져온다.
##
GET /_cluster/state
GET /_cluster/state?filter_path=metadata.indices.*.stat*
GET /example-index-0/_stats
##
## Elasticsearch Cluster에 저장된 전체 Document 개수를 가져온다.
##
GET /_count
##
## 위 _count 정보 중에서 _shard 정보를 제외한 정보를 가져온다.
##
GET /_count?filter_path=-_shards
그런데, 회사 회의실에 가면 대형 모니터가 4K 60Hz가 지원되지만 영상 케이블이 HDMI to HDMI인 경우가 거의 90% 이상이다.
이럴 때, 일반(저렴이) USB-C to HDMI 젠더를 사용하면 4K 30Hz로 Frame Rate가 절반으로 뚝 떨어진다.
(물론, 30만원 이상 가격의 좋은 USB-C 허브를 가진 경우라면 문제 없이 4K 60Hz 영상이 전송된다)
내가 2만원 이하의 금액으로 해결한 방법은
1) USB-C to HDMI 케이블을 구입 --> 결론: 꽝 !!! 모니터 화면이 깜빡 깜빡하는 현상이 있다.
2) USB-C to HDMI 젠더 구입 --> 결론: 완전 만족 :D 모니터 화면 깜빡이는 현상이 없고, 마우스 움직임도 맥 모니터처럼 부드럽다. 배송비를 포함해서 15,000원에 만족하면서 쓰고 있다. 심지어 이 제품은 60W PD 충전까지 지원한다. ^^ HDMI만 지원하는 모니터에서 3840 x 2160 60Hz 영상을 보고자 한다면, 이 제품 추천~