ndbench

scribbling 2017. 1. 11. 20:45


출처 

http://techblog.netflix.com/search/label/Cassandra


넥플릭스에서 cassandra와 elasticsearch의 성능을 테스트할 수 있는 오픈 소스인 ndbench(https://github.com/Netflix/ndbench)를 출시했었다. Grinder 또는 Load Runner과 비슷 나게 만들어진 듯 하다.


여기 문서에 따르면 Netflix가 2.0에서 2.1로 업그레이드할 때, 


Percentile 99%, 95% 정도의 지연을 볼 수 있었고,



또한, OS 업그레이드할때도 성능의 차이를 알 수 있었다고 한다. 



redis, cassandra, elasticsearch를 테스트할 때 도움이 될 것 같다. 





Posted by '김용환'
,




cassandra 로그를 설정할 때 두 가지 방법이 있다.



1) logback.xml 설정 변경


/etc/cassandra/conf/logback.xml 파일에서 특정 패키지의 로그 수준을 변경한 후, cassandra를 시작시킨다. 



<configuration scan="true">

  <jmxConfigurator />

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

    <file>${cassandra.logdir}/system.log</file>

    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">

      <fileNamePattern>${cassandra.logdir}/system.log.%i.zip</fileNamePattern>

      <minIndex>1</minIndex>

      <maxIndex>20</maxIndex>

    </rollingPolicy>


    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">

      <maxFileSize>20MB</maxFileSize>

    </triggeringPolicy>

    <encoder>

      <pattern>%-5level [%thread] %date{ISO8601} %F:%L - %msg%n</pattern>

      <!-- old-style log format

      <pattern>%5level [%thread] %date{ISO8601} %F (line %L) %msg%n</pattern>

      -->

    </encoder>

  </appender>


  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">

    <encoder>

      <pattern>%-5level %date{HH:mm:ss,SSS} %msg%n</pattern>

    </encoder>

  </appender>


  <root level="INFO">

    <appender-ref ref="FILE" />

    <appender-ref ref="STDOUT" />

  </root>


  <logger name="com.thinkaurelius.thrift" level="ERROR"/>

</configuration>




2) 동적 로그 수준 변경


logback 파일로 진행하면 다음과 같이  nodetool을 실행하면 동적으로 변경할 수 있다. 


$ nodetool setlogginglevel org.apache.cassandra.db DEBUG


Posted by '김용환'
,


nodetool에 disablebinary라는 것이 존재한다. 


이는 native binary 프로토콜을 사용 중이라고 하고 opscenter, agent와 같은 probe의 연결을 해지한다. 


아래 cassandra 코드를 보면 jmx 연결을 끊는 것으로서, 애플리케이션과 카산드라간의 영향은 없는 듯 하다. 


<참고 코드>


https://github.com/apache/cassandra/blob/cassandra-3.11/src/java/org/apache/cassandra/tools/nodetool/DisableBinary.java



https://github.com/apache/cassandra/blob/cassandra-3.11/src/java/org/apache/cassandra/tools/NodeProbe.java




Posted by '김용환'
,


mongodb에서 replication member를 재설정해야 할 때가 있다.


master가 (not reachable/healthy) 되어 있거나, slave가 다른 장비로 교체되야 할 때, 재구성해야 할 필요성이 있다..


이럴 때를 위한 mongodb 어드민 툴을 제공한다


slave만 삭제하거나 추가할 때는 아래와 쉽게 할 수 있다. 


rs.remove("1.1.1.1:27017")

rs.add("1.1.1.2:27017")



그러나 클러스터가 완전히 깨져 있고, master가 없는 상황이라면 다시 재구성해야 한다. 


cfg = rs.conf()


master, slave 구성과 상관없이 cfg에 rs.conf() 결과를 저장하고, 살아있는 일부 서버만으로 구축할 수 있다. 이 중 한 대만 구축하려고 진행한다.



cfg.members = [cfg.members[0]]



그리고 마지막으로 re.reconfig를 실행하고 강제(force:true) 설정한다. 


rs.reconfig(cfg, {force : true})

{ "ok" : 1 }





참고


https://docs.mongodb.com/manual/tutorial/reconfigure-replica-set-with-unavailable-members/

Posted by '김용환'
,



스칼라에서는 두 리스트를 결합을 다양하게 진행할 수 있다.

a와 b라는 리스트가 아래와 같다고 한다.


scala>   val a = List(1,2,3)

a: List[Int] = List(1, 2, 3)



scala>   val b = List(0.1, 0.2, 0.3)

b: List[Double] = List(0.1, 0.2, 0.3)



:: 예시이다. 


scala>   val c = a :: b

c: List[Any] = List(List(1, 2, 3), 0.1, 0.2, 0.3)


::: 예시이다. 


scala>   val c = a ::: b

c: List[AnyVal] = List(1, 2, 3, 0.1, 0.2, 0.3)



List.concat 예시이다.

scala> List.concat(a, b)

res0: List[AnyVal] = List(1, 2, 3, 0.1, 0.2, 0.3)



++ 예시이다.

scala> a ++ b

res2: List[AnyVal] = List(1, 2, 3, 0.1, 0.2, 0.3)


List 생성자를 이용한 예시이다.


scala> List(a, b)

res3: List[List[AnyVal]] = List(List(1, 2, 3), List(0.1, 0.2, 0.3))


zip 예시이다. 


scala> a zip b

res4: List[(Int, Double)] = List((1,0.1), (2,0.2), (3,0.3))


Posted by '김용환'
,