學習從單機架構到集群架構的演變之路:

單機版LNMP獨立數(shù)據(jù)庫服務器Web服務器集群與Session保持動靜分離、數(shù)據(jù)庫集群各種緩存服務器 業(yè)務模型2." />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 【項目案例】超詳細的高可用網(wǎng)絡架構的部署方案

【項目案例】超詳細的高可用網(wǎng)絡架構的部署方案

時間:2023-04-18 14:20:02 | 來源:網(wǎng)站運營

時間:2023-04-18 14:20:02 來源:網(wǎng)站運營

【項目案例】超詳細的高可用網(wǎng)絡架構的部署方案:

網(wǎng)站架構演變

1. 問題

學習從單機架構到集群架構的演變之路:

2. 步驟

此案例主要是學習網(wǎng)站架構演變的過程,以拓撲圖和理論為主,具體實現(xiàn)還需要結合具體的軟件。

單機版網(wǎng)站,拓撲如圖所示。

用戶量少時使用,簡單、成本低、存在單點故障。

獨立數(shù)據(jù)庫服務器是將網(wǎng)站靜態(tài)文件、代碼文件等資料與數(shù)據(jù)庫分離的架構,當用戶量增加時單機的處理能力有限,PHP或JAVA代碼的執(zhí)行需要消耗大量CPU資源,數(shù)據(jù)庫的增刪改查需要調用大量的內存資源,將兩者分離可以減輕服務器的壓力,其拓撲結構如圖所示。

Web服務器和數(shù)據(jù)庫服務器的壓力都可以得到有效改善,訪問量有所增加。但是服務器依然存在單點故障問題。

我們可以通過Nginx、Haproxy代理服務器實現(xiàn)Web負載均衡集群,也可以使用LVS調度器實現(xiàn)Web負載均衡集群。部署完Web集群后還需要考慮如何進行Session會話保持,方法很多,如:根據(jù)源IP保持,代理服務器重寫Cookie信息,共享文件系統(tǒng)保存session,使用數(shù)據(jù)庫共享session等等。該架構拓撲如圖所示。

但是如果只有一臺調度器依然會導致單點故障的問題,因此還需要使用Keepalived或Heartbeat之類的軟件進行高可用配置,如圖所示。

對于網(wǎng)站內容而言可以分離為動態(tài)頁面和靜態(tài)頁面,靜態(tài)頁面就需要數(shù)據(jù)文件,動態(tài)頁面則需要CPU解析代碼,需要消耗大量的CPU資源,因此可以將靜態(tài)和動態(tài)分離為兩組服務器,動態(tài)頁面有腳本代碼組成,是一種基于網(wǎng)頁的應用程序,因此這一組服務器也稱為應用服務器,其架構如圖所示。

隨著服務器的增加,雖然性能與并發(fā)量得到了明顯的提升,但是數(shù)據(jù)的一致性、管理的便利性成為了新的問題,因此就需要增加統(tǒng)一的存儲服務器,實現(xiàn)數(shù)據(jù)的同步一致,可以使用NFS,GlusterFS、Ceph等軟件實現(xiàn)該功能,其架構如圖所示。

此時所有應用服務器都連接一臺數(shù)據(jù)庫服務器進行讀寫操作,而且后期隨著數(shù)據(jù)庫中的數(shù)據(jù)不斷增加,會導致數(shù)據(jù)庫成為整個網(wǎng)站的瓶頸!這就需要我們對數(shù)據(jù)進行分庫分表,創(chuàng)建數(shù)據(jù)庫主從或者數(shù)據(jù)庫集群,實現(xiàn)讀寫分離,其拓撲如圖所示。

對于靜態(tài)數(shù)據(jù)我們可以通過varnish、squid或者nginx進行緩存,將數(shù)據(jù)緩存到距離用戶更近的位置,構建CDN(內容分發(fā)網(wǎng)絡)架構。

對于傳統(tǒng)的SQL數(shù)據(jù)庫而言,我們也可以通過增加NoSQL數(shù)據(jù)庫,實現(xiàn)數(shù)據(jù)緩存的功能,提升數(shù)據(jù)庫的訪問速度。

備注:數(shù)據(jù)庫相關知識在第三階段課程有詳細介紹,第二階段項目暫時不做數(shù)據(jù)庫優(yōu)化。

最后,基于前面的架構,我們還可以將網(wǎng)站按照公司的業(yè)務進行分離,每個業(yè)務都可以是一個獨立的集群,如圖所示。

LNP+Mariadb數(shù)據(jù)庫分離

1. 問題

部署LNP+Mariadb實現(xiàn)數(shù)據(jù)庫與Web服務器分離,實現(xiàn)以下目標:將舊的數(shù)據(jù)庫備份,遷移到新的服務器修改配置調用新的數(shù)據(jù)庫服務器。

