쉘스크립트를 이용한 메일 IP 평판 확인하기 (block list 등록 여부)

리눅스/Mail|2021. 12. 21. 08:53
반응형

# vi blcheck

#!/bin/sh

# 조회할 사이트 목록
BLISTS="
    cbl.abuseat.org
    dnsbl.sorbs.net
    bl.spamcop.net
    zen.spamhaus.org
"

# 에러 처리 (인자값 누락)
ERROR() {
  echo $0 ERROR: $1 >&2
  exit 2
}
[ $# -ne 1 ] && ERROR 'Please specify a single IP address'

# 역방향으로 IP 정렬
reverse=$(echo $1 |
sed -ne "s~^\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)\.\([0-9]\{1,3\}\)$~\4.\3.\2.\1~p")
if [ "x${reverse}" = "x" ] ; then
      ERROR  "IMHO '$1' doesn't look like a valid IP address"
      exit 1
fi

# 역방향 DNS 조회 수행
REVERSE_DNS=$(dig +short -x $1)
echo IP $1 NAME ${REVERSE_DNS:----}

# 반복 처리
for BL in ${BLISTS} ; do
    # 시간 출력
    printf $(env TZ=Asia/Seoul date "+%Y-%m-%d_%H:%M:%S")
    # 반전된 IP 와 블랙 리스트 출력
    printf "%-50s" " ${reverse}.${BL}."
    # dig 를 이용하여 블랙 리스트에서 IP 조회
    LISTED="$(dig +short -t a ${reverse}.${BL}.)"
    echo ${LISTED:----}
done

[출처] https://www.saotn.org/bash-check-ip-address-blacklist-status/

* 출처에서 더 많은 정보를 표시하고 있습니다. 소스가 필요하신 분은 꼭 한번 방문해 보시기 바랍니다.

 

# chmod 700 blcheck

# blcheck 10.20.30.40    // 체크하고자 하는 IP 를 인자값으로 넣는다.

 

(결과 : 블록되지 않은 상태)

IP 10.20.30.40 NAME ---
2021-12-20_23:49:57 [your_api_key].40.30.20.10.dnsbl.httpbl.org.     ---
2021-12-20_23:49:58 40.30.20.10.cbl.abuseat.org.                     ---
2021-12-20_23:49:58 40.30.20.10.dnsbl.sorbs.net.                     ---
2021-12-20_23:49:59 40.30.20.10.bl.spamcop.net.                      ---
2021-12-20_23:49:59 40.30.20.10.zen.spamhaus.org.                    ---
2021-12-20_23:49:59 40.30.20.10.combined.njabl.org.                  ---

 

(결과 : 블록 된 상태)

IP 10.20.30.40 NAME ---
2021-12-20_23:49:57 [your_api_key].40.30.20.10.dnsbl.httpbl.org.     ---
2021-12-20_23:49:58 40.30.20.10.cbl.abuseat.org.                    127.0.0.2
2021-12-20_23:49:58 40.30.20.10.dnsbl.sorbs.net.                     ---
2021-12-20_23:49:59 40.30.20.10.bl.spamcop.net.                      ---
2021-12-20_23:49:59 40.30.20.10.zen.spamhaus.org.                    127.0.0.4
2021-12-20_23:49:59 40.30.20.10.combined.njabl.org.                  ---

 

Cisco 에서 제공하는 메일 평판 정보와 비교를 해보면 (talosintelligence.com)

127.0.0.2 같은 결과가 출력되는 것이 블랙 리스트로 등록된 경우 입니다.

 

저는 위와 같이 [출처] 의 스크립트를 약간 수정하여 사용했는데

키발급 및 체크가 약간 소요되는 두 개의 라인을 체크 대상에서 제외하였으며

dnsbl.httpbl.org

combined.njabl.org

 

한국 표준 시간 사용을 위해 아래 내용으로 수정하였습니다.

env TZ=Asia/Seoul

 

필요하신 분은 [출처] 에 추가된 내용과 같이 별도 스크립트를 만들어서 반복 조회를 할 수 있습니다.

for address in `cat iplist.txt`;
   do ./blcheck $address;
   sleep 2;
   done

 

반응형

댓글()

MySQL 8.0 SSL 설정하기

리눅스/MySQL|2021. 12. 15. 15:25
반응형

MySQL 8.0.26 버전에서 SSL 적용을 해보았습니다.

낮은 버전도 다르지 않다고 생각합니다.

 

[사전 준비]

- ssl 파일 위치 : /usr/local/mysql/ssl

- 체크 사항 : mysql 계정이 접근 가능한 경로 (/root/ssl 은 안됨), 파일 권한 확인 (mysql 계정 읽기)

 

 

1. 설정

# vi /etc/my.cnf

 

[mysqld] 섹션에 아래 내용 추가

ssl_cert = /usr/local/mysql/ssl/sysdocu.tistory.com.crt
ssl_key = /usr/local/mysql/ssl/sysdocu.tistory.com.key
ssl_ca = /usr/local/mysql/ssl/ca-bundle.crt

 

 

2. 확인

mysql> show variables like '%ssl%';
+-------------------------------------+--------------------------------------------+
| Variable_name                       | Value                                      |
+-------------------------------------+--------------------------------------------+
| admin_ssl_ca                        |                                            |
| admin_ssl_capath                    |                                            |
| admin_ssl_cert                      |                                            |
| admin_ssl_cipher                    |                                            |
| admin_ssl_crl                       |                                            |
| admin_ssl_crlpath                   |                                            |
| admin_ssl_key                       |                                            |
| clone_ssl_ca                        |                                            |
| clone_ssl_cert                      |                                            |
| clone_ssl_key                       |                                            |
| have_openssl                        | YES                                        |
| have_ssl                            | YES                                        |
| mysqlx_ssl_ca                       |                                            |
| mysqlx_ssl_capath                   |                                            |
| mysqlx_ssl_cert                     |                                            |
| mysqlx_ssl_cipher                   |                                            |
| mysqlx_ssl_crl                      |                                            |
| mysqlx_ssl_crlpath                  |                                            |
| mysqlx_ssl_key                      |                                            |
| performance_schema_show_processlist | OFF                                        |
| ssl_ca                              | /usr/local/mysql/ssl/ca-bundle.crt         |
| ssl_capath                          |                                            |
| ssl_cert                            | /usr/local/mysql/ssl/sysdocu.tistory.com.crt    |
| ssl_cipher                          |                                            |
| ssl_crl                             |                                            |
| ssl_crlpath                         |                                            |
| ssl_fips_mode                       | OFF                                        |
| ssl_key                             | /usr/local/mysql/ssl/sysdocu.tistory.com.key |
+-------------------------------------+--------------------------------------------+

 

 

반응형

댓글()

CentOS 7 에서 httpd 2.4.51, PHP 8.0 소스 설치하기

리눅스/APACHE|2021. 12. 7. 14:47
반응형

1. httpd 관련 패키지 설치

# yum -y install gcc gcc-c++  libtermcap-devel gdbm-devel zlib* libxml* freetype* libjpeg* gd-* 

# yum -y install libpng* --skip-broken pcre-devel

 

 

2. apr 설치

# cd /usr/local/src

# wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz

# tar xvzf apr-1.5.2.tar.gz

# cd apr-1.5.2

# ./configure --prefix=/usr/local/apr

# make

# make install

 

 

3. apr-util 설치

# cd ..

# wget https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz

# tar xvzf apr-util-1.5.4.tar.gz

# cd apr-util-1.5.4

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

# make

# make install

 

 

4. httpd 설치

# cd ..

# wget https://archive.apache.org/dist/httpd/httpd-2.4.51.tar.gz

# tar xvzf 

# cd httpd-2.4.51

# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-rewrite --enable-ssl --enable-so 

# make

# make install

 

 

5. PHP 관련 패키지 설치

# yum -y install sqlite-devel

 

 

6. PHP 설치

# cd ..

# wget https://www.php.net/distributions/php-8.0.12.tar.gz

# tar xvzf php-8.0.12.tar.gz

# cd php-8.0.12.tar.gz

# ./configure --prefix=/usr/local/php --with-mysqli --with-openssl=/usr/local/ssl --with-pdo-mysql=mysqlnd --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --with-zlib --disable-debug --enable-calendar --enable-ftp --enable-sockets --enable-sysvsem

# make

# make install

# cp -arp php.ini-production /etc/php.ini

 

 

6. httpd 및 PHP 기본 설정

# vi /usr/local/apache/conf/httpd.conf

ServerName localhost

<Directory /usr/local/apache/htdocs>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
</Directory>

 

# vi /etc/php.ini

short_open_tag = On

date.timezone = "Asia/Seoul"

open_basedir = "/usr/local/apache/htdocs"

반응형

댓글()

OpenSSL 업그레이드 (소스 설치 / 1.0.1k to 1.1.1o in CentOS 7) 및 APM 적용하기

리눅스/OS 일반|2021. 12. 7. 14:15
반응형

1. OpenSSL 업그레이드

 

# openssl 현재 버전 확인
openssl version 
 
# openssl 설치 위치 확인
which openssl
# /usr/bin/openssl
 
# OpenSSL 지원 프로토콜 확인
openssl ciphers -v |awk {'print $2'} |sort |uniq
  
# 기본 라이브러리 설치
yum -y install gcc gcc-c++ perl pcre-devel zlib-devel wget
 
# 다운로드 및 소스 컴파일

cd /usr/local/src

wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar xvfz openssl-1.1.1o.tar.gz
cd openssl-1.1.1o/ 
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
make && make install
 
# 새로운 파일 생성하여 아래 한줄 추가하고 저장(:wq)한다. (라이브러리 등록)
vi /etc/ld.so.conf.d/openssl-1.1.1o.conf
/usr/local/ssl/lib
 
# 동적 링크 생성
ldconfig -v
 
ln -s /usr/local/ssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/ssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

링크 파일이 있으면 삭제 후 재실행


# 기존 openssl 이름 변경 (기존 패키지 버전명으로 백업)
mv /usr/bin/openssl /usr/bin/openssl1.0.1k
 
# 새로 설치한 버전 심볼릭 링크 생성
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
 
# 업데이트된 버전 확인
openssl version
 
# OpenSSL 지원 프로토콜 확인
openssl ciphers -v | awk '{print $2}' | sort | uniq
openssl1.0.2k ciphers -v | awk '{print $2}' | sort | uniq

출처: https://link2me.tistory.com/2023 [소소한 일상 및 업무TIP 다루기]

 

 

2. APM 적용

 

이미 설치된 APM 은 OpenSSL 업그레이드 버전이 자동으로 적용되지 않으므로

아래와 같은 방법으로 재설치를 하여 SSL 을 적용해야 합니다.

* SSL 설치 경로 : /usr/local/ssl

1) Apache

