1 掛載iso鏡像文件作爲本地yum源
- 掛載ISO文件到/mnt/CentOS6:mount -o loop /home/CentOS-6.7-x86_64-DVD.iso /mnt/CentOS6
- 創建repo文件
cd /etc/yum.repos.d
mkdir bak
mv *.repo /etc/yum.repos.d/bak
vi CentOS6.7-localsource.repo
[CentOS7-Localsource]
name=CentOS6
baseurl=file:///mnt/CentOS6
enabled=1
gpgcheck=0
yum clean all(清除緩存)
yum makecache(建立新緩存)
LVS提供虛擬服務,採用直接路由模式DR;nginx作爲反向代理服務器來實現負載均衡;keepalived實現主從熱備,檢查RealServer的健康狀態以及主機與備機之間失效轉移。本文選用Tenengine作爲反向代理和負載均衡服務,Tengine是由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性;Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。
直接路由模式DR (Direct Routing)
- 相關術語
- 1.DS:Director Server。指的是前端負載均衡器節點
- 2.RS:Real Server。後端真實的工作服務器
- 3.VIP:向外部直接面向用戶請求,作爲用戶請求的目標的ip地址
- 4.DIP:Director Server IP,主要用於和內部主機通訊的IP地址
- 5.RIP:Real Server IP,後端服務器的IP地址
- 6.CIP:Client IP,訪問客戶端的IP地址
- 原理:負載均衡器和RS都使用同一個IP對外服務。但只有DR對ARP請求進行響應,所有RS對本身這個IP的ARP請求保持靜默。也就是說,網關會把對這個服務IP的請求全部定向給DR,而DR收到數據包後根據調度算法,找出對應的RS,把目的MAC地址改爲RS的MAC(因爲IP一致)並將請求分發給這臺RS。這時RS收到這個數據包,處理完成之後,由於IP一致,可以直接將數據返給客戶,則等於直接從客戶端收到這個數據包無異,處理後直接返回給客戶端。由於負載均衡器要對二層包頭進行改換,所以負載均衡器和RS之間必須在一個廣播域,也可以簡單的理解爲在同一臺交換機上。
優點:負載均衡器只是分發請求,應答包通過單獨的路由方法返回給客戶端。
缺點:要求負載均衡器的網卡必須與物理網卡在一個物理段上。
本次安裝環境及軟件版本:
- CentOS6.7
- Tengine-2.2.0
- keepalived-2.0.13
2 nginx安裝
-
解壓
tar -zxvf Tengine-2.2.0.tar.gz -C /opt/ -
安裝
進入解壓後的目錄 ./configure --prefix=/opt/tengine異常1: [root@bogon tengine]# ./configure checking for OS + Linux 3.10.0-327.el7.x86_64 x86_64 checking for C compiler ... not found ./configure: error: C compiler cc is not found 也就是c編譯器 gcc找不到 安裝gcc yum -y install gcc 繼續檢查 異常2: checking for PCRE library ... not found checking for PCRE library in /usr/local/ ... not found checking for PCRE library in /usr/include/pcre/ ... not found checking for PCRE library in /usr/pkg/ ... not found checking for PCRE library in /opt/local/ ... not found ./configure: error: the HTTP rewrite module requires the PCRE library. You can either disable the module by using --without-http_rewrite_module 缺少pcre和pcre-devel 安裝 yum -y install pcre pcre-devel 這裏安裝好後 可以通過。 異常3: checking for OpenSSL library ... not found 缺少openssl和openssl-devel 安裝 yum -y install openssl openssl-devel
make && make install
安裝完成,安裝目錄爲configure時指定的/opt/tengine,如未指定默認安裝目錄爲/usr/local/nginx -
安裝完成之後,檢查nginx的配置文件是否正確
cd /opt/tengine/sbin/ ./nginx -t
檢查通過,說明nginx安裝成功。
-
nginx啓動
配置環境變量 vi /etc/profile 加入 export NGINX_HOME=/opt/tengine export PATH=$PATH:$NGINX_HOME/sbin 保存 輸入nginx啓動。
-
nginx常用命令
- nginx -m 顯示所有加載的模塊
- nginx -l 顯示所有可以使用的指令
- nginx -t 檢查nginx的配置文件是否正確
- nginx -s 啓動nginx
- nginx -s reload 重新加載配置文件
- nginx -s stop 停止nginx
-
配置nginx
vi /home/java/tengine/conf/nginx.conf
# user root; #運行用戶
worker_processes 1; #啓動進程,通常設置成和cpu的數量相等
#全局錯誤日誌及PID文件
error_log /home/java/nginx/logs/error.log;
error_log /home/java/nginx/logs/error.log notice;
error_log /home/java/nginx/logs/error.log info;
pid /home/java/nginx/logs/nginx.pid;
# 工作模式及連接數上線
events {
use epoll; #epoll是多路複用IO(I/O Multiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能
worker_connections 1024; #單個後臺worker process進程的最大併發鏈接數
}
#設定http服務器,利用它的反向代理功能提供負載均衡支持
http {
include mime.types; #文件擴展名與類型映射表
default_type application/octet-stream; #默認文件類型
#設置日誌模式
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
#設定請求緩衝
server_names_hash_bucket_size 128;
client_header_buffer_size 32K;
large_client_header_buffers 4 32k;
# client_max_body_size 8m;
#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,
#必須設爲 on,如果用來進行下載等應用磁盤IO重負載應用,可設置爲 off,以平衡磁盤與網絡I/O處理速度,降低系統的uptime.
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
#開啓gzip壓縮,降低傳輸流量
gzip on;
#設置允許壓縮的頁面最小字節數,頁面字節數從header頭的Content-Length中獲取。默認值是0,表示不管頁面多大都進行壓縮。建議設置成大於1K。如果小於1K可能會越壓越大。
gzip_min_length 1k;
#壓縮緩衝區大小。表示申請4個單位爲16K的內存作爲壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來存儲gzip壓縮結果。
gzip_buffers 4 16k;
#壓縮版本(默認1.1)用於設置識別HTTP協議版本,目前大部分瀏覽器已經支持GZIP解壓,使用默認即可。
gzip_http_version 1.1;
#壓縮比率。用來指定GZIP壓縮比,1壓縮比最小,處理速度最快;9壓縮比最大,傳輸速度快,但處理最慢,也比較消耗cpu資源。
gzip_comp_level 2;
#用來指定壓縮的類型,“text/html”類型總是會被壓縮
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#反向代理負載均衡設定部分
#upstream表示負載服務器池,切記,這個名稱不能使用下劃線,否則無法識別導致負載不過去
upstream serverpool {
#server tomcat地址:端口號 weight表示權值,權值越大,被分配的機率越大;
server 192.168.33.101:80 weight=4 max_fails=2 fail_timeout=30s;
server 192.168.33.102:80 weight=4 max_fails=2 fail_timeout=30s;
}
server {
listen 8088; #監聽端口
server_name www.test.com; #對外提供服務的網址(域名或者ip)
#默認請求設置
location / {
index index.jsp index.html index.htm; #設定訪問的默認首頁
#root /usr/local/apache7/webapps; #站點根目錄,此目錄下存放我們的web項目
proxy_pass http://serverpool;
}
#charset koi8-r;
#access_log logs/host.access.log main;
#所有的jsp頁面均由tomcat處理
location ~ \.(jsp|jspx|dp)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://serverpool; #轉向tomcat處理
}
#所有的靜態文件直接讀取不經過tomcat,nginx自己處理
location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#log_format access '$remote_addr - $remote_user [$time_local] "$request" '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" $http_x_forwarded_for';
#access_log /usr/local/nginx/logs/ubitechtest.log access;#設定訪問日誌的存放路徑
# redirect server error pages to the static page /50x.html
#
#定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
其他節點上配置文件可完全一樣。至此nginx已搭建完成,瀏覽器輸入http://192.168.33.101:8088即可訪問。
3 keepalived實現nginx高可用(HA)
- 安裝
編譯安裝方式與nginx類似。
先解壓
tar -zxvf /home/soft/keepalived-2.0.13.tar.gz
cd /home/soft/keepalived-2.0.13/
./configure --prefix=/opt/keepalived-2.0.13
make && make install
- 建立服務啓動腳本,以便使用service命令控制,將解壓後路徑/home/soft/keepalived-2.0.13/keepalived/etc/init.d的文件keepalived拷貝到/etc/init.d下
cp /home/soft/keepalived-2.0.13/keepalived/etc/init.d/keepalived /etc/init.d/
- 由於安裝使用非默認路徑(本教程中使用的/opt/keepalived-2.0.13)故需修改相關路徑,保證keepalived能正常啓動
vi /etc/init.d/keepalived
大約15行
將. /etc/sysconfig/keepalived 修改爲
. /opt/keepalived-2.0.13/etc/sysconfig/keepalived
- 設置正確啓動參數命令,並將修改好的keepalived拷貝到/etc/sysconfig 目錄下
vi /opt/keepalived-2.0.13/etc/sysconfig/keepalived
修改的路徑爲安裝路徑下的配置文件,如果不修改,則默認會去找/etc/keepalived/keepalived.conf文件。
KEEPALIVED_OPTIONS="-D -f /opt/keepalived-2.0.13/etc/keepalived/keepalived.conf"
將修改好的keepalived拷貝到/etc/etc/sysconfig 目錄下
cp /opt/keepalived-2.0.13/etc/sysconfig/keepalived /etc/sysconfig/
- 配置keepalived
vi /opt/keepalived-2.0.13/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER # 設置lvs的id,在一個網絡應該是唯一的
}
vrrp_instance VI_1 {
state MASTER # 指定keepalived的角色,備用服務器上爲 BACKUP
interface ens33 # 當前進行vrrp通訊的網絡接口卡(當前centos的網卡),根據自己的服務器來設置
virtual_router_id 66 # 虛擬路由編號,主從要一直
priority 100 # 優先級,數值越大,獲取處理請求的優先級越高,備用服務器上數值要小點
advert_int 1 # 檢查間隔,默認爲1s(vrrp組播週期秒數)
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.33.200 # 定義虛擬ip(VIP),可多設,每行一個
}
}
# 定義對外提供的LVS的VIP以及port
virtual_server 192.168.33.200 80 {
delay_loop 6 # 設置健康檢查時間,每隔6秒查詢realserver狀態
lb_algo rr # lvs 算法
lb_kind DR # 設置lvs實現負載的機制,有NAT、TUN、DR三個模式
persistence_timeout 0 # 同一IP的連接60秒內被分配到同一臺realserver
protocol TCP
#真實服務器(nginx)
real_server 192.168.33.101 8088 {
weight 3 # 配置節點權值,數值越大權重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 8088
}
}
real_server 192.168.33.102 8088 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 8088
}
}
}
- 這裏在keepalived的配置文件中定義的LVS模式爲DR模式,還需要在兩臺rs上執行lvs_dr_rs.sh腳本
vi /opt/keepalived-2.0.13/lvs_dr_rs.sh
#/bin/bash
vip=192.168.33.200
#把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端
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
- 執行:sh /opt/keepalived-2.0.13/lvs_dr_rs.sh
- 在兩臺真實服務器上面執行完畢之後,執行ip addr就能看到兩臺服務器的lo都綁定好了虛擬ip.
- 服務器重啓之後綁定的這個虛擬ip就沒有了,需要再執行一下腳本,所以可以把對這個腳本的執行放到開機自啓中。
執行命令:vi /etc/rc.d/rc.local
將以下內容添加至該文件中:sh /opt/keepalived-2.0.13/lvs_dr_rs.sh
保存退出,然後添加執行權限:chmod +x rc.local
- 啓動keepalived服務: service keepalived start
- 在keepalived端執行命令ipvsadm -ln查看連接數,如果報錯,先安裝ipvsadm,yum install -y ipvsadm
[root@chenhao keepalived-2.0.13]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.33.200:80 rr
-> 192.168.33.101:80 Route 3 0 1
-> 192.168.33.102:80 Route 3 0 2
- 出現的問題
1、啓動過程中提示keepalived command not found
啓動方式爲:/etc/init.d/keepalived start
原因:keepalived命令沒有在/usr/sbin目錄下
解決方法:cp /opt/keepalived-2.0.13/sbin/keepalived /usr/sbin