서버가 안될때 wp-config.php 파일에 들어가서 db주소를 slave db 주소로 변경해주면 된다.
Keepalive모드
Active : MasterDB를 의미
Standby : SlaveDB를 의미
DB설정
Active
1) keepalived 설치 및 설정
yum install -y keepalived
vi /etc/keepalived/keepalived.conf
14번 라인 주석처리
18번 라인 밑으로 전부 삭제
vrrp_script chk_mysql { vrrp -> protocol을 의미함!
script "pidof mysqld"
interval 2 # every 2 s:q!econds
weight 2
}
vrrp_instance VI_1 {
interface ens33
state MASTER
virtual_router_id 123 # Standby랑 맞춰줘야 하는 값
unicast_src_ip 192.168.100.20 # Active IP
unicast_peer {
192.168.100.30 # Standby IP
}
priority 102 # Standby보다 Active가 높아야 하는 값
track_script {
chk_mysql
}
virtual_ipaddress { #MasterDB와 Slave DB의 HAproxy역할을 해주는 가상공유기 / 사실상 proxy같은 느낌은 아니고 keepalived프로그램이 Active하고 있는 DB를 찾아서 virtual ip주소를 붙여준다. 그때 붙여주는 ip주소! keepalived를 설치한 db에 다 같게 설정해주면 된다.
192.168.100.100/24 dev ens33
}
}
systemctl restart keepalived
Standy (Slave DB)
1) keepalived 설치 및 설정
yum install -y keepalived
vi /etc/keepalived/keepalived.conf
14번 라인 주석처리
18번 라인 밑으로 전부 삭제
vrrp_script chk_mysql {
script "pidof mysqld"
interval 2 # every 2 seconds
weight 2
}
vrrp_instance VI_1 {
interface ens33 # 내 컴퓨터는 ens가 다르므로 변경해주어야함 ens160
state BACKUP
virtual_router_id 123 # Standby랑 맞춰줘야 하는 값
unicast_src_ip 192.168.100.30 # Standby IP
unicast_peer {
192.168.100.20 # Active IP
}
priority 101 # Standby보다 Active가 높아야 하는 값
track_script {
chk_mysql
}
virtual_ipaddress {
192.168.100.100/24 dev ens33
}
}
systemctl restart keepalived
show variables LIKE '%server_id%';
실행해서 server-id를 확인, Active 서버를 끄고 수 초 후 다시 접속
앞에 컴퓨터 3개는 workbench로 대신해서 하기!(컴터용량부족이니꺄)
가상머신 2대
1대 prometheus - 서버에 접속하는 클라이언트라고 생각하자. 데이터수집
1대 grafana - prometheus한테 가서 데이터를 가져와서 이쁘게 보여주는 역할. elastic서치
0) 방화벽끄기
setenforce 0
systemctl stop firewalld
1) yum 레포지토리추가 -> yum안에 프로메테우스가 없어서 주소를 추가해주기
1-1)vi /etc/yum.repos.d/prometheus.respo 열어서 내용 붙여넣기 하거나
1-2) EOF가 나오는 내용까지 찾아서 해당 경로(/etc/yum.repos.d/prometheus.repo)에 넣어주겠다 라는 내용
= prometheus.repo라는 파일안에 EOF(end of file)까지의 내용을 담아서 파일을 생성해줘라
cat > /etc/yum.repos.d/prometheus.repo <<'EOF'
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
EOF
2) 설치
yum -y install prometheus2
3) 실행 및 확인
systemctl restart prometheus
윈도우에서 웹브라우저로 server의 IP:9090 포트로 접속 -> 192.168.152.21:9090
Exporter :
prometheus는 성능측정을 위해 만들어졌기 때문에 nginx나 DB가 클라이언트로 접속해서 성능측정요청을 할 수 있다. 따라서 prometheus에 nginx나 DB의 성능측정을 할 수 있는 프로그램을 설치해주어야한다. DB의 성능측정을 위한 프로그램 중에서 우리는 mysqld_exporter를 설치해보쟈.
node_exporter : cpu메모리 수집하는 프로그램. 가장 일반적인 아이
파일이 .yml로 끝나는 아이들은 띄어쓰기 갯수가 틀리거나 하면 문법적에러가 남. 들여쓰기를 잘해야함!
프로메테우스 설정파일에서 맨마지막줄에 node_exporter가 9100번 포트에 돌아가고 있었으니 그 해당 포트에서 돌아가도록 해주면
yum은 CentOS 7까지 지원
CentOS9에서는 yum을 지원하지 않음
exporter 설치(prometheus가 성능측정을 할수있게 하기 위해 MasterDB와 SlaveDB에 exporter프로그램을 설치해준다.)
0) 방화벽 끄기
setenforce 0
systemctl stop firewalld
1) yum 레포지토리 추가
cat > /etc/yum.repos.d/prometheus.repo <<'EOF'
[prometheus]
name=prometheus
baseurl=https://packagecloud.io/prometheus-rpm/release/el/$releasever/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/prometheus-rpm/release/gpgkey
https://raw.githubusercontent.com/lest/prometheus-rpm/master/RPM-GPG-KEY-prometheus-rpm
gpgcheck=1
metadata_expire=300
EOF
2) 설치
yum -y install node_exporter
3) 실행 및 확인
systemctl restart node_exporter
윈도우에서 웹 브라우저로 server의 IP:9100 포트로 접속
프로메테우스 설정 변경
프로메테우스 파일을 깔고 서로 연결까지 했으니 데이터를 가져오는설정을 해주자.
1) 설정 파일 수정
vi /etc/prometheus/prometheus.yml 맨마지막에 다음 내용 추가(들여쓰기 조심해서 추가)
- job_name: node -> exporter이름쓰기
static_configs: ->
- targets: ['노드exporter 설치한 컴퓨터의 IP:9100','노드exporter 설치한 컴퓨터의 IP:9100'] -> [''] 까지 다 적어야함 배열의 의미 / 9100가 node exporter의 포트로 설정
2) 재시작
systemctl restart prometheus
3) 확인
윈도우에서 웹 브라우저로 server의 IP:9090 포트로 접속 -> status -> targets
2) 실행
systemctl restart grafana-server
확인
웹브라우저에서 server의 IP:3000 포트로 접속
ID : admin PW : admin 로그인 후 패스워드 설정
2) 프로메테우스와 연동(서버 설정)
참고 : https://www.server-world.info/en/note?os=CentOS_Stream_8&p=prometheus&f=5
[6]번 -> http:// 까먹지말고 넣어주기 JEBAL
[7]번까지 실행 -> 2번은 yun install -y grafana-prometheus 를 실행하면됨
3) 대시보드 설정
왼쪽 네모 버튼 -> import -> 14057(대시보드 번호) 로드 -> 임포트
mysqld_exporter 설치(2대 DB 서버(master & slave)에 설치)
1) 설치
yum install -y mysqld_exporter
-> node_exporter 이외에 mysqld_exporter를 깔아주는 이유는 두 exporter 가 가지고 오는 데이터가 다르기 때문이다.
2) 설정 변경
vi /usr/lib/systemd/system/mysqld_exporter.service
파일 안에 내용 전부 삭제 후 아래 내용 복붙
# -*- mode: conf -*-
[Unit]
Description=Prometheus exporter for MySQL server metrics.
Documentation=https://github.com/prometheus/mysqld_exporter
After=network.target
[Service]
EnvironmentFile=-/etc/default/mysqld_exporter
User=prometheus
ExecStart=/usr/bin/mysqld_exporter \
--config.my-cnf /tmp/my.cnf \
--collect.global_status \
--collect.info_schema.innodb_metrics \
--collect.auto_increment.columns \
--collect.info_schema.processlist \
--collect.binlog_size \
--collect.info_schema.tablestats \
--collect.global_variables \
--collect.info_schema.query_response_time \
--collect.info_schema.userstats \
--collect.info_schema.tables \
--collect.perf_schema.tablelocks \
--collect.perf_schema.file_events \
--collect.perf_schema.eventswaits \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.tableiowaits \
--collect.slave_status \
--web.listen-address=0.0.0.0:9104
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target -> 여기까지복붙
systemctl daemon-reload
-> exporter.sevice파일설정을 데몬에 즉시 반영하기 위한 명령어
3) mysqld_exporter 설정 파일 생성
vi /tmp/my.cnf
[client]
user=cjw
password=qwer1234
4) 실행
systemctl restart mysqld_exporter
프로메테우스 설정 변경
1) 설정 파일 수정
vi /etc/prometheus/prometheus.yml 마지막에 다음 내용 추가(들여쓰기 조심해서 추가)
- job_name: 'mysql'
scrape_interval: 5s
static_configs:
- targets: [['노드exporter 설치한 컴퓨터의 IP:9104', '노드exporter 설치한 컴퓨터의 IP:9104']]
labels:
group: 'mysql'
2) 재시작
systemctl restart prometheus
3) 확인
윈도우에서 웹 브라우저로 server의 IP:9090 포트로 접속 -> status -> targets
데이터 넣기
1. 크롤링
2. 더미데이터 사이트
3. 공공데이터포털
setenforce 0 -> 바이러스및위협방지에 있는 실시간보호기능 부분을 의미. 파일바이러스를 막아줌.
systemctl stop firewalld -> 윈도우방화벽 / 내컴퓨터의 특정포트에 들어오고 나가는것을 막아주는 방화벽 즉, 네트워크방화벽을 의미. 원래는 특정포트로만 들어오도록 허용해주어야함.
리눅스, 네트워크의 권한
윈도우
administrator 관리자
리눅스 사용자
root 관리자'
일반사용자를 추가할때는
useradd [사용자이름]
사용자를 확인할때는
cat -n /etc/passwd -> 한줄한줄이 사용자
사용자 구분을 할때 컴퓨터가 숫자로 구분한다.
root:x:0:0:root:/root:/bin/bash
x : 비밀번호 여기에 저장안하고 /etc/shadow에 저장된다.
검정색 blocking 된곳이 비번!
0: 사용자번호
0: 속한 그룹의 id
root:/root 경로
bash 쉘 / 우리가 보고있는 창
/bin/bash 우리가 보고있는 창을 실행해주는 명령어
패스워드 설정
passwd[사용자 이름]
사용자변경
su-[사용자이름]
리눅스 권한 기초
drwxr-xr--. 1 root root
d : directory
rwxr-xr--: 권한
rwx : 파일에 대해서 읽을수있다.
r-x : 파일에 대해 쓸 수 있다. -> 쓰기 권한이 없으면 수정저장이 아예 되지 않는다.
r-- : 파일을 실행할 수 있다. -> 파일을 실행한다는 의미는 프로그램 이름을 입력하는 것
root : 계정 / 소유자 -> 권한가장많이줌
root : 속한 그룹
-rw-r--r--.
su - user를 바꿀때 명령어.
sudo - root가 아닐때 root권한으로 명령을 실행하겠다.
directory는 ls명령어와 연관이있다.
ls는 안에 무엇이 있는지 보는 명령어 이기 때문에
directory안을 읽을 수 있다.
directory 쓰기권한은 조회를 했을때 그 내용을 바꾸게 하는 것
directory의 쓰기권한이 없으면 그 안에 mkdir로 폴더를 만들거나 변경이 불가하다. ls의 실행출력결과가 바뀌려면 안에 파일을 추가하거나 폴더를 추가하면 바꿀수 있다.
directory의 실행은 이동과 관련이 있다.
권한변경 명령어
chmod [권한][파일또는디렉토리이름]
권한을 적는 방법
심볼릭모드 :
옥텟모드 :
소유자 및 그룹변경
chown [소유자]:[그룹][파일or디렉토리]
chown -R 블라블ㄹ라
-R : 안에있는거 다 바껴라 하는 명령어
권한을 알아둬야하는 이유
grafana를 실행하라고 했을 때 systemctl로 실행했을때 grafana-server로 실행시키는것.
꼭 관리해줘야하는 파일들.
리눅스 특수권한
리눅스,윈도우에 접속할때 항상 로그인을 물어본다.
포트번호를 확인했을때 포트가 어떻게 열려있는지 보면 grafana port는 :::3000 로 열려있는데 :: 으로 ip주소가 설정되어있는 거는 모든사람이 접근할 수 있도록 설정한것.
포트랑 ip주소를 연결시킨게 bind-address인데 10.10.10.112로 되어있으면 내 컴퓨터밖에 접근이 안된다. 해당 ip주소는 사설ip주소이므로 나랑 같은 공유기에 연결된 아이들만 들어올 수 있으므로 보안을 생각한 bind-address라고 볼 수 있다.
모든사람이 접속할 수 있게 하려면
http_addr = 0.0.0.0 으로 설정해주면 모든 사람에게 접근할 수 있도록 한다는 의미이다. bind-address의 기본값이 보통은 0.0.0.0으로 되어있지만 가끔 127.0.0.1로 되어있는 경우가 있다. 서버가 잘실행되고있는데 클라이언트가 접근이 안될때는 확인을 한번 해보쟈
bind-address : 이프로그램을 접속할때 해당ip주소로 들어오는 애들만 접속할 수 있게 해줄게 라는 의미.
virtual_dipaddress : 가상의 ip주소를 주겠다
peer : slavedb주소
src_ip :
master,slave 에 둘다 패키지가 가는데 위의 설정에 의해서 unicast_src_ip에 동작하게 되고, 실패를 하게 되면 unicast_peer에 가게 된다.
:wq로 저장을해주고
keepalived 실행
systemctl restart keepalived
slave에서
18번 아래부터 삭제하고 넣어줌
state BACKUP - 백업서버다
priority 101 - masterdb보다 적게 적어준다. 우선순위가 낮아야하므로