2.方案

實驗拓撲如圖所示,做具體實驗前請先配置好環(huán)境。

主機配置如表所示。

3. 步驟

實現(xiàn)此案例需要按照如下步驟進行。

1)準備一臺獨立的服務器,安裝數(shù)據(jù)庫軟件包

[root@database ~]# yum -y install mariadb mariadb-server mariadb-devel

[root@database ~]# systemctl start mariadb

[root@database ~]# systemctl enable mariadb

2)將之前單機版LNMP網(wǎng)站中的數(shù)據(jù)庫遷移到新的數(shù)據(jù)庫服務器。

登陸192.168.2.11主機,備份數(shù)據(jù)庫并拷貝給新的服務器,關閉舊的數(shù)據(jù)庫服務。

[root@centos7 ~]# mysqldump wordpress > wordpress.bak

[root@centos7 ~]# scp wordpress.bak 192.168.2.21:/root/

[root@centos7 ~]# systemctl stop mariadb

[root@centos7 ~]# systemctl disable mariadb

登陸192.168.2.21主機,使用備份文件還原數(shù)據(jù)庫。

創(chuàng)建空數(shù)據(jù)庫:

[root@database ~]# mysql

MariaDB [(none)]> create database wordpress character set utf8mb4;

MariaDB [(none)]> exit

使用備份文件還原數(shù)據(jù):

[root@database ~]# mysql wordpress < wordpress.bak

重新創(chuàng)建賬戶并授權訪問:

[root@database ~]# mysql

MariaDB [(none)]> grant all on wordpress.* to wordpress@'%' identified by 'wordpress';

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> exit

3)修改wordpress網(wǎng)站配置文件,調用新的數(shù)據(jù)庫服務器。

Wordpress在第一次初始化操作時會自動生產(chǎn)配置文件:wp-config.php,登陸192.168.2.11修改該文件即可調用新的數(shù)據(jù)庫服務。

[root@centos7 ~]# vim /usr/local/nginx/html/wp-config.php

修改前內容如下:

define('DB_HOST', '192.168.2.11');

修改后內容如下:

define('DB_HOST', '192.168.2.21');

客戶端使用瀏覽器訪問wordpress網(wǎng)站。

[root@client ~]# firefox http://192.168.2.11

Web服務器集群

1. 問題

使用HAProxy部署Web服務器集群,實現(xiàn)以下目標:

2. 方案

實驗拓撲如圖所示,做具體實驗前請先配置好環(huán)境。

備注:實際操作中DNS服務代理服務器部署在同一臺主機上(節(jié)約虛擬機資源)。主機配置如表所示。

3. 步驟

實現(xiàn)此案例需要按照如下步驟進行。

1)安裝LNP軟件包

[root@web2 ~]# yum -y install gcc pcre-devel openssl-devel

[root@web2 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz

[root@web2 lnmp_soft]# cd nginx-1.12.2/

[root@web2 nginx-1.12.2]# ./configure /

--with-http_ssl_module /

--with-http_stub_status_module

[root@web2 nginx-1.12.2]# make && make instal

[root@web2 ~]# yum -y install php php-fpm php-mysql mariadb-devel

[root@web3 ~]# yum -y install gcc pcre-devel openssl-devel

[root@web3 lnmp_soft]# tar -xf nginx-1.12.2.tar.gz

[root@web3 lnmp_soft]# cd nginx-1.12.2/

[root@web3 nginx-1.12.2]# ./configure /

--with-http_ssl_module /

--with-http_stub_status_module

[root@web3 nginx-1.12.2]# make && make instal

[root@web3 ~]# yum -y install php php-fpm php-mysql mariadb-devel

2)修改nginx配置實現(xiàn)動靜分離(web2和web3操作)

web2修改默認首頁index.php,配置兩個location實現(xiàn)動靜分離。

[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf

location / {

root html;

index index.php index.html index.htm;

}

location ~ /.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi.conf;

}

web3修改默認首頁index.php,配置兩個location實現(xiàn)動靜分離。

[root@web3 ~]# vim /usr/local/nginx/conf/nginx.conf

location / {

root html;

index index.php index.html index.htm;

}

location ~ /.php$ {

root html;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi.conf; }

3)啟動相關服務