아래는 2.4.54 에서 확인되었습니다.

# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-rewrite --enable-module=ssl --enable-ssl=shared --with-ssl=/usr/local/ssl --enable-so

# make && make install

# /usr/local/apache/bin/apachectl restart

* 확인 방법 (httpd.conf 에서 mod_ssl.so 모듈이 로드 되어있어야 함)
# curl --head localhost

2) PHP

아래는 8.1.7 에서 확인되었습니다.

export PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig

# ./configure --prefix=/usr/local/php --with-mysqli --with-openssl=/usr/local/ssl --with-pdo-mysql=mysqlnd --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --with-zlib --disable-debug --enable-calendar --enable-ftp --enable-sockets --enable-sysvsem --with-curl --enable-mbstring

# make && make install

# /usr/local/apache/bin/apachectl restart

* 확인 방법
# php -r "echo phpinfo();" | grep -i openssl

 

3) MySQL

아래는 8.0.29 에서 확인되었습니다.

 

다른 버전의 라이브러리를 가져올 수 있도록 patchelf 패키지를 우선 설치하고 진행합니다.

# yum -y install patchelf

 

# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DWITH_SSL=/usr/local/ssl -DMYSQL_TCP_PORT=3306 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src/mysql-8.0.29/include/boost_1_77_0 -DFORCE_INSOURCE_BUILD=1

 

