haproxy、nginx裙戏、memcache

(第十九周作業(yè))
1乘凸、運(yùn)用haproxy實(shí)現(xiàn)nginx服務(wù)負(fù)載均衡
需要三臺(tái)虛擬機(jī)做實(shí)驗(yàn):
A機(jī):安裝haproxy,實(shí)現(xiàn)后端BC機(jī)上的nginx負(fù)載,IP地址為:192.168.184.100
B機(jī)累榜、C機(jī):安裝Nginx服務(wù)器营勤,監(jiān)聽80端口。(Nginx簡(jiǎn)單安裝即可壹罚,這里不再描述)? ?IP地址為192.168.184.101 葛作、192.168.184.102
1)A機(jī)安裝haproxy
先安裝依賴軟件包
#?yum -y install make gcc gcc-c++ openssl-devel
下載haproxy,假如軟件包為haproxy-1.7.9.tar.gz,并上傳到A機(jī)
#?tar -zxf haproxy-1.7.9.tar.gz
# cd /root/haproxy-1.7.9
查看安裝幫助文件猖凛,得知要先查看一下系統(tǒng)的內(nèi)核版本
# uname -r??
根據(jù)上面的查看結(jié)果赂蠢,到幫助文件中找到以下安裝命令中TARGET參數(shù)合適的值,PREFIX是安裝目錄
# make? ? ?TARGET=linux2628? ? PREFIX=/usr/local/haproxy??
# make install
2)A機(jī)編寫配置文件
# mkdir /usr/local/haproxy/etc
# vim /usr/local/haproxy/etc/haproxy.cfg????

global
????log 127.0.0.1? local0
????maxconn 4096
????chroot? ? /usr/local/haproxy
????uid 99#使用nobody用戶的uid
????gid 99 #使用nobody用戶的? 用戶組
????daemon?#以守護(hù)進(jìn)程形式運(yùn)行haproxy
????nbproc 1?#啟動(dòng)1個(gè)haproxy實(shí)例形病。設(shè)置成和CPU核心數(shù)一樣
????pidfile? /usr/local/haproxy/run/haproxy.pid? ? #進(jìn)程ID
defaults
????log??? global
????log??? 127.0.0.1????? local3????????#日志文件的輸出定向客年。產(chǎn)生的日志級(jí)別為local3. 系統(tǒng)中l(wèi)ocal1-7
????mode??? http???????????#工作模式默認(rèn)采用http模式,Nginx服務(wù)要采用這種方式
????option? httplog? ? ? ?#日志類別漠吻,記載http日志
????option? httpclose??????#每次請(qǐng)求完畢后主動(dòng)關(guān)閉http通道,
????option? dontlognull????#不記錄空連接的日志
????option? forwardfor?????#使后端服務(wù)器可獲得客戶端真實(shí)ip
? ? option? redispatch?????#當(dāng)serverid對(duì)應(yīng)的服務(wù)器掛掉后量瓜,強(qiáng)制定向到其他健康服務(wù)器
????retries 2??????????????#2次連接失敗就認(rèn)為服務(wù)器不可用
????maxconn 2000???????????#最大連接數(shù)
????balance roundrobin? ? ? #負(fù)載均衡算法輪詢方式
????stats? uri????/haproxy-stats??????????#haproxy 監(jiān)控頁面的訪問地址
????timeout connect????? 5000?????????????#連接超時(shí)時(shí)間。 單位毫秒
????timeout client?????? 50000????????????#客戶端連接超時(shí)時(shí)間
????timeout server????? 50000?????????????#服務(wù)器端連接超時(shí)時(shí)間
????option? httpchk GET?/hb.html? ? ?#健康檢查頁面
frontend nginx #前端名稱
????bind 0.0.0.0:80 #監(jiān)聽80端口途乃,請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到后端
????default_backend nginx_back #后端名稱
backend nginx_back #后端名稱绍傲,給上文引用
????server s1 192.168.184.101:80 weight 3 check #后端的主機(jī) IP 通過weight設(shè)置權(quán)重
????server s2 192.168.184.102:80 weight 3 check?

