XenServer ISO 이미지 마운트 하기



XenCenter 프로그램에서는 쉽게 커스텀이미지를 마운트하는 기능이 없네요~


우선 윈도우 iso 이미지 파일을 젠서버로 업로드를 하여야 합니다.


젠서버 설치가 끝나고 나면 ssh 로 접속을 할 수가 있습니다.


wget 으로 다운로드 받거나 ftp 로 다운로드를 하면 됩니다.



# xe sr-create name-label="Local ISO" type=iso device-config:location=/root/ device-config:legacy_mode=true content-type=iso


device-config:location= 에 iso 이미지가 있는 폴더명을 적어주면 됩니다.


XenServer ISO 이미지 마운트 하기


XenCenter 에서 iso 이미지가 마운트 된 것을 바로 확인이 가능합니다.



XenCenter ISO 윈도우 설치


이제 New VM 을 눌러서 윈도우를 설치할 수 있습니다.



XenCenter ISO 윈도우 설치


조금전에 마운트한 iso 파일을 선택하면 됩니다.



반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x NFS 설정 방법

LINUX 2017. 7. 30. 00:27

CentOS 7.x NFS 설정 방법



NFS 설치 및 설정 방법입니다.



▶ nfs-utils 설치


# yum -y install nfs-utils

# systemctl enable nfs-server



▶ nfs 설정 ( vi /etc/exports )


/mnt/win7 *(ro,sync)


공유 하려는 폴더를 위의 내용 처럼 추가합니다.


* 에는 공유를 허용할 IP 를 지정할 수가 있습니다.

  예 : /mnt/win7 192.168.1.*(ro,sync)


ro : 읽기전용

rw : 읽기쓰기



▶ nfs-server 데몬 시작


# systemctl start nfs-server



▶ nfs 방화벽 허용


# firewall-cmd --permanent --zone=public --add-service=nfs

# firewall-cmd --reload



▶ nfs 서비스 확인


# showmount -e 도메인명


로컬인 경우는 도메인명을 제외하여도 됩니다.



▶ nfs 마운트


# mount -t nfs 192.168.1.2:/mnt/win7 /mnt/win7



▶ nfs 마운트 해제


# umount /mnt/win7



nfs 마운트는 가급적 데이터를 임시적으로 공유하거나 서버관리용으로 제한적인 사용은 괜찮으나,


여러대의 서버에 연결하여 웹서비스 같은 용도로는 사용하지 않는게 좋습니다.



반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 ISO-13346 UDF 이미지 마운트하기



리눅스에서 ISO Image 마운트 하는 방법입니다.



# mount -t iso9660 -o loop /root/Win_x64_dvd.iso /mnt/win7

mount: /dev/loop1 is write-protected, mounting read-only

[root@vps mnt]# ls -l win7/

total 1

-r-xr-xr-x 1 root root 135 Nov 21  2010 readme.txt

[root@vps mnt]# cd win7/

[root@vps win7]# ll

total 1

-r-xr-xr-x 1 root root 135 Nov 21  2010 readme.txt

[root@vps win7]# cat readme.txt

This disc contains a "UDF" file system and requires an operating system

that supports the ISO-13346 "UDF" file system specification.


기존 방법으로는 마운트가 안되는군요~


아래 처럼 마운트를 시도합니다.


# mount -t udf /root/Win_x64_dvd.iso /mnt/win7

mount: /dev/loop1 is write-protected, mounting read-only


이제 정상적으로 마운트가 되었습니다.


반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

XenServer 설치

IT이야기 2017. 7. 28. 18:05

XenServer 설치



코노하 VPS 에 2G RAM / 3 Core 에 젠서버를 설치해보았습니다.


코노하 vps 는 "HVM is required for this operation" 이런 메시지가 떠서 VM 설치가 되지 않더군요~


아무튼 설치 방법만 보도록 합니다.


Virtio disk 와 network 는 Off 로 설정하고 진행하여야 합니다.



XenServer 설치


qwerty us 선택



XenServer 설치


Ok 누르면 됩니다.



XenServer 설치


CITRIX LICENSE AGREEMENT 에서 Accept EULA 를 선택합니다.



