nginx+keepalived搭建主从负载均衡并迅速切换
? ? ? ??大家都聽(tīng)說(shuō)過(guò)主從服務(wù)器或者負(fù)載均衡之類的專業(yè)術(shù)語(yǔ),作為衡量一個(gè)中高級(jí)運(yùn)維工程師的標(biāo)準(zhǔn),集群和負(fù)載是運(yùn)維工程師必須掌握的技術(shù),然而在一家小公司是根本不會(huì)體會(huì)到運(yùn)維的重要性的。首先從理論上講一下,當(dāng)用戶量和訪問(wèn)量達(dá)到一定級(jí)別的時(shí)候,服務(wù)器達(dá)到負(fù)載,瀏覽器或者客戶端響應(yīng)比較慢的時(shí)候除了優(yōu)化代碼外,還可以搭建一個(gè)負(fù)載均衡的系統(tǒng),給每個(gè)服務(wù)器分發(fā)相應(yīng)的請(qǐng)求來(lái)滿足平臺(tái)的性能。
? ? ? ?首先準(zhǔn)備三臺(tái) linux 服務(wù)器,一臺(tái)安裝nginx做反向代理,另外兩臺(tái)分別為主、從服務(wù)器,按步驟來(lái):
1、先去安裝 nginx :
? ? ? ?到?https://nginx.org/download/?去下載腳本安裝,或者直接運(yùn)行命令下載:
wget https://nginx.org/download/nginx-1.12.2.tar.gz? ? ? ?我下載的是 nginx-1.12.2 這個(gè)版本,后面的 nginx 都是這個(gè)版本的。
然后解壓進(jìn)入目錄編譯安裝:
tar -zxvf nginx-1.12.2.tar.gz cd nginx-1.12.2/ ./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --with-http_stub_status_module \ --with-http_ssl_module \ --http-scgi-temp-path=/var/temp/nginx/scgi make && make install啟動(dòng)nginx:
cd /usr/local/nginx/sbin/ ./nginx啟動(dòng)成功!
接下來(lái)搭建負(fù)載均衡:
先簡(jiǎn)單介紹一下負(fù)載均衡:
負(fù)載均衡 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力、提高網(wǎng)絡(luò)的靈活性和可用性。?
負(fù)載均衡,英文名稱為L(zhǎng)oad Balance,其意思就是分?jǐn)偟蕉鄠€(gè)操作單元上進(jìn)行執(zhí)行,例如Web服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器和其它關(guān)鍵任務(wù)服務(wù)器等,從而共同完成工作任務(wù)。
nginx作為負(fù)載均衡服務(wù)器,用戶請(qǐng)求先到達(dá)nginx,再由nginx根據(jù)負(fù)載配置將請(qǐng)求轉(zhuǎn)發(fā)至其他服務(wù)器。?
nginx負(fù)載均衡服務(wù)器:?172.31.8.217 ? ? ? ? ? ?nginx負(fù)載均衡備用服務(wù)器:172.31.8.218
應(yīng)用服務(wù)器1:172.26.255.56
應(yīng)用服務(wù)器2:172.26.255.57
配置nginx.conf
cd /usr/local/nginx/conf/ vi nginx.confupstream mytomcat{server 172.26.255.56:80 weight=1;server 172.26.255.57:80 weight=1; } server {listen 80 default_server;#listen [::]:80 default_server;#server_name _;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {proxy_pass http://mytomcat;}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {} }測(cè)試一下,這個(gè)時(shí)候訪問(wèn)?172.31.8.217 就會(huì)路由到另外兩臺(tái)服務(wù)器上,這樣一個(gè)簡(jiǎn)單的負(fù)載均衡服務(wù)器就搭建好了。
接下來(lái)把 keepalived 用上,安裝 keeplived 主備都安裝:
yum install -y keepalivedmaster上的keepalived.conf內(nèi)容如下:
global_defs {notification_email {1027577992@qq.com}notification_email_from sns-lvs@gmail.comsmtp_server localhostsmtp_connection_timeout 30router_id nginx_master # 設(shè)置nginx master的id,在一個(gè)網(wǎng)絡(luò)應(yīng)該是唯一的 } vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh" #手動(dòng)執(zhí)行下此腳本,以確保此腳本能夠正常執(zhí)行interval 2 #(檢測(cè)腳本執(zhí)行的間隔,單位是秒)weight 2 } vrrp_instance VI_1 {state MASTER # 指定keepalived的角色,MASTER為主,BACKUP為備interface eth0 # 當(dāng)前進(jìn)行vrrp通訊的網(wǎng)絡(luò)接口卡(當(dāng)前centos的網(wǎng)卡)virtual_router_id 66 # 虛擬路由編號(hào),主從要一直priority 100 # 優(yōu)先級(jí),數(shù)值越大,獲取處理請(qǐng)求的優(yōu)先級(jí)越高advert_int 1 # 檢查間隔,默認(rèn)為1s(vrrp組播周期秒數(shù))authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port #(調(diào)用檢測(cè)腳本)}virtual_ipaddress {47.105.66.202 # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)} }backup上的keepalived.conf內(nèi)容如下:
global_defs {notification_email {1027577992@qq.com}notification_email_from sns-lvs@gmail.comsmtp_server localhostsmtp_connection_timeout 30router_id nginx_backup # 設(shè)置nginx backup的id,在一個(gè)網(wǎng)絡(luò)應(yīng)該是唯一的 } vrrp_script chk_http_port {script "/usr/local/src/check_nginx_pid.sh"interval 2 #(檢測(cè)腳本執(zhí)行的間隔)weight 2 } vrrp_instance VI_1 {state BACKUP # 指定keepalived的角色,MASTER為主,BACKUP為備interface eth0 # 當(dāng)前進(jìn)行vrrp通訊的網(wǎng)絡(luò)接口卡(當(dāng)前centos的網(wǎng)卡)virtual_router_id 66 # 虛擬路由編號(hào),主從要一直priority 99 # 優(yōu)先級(jí),數(shù)值越大,獲取處理請(qǐng)求的優(yōu)先級(jí)越高advert_int 1 # 檢查間隔,默認(rèn)為1s(vrrp組播周期秒數(shù))authentication {auth_type PASSauth_pass 1111}track_script {chk_http_port #(調(diào)用檢測(cè)腳本)}virtual_ipaddress {47.105.66.202 # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)} }nginx檢測(cè)腳本check_nginx_pid.sh內(nèi)容如下:
#!/bin/bash A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx #重啟nginxif [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重啟失敗exit 1elseexit 0fi elseexit 0 fi啟動(dòng)keepalived:
service keepalived start訪問(wèn)VIP,然后去看 keepalived 的日志 ,當(dāng)我們把 master 上的 keepalived 停掉(模擬宕機(jī)),再來(lái)看下 keepalived 日志 ,通過(guò)VIP可以正常訪問(wèn)服務(wù),前端請(qǐng)求感受不到后端nginx的切換。這樣就完成了一個(gè)負(fù)載均衡、主從熱備的高可用的服務(wù)器架構(gòu)了。
總結(jié)
以上是生活随笔為你收集整理的nginx+keepalived搭建主从负载均衡并迅速切换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 贾跃亭订机票回国?法拉第未来回应:假的,
- 下一篇: Composer 本地路径加载 lara