You are on page 1of 14

Cài đặt Apache + PHP+ MySQL+ PhpMyAdmin- Keepalive-

HAProxy- Cluster Mariadb


Giảng viên: Lê Ngọc An
Đây là bài tập thực tế đi làm, kiến thức tổng hợp, độ khó cao. Các em phải cố gắng!

I. Cài đặt Apache + PHP+PhpMyAdmin trên máy Web1, Web2 và Web3


B0: Sửa Hosts file và Hostname của 2 máy Web1 và Web2
Máy Web01: #vi /etc/hosts
9.9.9.10 web1
#vi /etc/hostname
web1
Máy Web02:#vi /etc/hosts
9.9.9.11 web2
#vi /etc/hostname
web2
Máy Web02:#vi /etc/hosts
9.9.9.12 web3
#vi /etc/hostname
Web3
B1: Cài đặt Apache
yum install httpd * -y
B2: Khởi động Apache:
systemctl start httpd
systemctl enable httpd
B3. Mở Port 80 cho giao thức http Firewall
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
firewall-cmd --list-all
B4: Cài đặt PHP:
yum install php * -y
B5. Khởi động lại Apache
systemctl restart httpd 
B6. Cài đặt các gói bổ sung cho PHP-MYSQL:
yum install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc -y *
(php-imap gói này cài sau)
B7. Sau khi cài xong, ta tiến hành khởi động lại Apache
systemctl restart httpd
B8. Cài đặt PhpMyAdmin - Download gói cài đặt phpmyadmin về và dùng WinSCP để
Transfer vào thư muc: /var/www/html/.
- Giải nén gói cài đặt phpMyAdmin-3.5.1-all-languages.tar.gz
# cd /var/www/html/
#tar -zxvf phpMyAdmin-3.5.1-all-languages.tar.gz
-Đổi tên thư mục sau khi giải nén
# mv phpMyAdmin-3.5.1-all-languages admin
- Di chuyển tới thư mục admin:
#cd admin
-Đổi tên tập tin config.sample.inc.php thành config.inc.php
# mv config.sample.inc.php config.inc.php
-Tùy chỉnh lại file cấu hình như sau:
# vi config.inc.php
Tìm dòng $cfg['Servers'][$i]['auth_type'] = 'cookie'; sửa thành $cfg['Servers'][$i]
['auth_type'] = 'http';
-Khởi động lại dịch vụ: systemctl restart httpd
B9. vào httpd thêm tên file: index.php
#vi /etc/httpd/conf/httpd.conf
- Gõ lệnh set nu và tìm đến dòng ở vị trí 164 và chèn thêm index.php

II. Cài đặt Keepalive – HAProxy trên 2 máy LB1 và LB2


A. Cài đặt Keepalive trên LB1 và LB2
B00: Sửa Hosts file và Hostname của 2 máy LB1 và LB2
Máy LB1: #vi /etc/hosts
9.9.9.8 lb1
#vi /etc/hostname
lb1
Máy LB2:#vi /etc/hosts
9.9.9.9 lb2
#vi /etc/hostname
lb2
B01. Cài keepalive để giữ VIP 9.9.9.66 trên máy LB1 và LB2, cả 2 làm tương tự nhau
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
/sbin/sysctl -p
yum install keepalived -y
chkconfig keepalived on
systemctl start keepalived
[root@~]# vi /etc/keepalived/keepalived.conf (chú ý: interface eno16777736 là card mạng theo
tên máy cài trên máy LB1 và LB2. Xóa sạch nội dung và copy rồi paste)
vrrp_script chk_web {
script "killall -0 /usr/sbin/haproxy"
interval 1
weight 2
}

