
Client → WEB LB(SSL) → WAS(NFS) → DB LB → DB(iSCSI, 이중화)
if i == 1 → if i == 9 로 가상디스크 VM을 9번으로 변경nmcli con add type ethernet ifname eth2 con-name static ipv4.addresses 192.168.10.20/24 ipv4.gateway 192.168.10.1 ipv4.dns 192.168.10.100 ipv4.dns-priority 1 ipv4.method manualnmcli con up staticyum install -y bindvi /etc/named.conf 설정 57 │ zone "sesac.cloud.com" IN {
58 │ type master;
59 │ file "sesac.cloud.zone";
60 │ };
61 │
62 │ zone "10.168.192.in-addr.arpa" IN {
63 │ type master;
64 │ file "192.168.10.zone";
65 │ };named-checkconf /etc/named.conf → 무응답 = OKcp /var/named/named.empty /var/named/sesac.cloud.zone
1 │ $TTL 3H
2 │ @ IN SOA ns.sesac.cloud.com rname.invalid. (
3 │ 0 ; serial
4 │ 1D ; refresh
5 │ 1H ; retry
6 │ 1W ; expire
7 │ 3H ) ; minimum
8 │ NS ns.sesac.cloud.com.
9 │ ns A 192.168.10.100
10 │ client A 192.168.10.20
11 │ weblb A 192.168.10.2
12 │ web1 A 192.168.10.3
13 │ web2 A 192.168.10.4
14 │ dblb A 192.168.10.5
15 │ db1 A 192.168.10.6
16 │ db2 A 192.168.10.7
17 │ nfs A 192.168.10.8
18 │ iscsi A 192.168.10.9
named-checkzone sesac.cloud.zone /var/named/sesac.cloud.zone → OK
chown :named /var/named/sesac.cloud.zone
cp /var/named/sesac.cloud.zone /var/named/192.168.10.zonevi /var/named/192.168.10.zone 1 │ $TTL 3H
2 │ @ IN SOA ns.sesac.cloud.com rname.invalid. (
3 │ 0 ; serial
4 │ 1D ; refresh
5 │ 1H ; retry
6 │ 1W ; expire
7 │ 3H ) ; minimum
8 │ NS ns.sesac.cloud.com.
9 │ 100 PTR ns.sesac.cloud.com.
10 │ 20 PTR client.sesac.cloud.com.
11 │ 2 PTR weblb.sesac.cloud.com.
12 │ 3 PTR web1.sesac.cloud.com.
13 │ 4 PTR web2.sesac.cloud.com.
14 │ 5 PTR dblb.sesac.cloud.com.
15 │ 6 PTR db1.sesac.cloud.com.
16 │ 7 PTR db2.sesac.cloud.com.
17 │ 8 PTR nfs.sesac.cloud.com.
18 │ 9 PTR iscsi.sesac.cloud.com.named-checkzone 192.168.10.zone /var/named/192.168.10.zone → OKchown :named /var/named/192.168.10.zonesystemctl enable --now named.servicefirewall-cmd --add-service=dns --permanentfirewall-cmd --reload목표
구현 순서
구현
fdisk /dev/sdb → /dev/sdb1 (10G), /dev/sdb2 (10G) 생성
pvcreate /dev/sdb1 /dev/sdb2
vgcreate basic_vg /dev/sdb1 /dev/sdb2
lvcreate -n lv1 -L 10G basic_vg
lvcreate -n lv2 -l 2558 basic_vg
lvdisplay - 논리 볼륨 상태 확인
dnf install -y targetcli
iSCSI TARGET 설정
targetclibackstores/block create dev=/dev/sdb1 name=block1iscsi/ create wwn=iqn.2024-06.com.cloud.sesac:target1iscsi/iqn.2024-06.com.cloud.sesac:target1/tpg1/acls create wwn=iqn.2024-06.com.cloud.sesac:initiator1iscsi/iqn.2024-06.com.cloud.sesac:target1/tpg1/luns create /backstores/block/block1
systemctl enable --now targetfirewall-cmd --add-service=iscsi-target --permanentfirewall-cmd --reloadiSCSI INITIATOR 설정
dnf install -y iscsi-initiator-utilssystemctl enable --now iscsivi /etc/iscsi/initiatorname.iscsiiscsiadm -m discovery -t st -p 192.168.10.10 - Target과 연결 확인iscsiadm -m node -T iqn.2024-06.com.cloud.sesac:target1 -llsblk 로 장치 확인iSCSI 장치 /var/lib/mysql 로 마운트 ( DB1, DB2 )
- fdisk /dev/sdb
- mkfs -t xfs /dev/sdb1
- mkdir -p /var/lib/mysql
- /var/lib/mysql 은 mariadb 설치 후 자동 설치되는 폴더지만 먼저 마운트 하기위해 미리 생성해두고 진행
- vi /etc/fstab → /dev/sdb1 /var/lib/mysql xfs _netdev 0 0
- iSCSI 로 장착된 장치는 영구 마운트 시 4번째 옵션을 defaults가 아닌 _netdev로 부여
- mount -a
- mount | grep /dev/sdb1 - 마운트 확인
목표
구현
dnf install -y mariadb-serversystemctl enable --now mariadbfirewall-cmd --add-service=mysqlmysql_secure_installation - 초기 보안 설정vi /etc/my.cnf.d/mariadb-server.cnfsystemctl restart mariadbmysql -u root -p → 로컬 DB, root 유저로 접속<?php
$server_addr = "192.168.10.20";
$user_name = "web_user";
$password = "123";
$db_name = "web_db";
$connection = mysqli_connect($server_addr, $user_name, $password, $db_name);
$query = "SELECT * FROM web_tab";
$rst = mysqli_query($connection, $query);
if (mysqli_num_rows($rst) > 0) {
while($i = mysqli_fetch_assoc($rst)) {
echo "id : " . $i["id"] . " | name : " . $i["name"] . "<br>" ;
}
}
mysqli_close($connection);
?>
CREATE DATABASE web_db;CREATE TABLE web_tab(id int AUTO_INCREMENT PRIMARY KEY, name VARCHAR(10));desc web_db.web_tab;INSERT INTO web_db.web_tab(name) VALUES ("CHOI");INSERT INTO web_db.web_tab(name) VALUES ("KIM");CREATE USER 'web_user'@'%' IDENTIFIED BY "123";GRANT ALL ON web_db.web_tab TO 'web_user'@'%';GRANT replication slave ON *.* TO 'web_user'@'%';FLUSH PRIVILEGES**;**SHOW MASTER STATUS;mysqldump --all-databases -u root -p > rep.dumpscp ./rep.dump vagrant@db2.sesac.cloud.com:/tmpdnf install -y mariadb-serversystemctl enable --now mariadbfirewall-cmd --add-service=mysqlmysql_secure_installation/etc/my.cnf.d/mariadb-server.cnfmysql -u root -p < /tmp/rep.dumpmysql -u root -pCHANGE MASTER TO master_host='db1.sesac.cloud.com', master_user='web_user', master_password='123', master_log_file='mysql-bin-0000 01', master_log_pos=1519;start slave;dnf install -y haproxy policycoreutils-python-utilsvi /etc/haproxy/haproxy.cfg 26 │ defaults
27 │ mode tcp
43 │ ... ...
44 │ #---------------------------------------------------------------------
45 │ # main frontend which proxys to the backends
46 │ #---------------------------------------------------------------------
47 │ frontend main
48 │ bind *:3306
49 │ default_backend db
50 │
51 │ #---------------------------------------------------------------------
52 │ # round robin balancing between the various backends
53 │ #---------------------------------------------------------------------
54 │ backend db
55 │ balance roundrobin
56 │ server db1 db1.sesac.cloud.com:3306 check
57 │ server db2 db2.sesac.cloud.com:3306 checkfirewall-cmd --add-port=3306/tcpsemanage port -a -t http_port_t 3306 -p tcpdnf install -y mariadb (=클라이언트 전용 패키지)mysql -u web_user -h dblb.sesac.cloud.com -pdnf install -y nfs-utilsmkdir /seondovi /etc/exports/seondo web1.sesac.cloud.com(rw,sync)
/seondo web2.sesac.cloud.com(rw,sync)exportfs -r → /etc/exports 갱신systemctl enable --now nfs-server.servicefirewall-cmd --add-service=nfsdnf install -y nfs-utils autofsvi /etc/auto.master.d/web1.autofs → autofs는 고정, web1은 임의vi /etc/auto.web1systemctl enable --now autofsmount | grep /var/www/htmldnf install -y httpd php php-mysqlndpolicycoreutils-python-utilssystemctl enable --now httpdfirewall-cmd --add-service=httpsemanage boolean -m --on httpd_can_network_connect_dbsemanage boolean -m --on httpd_use_nfscurl localhost/index.phpdnf install -y haproxy policycoreutils-python-utilsvi /etc/haproxy/haproxy.cfg 39 │ #---------------------------------------------------------------------
40 │ # main frontend which proxys to the backends
41 │ #---------------------------------------------------------------------
42 │ frontend main
43 │ bind *:80
44 │ default_backend web
45 │ #---------------------------------------------------------------------
46 │ # round robin balancing between the various backends
47 │ #---------------------------------------------------------------------
48 │ backend web
49 │ balance roundrobin
50 │ server web1 web1.sesac.cloud.com:80 check
51 │ server web2 web2.sesac.cloud.com:80 checkfirewall-cmd --add-port=3306/tcpsemanage port -a -t http_port_t 3306 -p tcpcurl weblb.sesac.cloud.com/index.phpdnf install -y mod_ssl opensslcd /etc/pki/tlsopenssl genrsa -out ./private/private.key 2048openssl req -new -key ./private/private.key -out ./certs/cert.csropenssl x509 -req -signkey ./private/private.key -in ./certs/cert.csr -out ./certs/cert.crtcat ./private/private.key ./certs/cert.crt > ./cert.pemvi /etc/haproxy/haproxy.cfg 39 │ #---------------------------------------------------------------------
40 │ # main frontend which proxys to the backends
41 │ #---------------------------------------------------------------------
42 │ frontend main
43 │ bind *:80
44 │ bind *:443 ssl crt /etc/pki/tls/cert.pem
45 │ default_backend webfirewall-cmd --add-port=443/tcpsystemctl restart haproxy¹ 마운트 선택 가이드