3)啟動(dòng)haproxy
#? /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
給B機(jī)和C機(jī)的Nginx添加一個(gè)hb.hmtl頁面,內(nèi)容為文本行“OK!"
給B機(jī)和C機(jī)添加一個(gè)index.html頁面耍共,內(nèi)容不相同烫饼,以示區(qū)別
然后啟動(dòng)B機(jī)和C機(jī)的nginx服務(wù)
訪問:http://192.168.184.100查看對(duì)應(yīng)的index.html頁面,多次刷新可以查看頁面顯示內(nèi)容如何變化试读。

2杠纵、搭建haproxy實(shí)現(xiàn)mysql負(fù)載均衡

這里的haproxy安裝過程與前一題差不多,這里只是說明一個(gè)配置文件的內(nèi)容
# vim /usr/local/haproxy/etc/haproxy.cfg? ??

global
? ? ? ?daemon
? ? ? ? nbproc 1
? ? ? ? pidfile? /usr/local/haproxy/run/haproxy.pid
defaults
? ? ? ? mode tcp? ? ? ? ? ? ? ? #對(duì)于mysql的負(fù)載均衡钩骇,這里要采用tcp(4層)比藻。
? ? ? ? retries 3? ? ? ? ? ? ? #3次連接失敗就認(rèn)為是服務(wù)器不可用
? ? ? ? option redispatch? ? ? #當(dāng)serverId對(duì)應(yīng)的服務(wù)器掛掉后,強(qiáng)制定向到其他健康的服務(wù)器
? ? ? ? option abortonclose? ? #當(dāng)服務(wù)器負(fù)載很高的時(shí)候倘屹,自動(dòng)結(jié)束掉當(dāng)前隊(duì)列處理比較久的連接
? ? ? ? maxconn 4096? ? ? ? ? ? #默認(rèn)的最大連接數(shù)
? ? ? ? timeout connect 5000? ? #連接超時(shí) ms
? ? ? ? timeout client 30000? ? #客戶端超時(shí)
? ? ? ? timeout server 30000? ? #服務(wù)器超時(shí)
? ? ? ? timeout check 2000? ? ? #=心跳檢測(cè)超時(shí)
? ? ? ? log 127.0.0.1 local0 err #日志輸出級(jí)別
listen configMysql
? ? ? ? bind 127.0.0.1:3306? ? #監(jiān)聽3306端口
? ? ? ? mode tcp
? ? ? ? maxconn 4096
? ? ? ? server s1 192.168.184.110:3306? ?#后端的兩臺(tái)數(shù)據(jù)庫服務(wù)器
? ? ? ? server s2 192.168.184.111:3306

3银亲、搭建tomcat服務(wù)器,并通過nginx反向代理訪問
需兩臺(tái)虛擬機(jī)進(jìn)行實(shí)驗(yàn):
A機(jī):安裝tomcat+java? 纽匙,IP地址:192.168.184.137
B機(jī):安裝nginx設(shè)置反向代理? ?IP地址:192.168.184.138
1)A機(jī)安裝java
上傳jdk-8u151-linux-x64.rpm到A機(jī)的/root目錄下务蝠,安裝包是多官網(wǎng)下載的。
# rpm -ivh??jdk-8u151-linux-x64.rpm
設(shè)置PATH環(huán)境變量
#? vi? ~/.bash_profile
最后增加兩行:

export ?JAVA_HOME=/usr/java/jdk1.8.0_151
export?PATH=$JAVA_HOME/bin:$PATH

保存后再執(zhí)行一下
# source? ~/.bash_profile
驗(yàn)證java?版本
#java? -version
2)A機(jī)安裝tomcat
上傳apache-tomcat-8.0.47.0.tar到/root
# cd /root
#? tar -xf apache-tomcat-8.0.47.0.tar
#? mv apache-tomcat-8.0.47.0 tomcat
3)啟動(dòng)tomcat并驗(yàn)證
? ?啟動(dòng)tomcat服務(wù)
# /root/tomcat/bin/startup.sh
查看日志
# tail -f /root/tomcat/logs/catlina.out
等出現(xiàn)Started UP表示啟動(dòng)完成
關(guān)閉防火墻
# service firewalld stop
從宿主機(jī)打開瀏覽器來訪問http://192.168.184.137:8080烛缔,可以看到tomcat的首頁
4)B機(jī)安裝nginx
#?rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install -y nginx
5)配置nginx
vi? /etc/nginx/nginx.conf

