2022-03-28

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다.

2. fdisk -l로 하드디스크를 확인한다. 

- interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다. 

- 마지막에 w를 해야 실제로 반영이 된다. 

3. mkfs를 하여 어떤 파일시스템으로 만들것인지 -t type옵션으로 만든다. 

4. mount를 하여 실제로 데이터를 저장할수 있도록 (리눅스가 인식할 수 있도록) 만든다. 

mount -t xfs -o defaults /dev/sdb1 이런식으루 옵션지정해서 하면. 일시적인 마운트가 되어 reboot 할시 마운트가 해제된다. 

영구 마운트를 하고 싶은 경우 /etc/fstab파일에 작성하고 mount -a 를 적용한다. 

2022-03-24

0324 ubuntu gateway 확인하기

 



route -n 명령어를 사용하여 destination 및 gateway를 확인할수있다!

0324 ubuntu multi gateway 설정

 이상하게 우분투에서 network interface 여러개 해놓은경우 둘중의 하나만 적용되는 상황발생 ( 그것도. netplan 최신버전에서만. ) centOS는 문제없는데 왜 얘만 이러나. 했음

gateway가 여러개인경우 가상환경에서 충돌한다고함


http://blog.engintruder.com/257

<<위 블로그에서. 힌트를 찾을수있었다!!!




라우팅을 명시적으로 하여 풀었다!!
enp0s3에는. 외부인터넷망으로 향할거니까 0.0.0.0/0으로 to하고. 
게이트웨이설정해준다! (여기서는. 호스트pc가 자동으로 dhcp할때 설정해준 게이트웨이가 된다)

enp0s8은 내부인터넷 
- to 에는 서브넷을(향하는곳)
via 에는 게이트 웨이 설정!!

이제 인터넷도 되고. 내부 통신도 됨 ㅋ개굿 ㅋ

더불어. route 명령어를 통해서 gateway를 확인할수있다는것도 알았다~!

2022-03-19

0319 도메인에 SSL적용

 1. 도메인 생성(무료도메인사이트이용)

2. AWS route53 이용해서 네임서버 업뎃

3. nginx설치

4. site-enabled의 디폴트 없앤다(nginx 페이지로 direct하므로 귀찮아짐)

- 주의사항 - 여기에 쓰는 파일이름은 도메인이름(내가 public하게 열고자 하는. 서브도메인 포함해도 oK)와 일치해야한다

5. 443포트, 80포트열고

6. certbot이용하면

자동으로 443적용완료!

2022-03-13

0313 docker command old/new

 1. old 버전

-대상이 명확하지 않음

ex) docker ps

2. new 버전

- docker <대상> <커맨드> <옵션>

ex) docker container ls -a

docker image ls

docker network ls 등등

- docker --help

혹은

- docker <대상> --help로 탐구할수있다

2022-03-12

0312 docker disk 100점유하는 현상

 - 이상했다. 오늘 메모리 32G 장착해서 총 메모리 40G니까 분명 샥샥 돌아가야되는데 여전히 도커만띄우면 버버벅 대면서 돌아가지가 않는거다... 

- 나는 wsl을 이용해서 도커&쿠버네티스 띄워서 사용하고있었는데 알고보니 이 wsl에 memory점유 사용설정이 있었더라. memory=8gb로 한계치 재설정(원래는 2gb였다 그래서 속도 이따위였구나..)셧다운한뒤 (자동으로 재시작된다) 다시시도.. 

- 와!! 설정 바꾸고 나니까 디스크 사용량이 10퍼 내외로 줄었다 미친 ㅋㅋㅋ

- 더불어 wsl명령어도 엄청 빨르게 잘먹는다.. 메모리 최고네;.. 다다익램은 과학이다~

- 12G까지 한계치를 늘렸고, 현재 메모리 사용량 15G이다.. 이거 진짜 메모리 안늘렸으면 어쩔뻔했냐.. 이래서 macOS에서도 버벅댔구나. 얘는 총 메모리16G밖에 안댐. 