[root@web2 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local

[root@web2 ~]# chmod +x /etc/rc.local

[root@web2 ~]# /usr/local/nginx/sbin/nginx

[root@web2 ~]# systemctl start php-fpm #啟動php-fpm服務

[root@web2 ~]# systemctl enable php-fpm

[root@web3 ~]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local

[root@web3 ~]# chmod +x /etc/rc.local

[root@web3 ~]# /usr/local/nginx/sbin/nginx

[root@web3 ~]# systemctl start php-fpm #啟動php-fpm服務

[root@web3 ~]# systemctl enable php-fpm

附加知識:systemd?。?!

源碼安裝的軟件默認無法使用systemd管理,如果需要使用systemd管理源碼安裝的軟件需要手動編寫服務的service文件(編寫是可以參考其他服務的模板文件)。以下是nginx服務最終編輯好的模板。

Service文件存儲路徑為/usr/lib/system/system/目錄。

[root@centos7 ~]# vim /usr/lib/systemd/system/nginx.service

[Unit]

Description=The Nginx HTTP Server

#描述信息

After=network.target remote-fs.target nss-lookup.target

#指定啟動nginx之前需要其他的其他服務,如network.target等

[Service]

Type=forking

#Type為服務的類型,僅啟動一個主進程的服務為simple,需要啟動若干子進程的服務為forking

ExecStart=/usr/local/nginx/sbin/nginx

#設置執(zhí)行systemctl start nginx后需要啟動的具體命令.

ExecReload=/usr/local/nginx/sbin/nginx -s reload

#設置執(zhí)行systemctl reload nginx后需要執(zhí)行的具體命令.

ExecStop=/bin/kill -s QUIT ${MAINPID}

#設置執(zhí)行systemctl stop nginx后需要執(zhí)行的具體命令.

[Install] WantedBy=multi-user.target

1)部署NFS共享服務器

[root@nfs ~]# yum install nfs-utils

[root@nfs ~]# mkdir /web_share

[root@nfs ~]# vim /etc/exports

/web_share 192.168.2.0/24(rw,no_root_squash)

[root@nfs ~]# systemctl restart rpcbind

[root@nfs ~]# systemctl eanble rpcbind

NFS使用的是隨機端口,每次啟動NFS都需要將自己的隨機端口注冊到rpcbind服務,這樣客戶端訪問NFS時先到rpcbind查詢端口信息,得到端口信息后再訪問NFS服務。

[root@nfs ~]# systemctl restart nfs

[root@nfs ~]# systemctl enable nfs

2)遷移舊的網(wǎng)站數(shù)據(jù)到NFS共享服務器

將web1(192.168.2.11)上的wordpress代碼拷貝到NFS共享。

[root@web1 ~]# cd /usr/local/nginx/

[root@web1 nginx]# tar -czpf html.tar.gz html/

[root@web1 nginx]# scp html.tar.gz 192.168.2.31:/web_share/

登陸nfs服務器,將壓縮包解壓

[root@nfs ~]# cd /web_share/

[root@nfs web_share]# tar -xf html.tar.gz

3)所有web服務器訪問掛載NFS共享數(shù)據(jù)。

[root@web1 ~]# rm -rf /usr/local/nginx/html/*

[root@web1 ~]# yum -y install nfs-utils

[root@web1 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab

[root@web1 ~]# mount -a

[root@web2 ~]# yum -y install nfs-utils

[root@web2 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab

[root@web2 ~]# mount -a

[root@web3 ~]# yum -y install nfs-utils

[root@web3 ~]# echo "192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0" >> /etc/fstab

[root@web3 ~]# mount -a

部署HAProxy

安裝軟件,手動修改配置文件,添加如下內容。

[root@proxy ~]# yum -y install haproxy

[root@proxy ~]# vim /etc/haproxy/haproxy.cfg

listen wordpress *:80

balance roundrobin

server web1 192.168.2.11:80 check inter 2000 rise 2 fall 3

server web2 192.168.2.12:80 check inter 2000 rise 2 fall 3 s

erver web3 192.168.2.13:80 check inter 2000 rise 2 fall 3

[root@proxy ~]# systemctl start haproxy

[root@proxy ~]# systemctl enable haproxy

1)安裝DNS相關軟件(192.168.4.5操作)。

[root@proxy ~]# yum -y install bind bind-chroot

2)修改主配置文件,添加zone。

[root@proxy ~]# vim /etc/named.conf

options {

listen-on port 53 { any; }; #服務監(jiān)聽的地址與端口

directory "/var/named"; #數(shù)據(jù)文件路徑

allow-query { any; }; #允許任何主機訪問DNS服務

... ...

};

zone "http://lab.com" IN { #定義正向區(qū)域

type master;

file "lab.com.zone";

};

#include "/etc/named.rfc1912.zones";

#注釋掉改行 #include "/etc/named.root.key"; #注釋掉改行

[root@proxy ~]# named-checkconf /etc/named.conf #檢查語法

3)修改正向解析記錄文件。

注意:保留文件權限。

[root@proxy named]# cp -p /var/named/named.localhost /var/named/lab.com.zone

