一、軟件準備
jdk-8u11-linux-x64.tar.gz
apache-tomcat-7.0.96.tar
nginx-1.16.1.tar.gz
keepalived-2.0.2.tar.gz
主:192.168.162.128
從:192.168.162.129
虛擬:192.168.162.222
CentOS 7.X
二、jdk安裝
1、在/usr下建立/java目錄,將軟件拷貝過去解壓
tar -zxvf jdk-8u11-linux-x64.tar.gz
2、配置環境變量
在 /etc/profile中加入如下內容:
JAVA_HOME=/usr/java/jdk1.8.0_11
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME
然後 source /etc/profile #使配置文件立即生效
3、測試jdk是否安裝成功
二、tomcat安裝
1、先將軟件上傳到/usr/local下面,並進行解壓
tar -zxvf apache-tomcat-7.0.96.tar.gz
mv apache-tomcat-7.0.96 tomcat #重命名
2、啓動tomcat
進入tomcat的/bin目錄下 ,找到startup.sh 腳本,並執行
sh startup.sh
3、測試
ps aux | grep tomcat
此時tomcat已經啓動,端口爲8080,但是依舊出現了無法訪問的問題
解決方法:
猜測是防火牆的原因,這裏比較暴力直接關閉防火牆,也可以開放端口重啓防火牆
firewall-cmd --state #檢測防火牆狀態
systemctl stop firewalld.service #關閉防火牆
訪問192.168.162.128:8080
4、搭建兩個tomcat
在/usr/local下面再複製一個tomcat,命名爲tomcat1
cp -a tomcat/ /usr/local/tomcat1
修改這個訪問端口爲8081,同時修改連接端口和AJP端口分別爲9005和9009
vim /usr/local/tomcat1/conf/server.xml
在bin目錄下啓動這個tomcat
sh startup.sh
5、分別修改兩個tomcat的/usr/local/tomcat/webapps/ROOT/index.jsp頁面以示區別
cp index.jsp /usr/local/tomcat/webapps/ROOT/indexex.jsp #備份保留原jsp,然後修改index.jsp的內容
四、Nginx安裝
1、環境準備
Gcc:yum install gcc c++
Pcre:yum install -y pcre pcre-devel
Zlib:yum install -y zlib zlib-devel
OpenSSL:yum install -y openssl openssl-devel
2、解壓
tar -zxvf nginx-1.16.1.tar.gz
3、編譯安裝
mv nginx-1.16.1 nginx #改名
cd nginx #進入目錄
./configure #當前使用默認配置
make #編譯
make install #安裝
問題:
cp: ‘conf/koi-win’ and ‘/usr/local/nginx/conf/koi-win’ are the same file
make[1]: *** [install] Error 1
解決辦法 :
因爲直接將tar解壓到 /usr/local 下面,並重命名爲nginx ,路徑問題,重新指定配置
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf
4、啓動nginx
/usr/local/nginx/sbin/nginx #啓動
ps aux | grep nginx #在進程中檢測
出現:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)爲80端口被佔用,經lsof -i:80 發現佔用80端口的正是nginx 是因爲自己多次啓動
/usr/local/nginx/sbin/nginx -s stop #停止nginx
5、測試
訪問192.168.162.128,會看到welcome to nginx的歡迎頁面
6、編輯/nginx.conf文件進行配置高
vim /usr/local/nginx/conf/nginx.conf
在http{}之間添加upstream配置
upstream mytomcat {
ip_hash;#使用ip_hash,同一IP訪問同一服務器session保持
server 127.0.0.1:8080; #分流 可在後面接weight=1 這是權重分配,數值越大分配機率越大。
server 127.0.0.1:8081;
}
###ip_hash: 通過客戶端請求ip進行hash,再通過hash值選擇後端server, ,每個ip在一定時間內會訪問固定的後端服務器,既能滿足每個用戶請求到同一臺服務器,又能滿足不同用戶之間負載均衡。但是並不能完全保證負載均衡。
用proxy_pass配置反向代理地址
location / {
root html;
index index.html index.htm;
proxy_set_header Host $host:$server_port; #設置請求頭
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
proxy_pass http://mytomcat; #配置方向代理地址
}
驗證配置文件
/usr/local/nginx/sbin/nginx -t
重新啓動nginx
注:以上在兩臺均安裝
7、測試負載均衡
**問題:**nginx每次訪問都是歡迎頁面,並沒有跳轉到指定的服務器
**解決:**指定配置文件啓動
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
解決問題後,訪問192.168.162.128能夠用正常的訪問到tomcat服務器。並且可以看到,同一IP在一段時間內訪問到的服務器不變,固定爲相同的一個,但是不同的IP能夠負載均衡
五、keepalive安裝
1、環境準備
yum install -y gcc openssl-devel popt-devel
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
2、解壓
cd /usr/local
tar -zxvf keepalived-2.0.2.tar.gz
mv keepalived-2.0.2 keepalived
3、編譯安裝
./configure
make
make install
4、將keepalived添加到系統服務中
cp /usr/local/sbin/keepalived /usr/sbin/ # 拷貝執行文件
cp /usr/local/keepalived/keepalived/etc/init.d/keepalived /etc/init.d/keepalived # 添加到開機啓動項
cp /usr/local/keepalived/keepalived/etc/sysconfig/keepalived /etc/sysconfig # 將keepalived文件拷貝到etc下
mkdir /etc/keepalived # 創建keepalived文件夾
cp /usr/local/keepalived/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf # 拷貝配置文件,系統讀取的位置
5、配置/etc/keepalived/keepalived.conf配置文件
配置MASTER,對應的爲BACKUP
將vrrp_instance VI_1 {}中綁定的網卡改爲本機網卡
interface eno16777736 #eno16777736爲本機網卡
virtual_router_id 51 #同一個keepalived 節點必須設置成一樣
priority 100 #節點優先級,BACKUP的優先級一定要比MASTER的優先級低
advert_int 1 #組播信息發送間隔,兩個節點設置必須一樣
mcast_src_ip=192.168.162.128 #實際的eno16777736上的固定ip地址
authentication { auth_type PASS auth_pass 1111 }#驗證信息,只有驗證信息相同,才能被加入到一個組中。
用相同的方法配置BACKUP
6、啓動keepalived
systemctl start keepalived
注:哪臺機器的ip addr顯示有VIP連接,則表明哪臺目前啓動的是哪臺的服務
7、測試
** 能夠PING通,但是無法通過虛擬ip訪問**
1、網上大部分方案都說因是keepalived.conf配置中默認vrrp_strict打開了,需要把它註釋掉,確實在自己的配置文件中有這個配置,於是將其註釋。同時將router_id改爲自己的IP。
2、本來設置的虛擬IP爲192.168.200.16 更改自己的虛擬IP至同網段,我這裏改成192.168.162.222
然後VIP 192.168.162.222能夠正常訪問
8、編寫nginx狀態檢測腳本
vim /etc/keepalived/nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
systemctl stop keepalived
fi
fi
#該腳本意義爲如果沒有nginx這個進程存在,則嘗試啓動nginx,若無法啓動, 將關閉本機的keepalived,然後虛擬 ip 綁定到 BACKUP 機器上。
保存後,給腳本賦執行權限
chmod a+x /etc/keepalived/nginx_check.sh
在keepalived.conf中配置
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
同時在vrrp_instance VI_1 {}加入
track_script {
chk_nginx
}
六、綜合測試
1、同時啓動192.168.162.128和192.168.162.129上的tomcat、nginx和keepalivd,通過VIP192.168.162.222訪問,此時訪問到的是192.168.162.128,因爲它默認爲master.並且此時使用不同的IP訪問VIP192.168.162.222能實現負載均衡,但如果是相同的IP,訪問的還是原來訪問的那個服務器。
2、關閉192.168.162.128上面的nginx和keepalived,通過VIP192.168.162.222訪問,此時訪問到的是192.168.162.129。並且此時使用不同的IP訪問VIP192.168.162.222能實現負載均衡,但如果是相同的IP,訪問的還是原來訪問的那個服務器。
3、關閉192.168.162.129上面的nginx和keepalived,通過VIP192.168.162.222訪問,此時訪問到的是192.168.162.128。並且此時使用不同的IP訪問VIP192.168.162.222能實現負載均衡,但如果是相同的IP,訪問的還是原來訪問的那個服務器。
(注:部分資料來源於網絡,如有侵權,請聯繫作者)