#后端tomcat服務(wù)器
upstream apachetomcat? {
? ? #這里可以配置多臺(tái)服務(wù)器和端口號(hào)
? ? server 192.168.184.137:8080;
}

server {
? ? listen 80;
? ? server_name? 192.168.184.138;
? ? #定義日志位置
? ? access_log? logs/tomcat.access.log? main;
? ? error_log? logs/tomcat.error.log;
?????#配置站點(diǎn)根目錄會(huì)根據(jù)完整的URI請(qǐng)求來映射
? ? root? html;
? ? #默認(rèn)頁面
? ? index? index.html index.htm index.jsp;
? ? #url映射
? ? location / {
? ? ? ? proxy_pass? http://apachetomcat;? ? #proxy_pass配置為:http:// + upstream名稱? ? ? ?
????????proxy_redirect? ? off;? ?#禁止所有的proxy_redirect指令?
? ? ? ? proxy_set_header? Host? ? ? ? ? ? $host;? ? #允許重新定義或添加字段傳遞給代理服務(wù)器的請(qǐng)求頭馏段。
? ? ? ? #將$remote_addr(客戶端IP)的值放進(jìn)變量請(qǐng)求頭? X-Real-IP中?
? ? ? ? proxy_set_header? X-Real-IP? ? ? ? $remote_addr;??
? ? ? ? proxy_set_header? X-Forwarded-For? $proxy_add_x_forwarded_for;? ?# 顯示出客戶端原始ip
? ? ? ? #當(dāng)其中一臺(tái)返回錯(cuò)誤碼404,500...等錯(cuò)誤時(shí),可以分配到下一臺(tái)服務(wù)器程序繼續(xù)處理践瓷,提高平臺(tái)訪問成功率毅弧,多可運(yùn)用于前臺(tái)程序負(fù)載,? ? ? ?
? ? ? ?proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
? ? ? ? proxy_max_temp_file_size 0;? ??#一次訪問能寫入的臨時(shí)文件的大小
? ? ? ? proxy_connect_timeout? ? ? 90;? ?#后端服務(wù)器連接的超時(shí)時(shí)間_發(fā)起握手等候響應(yīng)超時(shí)時(shí)間?
? ? ? ? proxy_send_timeout? ? ? ? 90;?#后端服務(wù)器數(shù)據(jù)回傳時(shí)間?
? ? ? ? proxy_read_timeout? ? ? ? 90;? #連接成功后_等候后端服務(wù)器響應(yīng)時(shí)間?
? ? ? ? proxy_buffer_size? ? ? ? ? 4k;? ? #當(dāng)中的設(shè)置單個(gè)緩沖區(qū)的大小当窗。?
? ? ? ? proxy_buffers? ? ? ? ? ? ? 4 32k;? ??#由緩沖區(qū)數(shù)量和緩沖區(qū)大小組成的?
? ? ? ? #nginx會(huì)在沒有完全讀完后端響應(yīng)的時(shí)候就開始向客戶端傳送數(shù)據(jù)够坐,所以它會(huì)劃出一部分緩沖區(qū)來專門向客戶端傳送數(shù)據(jù)
? ? ? ? proxy_busy_buffers_size? ? 64k;
? ? ? ? proxy_temp_file_write_size 64k;? ?#一次訪問能寫入的臨時(shí)文件的大小?
? ?}
}

6)重啟nginx服務(wù)
#systemctl start nginx.service
7)訪問測(cè)試:http://192.168.184.138

4、搭建Tomcat崖面,并基于memcached實(shí)現(xiàn)會(huì)話共享