[root@proxy named]# vim /var/named/lab.zone

$TTL 1D @

IN SOA @ rname.invalid. (

0 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

@ NS dns.lab.com.

dns A 192.168.4.5 www A 192.168.4.5

4)啟動服務

[root@proxy named]# systemctl start named

[root@proxy named]# systemctl enable named

5)客戶端修改DNS解析文件

提示:做完實驗修改回原始內容。

[root@room9pc01 data]# cat /etc/resolv.conf

# Generated by NetworkManager

search http://tedu.cn

nameserver 192.168.4.5

nameserver 172.40.1.10

nameserver 192.168.0.220

修改wp-config.php

在define(‘DB_NAME’, ‘wordpress’)這行前面添加如下兩行內容:

[root@web3 html]# vim /usr/local/nginx/html/wp-config.php

define('WP_SITEURL', 'http://www.lab.com');

define('WP_HOME', 'http://www.lab.com');

如果不添加這兩行配置,瀏覽器訪問網(wǎng)站某個子頁面后,URL會固定到某一臺后端服務器不輪詢。

附加知識(常見面試題)

什么是灰度發(fā)布?

答:灰度發(fā)布(又名金絲雀發(fā)布)是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。

讓一部分用戶繼續(xù)用產(chǎn)品特性A,一部分用戶開始用產(chǎn)品特性B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調整問題,以保證其影響度。灰度期:灰度發(fā)布開始到結束期間的這一段時間,稱為灰度期。

DNS服務器有哪些種,其使用的端口為多少?

答:有根DNS、一級DNS、二級DNS、三級DNS、緩存DNS;主DNS服務器、從DNS服務器;端口:53。

從日志/opt/bjca3/logs/ca_access.log中截取14點到16點的日志,將截取的日志導入到/tmp/ca_access.txt中,日志格式如下:

答:awk ‘$4>“13:00:00”&&$4<=“16:59:00”’ ca_access.log

監(jiān)控檢查,使用ping命令編寫腳本來查詢一組IP地址同時檢測他們是否處于活躍狀態(tài)。要求(range:192.168.1.200-192.168.1.220,一個IP發(fā)送4個ping包,ping的過程不能輸出信息到終端)?

答:#!/bin/bash

for i in {200..220}

do

ping -c 4 -i 0.2 -W 1 192.168.1.$i &>/dev/null

if [ $? -ne 0 ];then

echo "192.168.1.$i is down"

fi

done

假設nginx的訪問日志格式如下,統(tǒng)計訪問頁面前10位的IP數(shù)?

答:awk ‘{IP[$1]++} END{for(i in IP){print i,IP[i]}}’ access.log /

| sort -n | tail -10

請列舉出10個以上的你所知曉的SQL語句?

參考答案:insert select delete update create show drop grant revoke load data create view

如何切換到某個數(shù)據(jù)庫,并在上面工作?

答:use 庫名

列出數(shù)據(jù)庫內的所有表?

答:show tables

如何刪除表、刪除數(shù)據(jù)庫?

答:drop table 表名;drop database 庫名;

如何列出表"xrt"內name域值為"tecmint",web_address域值為"http://tecmint.com"的所有數(shù)據(jù)?

答:select * from xrt where name="tecmint" and web_address="http://tecmint.com";

Keepalived高可用

1. 問題

部署兩臺代理服務器,實現(xiàn)如下效果:

2. 方案

實驗拓撲如圖所示,做具體實驗前請先配置好環(huán)境。

備注:實際操作中DNS服務代理服務器部署在同一臺主機上(節(jié)約虛擬機資源)。主機配置如表所示。

3. 步驟

實現(xiàn)此案例需要按照如下步驟進行。

部署HAProxy

安裝軟件,手動修改配置文件,添加如下內容。

[root@proxy2 ~]# yum -y install haproxy

[root@proxy2 ~]# vim /etc/haproxy/haproxy.cfg

listen wordpress *:80

balance roundrobin

server web1 192.168.2.11:80 check inter 2000 rise 2 fall 3

server web2 192.168.2.12:80 check inter 2000 rise 2 fall 3

server web3 192.168.2.13:80 check inter 2000 rise 2 fall 3

[root@proxy2 ~]# systemctl start haproxy

[root@proxy2 ~]# systemctl enable haproxy

1)配置第一臺代理服務器proxy(192.168.4.5)。

[root@proxy ~]# yum install -y keepalived

[root@proxy ~]# vim /etc/keepalived/keepalived.conf