vrrp_instance VI_30 {
state MASTER
interface eno16777736
virtual_router_id 51
priority 101

virtual_ipaddress {
9.9.9.66
}
track_script {
chk_web
}
}
systemctl restart keepalived
Trên máy LB1 và LB2 kiểm tra: có dòng dưới là OK
[root@lb1 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
pfifo_fast state UP qlen 1000
link/ether 00:0c:29:1e:44:b2 brd ff:ff:ff:ff:ff:ff
inet 9.9.9.8/24 brd 9.9.9.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 9.9.9.66/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe1e:44b2/64 scope link
valid_lft forever preferred_lft forever
Kiểm tra bằng cách Ping tới 9.9.9.66 là OK

B. Cài đặt HA Proxy trên máy LB1 và LB2


yum install haproxy -y *
B1. Copy hoặc sửa file cấu hình theo nội dung sau:
vi /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#debug
#quiet
user haproxy
group haproxy

defaults
log global
mode http
option httplog
option dontlognull
retries 3
redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

listen webfarm 9.9.9.66:80


mode http
stats enable
stats auth admin:admin
balance roundrobin
cookie JSESSIONID prefix
option httpclose
option forwardfor
option httpchk HEAD /index.php HTTP/1.0
server web1 9.9.9.10:80 cookie A weight 50 check
server web2 9.9.9.11:80 cookie B weight 50 check
B2: Khởi động HA Proxy – theo hệ thống
service haproxy start
chkconfig haproxy on
B3. Mở Port trên Firewall trên cả 2 máy
systemctl start firewalld
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --reload
firewall-cmd --list-all
B4: Kiểm tra HA Proxy http://9.9.9.66/haproxy?stats , đăng nhập bằng user : admin - password :
admin
Truy cập http://9.9.9.66 xuất hiện dữ liệu của web1, web2 đã thành công. Test bằng cách tắt LB1
hoặc LB2.
B5: Cấu hình dịch vụ DNS phân giải cho IP của HA để truy cập Web

III. Replication MySQL


A. Lý Thuyết
1. Giới thiệu về HA Mariadb
HA Mariadb giải quyết được gì?
 Tăng tính hoạt động sẵn sàng dữ liệu mọi lúc mọi nơi
 Nâng cao hiệu suất làm việc của hệ thống
 Nâng cao được tính an toàn dữ liệu
 Đảm bảo hệ thống làm việc không bị gián đoạn
2. Các giải pháp
Có 2 giải pháp chính cho việc HA:
 Giải pháp Native: Giải pháp này được mysql/mariadb hỗ trợ.
o Master - Slave
o Master - Master
 Giải pháp 3rd party: Cùng với mục đích là để nhất quán dữ liệu với các server với nhau
nhưng cơ chế hoạt động và mô hình khác với giải pháp Native. Một số kỹ thuật là:
o Galera
o DRBD
2.1 Giải pháp Native
Cơ chế làm việc như sau: Trên mỗi server sẽ có một user làm nhiệm vụ replication dữ liệu mục
đích của việc này là giúp các server đảm bảo tính nhất quán về dữ liệu với nhau.
Replication là tính năng cho phép dữ liệu của (các) máy chủ Master được sao chép/nhân bản
trên một hoặc nhiều máy chủ khác (Slave). Mục đích của việc này là để sao lưu dữ liệu ra các
máy chủ khác đề phòng máy chủ chính gặp sự cố.
2.1.1 Master - Slave
Master - Slave: là một kiểu trong giải pháp HA cho DB, mục đích để đồng bộ dữ liệu của DB
chính (Master) sang một máy chủ DB khác gọi là Slave một cách tự động.
2.1.2 Master - Master
Master - Master: Khi cấu hình kiểu này, 2 DB sẽ tự động đồng bộ dữ liệu cho nhau.

2.2 Giải pháp 3rd party


2.2.1 Galera
Galera Cluster là giải pháp tăng tính sẵn sàng cho các Database bằng các phân phối các thay đổi
(đọc - ghi dữ liệu) tới các máy chủ trong Cluster. Trong trường hợp một máy chủ bị lỗi thì các
máy chủ khác vẫn sẵn sàng hoạt động phục vụ các yêu cầu từ phía người dùng.

Cluster có 2 mode hoạt động là Active - Passive và Active - Active:


 Active - Passive: Tất cả các thao tác ghi sẽ được thực hiện ở máy chủ Active, sau đó sẽ
được sao chép sang các máy chủ Passive. Các máy chủ Passive này sẽ sẵn sàng đảm
nhiệm vai trò của máy chủ Active khi xảy ra sự cố. Trong một vài trường hợp, Active -
Passive cho phép SELECT ở các máy chủ Passive.
 Active - Active: Thao tác đọc - ghi dữ liệu sẽ diễn ra ở mỗi node. Khi có thay đổi, dữ liệu
sẽ được đồng bộ tới tất cả các node
B. Thực hành cài đặt GALERA Cluster Mariadb
1. Chuẩn bị
1.1. Môi trường cài đặt
[root@web1 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@web1~]# uname -a
Linux web1.viettel.vn 3.10.0-327.28.3.el7.x86_64 #1 SMP Thu Aug 18 19:05:49 UTC 2016
x86_64 x86_64 x86_64 GNU/Linux
1.2. Thiết lập IP cho các node
IP:
Web1: 9.9.9.10
Web2: 9.9.9.11
Web3: 9.9.9.12
GATEWAY: Web1: 9.9.9.1
NETWORK: Web1: 9.9.9.0/24
1.3. Mô hình

2. Các bước tiến hành


2.1. Cài đặt MariaDB trên các node
Cài đặt Repo cho các node và set độ ưu tiên của repo
yum -y install centos-release-scl-rh centos-release-scl
sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/CentOS-SCLo-scl.repo
sed -i -e "s/\]$/\]\npriority=10/g" /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo
Cài đặt MariaDB
- Cài đặt MariaDB với yum
yum --enablerepo=centos-sclo-rh -y install rh-mariadb101-mariadb-server
- Load các biến môi trường
scl enable rh-mariadb101 bash
- Kiểm tra phiên bản của MariaDB
mysql -V
- Cho rh-mariadb khởi động cùng hệ thống, soạn file với nội dung:
vi /etc/profile.d/rh-mariadb101.sh
#!/bin/bash
source /opt/rh/rh-mariadb101/enable
export X_SCLS="`scl enable rh-mariadb101 'echo $X_SCLS'`"
Bật MariaDB và cấu hình ban đầu:
- Khai báo thêm bộ mã hóa ký tự UTF-8 vào file cấu hình
vi /etc/opt/rh/rh-mariadb101/my.cnf.d/mariadb-server.cnf
- Tìm section [mysqld] và thêm vào với nội dung
...
character-set-server=utf8
...
Khởi động và cấu hình: Bật MariaDB và cho khởi động cùng hệ thống:
systemctl start rh-mariadb101-mariadb
systemctl enable rh-mariadb101-mariadb
- Cài đặt cơ bản
mysql_secure_installation

- Cài đặt tiếp theo


- Kiểm tra Đăng nhập MariaDB
mysql -uroot -p -e "show databases;"

2.2 Cài đặt Galera cho MariaDB


Cài đặt Galera trên các node
yum --enablerepo=centos-sclo-rh -y install rh-mariadb101-mariadb-server-galera
- Cấu hình tường lửa trên các node
firewall-cmd --add-service=mysql --permanent
firewall-cmd --add-port={3306/tcp,4567/tcp,4568/tcp,4444/tcp} --permanent
firewall-cmd --reload
- Cấu hình ở Node 1:
mv /etc/opt/rh/rh-mariadb101/my.cnf.d/galera.cnf /etc/opt/rh/rh-
mariadb101/my.cnf.d/galera.cnf.org
vi /etc/opt/rh/rh-mariadb101/my.cnf.d/mariadb-server.cnf
- Mở file mariadb-server.cnf, tìm đến section galera và chỉnh sửa những dòng như sau:
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/opt/rh/rh-mariadb101/root/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=gcomm://
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Them moi 3 dong nay
wsrep_cluster_name="MariaDB_Cluster"
wsrep_node_address="9.9.9.10"
wsrep_sst_method=rsync

- Sau khi chỉnh sửa xong, khởi động Galera


/opt/rh/rh-mariadb101/root/usr/bin/galera_new_cluster
- Cấu hình ở các node còn lại:
mv /etc/opt/rh/rh-mariadb101/my.cnf.d/galera.cnf /etc/opt/rh/rh-
mariadb101/my.cnf.d/galera.cnf.org
vi /etc/opt/rh/rh-mariadb101/my.cnf.d/mariadb-server.cnf
- Mở file mariadb-server.cnf, tìm đến section galera và chỉnh sửa những dòng tương ứng:
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/opt/rh/rh-mariadb101/root/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://9.9.9.10,9.9.9.11,9.9.9.12"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Them moi nhung dong sau:
wsrep_cluster_name="MariaDB_Cluster"
wsrep_node_address="IP_Của_Node_Tương_Ứng"
wsrep_sst_method=rsync
Trên node 2:

Trên node 3:

- Khởi động lại MariaDB trên từng node:


systemctl restart rh-mariadb101-mariadb
2.3 Kiểm tra hoạt động
- Tạo một database ở node 1:
mysql -uroot -p123456a@ -e "create database node1;"
- Hiển thị để xem
mysql -uroot -p123456a@ -e "show databases;"
- Xem và tạo database ở node 2:
mysql -uroot –p123456a@
show databases;
create database node2;

- Xem và tạo database ở node 3:


mysql -uroot –p123456a@
show databases;
create database node3;
- Quay lại node 1, chúng ta kiểm tra lại sẽ có 3 database được tạo:
mysql -uroot -p -e "show databases;"

2.4. Tạo một Website để kiểm tra


B1. truy cập vào http://9.9.9.10/admin/ để tạo Database tên là anln
B2. add Database
B3. Dùng WinsCP để copy Website vào: /var/www/html
B4. Vào file Connec: /var/www/html/Connect => sửa mật khẩu và tên cơ sở dữ liệu: $ketnoi =
mysql_connect("localhost","root","123456a@") và mysql_select_db("anln", $ketnoi ) Chú ý trên
Hosting phải sửa cả tên Root tương ứng với tài khoản.
B5. Sửa file functions: /var/www/html/Website/Gio_hang
require('/var/www/html/Connect/Connect.php');
B6. Kiểm tra
2.5. Kiểm tra thêm bằng cách: Tạo thêm bảng trên Web1 để xem chế độ đồng bộ sang
Web2 và Web3
mysql> CREATE TABLE tb6 (
id INT,
data VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

mysql> SHOW TABLES IN ANLN;


+--------------------+
| Tables_in_dwh_prod |
+--------------------+
| tb1 |
| tb2 |
| tb3 |
| tb4 |
| tb6 |
+--------------------+
- Cài đặt phần mềm đồng bộ dữ liệu RSYNC
yum install rsync -y
Thực hiện đồng bộ dữ liệu
rsync -avz -P -e'ssh' anln.sql root@9.9.9.11:/root/

You might also like