2022-03-06

0306 docker + mysql

  - previleged 모드

: MYSQL 실행하는데 디렉토리 못만든다고 에러떠서 넣고 실행 (도커의 권한문제인듯)

- 도커 컨테이너를 구동시키는 호스트의 ip : inspect키워드로 확인

- 도커를 돌리는호스트의 포트번호 열려있으면 해당 포트 충돌나니까 안쓰는 포트로 포트포워딩 하기

- my.cnf설정하기

2022-03-05

0304 redis 실습 3

 1. 레디스 priority queue같은 기능 -> sorted set, zadd를 사용할 수 있다

- priority의 value를 지정해서 탑 점수인 애를 추출한다거나 가능.

만약에 동점이면 -> 알파벳순으로 정렬. reverse order도 가능하다.

2. 레디스 트랜잭션 :

watch 를 걸어서 lock할수있음! multi-exec해서끝나는순간 검증하고 만약에 경합할경우 해당 트랜잭션 수행하지 않는다.

2022-03-04

0304 redis 실습2

 1. NX : 키가 존재하지 않는다면 실행

2. XX : 존재한다면 실행

3. exists키워드 

4. incr, decr키워드 ->조회수같은거에 유용할듯!!

5. 레디스의 데이터 타입 : string, list (큐 혹은 덱으로 이용가능), hash(자바의 해쉬맵과 비슷, 그룹으로 넣는다)

- list : lpush lpop, rpush rpop이용해서 큐 , 덱, 스택등으로 활용가능할것!!

- hash : hgetall하면 다 준다 근데 key value 알아보기 어렵다 redis-cli 에서는. 이것은 자바로 해결하자!

6. 레디스 데이터 타입 : set

sadd , sdel , 합집합 교집합 차집합을 만들수있다.

로그인한 현재 사용자, 중복 없이 구현.

smembers 전체 set멤버 확인 

ismembers set멤버에 포함되는지 확인. 

0304 redis 실습

 1. 레디스란

- 인메모리 데이터베이스

2. get, set키워드

3. keys 키워드

4. scan 키워드 : keys가 너무 버겁기때문에 등장. 일종의 페이징(커서)를 제공한다.

match , count같은 옵션 사용할 수 있다.

5. flushdb 

6. ex 옵션 -> ttl을 지정한다. 매우유용!! 초단위설정한다.

expire키워드 사용하여 해당 키의 ttl을 재설정할수있다

---

도커는 다시배워야 할거같음!! 제대로 써먹고싶다!!! (특히 도커 컴포즈!)

2022-02-27

0227 리눅스 커맨드 실습

 <ps>

- a : all

- x : all 프로세스 해당 터미널이 아닌것까지

- u : 해당 유저프로세스

- $USER : 현재 로그인한 유저

- $(변수명 길경우) : 이런식으로 괄호쳐도 됨

VSZ (Virtual memory SiZe) : 가상 메모리 크기. 해당 프로세스가 접근할 수 있는 모든 메모리의 크기. 

- RSS (Resident Set Size) : 실제로 RAM에 차지하고있는 메모리 사이즈

- TTY : 가짜 터미널

<less, more>

 -페이지 단위로 볼수있음

- 파이프라인에서 이용시 유용하다


<top>

- shift m :메모리순정렬

- shift t : time순 정렬

-up : uptime

- tasks : 프로세스 개수

- id : idle 

-us 유저프로세스


<bc>

basic calculator


<free>

- 메모리 사용량

- buff/cache와 available이 0에 가까울경우 매우 위험 경계한다

- t옵션 total붙일수있다


0227 docker-compose

 - 여러 컨테이너를 한꺼번에 띄울수있다.

- 장점: develop할때, config바꾸고 서비스 하나하나 변경할 필요없이 docker-compose만 띄우면 되니까 짱 편하다.

- private network 자동으로 만들어준다. 외부와 격리되므로 안전!