需要兩臺(tái)虛擬機(jī):
A機(jī):192.168.184.70 ,安裝Nginx(80端口做反向代理)元咙,tomcat(8080端口)? 主機(jī)名:nodeA
B機(jī):192.168.184.71?安裝tomcat(8080端口),memcache(11211端口)? ?主機(jī)名:?nodeB
1)A機(jī)安裝Nginx
安裝依賴包:yum? -y ?install ?gcc? gcc-c++?? libgcc
下載Nginx和pcre安裝包? nginx-1.14.2.tar.gz?和?pcre-8.37.tar.gz
創(chuàng)建用戶和用戶組
groupadd? web
useradd? -s /sbin/nologin web
安裝pcre
tar -zxvf pcre-8.37.tar.gz
cd pcre-8.37
./configure
make? &&? make install
安裝nginx
tar -zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx --user=web --group=web --conf-path=/etc/nginx/nginx.conf --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-pcre=/usr/local/src/pcre-8.37
make? &&? make install
啟動(dòng)nginx? ?
/usr/local/nginx/sbin/nginx? ? ? ?
2)A機(jī)Nginx配置反向代理
vi /etc/nginx/nginx.conf

user? web web? #運(yùn)行用戶
worker_processes? 1;? #啟動(dòng)進(jìn)程,通常設(shè)置成和cpu的數(shù)量相等
#全局錯(cuò)誤日志及PID文件
error_log? /var/log/nginx/error.log;
pid? ? ? ? /var/run/nginx.pid;
events {
? ? #單個(gè)后臺(tái)worker process進(jìn)程的最大并發(fā)鏈接數(shù)
? ? worker_connections? 1024;
}
http {
? ? include? ? ? mime.types;? #設(shè)定mime類型,類型由mime.type文件定義
? ? default_type? application/octet-stream;
? ? sendfile? ? ? ? on;? #普通應(yīng)用設(shè)置為on
? ? keepalive_timeout? 65;? #連接超時(shí)時(shí)間
? ? upstream webtomcat{? #設(shè)定負(fù)載均衡的服務(wù)器列表
? ? ? ? ?server? 192.168.184.70:8080;? ? ?
? ? ? ? ?server? 192.168.184.71:8080;
? ? }
? ? server {
? ? ? ? listen? ? ? 80;? #偵聽80端口
? ? ? ? server_name? 192.168.184.70;
? ? ? ? location? / {? ? ? ? ? ? ? ? ? ? ? ? ? #代理配置
? ? ? ? ? ? ? ?proxy_pass? http://webtomcat; #反向代理到webtomcat定義的服務(wù)器列表
? ? ? ? ? ? ? ?#后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實(shí)IP
? ? ? ? ? ? ? ?proxy_set_header? Host? ? ? ? ? ? $host;
? ? ? ? ? ? ? ?proxy_set_header? X-Real-IP? ? ? ? $remote_addr;
? ? ? ? ? ? ? ?proxy_set_header? X-Forwarded-For? $proxy_add_x_forwarded_for;
? ? ? ? }
? ? ? ?#定義錯(cuò)誤提示頁面
? ? ? ? error_page? 500 502 503 504? /50x.html;
? ? ? ? ? ? location = /50x.html {
? ? ? ? ? ? root? html;
? ? ? ? }
? ? }
}

重新加載nginx配置文件
/usr/local/nginx/sbin/nginx? -s reload
3)A機(jī)和B機(jī)都安裝jdk和tomcat
(安裝步驟參考第3題的第(1)(2)(3)步操作)
4)B機(jī)安裝memcache
下載相關(guān)的軟件包:?libevent-1.4.13-stable.tar.gz? ?memcached-1.4.4.tar.gz
安裝libevent
tar zxf libevent-1.4.13-stable.tar.gz
cd libevent-1.4.13-stable
./configure --prefix=/usr
make && make install
安裝Memcached
tar zxf memcached-1.4.4.tar.gz
cd memcached-1.4.4
./configure --prefix=/usr/local/memcached --with-libevent=/usr
make && make install
啟動(dòng)Memcached
/usr/local/memcached/bin/memcached -d -m 64 -u root -l 192.168.184.71 -p 11211 -c 256 -P /tmp/memcached.pid
-d daemon后臺(tái)進(jìn)程
-m 指定最大使用內(nèi)存大小
-u 綁定指定用戶用于運(yùn)行進(jìn)程
-c 最大同時(shí)連接數(shù)
5)A機(jī)和B機(jī)在tomcat上進(jìn)行連接?memcache ?session?會(huì)話共享
vi /root/tomcat/conf/context.xml

