파일코인을 1년이상 운영해보며 0

파일코인 운영 문의 : scvpark@naver.com


저는 국내에 파일코인 채굴장 4개를 인프라 구축하며, 운영을 해준 경험이 있습니다. 지금 또한 운영을 해주고 있습니다.

제가 시스템 관리하는 채굴장은 테스트넷부터 같이해온 채굴장도 있고, 도중에 엔지니어 교체를 원하셔서 저에게 연락주신 채굴장들도 있습니다.

15Pib 이상 씰링 관리하고 있으며, 아직까지 단 한번의 패널티도 받지 않은건 제자랑!

테스트넷부터 지금까지 파일코인을 운영해보며 현재까지 저의 생각을 적어봅니다.

분명 메인넷 초창기에 비해서 파일코인의 채산성은 많이 떨어진 상태이나,

과연 채산성이 떨어진것이 현재 파일코인을 시작하려는 입장에서 불리할까?

지금 보면 저는 불리하지 않다고 봅니다.

파일코인을 채굴하려면 각 서버들에서 씰링 작업을 진행해야하는데, 각 작업이 완료되면 블럭체인에 메세지를 보내야 하는데, 이 메세지를 처리하는 부분에서 가스비가 소모되게 됩니다.

그런데 메인넷 초창기에는 이 가스비가 지금의 5배정도 비쌌고, 가스비가 수시로 계속 오르고 내리기 때문에, 변동되는 가스비로 인해 메세지들이 처리되지 않던적도 많았습니다.

지금은 가스비가 많이 안정화 되어 씰링을 하며 적은 가스비로 씰링을 할 수 있게되었고, 코인의 가격도 많이 떨어져있는 상태이기 때문에 초기에 시작한 사람들에 비해 불리하지 않다고 생각됩니다.

초기 시작한 사람 (1Pib 기준)

사용된 코인 약 9500개 (당시 가격 2만 ~10만)

하루 획득한 평균 블럭 : 3~4개 (1블럭당 25개)

현재 시작한 사람 (1 Pib 기준)

사용된 코인 약 5500개 (가격 2만5천원)

하루 획득 평균 블럭 : 0~1개 (1블럭당 21.92개)

파일코인은 보상개념이 즉시 지급은 25%기 때문에 75%에 대해서는 6개월에 나눠서 서서히 지급받게되어 있습니다.

서서히 지급받다보니 높아졌던 가격에서 서서히 하락세를 보였기 때문에 조금 더 낮아진 가격에 매도할수밖에 없었고, 이러한 많은 문제점들 때문에 초기 마이너에게는 불리했었다고 볼 수 있습니다.

지금 코인 가격이 많이 폭락한 상태이지만, 코인이란게 미래를 보고 투자를 하는것이다 보니 초기 시작한 마이너들보다 더 좋은 환경이 될거라 생각 됩니다.


Percona mysql Haproxy check 연동 0





Toku 엔진을 사용하려 퍼코나 mysql을 설치하고 haproxy에 연결하려고 하니 각 DB 서버에 Load balance는 정상적으로 작동을 하는데, db health check가 되지 않는다.
그래서 찾아보니 기존 mysql에서는 haproxy에서 DB 서버로 haproxy 계정으로 로그인하여 DB가 살아있는지 체크를 했었는데, percona mysql에서는 xinetd 에 mysqlchk 서비스를 추가하여 9200번 포트를 통해 DB서버로 통신하고, DB서버에서 mysqlchk 스크립트를 통해 체크를 수행하는것 같다.
아래는 테스트 진행 내용을 정리해 보았다.

구성 환경
각 OS : Centos 7.7
DB 서버 3대 : Percona mysql 8.0 설치.
Haproxy 서버 2대 : Haproxy 2.1 설치

1. 아래 Haproxy 사이트에서 Haproxy 설치파일 Download


2. Haproxy 서버에 업로드 후 설치 진행
1) 압축 해제
gzip -cdf haproxy-2.1.2.tar.gz | tar xvf -
cd haproxy-2.1.2

2) haproxy 설치
make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1
make install

3) haproxy 구성파일 복사
mkdir -p /etc/haproxy

mkdir -p /var/lib/haproxy

touch /var/lib/haproxy/stats

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

cp examples/haproxy.init /etc/init.d/haproxy

chmod 755 /etc/init.d/haproxy

systemctl daemon-reload

chkconfig haproxy on

useradd -r haproxy


4) haproxy db 설정 세팅 (vi /etc/haproxy/haproxy.cfg)
global
    log 127.0.0.1 local2
    chroot /var/lib/haproxy
    pidfile /var/run/haproxy.pid
    maxconn 8192
    user haproxy
    group haproxy
    daemon
    stats socket /var/lib/haproxy/stats

