Mariadb 이중화(galera) - CentoOS7.x MySQL/MariaDB

# yum clean headers
# yum clean metadata
# yum clean packages

# vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4/centos6-amd64
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1

# vi /etc/yum.repos.d/percona.repo
[percona]
name = CentOS $releasever - Percona 
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/ 
enabled = 1 
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona 
gpgcheck = 1

# yum -y install MariaDB-client MariaDB-server MariaDB-devel galera(자동설치됨)


# /etc/init.d/mysql start
# mysql_secure_installation (root 비번설정)
# mysql -uroot -p

>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'replica' WITH GRANT OPTION;
Query OK, 0 rows affected (0.122 sec)
>GRANT ALL PRIVILEGES ON *.* TO 'replica'@'%' IDENTIFIED BY 'replica' WITH GRANT OPTION;
>FLUSH PRIVILEGES;


서버 1번 : /usr/bin/mysqld_safe --wsrep-new-cluster
서버 2번 : /etc/init.d/mysql start
        
>show status like 'wsrep%';
>show status like 'wsrep_cluster_size';
# mysqladmin -uroot -preplica shutdown


curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[maxscale]
# To use the latest stable release of MaxScale, use "latest" as the version
# To use the latest beta (or stable if no current beta) release of MaxScale, use "beta" as the version
name = MariaDB MaxScale
baseurl = https://downloads.mariadb.com/MaxScale/2.2/centos/$releasever/$basearch
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-MaxScale-GPG-KEY
gpgcheck = 1
enabled = 1

# yum install maxscale

# vi /etc/maxscale.cnf
[server1]
type=server
address=192.168.100.57
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=192.168.100.56
port=3306
protocol=MariaDBBackend

[Read-Only-Service]
type=service
router=readconnroute
servers=server1
user=replica
passwd=replica
router_options=slave