global_defs {

router_id proxy1 //設置路由ID號

vrrp_iptables //不添加任何防火墻規(guī)則

} vrrp_instance VI_1 {

state MASTER //主服務器為MASTER(備服務器需要修改為BACKUP)

interface eth0 //定義網(wǎng)絡接口

virtual_router_id 51

priority 100 //服務器優(yōu)先級,優(yōu)先級高優(yōu)先獲取VIP(實驗需要修改)

advert_int 1

authentication {

auth_type pass

auth_pass 1111 //主備服務器密碼必須一致

}

virtual_ipaddress { //誰是主服務器誰獲得該VIP(實驗需要修改) 1

92.168.4.80

}

}

[root@proxy ~]# systemctl start keepalived

!??!重要!??!

在全局配置global_defs{}中手動添加vrrp_iptables,即可解決防火墻的問題。

2)配置第二臺代理服務器proxy(192.168.4.6)

[root@proxy2 ~]# yum install -y keepalived

[root@proxy2 ~]# vim /etc/keepalived/keepalived.conf

global_defs {

router_id proxy2 //設置路由ID號

vrrp_iptables //不添加任何防火墻規(guī)則

}

vrrp_instance VI_1 {

state BACKUP //主服務器為MASTER(備服務器需要修改為BACKUP)

interface eth0 //定義網(wǎng)絡接口

virtual_router_id 51

priority 50 //服務器優(yōu)先級,優(yōu)先級高優(yōu)先獲取VIP

advert_int 1

authentication {

auth_type pass auth_pass 1111 //主備服務器密碼必須一致

}

virtual_ipaddress { //誰是主服務器誰獲得該VIP

192.168.4.80

}

}

[root@proxy2 ~]# systemctl start keepalived

?。?!重要?。。?br>
在全局配置global_defs{}中手動添加vrrp_iptables,即可解決防火墻的問題。

1)修改網(wǎng)站域名對應的解析記錄,解析到新的VIP地址。

192.168.4.5為DNS服務器。

[root@proxy ~]# vim /var/named/lab.com.zone

$TTL 1D

@ IN SOA @ rname.invalid. (

0 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

@ NS dns.lab.com.

dns A 192.168.4.5

www A 192.168.4.80

2)重啟DNS服務

[root@proxy ~]# systemctl restart named

部署Ceph分布式存儲

1. 問題

部署Ceph分布式存儲,實現(xiàn)如下效果:

2. 方案

實驗拓撲如圖所示,做具體實驗前請先配置好環(huán)境。

備注:實際操作中DNS服務代理服務器部署在同一臺主機上(節(jié)約虛擬機資源)。主機配置如表所示。

3. 步驟

實現(xiàn)此案例需要按照如下步驟進行。

1)物理機為所有節(jié)點配置yum源服務器。

提示:ceph10.iso在/linux-soft/02目錄。

[root@room9pc01 ~]# mkdir /var/ftp/ceph

[root@room9pc01 ~]# mount ceph10.iso /var/ftp/ceph/

2)在node1配置SSH密鑰,讓node1可用無密碼連接node1,node2,node3

[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''

[root@node1 ~]# for i in 41 42 43

do

ssh-copy-id 192.168.2.$i

done

3)修改/etc/hosts域名解析記錄(不要刪除原有的數(shù)據(jù)),同步給所有ceph節(jié)點。

[root@node1 ~]# vim /etc/hosts

192.168.2.41 node1

192.168.2.42 node2

192.168.2.43 node3

[root@node1 ~]# for i in 41 42 43

do

scp /etc/hosts 192.168.2.$i:/etc

done

4)為所有ceph節(jié)點配置yum源,并將配置同步給所有節(jié)點

[root@node1 ~]# cat /etc/yum.repos.d/ceph.repo

[mon]

name=mon

baseurl=ftp://192.168.2.254/ceph/MON

gpgcheck=0

[osd]

name=osd

baseurl=ftp://192.168.2.254/ceph/OSD

gpgcheck=0

[tools]

name=tools

baseurl=ftp://192.168.2.254/ceph/Tools

gpgcheck=0

[root@node1 ~]# yum repolist #驗證YUM源軟件數(shù)量

源標識 源名稱 狀態(tài)

Dvd redhat 9,911

Mon mon 41

Osd osd 28

Tools tools 33

repolist: 10,013

[root@node1 ~]# for i in 41 42 43

do

scp /etc/yum.repos.d/ceph.repo 192.168.2.$i:/etc/yum.repos.d/

done

5)所有節(jié)點主機與真實主機的NTP服務器同步時間。

提示:默認真實物理機已經(jīng)配置為NTP服務器。

[root@node1 ~]# vim /etc/chrony.conf

… …

server 192.168.2.254 iburst

[root@node1 ~]# for i in 41 42 43

do

scp /etc/chrony.conf 192.168.2.$i:/etc/

ssh 192.168.2.$i "systemctl restart chronyd"

done

6)使用virt-manager為三臺ceph虛擬機添加磁盤。每臺虛擬機添加2塊20G的磁盤。