# make && make install

 

* 확인 방법

# ldd /usr/local/mysql/bin/mysqld |grep ssl

 

4) CURL

아래는 7.88.1 에서 확인되었습니다.

# ./configure --with-ssl=/usr/local/ssl --prefix=/usr/local/curl

# make && make install

# mv /usr/bin/curl /usr/bin/curl.old    // 기존 curl 이 있을 경우

# ln -s /usr/local/curl/bin/curl /usr/bin/curl

 

* 확인 방법

# curl -V

 

반응형

댓글()

[배치파일] 실행중인 프로세스 경로를 변수에 저장하기

윈도우즈/OS 일반|2021. 12. 4. 07:00
반응형

배치파일의 %~dp0 는 동작을 하지만 exe 로 변환시 동작하지 않는 부분이 있어 아래 내용을 작성합니다.

예제에서는 explorer.exe 실행 경로를 찾아 변수에 저장하는 것으로 합니다.

아래와 같이 배치파일을 만들어 실행해 봅니다.

 

test.bat

@echo off

FOR /F "delims=" %%i IN ('wmic process where name^="explorer.exe" get ExecutablePath') DO (
echo %%i |find /i "explorer.exe" >nul
if errorlevel 1 (echo notfound) else (echo found && set item=%%i)
)

echo %item%