XenServer 설치


Ok 선택



XenServer 설치


Enable thin provisioning (Optimized storage for XenDesktop) 체크하고 Ok


할당한 용량을 정확하게 지킬려면 체크를 안해야 한다는군요~



XenServer 설치


Local media 를 선택



XenServer 설치


Skip 해도 되지만 Verify 로 진행



XenServer 설치


이상이 없다는군요~



XenServer 설치


젠서버의 비밀번호를 설정합니다.



XenServer 설치


고정아이피가 아니므로 DHCP 선택


고정 ip 가 있다면 Static 으로 설정하면 됩니다.



XenServer 설치


Hostname 및 DNS 정보를 설정합니다.



XenServer 설치


Time Zone 은 Asia



XenServer 설치


Seoul 선택



XenServer 설치


시간 동기화는 NTP 가 좋겠지요.



XenServer 설치


Ok 선택



XenServer 설치


Install XenServer 선택



XenServer 설치


설치가 되고 있습니다.



XenServer 설치


Supplemental Packs 는 No



XenServer 설치


설치 ISO 를 제거하면 됩니다.



XenServer 설치


XenServer 가 부팅된 화면입니다.



XenServer 설치


서버 아이피를 브라우저에 입력하고 로딩합니다.


XenCenter installer 를 클릭해서 다운로드 및 설치합니다.



XenServer 설치


설치가 다 되었습니다.



XenServer 설치


Add New Server 를 클릭 후


서버 아이피와 비밀번호를 입력하면 됩니다.



반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL INNODB 에서 INSERT 속도 느린 문제



루프문으로 여러건을 테이블에 insert 할 때 속도 너무 느리다면 아래의 글로벌 변수를 확인해보세요.


show variables like 'innodb_flush_log_at_trx_commit';


이 값이 1 로 나온다면 0 이나 2 로 설정하시면 됩니다.


set global innodb_flush_log_at_trx_commit = 2;



innodb_flush_log_at_trx_commit 에 대한 설명은 아래를 참고하세요.


https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit


innodb_flush_log_at_trx_commit



1 : 기본값

0 : mysqld 가 crash 되면 최대 초당 트랜젝션이 손실 될 수 있음.

2 : crash 되거나 정전시 두번째 트랜젝션을 잃을 수 있음.


1이 아니면 데이터가 손실될 수 있다는 이야기네요~


loop 돌리기 전에 0 또는 2 로 설정하고 loop 가 끝나면 다시 1 로 설정하면 되겠습니다.


반응형

'IT이야기' 카테고리의 다른 글

XenServer ISO 이미지 마운트 하기  (0) 2017.07.30
XenServer 설치  (0) 2017.07.28
MySQL mysql vs mysqli vs pdo Benchmark Test  (0) 2017.07.27
MySQL mysqli 함수 샘플  (0) 2017.07.26
MySQL 인덱스 없는 조인이 너무 많습니다  (0) 2017.07.13
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysql vs mysqli vs pdo Benchmark Test



mysql, mariadb 모두 테스트를 해보았지만 결과는 거의 비슷하게 나왔습니다.


처리 속도 Benchmark 테스트는 아래의 PHP 소스 코드로 진행하였습니다.



▶ 벤치마크 테스트 소스


<?php

error_reporting(E_ALL);

ini_set('display_errors', TRUE);

ini_set('display_startup_errors', TRUE);

set_time_limit(0);


$db_addr = '127.0.0.1';

$db_user = 'user';

$db_pass = 'pass';

$table = 'test.benchmark_table';


benchmark($table, 100000);