1)給node1主機安裝ceph-deploy,創(chuàng)建工作目錄,初始化配置文件。

[root@node1 ~]# yum -y install ceph-deploy

[root@node1 ~]# mkdir ceph-cluster

[root@node1 ~]# cd ceph-cluster

2)給所有ceph節(jié)點安裝ceph相關軟件包

[root@node1 ceph-cluster]# for i in node1 node2 node3

do

ssh $i "yum -y install ceph-mon ceph-osd ceph-mds"

done

3)初始化mon服務

[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3

[root@node1 ceph-cluster]# ceph-deploy mon create-initial

[root@node1 ceph-cluster]# ceph -s #查看結果

cluster 9f3e04b8-7dbb-43da-abe6-b9e3f5e46d2e

health HEALTH_ERR monmap e2: 3 mons at

{node1=192.168.2.41:6789/0,node2=192.168.2.42:6789/0,node3=192.168.2.43:6789/0}

osdmap e45: 0 osds: 0 up, 0 in

4)準備磁盤分區(qū),創(chuàng)建journal盤,并永久修改設備權限。

[root@node1 ceph-cluster]# for i in node1 node2 node3

do

ssh $i "parted /dev/vdb mklabel gpt"

ssh $i "parted /dev/vdb mkpart primary 1 100%"

done

提示:下面的步驟在所有主機都需要操作(node1,node2,node3)

#臨時修改權限:

[root@node1 ceph-cluster]# chown ceph.ceph /dev/vdb1

#永久修改權限:

[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-vdb.rules

ENV{DEVNAME}=="/dev/vdb1",OWNER="ceph",GROUP="ceph"

5)使用ceph-deploy工具初始化數(shù)據(jù)磁盤(僅node1操作)。

[root@node1 ceph-cluster]# ceph-deploy disk zap node1:vdc

[root@node1 ceph-cluster]# ceph-deploy disk zap node2:vdc

[root@node1 ceph-cluster]# ceph-deploy disk zap node3:vdc

6)初始化OSD集群。

[root@node1 ceph-cluster]# ceph-deploy osd create /

node1:vdc:/dev/vdb1

//創(chuàng)建osd存儲設備,vdc為集群提供存儲空間,vdb1提供JOURNAL緩存,

//一個存儲設備對應一個緩存設備,緩存需要SSD,不需要很大

[root@node1 ceph-cluster]# ceph-deploy osd create /

node2:vdc:/dev/vdb1

[root@node1 ceph-cluster]# ceph-deploy osd create /

node3:vdc:/dev/vdb1

[root@node1 ceph-cluster]# ceph -s #查看集群狀態(tài)

cluster 9f3e04b8-7dbb-43da-abe6-b9e3f5e46d2e

health HEALTH_OK

monmap e2: 3 mons at {node1=192.168.4.11:6789/0,node2=192.168.4.12:6789/0,node3=192.168.4.13:6789/0}

election epoch 6, quorum 0,1,2 node1,node2,node3

osdmap e45: 3 osds: 3 up, 3 in

flags sortbitwise

pgmap v25712: 64 pgs, 1 pools, 86465 kB data, 2612 objects

508 MB used, 60 GB / 60 GB avail

64 active+clean

1)啟動mds服務

[root@node1 ceph-cluster]# ceph-deploy mds create node3

2)創(chuàng)建存儲池(文件系統(tǒng)由inode和block組成)

[root@node1 ceph-cluster]# ceph osd pool create cephfs_data 128

[root@node1 ceph-cluster]# ceph osd pool create cephfs_metadata 128

[root@node1 ceph-cluster]# ceph osd lspools

0 rbd,1 cephfs_data,2 cephfs_metadata

3)創(chuàng)建文件系統(tǒng)

[root@node1 ceph-cluster]# ceph fs new myfs1 cephfs_metadata cephfs_data

[root@node1 ceph-cluster]# ceph fs ls

name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

1)卸載web1,web2,web3的NFS共享。

暫停服務防止有人實時讀寫文件。

[root@web1 ~]# /usr/local/nginx/sbin/nginx -s stop

[root@web2 ~]# /usr/local/nginx/sbin/nginx -s stop

[root@web3 ~]# /usr/local/nginx/sbin/nginx -s stop

[root@web1 ~]# umount /usr/local/nginx/html

[root@web2 ~]# umount /usr/local/nginx/html

[root@web3 ~]# umount /usr/local/nginx/html

[root@web1 ~]# vim /etc/fstab

#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0

[root@web2 ~]# vim /etc/fstab

#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0

[root@web3 ~]# vim /etc/fstab

#192.168.2.31:/web_share/html /usr/local/nginx/html/ nfs defaults 0 0