……
<Context .....>
? ? <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
? ? ? ? memcachedNodes="nodeB:192.168.184.71:11211"
? ? ? ? requestUriIgnorePattern=".*/.(png|gif|jpg|css|js)$"
? ? ? ? sticky="false"
? ? ? ? storageKeyPrefix="context"
? ? ? ? lockingMode="uriPattern:/path1|/path2"
? ? ? ? sessionBackupAsync="false"
? ? ? ? sessionBackupTimeout="100"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
ranscoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
</Context>
……

requestUriIgnorePattern 設(shè)置忽略會(huì)話同步的請(qǐng)求的 URI 地址的正則表達(dá)式
sticky? 粘性會(huì)話需要保證每個(gè)用戶的請(qǐng)求都路由到同一臺(tái) Tomcat 服務(wù)器中
lockingMode? 用于非粘性會(huì)話
sessionBackupAsync? 設(shè)置 session 會(huì)話中的數(shù)據(jù)是否異步同步到 memcached 中巫员,默認(rèn)為 true庶香。
sessionBackupTimeout 備份 session 會(huì)話數(shù)據(jù)所需時(shí)間如果大于該值,將導(dǎo)致 session 會(huì)話數(shù)據(jù)同步失敗
transcoderFactoryClass? 配置序列化和反序列化 session 會(huì)話中的數(shù)據(jù)到 memcached 中的編碼轉(zhuǎn)換器的工廠類名
6)驗(yàn)證:
編寫測(cè)試頁面(A機(jī)和B機(jī)都要寫简识,B機(jī)要把下文中的NodeA改為NodeB):

<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false"%>
SessionID:<%=session.getId()%>
SessionIP:<%=request.getServerName()%>
SessionPort:<%=request.getServerPort()%>
<%
? ? ? out.println("This is Tomcat Server NodeA");
%>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赶掖,一起剝皮案震驚了整個(gè)濱河市感猛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奢赂,老刑警劉巖陪白,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異膳灶,居然都是意外死亡咱士,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門轧钓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來序厉,“玉大人,你說我怎么就攤上這事毕箍〕诜浚” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵而柑,是天一觀的道長(zhǎng)庭再。 經(jīng)常有香客問我,道長(zhǎng)牺堰,這世上最難降的妖魔是什么拄轻? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮伟葫,結(jié)果婚禮上恨搓,老公的妹妹穿的比我還像新娘。我一直安慰自己筏养,他們只是感情好斧抱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐溶,像睡著了一般辉浦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茎辐,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天宪郊,我揣著相機(jī)與錄音,去河邊找鬼拖陆。 笑死弛槐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的依啰。 我是一名探鬼主播乎串,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼速警!你這毒婦竟也來了叹誉?” 一聲冷哼從身側(cè)響起鸯两,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎长豁,沒想到半個(gè)月后钧唐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕉斜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年逾柿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缀棍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宅此。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爬范,靈堂內(nèi)的尸體忽然破棺而出父腕,到底是詐尸還是另有隱情,我是刑警寧澤青瀑,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布璧亮,位于F島的核電站,受9級(jí)特大地震影響斥难,放射性物質(zhì)發(fā)生泄漏枝嘶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一哑诊、第九天 我趴在偏房一處隱蔽的房頂上張望群扶。 院中可真熱鬧,春花似錦镀裤、人聲如沸竞阐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骆莹。三九已至,卻和暖如春担猛,著一層夾襖步出監(jiān)牢的瞬間幕垦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工傅联, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留智嚷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓纺且,卻偏偏與公主長(zhǎng)得像盏道,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子载碌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容