FOR %%i IN ("%item%") DO (
echo filedrive=%%~di
echo filepath=%%~pi
echo filename=%%~ni
echo fileextension=%%~xi
)

둘째줄에 IN 다음 괄호안에 들어오는것이 원래의 명령어인데 출력되는 라인이 많기도 하고 원하는

줄 (총 3줄에서 2번째줄) 이 변수에 넣기 힘든 부분이 있습니다.

(괄호 안에서는 name= 부분에 = 가 특수문자로 인식되어 앞에 ^ 를 추가함)

 

세번째줄에서 각 행을 출력할때마다 Explorer 가 있는지 살펴보고 있으면 set item=%%i 를 실행하여 item 변수에

디렉토리와 파일의 온전한 경로를 넣습니다.

 

마지막으로 획득한 파일 경로를 드라이브명, 디렉토리, 파일명, 확장자로 나누어 출력해 보았습니다.

아래 코드를 추가하면 원하는 부분만 조합이 가능합니다. (파일명 제외하고 디렉토리만 : C:\Windows\)

set a=%%~di
set b=%%~pi
echo %a%%b%

반응형

댓글()

php 확장자 없이 페이지 접속 가능하게 하기

리눅스/APACHE|2021. 11. 30. 11:53
반응형

주소창에서 특정 URL 호출시 아래와 같이 파일의 확장자를 사용하지 않고

파일명 만으로 접근하게 하는 방법이 있습니다.

 

기존 접속 방식 : http://sysdocu.tistory.com/data.php

 

httpd.conf 파일을 수정하여 디렉토리 옵션에 MultiViews 를 추가합니다.

LoadModule negotiation_module modules/mod_negotiation.so // httpd 2.2 이상 버전에서 활성화 필요

<Directory /RESTAPI/html>
        Options MultiViews
        AllowOverride All
        Require all granted
</Directory>

아파치 재시작 후 아래와 같은 형태로 접근이 가능합니다.

 

 

신규 접속 방식 : http://sysdocu.tistory.com/data

 

반응형

댓글()

지원 종료된 CentOS 6 저장소 (Repository) 변경하기

리눅스/OS 일반|2021. 11. 25. 16:09
반응형

아래 파일을 열어 내용을 바꿉니다.

 

# vi /etc/yum.repos.d/CentOS-Base.repo

# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
baseurl=http://vault.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

이제 yum 명령으로 추가 패키지 설치가 가능합니다.

 

 

반응형

댓글()