2)web服務器永久掛載Ceph文件系統(tǒng)(web1、web2、web3都需要操作)。

在任意ceph節(jié)點,如node1查看ceph賬戶與密碼。

[root@node1 ~]# cat /etc/ceph/ceph.client.admin.keyring

[client.admin]

key = AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==

/etc/rc.local是開機啟動腳本,任何命令放在該文件中都是開機自啟。

[root@web1 ~]# mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ /

-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==

[root@web1 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ /

-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local

[root@web1 ~]# chmod +x /etc/rc.local

[root@web2 ~]# mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ /

-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==

[root@web2 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ /

-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local

[root@web2 ~]# chmod +x /etc/rc.local

[root@web3 ~]# mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ /

-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==

[root@web3 ~]# echo 'mount -t ceph 192.168.2.41:6789:/ /usr/local/nginx/html/ /

-o name=admin,secret=AQA0KtlcRGz5JxAA/K0AD/uNuLI1RqPsNGC7zg==' >> /etc/rc.local

[root@web3 ~]# chmod +x /etc/rc.local

另一種解決方案,還可以通過fstab實現(xiàn)永久掛載。

提示:如果希望使用fstab實現(xiàn)永久掛載,客戶端需要額外安裝libcephfs1軟件包。

[root@web1 ~]# yum -y install libcephfs1

[root@web1 ~]# vim /etc/fstab

… …

192.168.4.11:/ /usr/local/nginx/html/ ceph defaults,_netdev,name=admin,secret=AQCVcu9cWXkgKhAAWSa7qCFnFVbNCTB2DwGIOA== 0 0

第三種掛載方案:對于高可用的問題,可以在mount時同時寫入多個IP。

臨時命令:

[root@web1 ~]# mount -t ceph /

192.168.4.11:6789,192.168.4.12:6789,192.168.4.13:6789:/ /usr/local/nginx/html /

-o name=admin,secret=密鑰

永久修改:

[root@web1 ~]# vim /etc/fstab

192.168.4.11:6789,192.168.4.12:6789,192.168.4.13:6789:/ /usr/local/nginx/html/ /

ceph defaults,_netdev,name=admin,secret=密鑰 0 0

3) 遷移NFS服務器中的數(shù)據(jù)到Ceph存儲

登陸NFS服務器備份數(shù)據(jù),將備份數(shù)據(jù)拷貝給web1或web2或web3,tar備份數(shù)據(jù)時注意使用-f選項保留文件權限。

[root@nfs ~]# cd /web_share/html/

[root@nfs html]# tar -czpf /root/html.tar.gz ./*

[root@nfs html]# scp /root/html.tar.gz 192.168.2.11:/usr/local/nginx/html/

登陸web1將數(shù)據(jù)恢復到Ceph共享目錄

[root@web1 html]# tar -xf html.tar.gz

[root@web1 html]# rm -rf html.tar.gz

4)恢復web服務

[root@web1 ~]# /usr/local/nginx/sbin/nginx

[root@web2 ~]# /usr/local/nginx/sbin/nginx

[root@web3 ~]# /usr/local/nginx/sbin/nginx

部署Git版本控制系統(tǒng)

1. 問題

部署Git版本控制系統(tǒng),管理網(wǎng)站代碼,實現(xiàn)如下效果:

2. 方案

生產(chǎn)環(huán)境應該有一臺獨立的Git服務器,這里為了節(jié)約主機資源,我們使用數(shù)據(jù)庫主機同時做完Git服務器,如圖所示。

主機配置如表所示。

3. 步驟

實現(xiàn)此案例需要按照如下步驟進行。

1)安裝軟件包,創(chuàng)建空倉庫。

[root@database ~]# yum -y install git

[root@database ~]# mkdir /var/git/

[root@database ~]# git init --bare /var/git/wordpress.git #創(chuàng)建空倉庫

2)登陸web1服務器克隆git倉庫,上傳網(wǎng)站代碼到git服務器。

[root@web1 var]# git config --global push.default simple

[root@web1 var]# git config --global user.email you@example.com

[root@web1 var]# git config --global user.name "Your Name"

[root@web1 var]# cd /var/

[root@web1 var]# git clone root@192.168.2.21:/var/git/wordpress.git

[root@web1 var]# cd /var/wordpress

[root@web1 wordpress]# cp -a /usr/local/nginx/html/* ./

[root@web1 wordpress]# git add .

[root@web1 wordpress]# git commit -m "wordpress code"

[root@web1 wordpress]# git push

root@192.168.2.21's password:<輸入192.168.2.21主機root的密碼>

1)安裝軟件包(192.168.2.21操作)

[root@database ~]# yum -y install git-daemon

2)修改配置文件,啟動Git服務