- 컨테이너를 서비스 별로 분리

- 버전, 서비스, port , depends_on 등의 키워드를 명시한다

0227 docker networking

 <도커 컨테이너끼리 커뮤니케이션 하는 방법.>

- 특징

1) private ip를 부여받는다

2) embeded dns

1. bridge

- 디폴트

- 명시하지 않을경우 docker network create하면 브릿지로 만들어진다.

- 도커 컨테이너끼리 ip를 할당받으며 이 ip로 소통한다. host는 모름.

2. host

- 호스트와 소통가능

3. none

- 다른 도커 컨테이너들과 커뮤니케이션 할 수 없다.


--

특이사항!!

- 무지무지 짱인거-> 도커 컨테이너 명을 그대로 hostname으로 사용할 수 있다 

- 도커 짱이다.. 이제 vm 쓰지말구. 도커파일 하나 딱 작성해서.   RUN커맨드 명시하구 끝일듯... 파일두 걍 마운트해서 공유하면되고.. 귀찮게 scp안해도 되구..

- 실제 프로덕션에서 도커 쓰는거는 고려해야 할거같은데 (넘 경량화라는 게 장점이자 단점인듯. 프로세스 죽이면 다 날라가는 것두 있으니..) 개발환경에서는 넘넘 활용가능성이 좋아보인다. 

0227 docker storage

<도커 컨테이너끼리 파일을 공유하는 방법.>

- 컨테이너끼리 target과 source를 정의하여 파일을 공유한다!!

 1. volume

- 더 권장되는 방식이라고 함

- 호스트와 별개로 논리적인 공간을 부여받는다

- 마운트 type설정하지 않을 시 디폴트.

- 호스트와 독립적으로. 컨테이너들끼리 파일공유하고싶을때.

2. bind

- 호스트의 파일시스템에 묶인다

- 컨테이너의 위치를 변경하는 경우 영향을 받게됨

- 해당 위치에 파일쓰면 컨테이너 바깥으로 빠져나와도. 마운트 된 그위치- 에 호스트에도 파일이 생겨있다! 신기~~

- 실시간으로 호스트의 파일내용 공유하고 싶을때 유용(git 소스 코드 실시간으로 반영한다던지)

3. tmpfs

- volume과 동일하나 컨테이너stop할경우 해당 파일들 날라가게 된다

- 잠시동안만 사용하는 보안 파일들에적절



0227 docker

 1. 도커란 : 격리된 환경에서 어플리케이션 실행

2. 장점: vm 보다 훨씬 가볍다. 리소스를 많이 안잡아먹음 - develop환경에서 쓰기 좋다 . 내 로컬에서는 되는디요? -난 안된다고요~ => 이런 상황 줄어들것임 ㅎ

3. 용어 : 

1) image : 재료

2) container : 실제로 실행중인 이미지

3) dockerfile: 명령어들을 모아놓은 문서

4) docker hub: 이미지들 모아놓는 저장소 repository

4. 도커 파일을 손수 작성하여 -> 이미지를 만들고 ->그 이미지로부터 컨테이너를 생성한다.

5. 도커파일에는 uppercase로 되어있는 키워드들이 존재함

- base이미지를 다운받고, 어느 디렉토리에서 실행할지 명시하고, 어떤 명령어를 실행할지를 명시한다

6. docker run 명령어: 이미지를 만들고, 실행하는 것 한꺼번에 편하게 할수있다. 다양한 옵션이있다

- detach 모드 실행

- port 포워딩

- name옵션


등등

7. 한번 만든 컨테이너 삭제하여도image란에 캐시되기때문에 훨씬 빠르게 또 컨테이너 만들 수 있다. 

8. 이미지 자체는 프로세스가 아니므로 cpu자원 잡아먹지 않는다 개꿀~ 그러나 용량은 차지하므로 필요없으면 삭제


9. docker exec -it 

interactive 로 실행한다

빠져나올때는 ctl P ctl Q


---