function benchmark($table, $rows) {

  global $db_addr;

  global $db_user;

  global $db_pass;

  $table_innodb1 = $table."_innodb1";

  $table_innodb2 = $table."_innodb2";

  $table_innodb3 = $table."_innodb3";

  $table_myisam1 = $table."_myisam1";

  $table_myisam2 = $table."_myisam2";

  $table_myisam3 = $table."_myisam3";


  mysql_connect($db_addr, $db_user, $db_pass);

  mysql_query('drop table if exists '.$table_innodb1);

  mysql_query('drop table if exists '.$table_innodb2);

  mysql_query('drop table if exists '.$table_innodb3);

  mysql_query('drop table if exists '.$table_myisam1);

  mysql_query('drop table if exists '.$table_myisam2);

  mysql_query('drop table if exists '.$table_myisam3);

  mysql_query("CREATE TABLE $table_innodb1 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=INNODB");

  mysql_query("CREATE TABLE $table_innodb2 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=INNODB");

  mysql_query("CREATE TABLE $table_innodb3 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=INNODB");

  mysql_query("CREATE TABLE $table_myisam1 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=MyISAM");

  mysql_query("CREATE TABLE $table_myisam2 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=MyISAM");

  mysql_query("CREATE TABLE $table_myisam3 (id int(11) AUTO_INCREMENT, str1 varchar(255), rint int(11), PRIMARY KEY (id)) ENGINE=MyISAM");


  mysql_query("begin");

  for ($i=0; $i<$rows; $i++) {

    mysql_query("insert into $table_innodb1 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_innodb2 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_innodb3 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_myisam1 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_myisam2 values (0, 'benchmark test $i', rand() * $rows * 100)");

    mysql_query("insert into $table_myisam3 values (0, 'benchmark test $i', rand() * $rows * 100)");

  }

  mysql_query("commit");


  mysql_conn1($db_addr, $db_user, $db_pass, $table_innodb1);

  mysql_conn2($db_addr, $db_user, $db_pass, $table_innodb2);

  mysql_conn3($db_addr, $db_user, $db_pass, $table_innodb3);

  mysql_conn1($db_addr, $db_user, $db_pass, $table_myisam1);

  mysql_conn2($db_addr, $db_user, $db_pass, $table_myisam2);

  mysql_conn3($db_addr, $db_user, $db_pass, $table_myisam3);

}


function mysql_conn1($db_addr, $db_user, $db_pass, $table) {

  $i = 0;

  $start = get_time();

  $db = mysql_connect($db_addr, $db_user, $db_pass);

  $result = mysql_query('select * from '.$table, $db);

  while ($row = mysql_fetch_assoc($result)) { $i++; $test = $row; }

  mysql_close($db);

  echo 'rows : '.$i.' '.$table.' mysql '.round(get_time()-$start, 5)."<br>";

}


function mysql_conn2($db_addr, $db_user, $db_pass, $table) {

  $i = 0;

  $start = get_time();

  $db = new mysqli($db_addr, $db_user, $db_pass);

  $result = $db->query('select * from '.$table);

  while ($row = $result->fetch_assoc()) { $i++; $test = $row; }

  $db->close();

  echo 'rows : '.$i.' '.$table.' mysqli '.round(get_time()-$start, 5)."<br>";

}


function mysql_conn3($db_addr, $db_user, $db_pass, $table) {

  $i = 0;

  $start = get_time();

  $db = new PDO('mysql:host='.$db_addr, $db_user, $db_pass);

  foreach ($db->query('select * from '.$table) as $row) { $i++; $test = $row; }

  $db = null;

  echo 'rows : '.$i.' '.$table.' pdo '.round(get_time()-$start, 5)."<br>";

}


function get_time() {

  $t = explode(' ', microtime());

  return ((float)$t[0] + (float)$t[1]);

}

?>



▶ MySQL 5.1.73 결과


rows : 100000 redblue.benchmark_table_innodb1 mysql  0.39674
rows : 100000 redblue.benchmark_table_innodb2 mysqli 0.3815
rows : 100000 redblue.benchmark_table_innodb3 pdo    0.33571


rows : 100000 redblue.benchmark_table_myisam1 mysql  0.11391
rows : 100000 redblue.benchmark_table_myisam2 mysqli 0.11894
rows : 100000 redblue.benchmark_table_myisam3 pdo    0.12141



▶ MariaDB 5.5.52 결과


rows : 100000 test.benchmark_table_innodb1 mysql  0.2214
rows : 100000 test.benchmark_table_innodb2 mysqli 0.37862
rows : 100000 test.benchmark_table_innodb3 pdo    0.28196


rows : 100000 test.benchmark_table_myisam1 mysql  0.22379
rows : 100000 test.benchmark_table_myisam2 mysqli 0.19565
rows : 100000 test.benchmark_table_myisam3 pdo    0.28953