[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=replica
passwd=replica

# maxadmin list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status              
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.100.57  |  3306 |           0 | Running
server2            | 192.168.100.56  |  3306 |           0 | Running
-------------------+-----------------+-------+-------------+--------------------

# maxadmin list listeners
Listeners.
--------------+---------------------+--------------------+-----------------+-------+--------
Name                 | Service Name        | Protocol Module    | Address         | Port  | State
--------------+---------------------+--------------------+-----------------+-------+--------
Read-Only-Listener   | Read-Only-Service   | MariaDBClient      | *               |  4008 | Running
Read-Write-Listener  | Read-Write-Service  | MariaDBClient      | *               |  4006 | Running
MaxAdmin-Listener    | MaxAdmin-Service    | maxscaled          | default         |     0 | Running
--------------+---------------------+--------------------+-----------------+-------+--------
=================================================

68.100.56' --datadir '/var/lib/mysql/'   --parent '28925'  ''  '''
2018-12-13 16:56:40 0 [ERROR] WSREP: Failed to read 'ready <addr>' from: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.100.56' --datadir '/var/lib/mysql/'   --parent '28925'  ''  ''
        Read: ''innobackupex' not found in PATH'
2018-12-13 16:56:40 0 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '192.168.100.56' --datadir '/var/lib/mysql/'   --parent '28925'  ''  '': 2 (No such file or directory)
2018-12-13 16:56:40 2 [ERROR] WSREP: Failed to prepare for 'xtrabackup-v2' SST. Unrecoverable.
2018-12-13 16:56:40 2 [ERROR] Aborting

Error in my_thread_global_end(): 1 threads didn't exit

# yum install ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/rudi_m:/devel-snap/CentOS_CentOS-6/x86_64/libev4-4.15-7.1.x86_64.rpm

# yum install -y percona-xtrabackup
# yum install -y https://forensics.cert.org/centos/cert/6/i386//socat-1.7.3.2-1.1.el6.i686.rpm
# chown -h mysql:mysql mysql
 

Mariadb 바이너리를 통한 듀얼마스터 구성 - CentOS7.x MySQL/MariaDB

https://downloads.mariadb.org/interstitial/mariadb-10.3.12/bintar-linux-x86_64/mariadb-10.3.12-linux-x86_64.tar.gz/from/http%3A//ftp.kaist.ac.kr/mariadb/
# tar -vxzf mariadb-10.3.12-linux-x86_64.tar.gz 
# mv mariadb-10.3.12-linux-x86_64 mariadb
# groupadd mysql
# useradd -g mysql mysql
# chown mysql.mysql -R mariadb
# cd /home/mysql/mariadb
# ./scripts/mysql_install_db --user=mysql --defaults-file=/etc/my.cnf
# support-files/mysql.server start --basedir=/home/mysql/mariadb --datadir=/home/mysql/mariadb/data
# ./bin/mysqladmin -u root password 'replica'

> GRANT file ON *.* TO replica@"%" IDENTIFIED BY 'replica';
> GRANT REPLICATION SLAVE  ON *.* TO replica@"%" IDENTIFIED BY 'replica';
> flush privileges;

# support-files/mysql.server stop --basedir=/home/mysql/mariadb --datadir=/home/mysql/mariadb/data
# support-files/mysql.server start --basedir=/home/mysql/mariadb --datadir=/home/mysql/mariadb/data

# master_log_file, master_log_pos는 show master status;로 값을 확인할 수 있음(*Master1,2 상대방 값을 입력)
# Master1
> change master to master_host='192.168.0.2', master_user='replica', master_password='replica', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=123;
> show slave status;

# Master2
> change master to master_host='192.168.0.1', master_user='replica', master_password='replica', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=234;
> show slave status;

[ 에러조치 - mariadb 실행시 에러 발생 ]
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
#yum install libaio
libaio-0.3.109-13.el7.x86_64.rpm
# find / -name libaio*
/usr/lib64/libaio.so.1
/usr/lib64/libaio.so.1.0.0
/usr/lib64/libaio.so.1.0.1
/usr/share/doc/libaio-0.3.109



ELK 한장으로 이해하기 (logstash+elasticsearch+kibana) 클라우드/빅데이터/가상화

네트워크 트래픽, 시스템 로그, WAS, WEB서버 로그, DBMS등 로그 데이터를
실시간 or 배치로 전송하여 검색엔진에 등록하고 웹에서 분석하는 환경이다.

elasticsearch의 경우 클라우드 설치가 가능하고 kibana를 통하여 시계열 분석도 가능하다.


beats -> logstash -> elasticsearch -> kibana 순으로 데이터가 흐른다. kibana는 시각화 툴이다.
beats 패키지를 수집하고자하는 각각의 서버에서 실행하고 logstash로 통합하는 환경을 많이 사용한다.
시스템 이중화는 HAproxy, nginx등을 이용하여 분배하면 된다


리눅스 삭제 파일 복구(extundelete) 리눅스

1. 패키지 다운로드 및 설치
wget http://sourceforge.net/projects/extundelete/files/extundelete-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
./configure 
yum install e2fsprogs-devel
make && make install

2. 복구하기
extundelete /dev/sda1 –restore-all
extundelete /dev/sda1 –restore-file /home/test/text.txt

3. 기타
/dev/sda1은 디스크 디바이스 마운트 정보입니다.
cat /etc/fstab에서 확인하고자하는 디바이스명이 뭔지 확인하세요.

DNS 캐시 서버 구축 리눅스

현재 사내 개발자가 7,80명정도이고 개발서버가 약 100대 가까운 상태에서
DNS 네트워크 트래픽이 13%~8%를 오간다.
향후 사용자가 2배로 늘어날 계획이라 DNS 캐시 서버를 시험으로 구축해봤다.

OS : CentOS 7.4

1. 패키지 설치
# yum install caching-nameserver

2. 설정 변경
# vi /etc/named.conf
options {
        listen-on port 53 { 127.0.0.1; any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";

        allow-query     { localhost; any; };
        allow-query-cache     { localhost; any; };

        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;

        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

# vi /etc/resolv.conf
nameserver 192.168.0.61 -> DNS 캐시서버 자기 자신

named.conf파일 링크 생성
# ln -s /etc/named.conf /var/named/chroot/etc/named.conf

3. 서비스 실행
# systemctl restart named

4. 서버 재부팅 시 자동 실행
# chkconfig --level 35 named on
# systemctl list-unit-files |grep named
 named.service                                    enabled 

5. 캐시 확인
named.conf에 설정한 cache_dump.db 파일을 생성
# rndc dumpdb -all
db파일 확인
# vi cache_dump.db
캐시 삭제
# rndc flush

접속 확인
# dig @localhost www.google.com
# dig facebook.com

6. 클라이언트 설정
사내 PC에서 DNS를 192.168.0.61로 설정한다.

ECM(Enterprise Content Management) 콘텐츠 관리 좋은 소프트웨어

사내에서 문서관리에 좋은 프로그램이다.

아래 사이트에서 다운받아 설치한다.
윈도우, 리눅스 버전이있다.

내가 생각하는 장점은 다음과 같다.
1. 속도가 빠르다.
2. 동영상을 지원 한다.
3. 버전관리가 가능하다.
4. 구글독, 클라이언트 MS Office와 연동하여 수정이 가능하다.
5. CS프로그램으로 데이터 추가/삭제가 가능하다.

아래는 윈도우버전 설치인데 설치 시 비밀번호를 물어본다.
https://www.alfresco.com/alfresco-community-download

웹접속 : http://127.0.0.1:8080/


아래는 클라이언트이다. Dropbox처럼 사용할 수 있다.
로컬에서 테스트했지만 꽤 빠른 속도를 보여준다.

인터넷 패킷 모니터링/변환/전송(scapy) 리눅스

패킷을 모니터링하는 오픈소스는 많다.
그런데 패킷 structure를 쉽게 바꾸는 오픈소스는 찾기가 힘들다.
scapy는 python기반 툴로 흐르는 패킷을 특정 조건에 맞추어 확인/변환/전송이 가능한 툴이다.

1. 패시지 설치
# pip install scapy 
# yum install scapy

2. 패키지 실행
# scapy
>>> a = rdpcap("smtp2.pcap")  // smtp2.pcap파일 로딩
>>> a[1101267].show() // 1101267번째 패킷 확인
###[ Ethernet ]### 
  dst= 3d:5a:42:f5:48:48
  src= 02:18:17:7c:55:f1
  type= IPv4
###[ IP ]### 
     version= 4L
     ihl= 5L
     tos= 0x0
     len= 82
     id= 337
     flags= DF
     frag= 0L
     ttl= 64
     proto= tcp
     chksum= 0xa0b6
     src= xxx.xxx.xxx.xxx
     dst= xxx.xxx.xxx.xxx
     \options\
###[ TCP ]### 
        sport= smtp
        dport= 42265
        seq= 1701168421
        ack= 2594866655
        dataofs= 8L
        reserved= 0L
        flags= PA
        window= 114
        chksum= 0x98e3
        urgptr= 0
        options= [('NOP', None), ('NOP', None), ('Timestamp', (1891157339, 599773574))]
###[ Raw ]### 
           load= '220 2.0.0 Ready to start TLS\r\n'

개발 참고사이트
http://www.secdev.org/projects/scapy/demo.html

[ 명령어 ]
>>> conf //패키지 환경 정보
>>> conf.iface='br0' // 브릿지 포트를 관찰한다.
>>> rdpcap("/tmp/http.pcap") // pcap파일 읽기
>>> ls(DNS) // 패킷 DNS항목의 기본 key:value를 보여준다.
>>> x[0].show() // x함수에 로딩한 첫번째 데이터를 보여준다.
>>> x[0][DNS].id = '55555'  // x배열의 첫번째 DNS항목의 id값을 55555로 변경한다.(기본:34133)
>>> wrpcap('file.pcap', pkt, append=True) // pcap파일을 저장한다.
>>> lsc() // 사용가능한 함수 출력
>>> sendp(rdpcap("file.pcap")) // 저장 패킷 재전송

[ 예제 ]
DNS의 헤더 구조를 확인하는 스크립트이다.
#!/usr/bin/python

import sys
from scapy.all import *

packet = UDP(sport=53)/DNS(id=31305, rd=1, qdcount=1, aa=0)
packet.show()
receive = sr(packet, timeout=2)
if receive:
        ans,unans=receive
        ans.summary()

>>> ls(DNS)   // DNS 해더 패킷 정보
id         : ShortField                          = (0)
qr         : BitField (1 bit)                    = (0)
opcode     : BitEnumField (4 bits)               = (0)
aa         : BitField (1 bit)                    = (0)
tc         : BitField (1 bit)                    = (0)
rd         : BitField (1 bit)                    = (1)
ra         : BitField (1 bit)                    = (0)
z          : BitField (1 bit)                    = (0)
ad         : BitField (1 bit)                    = (0)
cd         : BitField (1 bit)                    = (0)
rcode      : BitEnumField (4 bits)               = (0)
qdcount    : DNSRRCountField                     = (None)
ancount    : DNSRRCountField                     = (None)
nscount    : DNSRRCountField                     = (None)
arcount    : DNSRRCountField                     = (None)
qd         : DNSQRField                          = (None)
an         : DNSRRField                          = (None)
ns         : DNSRRField                          = (None)
ar         : DNSRRField                          = (None)

pfsense를 이용한 사내 방화벽 운영(VPN/Suricata/Snort/NTP/DHCP 등... ) 좋은 소프트웨어

pfsense는 오픈소스로 다양한 보안와 네트워크 서비스를 제공한다.
커널은 FreeBSD를 사용한다. BSD계열이 네트워크 처리에 강하니까...ㅎㅎ

1. 패키지 다운로드
아래 사이트에서 다운로드
https://www.pfsense.org/download/

2. 설치(VirsualBox)
설치 과정은 무시하겠다.
iso, usb를 통한 설치를 지원한다.
서버 아키텍처에 맞는 버전을 다운받자.
여기선 주의 사항만 설명하겠다.
VM을 설정하는데 설치 시 저장소에 iso파일이 등록된다.
설치가 완료되면 콘솔화면에서 재부팅을하는데 위 저장소에서 iso파일을 제거하지 않으면 계~~~속
install화면으로 넘어간다.
외부 네트워크 ----> em0 | pfsense | em1 ----> 내부 네트워크
위와 같은 구성으로 설치하기때문에 브릿지 설정과 내부 네트워크 대역을 설정한다.(두개 네트워크)
설치가 끝나고 저장소 iso파일을 제거한 후 부팅하면 위와 같은 화면이 표시된다.
그런데, 문제가있다. WAN --> em0가있는데 LAN --> em1이 없다.
원래는 WAN은 DHCP로 잡고, LAN은 192.168.1.1로 자동 설정되는데,
이 상태에서 웹 접속을 못하여 1) Assign Interfaces를 통하여 VLAN을 em0에 잡았더니 접속이 가능해졌다. 그런데 LAN이없어 졌다. 웹 화면 로그인 후 네트워크 추가가 가능한데, 경고가 나타나면서 다시 끊긴다. 뭔가 문제가있다.
위 그림은 여러가지 패키지를 설치하고 대시보드에 추가한 화면이다.
설치 가능한 패키지 정보를 확인하고 설치할 수 있다. 난 Suricata, Snort, ntop등을 설치했다.
사내에서 ntop을 설치하여 운영하는데 트래픽 관리에 편하다.
Suricata 설정 화면이다. (Suricata는 네트워크를 모니터링하고 알림, 패킷 차단하는 역할을 한다. 침입 탐지/차단으로 사용)
OpenVPN의 Wizards를 통하여 서비스를 구성한 화면이다.
사내에서 OpenVPN을 사용하는데 pfsense는 설치/관리를 편하게 한다.

결론을 말하면 설치 쉽고, 원하는 기능 있고, 관리 편하고 맘에 든다.
외부에서 내부로 연결하는 경로에 설치하면 상용소프트웨어 버금가는 보안 환경을 구축할 수 있을것이라 생각된다.
실제 pfsense를 설치하여 판매하는 장비도 있다.

1 2 3 4 5 6 7 8 9 10 다음