dockerfile keyword

- FROM : 베이스 이미지 명시

RUN  : 실행할 이미지 명시

- CMD : 실행할 커맨드 명시

- WORKDIR : 컨테이너가 실행되는 위치

COPY : 파일들을 해당 컨테이너로 복사하여라

EXPOSE  : 포트번호를 명시적으로 알려줌  

2022-02-20

0220 카프카 설정을 위해 알아야하는 것들

 - 운영체제

- 서버 아키텍처

- distributed computing

- cpu 

-network performance

-  disk I/O

- RAM , HEAP사이즈

- 페이지 캐시

- 카프카와 주키퍼

---

- swappiness설정 : 최대한 disk I/O를 줄이고 메모리를 사용하라

- KAFKA_HEAP_OPTS : java heap메모리설정 . Xms는 설정하지 않는다 시작하면서 점점 메모리 늘려가면 됨. starting heap메모리를 고정할 필요 x

- 나머지 남는 메모리는 페이지 캐시로서 이용한다

- 카프카는 데이터 파싱을 따로 하지 않으므로 빠르다. 그러나 SSL등 설정한경우 이에대한 cpu성능이 필요할 수 있음

- file 디스크립터 설정을 무지 크게 해두어야 함. 1개 파티션의 1개 세그먼트 별로 3개의 file오픈하기 때문에 부딪힐수있다

- delete토픽을 하면 일단 delete했다는 태그 표시를 달고 - 일정시간 경과후 실제 삭제된다. 이 시간 gap이 있으므로 여유있게 메모리 설정해두어야 함

- disk I/O : 부족한 경우 EBS 더 mount한다

- network : 카프카 클러스터 region최대한 가깝게. (latency) + bandwidth설정 고려

0220 zookeeper

 1. zookeeper역할

- 브로커 등록

- leader브로커 선출

- 각종 config 관리(ACL등)

- Topic관리

- 클러스터 관리

2. zookeeper 적절한 개수

- 주키퍼는 vote시스템이다.

- voting 정족수는 과반수이다. 따라서 홀수로 설정하는 것이 적절하다.

- 1, 3, 5, 7....(2n+1) 개의 zookeeper

- 1개의 주키퍼 -> 죽으면 안됨

- 3개의 주키퍼 -> 1개까지 죽어도 ok (보통 그래서 3개로 많이 함)

- 5개의 주키퍼 -> 2개까지 죽어도 ok.(정말정말 정말 커다란 카프카 시스템을 구축하고자 할때. 거의 없음. 5개의 주키퍼가 서로 소통한다)



+ broker적절한 개수

- n-1개 까지 죽을수있다

- 보통은 3개

0220 카프카 remote서버에 접속하기

 1. aws인스턴스생성

2. advertised.hostname에 public dns를 적는다(이상하게 . ip를 적으면 접속이 안되더라.. 이유를 모르겠음)

3. security group 9092열어둔다

4. --bootstrap-server 를 public ip로 해서 접속한다

2022-02-19

0218 카프카 브로커에 연결되지 않는현상

 1. virtualbox에 ubuntu로 zookeeper, kafka server , producer띄우고

2. NAT설정

3. 포트포워딩 9092로 열어두고

4. 로컬에서 9092포트로 consumer접속

5. Connection to node 0 could not be established. Broker may not be available 에러

server.properties

6. advertised.listeners=127.0.0.1://9092


변경후 잘됨!!ㅇㅇ


0218 kafka consumer group 에 load분배되지 않는현상

 cpu mem 1GB

KAFKA_HEAP_OPTS -Xmx400 -Xms400

으로 설정했을때

카프카 컨슈머 그룹을 설정해도 리더 컨슈머에게만 데이터가 가는현상 발생

(인스턴스 1개에서 zookeeper, producer, consumer 다 돌렸더니. 오버헤드 나는듯)

메모리를 4GB로 늘려서 다시 시도해보니 이번엔 골고루 분배됨


0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...