PHP 에서 json 문자열을 예쁘게 출력하려면

프로그래밍/PHP|2021. 11. 11. 15:18
반응형

아래와 같이 header 에 json 타입을 명시해주고  json 문자열을 JSON_PRETTY_PRINT 옵션을 주어 decode, encode 하면 됩니다.

 

sysdocu.php

<?
header('Content-Type: application/json');    // 필수

$data = '{ "result": "success", "data":[ { "ip": "192.168.10.2", "os": "linux" }, { "ip": "192.168.10.3", "os": "windows" } ] }';

$result = json_encode(json_decode($data), JSON_PRETTY_PRINT);

echo $result;
?>

 

결과

{
    "result": "success",
    "data": [
        {
            "ip": "192.168.10.2",
            "os": "linux"
        },
        {
            "ip": "192.168.10.3",
            "os": "windows"
        }
    ]
}

 

반응형

댓글()

[에러] (13)Permission denied: [client ...] AH00035: access to ... denied ... because search permissions are missing on a component of the path

리눅스/APACHE|2021. 11. 8. 16:23
반응형

아파치 에러 로그

[Mon Nov 08 16:04:03.287735 2021] [core:error] [pid 7206] (13)Permission denied: [client 192.168.220.104:41978] AH00035: access to /test.php denied (filesystem path '/RESTAPI/html/test.php') because search permissions are missing on a component of the path

 

디렉토리와 파일 접근 권한은 있는데 위와 같이 에러로그가 남을 경우 해결 방법입니다.

 

 

점검

/var/log/audit/audit.log 로그 파일을 열어 아래 내용이 출력되었는지 살펴봅니다.

 

type=AVC msg=audit(1636355741.333:1432): avc:  denied  { getattr } for  pid=8010 comm="httpd" path="/RESTAPI/logs/test.php" dev="sda2" ino=9568262 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1636355741.333:1432): arch=c000003e syscall=6 success=no exit=-13 a0=7ffe0fa1c170 a1=7ffe0fa1c050 a2=7ffe0fa1c050 a3=ffffff00 items=0 ppid=8007 pid=8010 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=PROCTITLE msg=audit(1636355741.333:1432): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44

 

 

해결

# chcon -R -t httpd_sys_content_t /RESTAPI/html

 

반응형

댓글()

PHP 와 MySQL 연동 확인 소스

프로그래밍/PHP|2021. 11. 8. 13:40
반응형

아래는 MySQL 연결이 잘 되었는지 확인하는 소스 입니다.

PHP 8.0, MySQL 8.0 에서 테스트 시 정상 동작 하는것 확인했습니다.

 

# vi dbtest.php

<?php
$conn = mysqli_connect("192.168.2.10", "sysdocu", "12345678", "sysdocudb");
 
if ($conn) {
    echo "MySQL 연결 성공";
} else {
    echo "MySQL 연결 실패";
}
 
$result = mysqli_query($conn, "SELECT VERSION() AS VERSION");
$data = mysqli_fetch_assoc($result);
echo "<br>Version : " . $data['VERSION'];
?>

 

 

추가로 데이터를 가져오는 방법입니다.

한개 행의 데이터를 가져올때는 이런 식으로 사용하고,

 

$sql = "SELECT * FROM members WHERE id='$id' AND passwd='$passwd'";
$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);
$name = $row['name'];

$id = $row['id'];

$passwd = $row['passwd'];

여러 행의 데이터를 가져올때는 while 문을 사용합니다.

 

$sql = "SELECT * FROM members WHERE id='$id' AND passwd='$passwd'";
$result = mysqli_query($conn, $sql);
while ($row = mysqli_fetch_array($result)) {

        $name = $row['name'];
        $id = $row['id'];
        // 반복 출력
        echo $name . "<br>";
        echo $id . "<br>";
}

 

 

 

반응형

댓글()

Install MySQL 8.0 (yum) with Galera cluster in CentOS 7

리눅스/MySQL|2021. 11. 8. 10:48
반응형

