검색결과 리스트
전체에 해당되는 글 153건
- 2016.07.12 [Zookeeper] 설치
- 2016.07.12 [MS-SQL] 디스크 병목 현상 미리 계산하는 방법
- 2016.07.12 [MS-SQL] BULK Insert & BCP 명령어
- 2016.07.12 [MS-SQL] TimeStamp 값 치환
- 2016.07.12 [MS-SQL] Count 속도 계선
- 2016.07.12 [MS-SQL]스냅숍 설정
- 2016.07.12 [Redis-03] redis 3.0 cluster + test
- 2016.07.12 [Redis-02] Redis 2.8 테스트 Java
- 2016.07.12 [Redis-01] Redis 2.8 설치
- 2013.05.08 티스토리 블로그에 SyntaxHighlighter 3.0 적용하기
글
Zookeeper 문서: http://zookeeper.apache.org/doc/current/
# tar zxvf zookeeper-3.4.5.tar.gz
# cp -Rf zookeeper-3.3.5 /usr/local/zookeeper
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/usr/data/zookeeper
# the port at which the clients will connect
clientPort=2181
server.1=175.207.8.151:2888:3888
server.2=175.207.8.152:2888:3888
server.3=175.207.8.153:2888:3888
1. 디렉토리 생성 /usr/data/zookeeper 2. 파일 생성 cat > /usr/data/zookeeper/myid 3. myid파일에 멀티 서버 설정한 server.1 번호를 입력 .. ##문자 입력하니 java 숫자 변환 에러 발생 -_- 문자 된다고했는데 몬가 이상함 |
iptables -I OUTPUT 1 -p tcp --dport 2888 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 2888 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 3888 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 3888 -j ACCEPT
iptables -I OUTPUT 1 -p tcp --dport 2181 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 2181 -j ACCEPT
service iptables save
service iptables restart |
Define some default values that can be overridden by system properties zookeeper.root.logger=INFO, CONSOLE zookeeper.console.threshold=INFO zookeeper.log.dir=/usr/local/zookeeper/log zookeeper.log.file=zookeeper.log zookeeper.log.threshold=DEBUG zookeeper.tracelog.dir=/usr/local/zookeeper/log zookeeper.tracelog.file=zookeeper_trace.log # # ZooKeeper Logging Configuration # # Format is "<default threshold> (, <appender>)+ # DEFAULT: console appender only #log4j.rootLogger=${zookeeper.root.logger} # Example with rolling log file #log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE # Example with rolling log file and tracing log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE "conf/log4j.properties" 58L, 2207C |
# vi ~/.bash_profile JAVA_HOME=/usr/local/java ZOOKEEPER_HOME=/usr/local/zookeeper PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin # source ~/.bash_profile |
설정
트랙백
댓글
글
성능 모니터를 이용하여 SQL Server 의 Disk I/O 를 측정하여 Disk 병목 현상이 있는지 확인 후 디스크 증가 등의 성능 튜닝을 진행한다.
<성능 모니터 카운터>
Disk Reads/sec : 선택된 디스크 (또는 디스크 어레이) 에서 초당 수행된 읽기 작업 횟수
Disk Writes/sec : 선택된 디스크 (또는 디스크 어레이) 에서 초당 수행된 쓰기 작업 횟수
Avg. Disk Queue Length : 샘플 간격 동안 선택된 디스크에 대해 큐에 있는 읽기 및 쓰기 요청의 평균 수
Avg. Disk Sec/Read : 샘플 간격 동안 선택된 디스크에서 데이터 읽기에 소요된 평균 시간(초)
Avg. Disk Sec/Write : 샘플 간격 동안 선택된 디스크에서 데이터 쓰기에 소요된 평균 시간(초)
<임계값>
카운터 |
임계값 |
초당 디스크 당 I/O 수 |
100 이하 |
Disk Reads/sec |
0.015 (15ms) 이하 |
Disk Writes/sec |
0.015 (15ms) 이하 |
Avg. Disk Queue Length |
2 이하 |
<I/O 계산>
디스크 당 I/O 수 = [읽기 + (2 * 쓰기)] / 디스크 수
#RAID 10 어레이로 구성된 8개 디스크 드라이브의 예
카운터 |
측정값 |
Disk Reads/sec |
420 |
Disk Reads/sec |
300 |
Avg. Disk Queue Length |
43 |
Avg. Disk Sec/Read |
0.032 |
Avg. Disk Sec/Read |
0.025 |
[420 + (2 * 300)] / 8 = 127.5 디스크 당 물리적 I/O 수
결과값 127.5는 초당 100 I/O라는 한계값을 초과하므로, 이 경우 약간의 디스크 병목을 가지게 된다. 읽기 및 쓰기에 걸린 시간 값만을 조사하여도 병목이 발생함을 알 수 있다. 또, 평균 큐 길이가 43으로 I/O 요청이 큐에서 잠시 기다림으로 인해 긴 대기시간이 발생함을 의미한다.
<디스크 최소 개수>
[420 읽기 + (2 * 300 쓰기)] = 1020 I/O
1020 전체 I/O / 100 디스크 당 I/O = 10.2 필요한 디스크 수
10.2 디스크는 가질 수 없으므로 12개의 디스크로 반올림 (RAID 10을 위해서는 짝수개의 디스크 필요)
설정
트랙백
댓글
글
설정
트랙백
댓글
글
java 에서 나온 타임스템프값
DB로 할대는 뒤 3자리 제거
설정
트랙백
댓글
글
하나의 테이블에 모든 로우의 개수를 알고 싶을때 보통 아래와 같이 작성을 많이 한다.
SELECT COUNT(*) FROM TestTable;
뭐 저렇게 사용해도 상관은 없지만 속도측면에서 좀 더 나은 방법이 있어서 소개 한다.
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('TestTable') AND indid < 2;
대충 보면 이해가 될 것이니 설명은 패스한다.
속도차이는 COUNT를 하려는 테이블의 총 로우 개수가 100개 미만이라면 COUNT가 더 빠르다.
100개 이상이라면 위에 적어놓은 쿼리가 훨씬 빠르다.
속도 차이가 나는 이유는 COUNT 키워드를 실행하게 되면 table scan을 하게되지만
대체 쿼리에서는 해당 rows값을 가져오기 때문에 더 빠르다.
물론 내가 테스트해본거니 확인은 다들 해보고 적용하기 바란다.
* 해당 쿼리는 테이블의 전체 로우 개수를 가져올때만 유효하다.
설정
트랙백
댓글
글
1. DB 인스턴스 2개 설정
CREATE DATABASE CHACHACHAF_GAME_SHAPSHOT
ON (NAME = CHACHACHAF_GAME, FILENAME = 'D:\MS_SQl_DB_FILE\SNAPSHOT\CHACHACHAF_GAME_SHAPSHOT.mdf' )
as SNAPSHOT OF CHACHACHAF_GAME;
USE CHACHACHAF_GAME_SHAPSHOT
|
설정
트랙백
댓글
글
1. 일단 2.8 기준으로 설정한다.
6379.conf 6479.conf 6579.conf 6679.conf 6779.conf 6879.conf 6979.conf |
[root@localhost conf]# vi 6379.conf ## Generated by install_server.sh ## ################################## INCLUDES ################################### # include /path/to/local.conf # include /path/to/other.conf ################################ GENERAL ##################################### daemonize yes pidfile /var/run/redis_6379.pid port 6379 tcp-backlog 511 # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 # unixsocket /tmp/redis.sock # unixsocketperm 700 timeout 0 tcp-keepalive 0 loglevel notice logfile /usr/local/redis/log/redis_6379.log # syslog-enabled no # Specify the syslog identity. # syslog-ident redis # syslog-facility local0 databases 16 ################################ SNAPSHOTTING ################################ save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /usr/local/redis/data/6379 ################################# REPLICATION ################################# # slaveof <masterip> <masterport> # masterauth <master-password> slave-serve-stale-data yes slave-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 # repl-ping-slave-period 10 # repl-timeout 60 repl-disable-tcp-nodelay no # repl-backlog-size 1mb # repl-backlog-ttl 3600 slave-priority 100 # min-slaves-to-write 3 # min-slaves-max-lag 10 ################################## SECURITY ################################### # requirepass 1234 # rename-command CONFIG "" ################################### LIMITS #################################### # maxclients 10000 # maxmemory <bytes> # maxmemory-policy noeviction # maxmemory-samples 5 ############################## APPEND ONLY MODE ############################### appendonly yse appendfilename "appendonly.aof" # appendfsync always appendfsync everysec # appendfsync no no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes ################################ LUA SCRIPTING ############################### lua-time-limit 5000 ################################ REDIS CLUSTER ############################### cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 15000 # cluster-slave-validity-factor 10 # cluster-migration-barrier 1 # cluster-require-full-coverage yes ################################## SLOW LOG ################################### slowlog-log-slower-than 10000 slowlog-max-len 128 ################################ LATENCY MONITOR ############################## latency-monitor-threshold 0 ############################# EVENT NOTIFICATION ############################## notify-keyspace-events "" |
/usr/local/redis/redis-cluster-test/6379/redis-server /usr/local/redis/redis-cluster-test/6379/6379.conf /usr/local/redis/redis-cluster-test/6479/redis-server /usr/local/redis/redis-cluster-test/6479/6479.conf /usr/local/redis/redis-cluster-test/6579/redis-server /usr/local/redis/redis-cluster-test/6579/6579.conf /usr/local/redis/redis-cluster-test/6679/redis-server /usr/local/redis/redis-cluster-test/6679/6679.conf /usr/local/redis/redis-cluster-test/6779/redis-server /usr/local/redis/redis-cluster-test/6779/6779.conf /usr/local/redis/redis-cluster-test/6879/redis-server /usr/local/redis/redis-cluster-test/6879/6879.conf |
./redis-trib.rb create --replicas 1 175.207.8.169:6379 175.207.8.169:6479 \175.207.8.169:6579 175.207.8.169:6679 175.207.8.169:6779 175.207.8.169:6879 |
$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 $ \curl -sSL https://get.rvm.io | bash -s stable 이동 $ cd /usr/localrvm/bin $ rvm install 2.2.0+ gem 설치 # yum install rubygems gem redis #gem install redis |
위 클러스터 설정은 기존에 있던 sentinel + sharding 기능을 한다고 보면된다. |
http://redis.io/topics/cluster-tutorial -- 클러스터 튜토리얼 공식 http://the-earth.tistory.com/182 --번역본 http://ddakker.tistory.com/327 --4번 설정시 에러 날때 해결법 ruby 설정 |
/usr/local/redis/src/redis-cli -p 6379 shutdown /usr/local/redis/src/redis-cli -p 6479 shutdown /usr/local/redis/src/redis-cli -p 6579 shutdown /usr/local/redis/src/redis-cli -p 6679 shutdown /usr/local/redis/src/redis-cli -p 6779 shutdown /usr/local/redis/src/redis-cli -p 6879 shutdown rm -f /usr/local/redis/data/6379/* rm -f /usr/local/redis/data/6479/* rm -f /usr/local/redis/data/6579/* rm -f /usr/local/redis/data/6679/* rm -f /usr/local/redis/data/6779/* rm -f /usr/local/redis/data/6879/* |
설정
트랙백
댓글
글
1. 데이터 입력중 마스터 DB가 중지댈때 데이터 보장되는 지 확인
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.data.redis.RedisConnectionFailureException; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisSentinelPool; import redis.clients.jedis.exceptions.JedisConnectionException; /** * @Auth Hong Seungkyun * @Description * <pre></pre> */ public class RedisTest { public static void main(String[] args) throws Exception { Set<String> sentinelIps = new HashSet<>(); sentinelIps.add("175.207.8.166:26379"); sentinelIps.add("175.207.8.167:26379"); sentinelIps.add("175.207.8.168:26379"); GenericObjectPoolConfig poolConfig = new GenericObjectPoolConfig(); JedisSentinelPool jedisSentinelPool = new JedisSentinelPool("mymaster", sentinelIps, poolConfig, 5000, "1020"); Jedis jedis1 = jedisSentinelPool.getResource(); String[] keys = new String[100]; //삭제처리 StringBuffer delkey = new StringBuffer(); for (int i = 0; i < 100; i++) { keys[i] ="Test_"+i; } jedis1.del(keys); for (int i = 0; i < 100; i++) { try { RedisTest.setData(jedisSentinelPool, "Test_"+i, "value_"+i); System.out.println("input > key : Test_"+i+" , value : value_"+i); } catch (Exception e) { System.out.println(e.getMessage()); System.out.println("에러 발생"); } Thread.sleep(500); } for (int i = 0; i < 100; i++) { Jedis jedis = jedisSentinelPool.getResource(); try { String value = jedis.get("Test_" + i); System.out.println("output > key : Test_"+i+" , value :"+value); } catch (RedisConnectionFailureException e) { e.printStackTrace(); jedisSentinelPool.returnBrokenResource(jedis); } finally { try { jedisSentinelPool.returnResource(jedis); } catch (JedisConnectionException e) { System.out.println(e); } } } /* * JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "175.207.8.166",6379,0,"1020"); * Jedis jedis = jedisPool.getResource(); * try { * jedis.set("foo", "client_test"); * } catch (Exception e) { * System.out.println(e.getMessage()); * } * System.out.println(">>>>> : "+jedis.get("foo")); */ } public static void setData(JedisSentinelPool jedisSentinelPool, String key , String value ){ Jedis jedis =null; try { jedis = jedisSentinelPool.getResource(); jedis.set(key, value); } catch (RedisConnectionFailureException e) { System.out.println(e); System.out.println("헐헐2!!"); jedisSentinelPool.returnBrokenResource(jedis); } finally { try { jedisSentinelPool.returnResource(jedis); } catch (JedisConnectionException e) { System.out.println(e); System.out.println("헐헐3!!"); } } } } |
입력 도중 # redis-cli -a 1020 shutdown 명령 입력 |
1월 27, 2015 11:16:22 오전 redis.clients.jedis.JedisSentinelPool initSentinels 정보: Trying to find master from available Sentinels... 1월 27, 2015 11:16:23 오전 redis.clients.jedis.JedisSentinelPool initSentinels 정보: Redis master running at 175.207.8.167:6379, starting Sentinel listeners... 1월 27, 2015 11:16:23 오전 redis.clients.jedis.JedisSentinelPool initPool 정보: Created JedisPool to master at 175.207.8.167:6379 input > key : Test_0 , value : value_0 ....... input > key : Test_16 , value : value_16 input > key : Test_17 , value : value_17 ==>> 에러 최초 발생 Unexpected end of stream. 에러 발생 redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Software caused connection abort: socket write error 헐헐3!! java.net.SocketException: Software caused connection abort: socket write error 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 Could not get a resource from the pool 에러 발생 1월 27, 2015 11:17:03 오전 redis.clients.jedis.JedisSentinelPool initPool 정보: Created JedisPool to master at 175.207.8.168:6379 Could not get a resource from the pool 에러 발생 input > key : Test_41 , value : value_41 ==> 마스터 체이진 정상 입력 input > key : Test_42 , value : value_42 ........ input > key : Test_99 , value : value_99 //데이터 읽기 output > key : Test_0 , value :value_0 output > key : Test_1 , value :value_1 output > key : Test_2 , value :value_2 ........ output > key : Test_17 , value :value_17 output > key : Test_18 , value :null output > key : Test_19 , value :null output > key : Test_20 , value :null ...... output > key : Test_36 , value :null output > key : Test_37 , value :null output > key : Test_38 , value :null output > key : Test_39 , value :null output > key : Test_40 , value :null output > key : Test_41 , value :value_41 output > key : Test_42 , value :value_42 ........ output > key : Test_95 , value :value_95 output > key : Test_96 , value :value_96 output > key : Test_97 , value :value_97 output > key : Test_98 , value :value_98 output > key : Test_99 , value :value_99 |
강제 셧다운시 10초 이후에 시스템이 정상 운영됨 1. 10 초 사이데이터 처리 방안이 필요함 ( 서버 체크 시간 8초로 설정해서 11초후에 정상 처리 시스템 설정 시간보다 다소 시간이 지연됨.) |
설정
트랙백
댓글
글
1. 설치 위치 : http://www.redis.io/download
$ wget http://download.redis.io/releases/redis-2.8.15.tar.gz $ tar xzf redis-2.8.15.tar.gz $ cd redis-2.8.15 $ make $ make install |
$ cd utils $ ./install_server.sh |
|
|
$ vi etc/redis/6379.conf
requirepass 비밀번호
파일 저장
$ /etc/init.d/redis_6379 stop $ /etc/init.d/redis_6379 start |
src/redis-cli
auth 비밀번호
ok
사용 하면 끝 |
# iptables -I INPUT 1 -p tcp --dport 6379 -j ACCEPT
# iptables -I OUTPUT 1 -p tcp --dport 6979 -j ACCEPT # iptables -I INPUT 1 -p tcp --dport 26379 -j ACCEPT
# iptables -I OUTPUT 1 -p tcp --dport 26379 -j ACCEPT
# service iptables restart |
Master 의 경우 SECURITY 섹션에서 requirepass 를 설정하기만 하면 된다. # requirepass foobared 이 부분을 주석 제거하고, 원하는 비밀번호로 설정.. 센티널 설정할려면 이부분 설정한다. Slave 의 경우 # slaveof <masterip> <masterport> 주석 제거하고, 마스터의 아이피와 포트를 적는다. 기본 포트를 사용한다면 6379 REPLICATION 섹션에서 설정을 변경한다. # masterauth <master-password>주석 제거하고, requirepass에서 설정한 비밀번호를 적는다. # repl-ping-slave-period 10 주석 제거하고, 기본값 10으로 사용 # repl-timeout 60 주석 제거하고, 기본값 60으로 사용 repl-ping-slave-period 값보다 큰 값을 사용하라는 코멘트가 있다. |
1. 마스터 서버 종료하기 ./redis-cli - a 비밀번호 > SHUTDOWN |
2. http://lovedev.tistory.com/?page=3 설치 관련 정보 |
$yum -y install gcc
$ make distclean
$ make
$ make test
$ yum -y install tcl
$ make test |
## 마스터/ 슬레이브 설정 sentinel monitor mymaster 175.207.8.168 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel auth-pass mymaster 1020 sentinel failover-timeout mymaster 80000sentinel parallel-syncs mymaster 1 |
http://redis.io/topics/sentinel -- 레디스 기본 센티널 정보
http://yakolla.tistory.com/47 --> 자바 소스 |
http://yakolla.tistory.com/47 -- 자바 관련 설명되어있다. |
설정
트랙백
댓글
글
http://blueray21.tistory.com/30
http://blueray21.tistory.com/30
RECENT COMMENT