defaults
    option tcplog
    option dontlognull
    option redispatch
    option forwardfor
    retries 3
    timeout queue 1m
    timeout connect 10s
    timeout client 1m
    timeout server 1m
    timeout check 10s
    maxconn 8192

listen stats
    bind *:9000
    mode http
    stats enable
    stats realm Haproxy\ Statistics
    stats uri /haproxy
    stats refresh 2s

listen mysql-cluster
    bind 0.0.0.0:3306
    mode tcp
    balance roundrobin
    option tcp-check
    log global

    default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 8192 weight 100
    server db1 IP:3306 check
    server db2 IP:3306 check
    server db3 IP:3306 check

5) Haproxy 리스타트
systemctl restart haproxy


3. DB 서버에 Xinetd 서비스 수동 추가

vi /etc/xinetd.d/mysqlchk

service mysqlchk
{
        flags           = REUSE
        socket_type     = stream
        port            = 9200
        wait            = no
        user            = nobody
        server          = /usr/local/bin/mysqlchk.sh
        log_on_failure  += USERID
        disable         = no
        per_source      = UNLIMITED
}

4. mysqlchk.sh 스크립트 생성 (서버 환경에 맞게 아래 변수 수정 필요)
vi /etc/xinetd.d/mysqlchk

#!/bin/bash
#
# This script checks if a mysql server is healthy running on localhost. It will
# return:
# "HTTP/1.x 200 OK\r" (if mysql is running smoothly)
# - OR -
# "HTTP/1.x 500 Internal Server Error\r" (else)
#
# The purpose of this script is make haproxy capable of monitoring mysql properly
#

MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
MYSQL_USERNAME="haproxy"
MYSQL_PASSWORD=""
MYSQL_OPTS="-N -q -A"
TMP_FILE="/dev/shm/mysqlchk.$$.out"
ERR_FILE="/dev/shm/mysqlchk.$$.err"
FORCE_FAIL="/dev/shm/proxyoff"
MYSQL_BIN="/usr/bin/mysql"
CHECK_QUERY="show global status where variable_name='wsrep_local_state'"
preflight_check()
{
    for I in "$TMP_FILE" "$ERR_FILE"; do
        if [ -f "$I" ]; then
            if [ ! -w $I ]; then
                echo -e "HTTP/1.1 503 Service Unavailable\r\n"
                echo -e "Content-Type: Content-Type: text/plain\r\n"
                echo -e "\r\n"
                echo -e "Cannot write to $I\r\n"
                echo -e "\r\n"
                exit 1
            fi
        fi
    done
}
return_ok()
{
    echo -e "HTTP/1.1 200 OK\r\n"
    echo -e "Content-Type: text/html\r\n"
    echo -e "Content-Length: 43\r\n"
    echo -e "\r\n"
    echo -e "<html><body>MySQL is running.</body></html>\r\n"
    echo -e "\r\n"
    rm $ERR_FILE $TMP_FILE
    exit 0
}
return_fail()
{
    echo -e "HTTP/1.1 503 Service Unavailable\r\n"
    echo -e "Content-Type: text/html\r\n"
    echo -e "Content-Length: 42\r\n"
    echo -e "\r\n"
    echo -e "<html><body>MySQL is *down*.</body></html>\r\n"
    sed -e 's/\n$/\r\n/' $ERR_FILE
    echo -e "\r\n"
    rm $ERR_FILE $TMP_FILE
    exit 1
}
preflight_check
if [ -f "$FORCE_FAIL" ]; then
        echo "$FORCE_FAIL found" > $ERR_FILE
        return_fail;
fi
$MYSQL_BIN $MYSQL_OPTS --host=$MYSQL_HOST --port=$MYSQL_PORT --user=$MYSQL_USERNAME "$CHECK_QUERY" > $TMP_FILE 2> $ERR_FILE
if [ $? -ne 0 ]; then
        return_fail;
fi
status=`cat  $TMP_FILE | awk '{print $2;}'`

if [ $status -ne 4 ]; then
   return_fail;
fi

return_ok;

5. /etc/services 에 9200 포트 추가
vi /etc/services

기존 9200 포트 주석처리 후 아래 내용 추가
mysqlchk 9200/TCP


6. mysqlchk.sh 퍼미션 변경 및 xinetd 재시작
chmod 600 /usr/local/bin/mysql.sh
systemctl restart xinetd

7. DB에 haproxy 계정 생성
insert into user(host,user) values('127.0.0.1','haproxy');
flush privileges;

8. 확인
netstat -na | grep 9200 
tcp6       0      0 :::9200                 :::*                    LISTEN

http://proxyip:9000/haproxy





Percona mysql 및 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)


(결과)



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