CentOS 7 에서 MySQL 8.0 과 Galera 4 버전을 설치하고 cluster 설정을 해보았습니다.

아래는 간략히 설치하고 설정하는 방법만 기술하였습니다.

 

 

1. 설치

 

서버 두대에 동일하게 설치를 진행합니다.

 

# vi /etc/yum.repos.d/galera.repo

[galera]
name = Galera
baseurl = https://releases.galeracluster.com/galera-4.9/centos/7/x86_64
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

[mysql-wsrep]
name = MySQL-wsrep
baseurl = http://releases.galeracluster.com/mysql-wsrep-8.0.25-26.7/centos/7/x86_64/
gpgkey = https://releases.galeracluster.com/GPG-KEY-galeracluster.com
gpgcheck = 1

# yum -y install galera-4 mysql-wsrep-8.0

 

 

2. 사용자 생성 및 권한 부여

 

(마스터 노드 192.168.200.105 에서만)

계정 생성을 위해 mysqld 를 우선 가동해줍니다.

 

# systemctl start mysqld

 

# mysql -p

Enter password: (root 패스워드 입력 후 엔터) // 초기 root 패스워드는 로그파일에 기록되어 있습니다. (/var/log/mysqld.log)

 

최초 패스워드로 로그인하면 새로운 패스워드로 변경 전까지 일반 작업은 불가능합니다. 아래와 같이 변경 해줍니다.

mysql> alter user 'root'@'localhost' identified by '12345678'; 

mysql> flush privileges;

 

두 서버간 동기화를 담당할 계정 galera 를 생성합니다. 계정명은 무엇이든 상관 없습니다.

mysql> CREATE USER 'galera'@'localhost' IDENTIFIED WITH caching_sha2_password BY '12345678';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'galera'@'localhost'; 
mysql> GRANT GRANT OPTION ON *.* TO 'galera'@'localhost'; 
mysql> flush privileges;

 

 

3. 설정

 

두 노드의 설정 방법이 약간 다릅니다. 파란색 글자를 유의해서 설정합니다.

 

(마스터 노드 192.168.200.105 에서)

# systemctl stop mysqld

 

# vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 여기에서부터 추가
user=mysql
bind-address="0.0.0.0"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.200.105,192.168.200.106"
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M;"
wsrep_cluster_name="cluster"
wsrep_node_name="db1"
wsrep_node_address="192.168.200.105"
wsrep_sst_method="clone"
wsrep_sst_auth="galera:12345678"

설정 후 galera cluster 기능을 사용하는 mysqld 를 최초 가동 합니다. 

# mysqld_bootstrap --wsrep-new-cluster

 

(슬레이브 노드 192.168.200.106 에서)

# vi /etc/my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 여기에서부터 추가
user=mysql
bind-address="0.0.0.0"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=2G
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.200.105,192.168.200.106"
wsrep_provider_options="gcache.size=300M; gcache.page_size=300M;"
wsrep_cluster_name="cluster"
wsrep_node_name="db2"
wsrep_node_address="192.168.200.106"
wsrep_sst_method="clone"
wsrep_sst_auth="galera:12345678"

저장 후 일반적인 가동만 해주면 설정되어진 값으로 자동 동기화가 이루어집니다.

# systemctl start mysqld

 

 

4. 확인

쿼리로 직접 데이터 입력해보는 방법과 mysql 상태값을 확인하는 방법이 있습니다.

 

1) 마스터 서버에서 DB 를 생성하면 슬레이브 서버에서도 확인이 가능

mysql> create database sysdocu;

mysql> show databases;

 

2) galera cluster 설정 상태 확인

mysql> show variables like '%wsrep_cluster%';
+-------------------------+-----------------------------------------+
| Variable_name           | Value                                   |
+-------------------------+-----------------------------------------+
| wsrep_cluster_address   | gcomm://192.168.220.105,192.168.220.106 |
| wsrep_cluster_name      | cluster                                 |
| wsrep_cluster_server_id | 1                                       |
+-------------------------+-----------------------------------------+

 

 

반응형

댓글()