다른 분들이 테스트 한 결과에는 mysqli 가 좀 더 빠르던데 저는 이상하게 거의 비슷하게 결과가 나오는군요~


그나마 mariadb 에서는 효과가 있는 듯 합니다.


반응형

'IT이야기' 카테고리의 다른 글

XenServer 설치  (0) 2017.07.28
MySQL INNODB 에서 INSERT 속도 느린 문제  (0) 2017.07.28
MySQL mysqli 함수 샘플  (0) 2017.07.26
MySQL 인덱스 없는 조인이 너무 많습니다  (0) 2017.07.13
VNC Viewer 원격접속  (0) 2017.07.02
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysqli 함수 샘플



mysql, mysqli 두 함수의 속도를 비교해 보았지만 mysqli 함수로 변경할 매리트가 있지는 않은 것 같습니다.


테스트한 환경에서는 이렇다할 속도 차이는 없는것 같습니다.


객체지향적이나 절차지향적으로 하나 이 또한 속도 차이는 없었습니다.


언제 써먹을지 모르겠지만 함수는 아래 처럼 정리하였습니다.


<?php

$db_addr = "127.0.0.1";

$db_name = "dbname";

$db_user = "user";

$db_pass = "pass";

$db_conn = "";


function DBOpen() {

global $db_conn;

global $db_addr;

global $db_name;

global $db_user;

global $db_pass;


if(!$db_conn) {

$connect = mysqli_connect($db_addr, $db_user, $db_pass, $db_name);

if(mysqli_connect_errno()) {

echo "Could not connect: " . mysqli_connect_error();

exit();

}

$db_conn = $connect;

}

return $db_conn;

}


function DBQuery($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

DBClose($connect);


return $result;

}


function DBQueryRow($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

if($result) {

$row = mysqli_fetch_row($result);

mysqli_free_result($result);

}

else {

$row = "";

}

DBClose($connect);


return $row;

}


function DBQueryRowName($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

if($result) {

$row = mysqli_fetch_array($result);

mysqli_free_result($result);

}

else {

$row = "";

}

DBClose($connect);


return $row;

}


function DBQueryArray($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

$table_result=array();

if($result) {

while($row = mysqli_fetch_assoc($result)){

$table_result[] = $row;

}

mysqli_free_result($result);

}

DBClose($connect);


return $table_result;

}


function DBQueryObject($sql) {

$connect = DBOpen();

$result = mysqli_query($connect, $sql);

if($result) {

$row = mysqli_fetch_object($result);

mysqli_free_result($result);

}

else {

$row = "";

}

DBClose($connect);


return $row;

}


function DBClose($connect) {

//mysqli_close($connect);

}

?>


위의 함수는 절차식 형식입니다.


반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL Max processes 늘이기



DB 운영중에 아래와 같은 에러가 발생할 때는 process 갯수의 제한 때문일 겁니다.


CentOS 6.x 버전은 default 값이 1024 이고 CentOS 7.x 버전은 4096 입니다.


하지만 하드웨어 사양에 따라 mysql 에서 사용할 수 있는 process 수는 달라지기도 합니다.


ERROR 1135 (HY000): Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug



먼저 mysql 에서 할당된 프로세스수가 얼마인지 알아봅시다.


# ps aux | grep mysqld_safe | grep -v grep

root      3374  0.0  0.2 110268  1472 pts/0    S    10:35   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql


mysqld 의 pid 값을 먼저 찾습니다.


3374 이군요~


# cat /proc/3374/limits | grep processes

Max processes             1861                 1861                 processes


값을 늘여보도록 하겠습니다.


# vi /etc/security/limits.conf

*       -       nproc   4096

*       -       sigpending 4096


저장하고 재접속 하여야 합니다.


재접속 안하려면


# ulimit -u 4096

# ulimit -i 4096

명령어를 실행하면 됩니다.


이제 mysql 을 재시작 합니다.


# service mysqld restart


Max processes 값이 변경되었는지 위의 방법으로 확인하면 됩니다.



반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL 인덱스 없는 조인이 너무 많습니다



