負載與讀寫分離圖片伺服器叢集模型
對於絕大多數網站,圖片資源是一個非常重要的元素。社群論壇裡面圖片相簿,電子商務線上產品展示圖,移動端應用圖片分享功能等。都在說網際網路正在處於讀圖時代,各大中小型網站都需要保持良好的圖片處理能力。需要支援海量圖片資源儲存時,更加要搭建高可用負載圖片服務叢集支撐網站系統,保證網站上圖片相關功能準確無誤執行,使用者物件訪問頁面體驗流暢。
環境:四臺Linux主機,一臺LVS負載均衡,一臺FastDFS_tracker,兩臺FastDFS_storage,FastDFS_client在FastDFS_tracker上面。
負載:192.168.10.141,安裝LVS
圖片:192.168.10.173,安裝Nginx+FastDFS
圖片:192.168.10.74,安裝Nginx+FastDFS
排程:192.168.10.252,安裝FastDFS
基礎架構分析
基礎架構主要實現負載均衡、讀寫分離、分散式檔案系統、備份功能、高可用性等五個方面功能。備份功能與高可用性沒有新增到下面的架構圖,只在後面進行一些分析。圖片上傳通過分散式檔案系統,儲存在各個圖片伺服器上特定目錄,保證圖片資源同步。圖片訪問通過負載均衡響應請求,按照排程演算法分配到單一圖片伺服器,接受響應返回圖片請求結果。這樣就把圖片的讀寫分離開來,並且多個圖片伺服器組成的檔案系統,自備一定容災能力。當然實現圖片伺服器的備份功能,容災能力最強。在負載均衡上面搭建主從備份服務,實現高可用性功能。主負載宕機時,由從負載頂替繼續執行負載均衡工作。
負載均衡:使用LVS實現負載均衡,工作於網路層的代理轉發,支援三個轉發工作方式,提供十種代理排程演算法。
讀寫分離:訪問圖片時通過負載均衡的代理,上傳圖片時通過分散式檔案系統的排程器,訪問與上傳不再經過單一伺服器。
高可用性:使用LVS+Keepalived實現負載均衡高可用性圖片伺服器叢集,搭建兩臺LVS負載伺服器,安裝Keepalived檢測當前LVS健康狀態,隨時準備主從切換。
備份功能:啟用圖片服務的實時備份功能,該備份伺服器只進行圖片的寫操作,不支援檔案系統與客戶端進行圖片刪除、修改、訪問。
分散式檔案系統:使用FastDFS分散式檔案系統,圖片通過排程器寫到優先順序高的儲存器,然後同步到其他儲存器。
系統安裝過程
安裝LVS負載
命令列方式安裝lvs:[[email protected] Desktop]# yum -y install ipvsadm*
驗證lvs安裝是否成功:
[[email protected] Desktop]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
安裝Nginx服務
新增Nginx安裝源:[[email protected] Desktop]# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
Retrieving http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
warning: /var/tmp/rpm-tmp.4MHe6h: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing... ########################################### [100%]
1:nginx-release-centos ########################################### [100%]
檢視Nginx安裝源是否新增成功:
[[email protected] Desktop]# yum info nginx
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.sina.cn
nginx | 2.9 kB 00:00
nginx/primary_db | 8.3 kB 00:00
Available Packages
Name : nginx
Arch : x86_64
Version : 1.8.1
Release : 1.el6.ngx
Size : 352 k
Repo : nginx
Summary : High performance web server
URL : http://nginx.org/
License : 2-clause BSD-like license
Description : nginx [engine x] is an HTTP and reverse proxy server, as well as
: a mail proxy server.
命令列安裝Nginx:
[[email protected] Desktop]# yum install nginx
啟動Nginx命令:
[[email protected] Desktop]# nginx
瀏覽器訪問出現nginx歡迎資訊,即安裝成功
安裝FastDFS檔案系統
前期準備與安裝libevent:[[email protected] Desktop]# mkdir FastNFS
[[email protected] Desktop]# cd FastNFS/
[[email protected] FastNFS]# git clone https://github.com/libevent/libevent.git
[[email protected] libevent]# rpm -qa libevent
[[email protected] libevent]# rpm -qa|grep libevent rpm -e libevent*
[[email protected] FastNFS]# cd libevent
[[email protected] libevent]# cd cmake
[[email protected] cmake]# yum install cmake
[[email protected] cmake]# cmake ..
[[email protected] cmake]# make
[[email protected] cmake]# make install
安裝libfastcommon依賴:
[[email protected] FastNFS]# git clone https://github.com/happyfish100/libfastcommon.git
[[email protected] FastNFS]# cd libfastcommon
[[email protected] libfastcommon]# ./make.sh
[[email protected] libfastcommon]# ./make.sh install
mkdir -p /usr/lib64
mkdir -p /usr/lib
install -m 755 libfastcommon.so /usr/lib64
install -m 755 libfastcommon.so /usr/lib
mkdir -p /usr/include/fastcommon
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h /usr/include/fastcommon
安裝fastdfs分散式檔案系統:
[[email protected] FastNFS]# wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
[[email protected] FastNFS]# tar -zxvf V5.05.tar.gz
[[email protected] FastNFS]# cd fastdfs-5.05
[[email protected] fastdfs-5.05]# ./make.sh
[[email protected] fastdfs-5.05]# ./make.sh install
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_trackerd /usr/bin
if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
cp -f fdfs_storaged /usr/bin
if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi
mkdir -p /usr/bin
mkdir -p /etc/fdfs
mkdir -p /usr/lib64
cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin
if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; fi
if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; fi
mkdir -p /usr/include/fastdfs
cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs
if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi
驗證fastdfs安裝是否成功:
[[email protected] fastdfs-5.05]# ll /etc/fdfs/
total 20
-rw-r--r--. 1 root root 1461 Mar 21 03:01 client.conf.sample
-rw-r--r--. 1 root root 7829 Mar 21 03:01 storage.conf.sample
-rw-r--r--. 1 root root 7102 Mar 21 03:01 tracker.conf.sample
系統配置過程
配置LVS負載
檢視lvs配置幫助說明:[[email protected] nginx]# ipvsadm --help
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
Usage:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface] [--syncid sid]
ipvsadm --stop-daemon state
ipvsadm -h
Commands:
Either long or short options are allowed.
--add-service -A add virtual service with options
--edit-service -E edit virtual service with options
--delete-service -D delete virtual service
--clear -C clear the whole table
--restore -R restore rules from stdin
--save -S save rules to stdout
--add-server -a add real server with options
--edit-server -e edit real server with options
--delete-server -d delete real server
--list -L|-l list the table
--zero -Z zero counters in a service or all services
--set tcp tcpfin udp set connection timeout values
--start-daemon start connection sync daemon
--stop-daemon stop connection sync daemon
--help -h display this help message
Options:
--tcp-service -t service-address service-address is host[:port]
--udp-service -u service-address service-address is host[:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
--ipv6 -6 fwmark entry uses IPv6
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
the default scheduler is wlc.
--pe engine alternate persistence engine may be sip,
not set by default.
--persistent -p [timeout] persistent service
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
--gatewaying -g gatewaying (direct routing) (default)
--ipip -i ipip encapsulation (tunneling)
--masquerading -m masquerading (NAT)
--weight -w weight capacity of real server
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--mcast-interface interface multicast interface for connection sync
--syncid sid syncid for connection sync (default=255)
--connection -c output of current IPVS connections
--timeout output of timeout (tcp tcpfin udp)
--daemon output of daemon information
--stats output of statistics information
--rate output of rate information
--exact expand numbers (display exact values)
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--nosort disable sorting output of service/server entries
--sort does nothing, for backwards compatibility
--ops -o one-packet scheduling
--numeric -n numeric output of addresses and ports
配置LVS排程器
在LVS排程器執行如下指令碼,VIP為對外虛擬IP,注意修改網絡卡資訊:VIP=192.168.10.251
/sbin/ifconfig eth2:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth2:0
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/eth2/send_redirects
/sbin/ipvsadm -C
ipvsadm -A -f 1 -s rr
ipvsadm -a -f 1 -r $RIP1:80 -g
ipvsadm -a -f 1 -r $RIP2:80 -g
檢視ipvsadm配置:
[[email protected] ipvsadm]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 1 rr
-> 192.168.10.98:80 Route 1 0 0
-> 192.168.10.128:80 Route 1 0 0
配置真實服務
在真實圖片伺服器上執行如下指令碼: VIP=192.168.10.251
ifconfig lo down
ifconfig lo up
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
配置FastDFS檔案系統
參照之前FastDFS配置文章,主要是配置地址、埠、目錄等一下標籤,其他配置根據需求增加即可。http://blog.csdn.net/a821478424/article/details/51067153配置Nginx服務
配合負載均衡測試
修改nginx預設頁面,使叢集展示不同資訊,以區分頁面來自於不同伺服器,驗證LVS功能是否成功。配置圖片資源訪問路徑
編譯Nginx預設配置檔案:[[email protected] html]# vi /etc/nginx/conf.d/default.conf
找到下面網站根目錄內容:
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
修改成下面的內容:
location / {
#root /usr/share/nginx/html;
root /home/yuqing/fastdfs/data/00/00;
index index.html index.htm;
}
防火牆配置
允許80、23000、22122埠,支援Nginx、FastDFS等服務執行。功能測試
負載均衡功能
瀏覽器中訪問LVS提供的虛擬IP,返回來自Nginx叢集服務預設頁面。多重新整理幾遍url,或者使用不同瀏覽器訪問,發現預設頁面並不唯一,證明負載均衡功能正常。圖片叢集功能
使用客戶端上傳圖片:[[email protected] Desktop]$ fdfs_upload_file /etc/fdfs/client.conf ./linux.jpg
group1/M00/00/00/wKgKYlcgVEGAfRLhAAAX6oV41fw051.jpg
檢視圖片是否上傳成功:
[[email protected] html]# ll /home/yuqing/fastdfs/data/00/00/
total 32
-rw-r--r--. 1 root root 6122 Apr 26 22:55 wKgKYlcgVEGAfRLhAAAX6oV41fw051.jpg
-rw-r--r--. 1 root root 11336 Mar 22 00:59 wKjVh1bw-1KADEceAAAsSKZJhlk53.html
-rw-r--r--. 1 root root 11336 Mar 22 01:05 wKjViFbw_LyAIv-oAAAsSKZJhlk82.html
瀏覽器中訪問虛擬IP後面加上圖片路徑與標識,如:http://192.168.10.251/wKgKYlcgVEGAfRLhAAAX6oV41fw051.jpg。瀏覽器展示所上傳圖片,證明圖片叢集功能正常。
說明
LVS提供多種排程模式與演算法,工作於網路四層支援海量請求,配置比起Haproxy、nginx稍微複雜,速度與穩定性各方面效能更加好。FastDFS分散式檔案系統,模組劃分明確,結構清晰,提供各種語言客戶端API開發介面,便於與專案整合。而Hadoop功能更加強大,架構算是複雜,常用於大資料分析。淘寶也有開源分散式圖片系統,主要用於電商,且為自身特性定做。所以,選擇LVS實現負載功能,選擇FastDFS實現分散式圖片系統。相關推薦
負載與讀寫分離圖片伺服器叢集模型
對於絕大多數網站,圖片資源是一個非常重要的元素。社群論壇裡面圖片相簿,電子商務線上產品展示圖,移動端應用圖片分享功能等。都在說網際網路正在處於讀圖時代,各大中小型網站都需要保持良好的圖片處理能力。需要支援海量圖片資源儲存時,更加要搭建高可用負載圖片服務叢集支撐網站系統,保證
一步一圖搭建-分散式伺服器部署之mysql叢集-主從複製與讀寫分離
傳統專案模型: 1.傳統的裝置搭建時,如果採用單臺伺服器.則會出現很多的問題.如果伺服器出現宕機/斷電/硬體裝置的損壞,都會直接影響使用者體驗. 2.如果傳統專案中遇到了高併發的情況.單臺伺服器不足以支援 分散式的處理: 傳統資料庫中存在
MySQL搭建主從伺服器與讀寫分離的實現
一 丶為什麼要搭建主從伺服器和實現讀寫分離 1.總結起來就一點,實現併發吞吐和負載能力。通過搭建主從伺服器實現讀寫分離,提高MySQL的負載能力 2.主從的基本實現原理 (本例 主伺服器ip: 192.168.2.187,後面簡稱 master;從伺服器ip: 192.168
MySQL主從伺服器的配置與讀寫分離實現
1.1. MySQL的Master和Slave配置MySQL主從同步是目前使用比較廣泛的資料庫架構,技術比較成熟,配置也不復雜,特別是對於負載比較大的網站,主從同步能夠有效緩解資料庫讀寫的壓力。1.1.1. MySQL主從同步的機制1. Slave 上面
MySQL主從復制與讀寫分離
$0 get 登錄 nice ica oca kcon 過程 ads 主從復制(Master-Slave)與讀寫分離(Mysql作為目前世界上使用最廣泛的免費數據庫,相信所有從事系統運維的工程師都一定接觸過。但在實際的生產環境中,由單臺主從復制(Master-Slave)
48.MYSQL的主從與讀寫分離
linuxlinux企業級知識點總結Mysql主從復制與讀寫分離原理圖 Mysql的主從復制:從服務器在主服務器上自動同步數據。Mysql的讀寫分離:通過amoeba服務器控制用戶讀數據在從服務器上進行,寫數據從主服務器上進行,這樣可以做到負載均衡。 搭建mysql主從復制:v 建立時間同步環境#yum -y
MySQL主從復制技術與讀寫分離技術amoeba應用
buffer chan lns -a query rep 下載 高可用性 tab MySQL主從復制技術與讀寫分離技術amoeba應用 前言:眼下在搭建一個人才站點,估計流量會非常大,須要用到分布式數據庫技術,MySQL的主從復制+讀寫分
MySQL的主從復制與讀寫分離原理
訂單 中繼 運維 提交 磁盤 com 引擎 庫服務器 文件 前言:我們前面搭建過LAMP和LNMP,做過了web服務器群集和熱備,web服務器壞了我們是不怕了,但是我們要知道,網站的數據有很多是存儲在數據庫裏面的,例如註冊的會員,發的文章,購物的訂單等信息。當然我們可以給數
MySQL主從同步與讀寫分離
修改配置 monit 相關 流量 修改配置文件 l數據庫 cli 授權 san MySQL主從同步MySQL AB復制1.對指定庫的異地同步。2.MySQL主-->從復制架構的實現。3.MySQL服務器的只讀控制。 主從:單向復制時,建議將從庫設置為只讀。 主從復制
MySQL主從復制與讀寫分離的工作原理
MySQL 主從復制 讀寫分離 一、mysql主從復制的工作原理1、mysq支持的復制類型1)基於語句的復制。在服務器上執行sql語句,在從服務器上執行同樣的語句,mysql默認采用基於語句的復制,執行效率高。2)基於行的復制。把改變的內容復制過去,而不是把命令在從服務器上執行一遍。3)混合類型的
搭建MySql主從復制與讀寫分離
單向 replicate from 命令 bec 方便 命令行 balance 之前 一、實驗名稱:?mysql主從復制讀寫分離二、實驗目的:??熟悉mysql主從復制的原理?熟悉mysql讀寫分離的原理?學會配置mysql主從復制?學會配置mysql讀寫分離三、實驗環境:
MySQL 主從復制與讀寫分離
mes 讀取數據 int tab pad 環境變量 values zxvf wall Mysql主從復制作用原理 1、在業務復雜的系統中,有這麽一個情景,有一句sql語句需要鎖表,導致暫時不能使用讀的服務,那麽就很影響運行中的業務,使用主從復制,讓主庫負責寫,從庫負責讀
搭建 MySQL主從復制與讀寫分離
ast round running mysql配置 一個表 mysql主從 安全性 配置 tab 搭建 MySQL主從復制與讀寫分離 案例概述 : 在實際環境中 ,如果對數據庫的讀和寫都在同一個數據庫服務中操作 ,無論實在安全性、高可用性, 還是高並發等各個方面都是完全不
【純幹貨】Amoeba實現MySQL主從同步與讀寫分離
exec strong arc all abstract a star status utf prop 【純幹貨】Amoeba實現MySQL主從同步與讀寫分離 一、簡介 amoeba簡介 Amoeba(變形蟲)項目,該開源框架於2008年開始發布一款 Amoeba f
MySQL 數據庫的主從復制與讀寫分離
用戶 用戶訪問 sch ltp sys pro ffffff 需求 一個數 在實際生產環境中,如果對數據庫的讀和寫都在同一個數據庫服務器中操作,無論是安全性、高可用性,還是高並發等各個方面都是完全不能滿足實際需求的,因此,一般來說都是通過主從復制(Master-Slave)
微服務化的數據庫設計與讀寫分離
邏輯 例子 origin sele 持久化 能夠 ODB ima 來看 數據庫永遠是應用最關鍵的一環,同時越到高並發階段,數據庫往往成為瓶頸,如果數據庫表和索引不在一開始就進行良好的設計,則後期數據庫橫向擴展,分庫分表都會遇到困難。 對於互聯網公司來講,一般都會使用Mysq
MYSQL的主從復制與讀寫分離
amp pan 滿足 art 5.1 tap sta 訪問服務器 方式 在實際生產環境中,如果對數據庫的讀和寫都在同一個數據庫服務器中操作,無論是安全性,高可用性,還是高並發性等各個方面都是不能滿足實際需求,因此,一般來說都是通過主從復制的方式來同步詩句,再通過讀寫分離來提
Mycat的安裝與讀寫分離配置
Mycat: 一個可以用於MySQL讀寫分離和高可用的中介軟體 一個模擬為MySQL Server的超級資料庫 一個能平滑擴充套件支援1000億大表的分散式資料庫系統 一個可管控多種關係資料庫的資料庫路由器 一個平滑從關係資料升級到大資料的應用中介軟體 準備工作: 兩臺mys
MySQL負載均衡讀寫分離
在瞭解《MySQL主從複製原理》和《MySQL主從同步配置》之後就要考慮的是,既然我MySQL的架構是一主兩從,那麼該如何做到負載均衡,是寫操作在Master上執行,讀操作在Slave上操作。 -------- 這種負載均衡的解決方案有: &
MySQL高可用--主從複製與讀寫分離
一、Mysql高可用概念 二、MySQL主從複製原理 叢集目的,減輕單臺伺服器壓力 三、MySQL主從複製配置 實際操作mysql伺服器叢集,主從複製的過程 master 192.168.230.128 slav