[root@database ~]# vim /usr/lib/systemd/system/git@.service

修改前內容如下:

ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/lib/git --export-all --user-path=public_git --syslog --inetd –verbose

修改后內容如下:ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/git --export-all --user-path=public_git --syslog --inetd –verbose

[root@database ~]# systemctl start git.socket

[root@database ~]# systemctl status git.socket

3)客戶端測試(使用web2做完客戶端主機,192.168.2.12)

在web2執(zhí)行clone等同于是把代碼又備份了一份。

[root@web2 ~]# cd /var/

[root@web2 var]# git clone git://192.168.2.21/wordpress.git

1)安裝軟件包(192.168.2.21操作)

[root@database ~]# yum -y install httpd gitweb

2)修改配置文件

[root@database ~]# vim /etc/gitweb.conf

$projectroot = "/var/git"; #添加一行

3)啟動服務

[root@database ~]# systemctl start httpd

4)客戶端驗證

[root@room9pc01 ~]# firefox http://192.168.2.21/git

訪問網(wǎng)頁可以查看到wordpress倉庫,點擊tree菜單后可以看到如圖所示的代碼。

優(yōu)化Web服務器

1. 問題

優(yōu)化Web服務器,實現(xiàn)如下效果:

2. 步驟

實現(xiàn)此案例需要按照如下步驟進行。

1)優(yōu)化前測試(客戶端訪問一個不存在的頁面)。

[root@room9pc01 ~]# firefox http://www.lab.com/gi

2)修改Nginx配置文件,自定義錯誤頁面

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf

error_page 404 /404.html; //自定義錯誤頁面

[root@web2 ~]# vim /usr/local/nginx/conf/nginx.conf

error_page 404 /404.html; //自定義錯誤頁面

[root@web3 ~]# vim /usr/local/nginx/conf/nginx.conf

error_page 404 /404.html; //自定義錯誤頁面

3) 重啟nginx

[root@web1 ~]# /usr/local/nginx/sbin/nginx -s reload

[root@web2 ~]# /usr/local/nginx/sbin/nginx -s reload

[root@web3 ~]# /usr/local/nginx/sbin/nginx -s reload

1)配置、編譯新的nginx(web1、web2、web3做相同操作,下面以web1為例)

[root@web1 ~]# tar -xf nginx-1.15.8.tar.gz

[root@web1 ~]# cd nginx-1.15.8

[root@web1 nginx-1.15.8]# ./configure /

--with-http_ssl_module /

--with-http_stub_status_module

[root@web1 nginx-1.15.8]# make

2)備份老版本nginx,更新新版本nginx

[root@web1 nginx-1.15.8]# mv /usr/local/nginx/sbin/nginx{,.old}

[root@web1 nginx-1.15.8]# cp objs/nginx /usr/local/nginx/sbin/

3)修改配置文件

[root@web1 ~]# vim /usr/local/nginx/conf/nginx.conf

... ...

location /status {

stub_status on;

allow 192.168.2.0/24;

deny all;

}

... ...

4)升級或重啟服務

注意:必須在nginx-1.15.8源碼包目錄下執(zhí)行make upgrade命令。

[root@web1 nginx-1.15.8]# make upgrade

或者手動執(zhí)行killall命令殺死進程后重新啟動

[root@web1 ~]# killall nginx

[root@web1 ~]# /usr/local/nginx/sbin/nginx

1)編寫腳本(以web1為例)

[root@web1 ~]# vim /usr/local/nginx/logbak.sh

#!/bin/bash

date=`date +%Y%m%d`

logpath=/usr/local/nginx/logs

mv $logpath/access.log $logpath/access-$date.log

mv $logpath/error.log $logpath/error-$date.log

kill -USR1 $(cat $logpath/nginx.pid)

2)創(chuàng)建計劃任務

[root@web1 ~]# crontab -e

03 03 * * 5 /usr/local/nginx/logbak.sh

修改Nginx配置文件

[root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf

http {

.. ..

gzip on; //開啟壓縮

gzip_min_length 1000; //小文件不壓縮

gzip_comp_level 4; //壓縮比率

gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

//對特定文件壓縮,類型參考mime.types

.. ..

}

如果需要處理大量靜態(tài)文件,可以將文件緩存在內存,下次訪問會更快。

http {

open_file_cache max=2000 inactive=20s;

open_file_cache_valid 60s;

open_file_cache_min_uses 5;

open_file_cache_errors off;

//設置服務器最大緩存2000個文件句柄,關閉20秒內無請求的文件句柄

//文件句柄的有效時間是60秒,60秒后過期

//只有訪問次數(shù)超過5次會被緩存

}

關鍵詞:網(wǎng)絡,方案,部署,詳細,項目

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