phpMyAdmin 의 시스템 분석에서 리포트 된 내용입니다.


조인에 필요한 컬럼은 대부분 인덱스가 걸려있는데도 이런 메시지가 뜨네요~


이슈:

인덱스 없는 조인이 너무 많습니다.


추천:

이는 조인시 전체 테이블 스캔이 일어난다는 것을 뜻합니다. 질의의 조인 컨디션에 사용되는 열들에 인덱스들을 추가함으로서 속도를 크게 개선할 수 있습니다.


인증:

테이블 조인 평균: 10.7 분당, 이 값은 시간당 1미만이어야 합니다.


사용된 변수 / 수식:

(Select_range_check + Select_scan + Select_full_join) / Uptime


테스트:

value * 60 * 60 > 1


상태값에서 확인을 해보았습니다.


Select full join 520

Select full range join 0

Select range 20.6 k

Select range check 0

Select scan 102.9 k


Select_scan 값이 좀 많군요~


인덱스 없는 조인도 슬로우쿼리 처럼 로그가 있다면 분석이 될텐데 좀 아쉽군요~



반응형

'IT이야기' 카테고리의 다른 글

MySQL mysql vs mysqli vs pdo Benchmark Test  (0) 2017.07.27
MySQL mysqli 함수 샘플  (0) 2017.07.26
VNC Viewer 원격접속  (0) 2017.07.02
MariaDB 암호화 복호화 방법  (0) 2017.06.30
간편 결제수단 페이팔 가입하기  (0) 2017.06.29
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL query_cache_limit query_cache_size 튜닝



query_cache_list, query_cache_size, sort_buffer_size, read_rnd_buffer_size 에 대해서 알아보겠습니다.



아래는 phpMyAdmin 에서 제공하는 시스템 분석 문구입니다.



▶ query_cache_limit, query_cache_size


이슈:

쿼리 캐시의 80% 미만이 활용되고 있습니다.


추천:

This might be caused by query_cache_limit being too low. Flushing the query cache might help as well.


인증:

전체 쿼리 캐시 크기(Size)에서 남은 쿼리 캐시 메모리의 현재 비율은 10% 입니다. 80%보다 높아야 됩니다


사용된 변수 / 수식:

100 - Qcache_free_memory / query_cache_size * 100


추천에는 query_cache_limit 값이 너무 낮아서 그럴 수 있다고 하는군요~


query_cache_limit 디폴트 값이 1MB 인데 사용되는 쿼리에 따라 달라지므로 무조건 높인다고 좋은 건 아닌 것 같습니다.


대부분의 환경에서는 query_cache_limit 값을 올려 주면 비율은 올라갈 겁니다.


하지만 용량이 큰 쿼리결과 값이 채워지면 캐시되는 수가 전체적으로 줄어들게 됩니다.


그리고 query_cache_min_res_unit 의 default 값이 4096 인데 이 값을 줄여도 캐시 비율을 올릴 수 있습니다.


하지만 값을 너무 낮추게 되면 단편화가 심해질 것 입니다.



하루가 지나도 쿼리 캐시 비율이 10% 근처에 머물고 있다면 query_cache_size 가 너무 커서 그럴 수 있습니다.


이런 경우에는 query_cache_size 를 줄여서 확인이 필요합니다.



▶ sort_buffer_size, read_rnd_buffer_size


이슈:

너무 많은 정렬로 인해 임시 테이블의 사용이 발생합니다.


추천:

시스템의 메모리 한계값에 따라 sort_buffer_size 나 read_rnd_buffer_size 값을 증가시키세요


인증:

임시 테이블 평균: 22.33 시간당, 이 값은 시간당 1보다 작아야합니다.


사용된 변수 / 수식:

Sort_merge_passes / Uptime


테스트:

value * 60 * 60 > 1


상태 값에서 Sort_merge_passes 값을 모니터링 해서 값이 증가하면 sort_buffer_size 와 read_rnd_buffer_size 값을 증가시켜서 다시 확인을 합니다.


Sort_merge_passes 값이 변화가 없거나 아주 조금씩 증가하면 튜닝이 됐다고 보면 됩니다.


반응형
블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,