架構圖

解釋一下架構,大概就是用Keepalived實現兩臺DR服務器的LVS負載均衡,然后后端服務器是兩臺Nginx服務器兩臺Tomcat服務器并且實現動靜分離
這個實驗其實就是把 LVS-DR+Keepalived?和 動靜分離 給拼起來,真的是拼起來,兩個部分其實就像是獨立的部分,互相之間的影響很小
實驗前準備:
主DR服務器:192.168.188.11 ??(ens33:0)192.168.188.188
備DR服務器:192.168.188.12 ??(ens33:0)192.168.188.188
Nginx服務器1:192.168.188.13 ???(lo:0)192.168.188.188
Nginx服務器2:192.168.188.14 ???(lo:0)192.168.188.188
VIP(虛擬IP):192.168.188.188
Tomcat服務器1:192.168.188.15
Tomcat服務器2:192.168.188.16
如果只想用四臺機器實現,那么就把Tomcat和Nginx部署到同一臺就行,比如說Tomcat1和Nginx1同一臺,Tomcat2和Nginx2同一臺。只需要改一下nginx.conf就行,底下會說
- DR服務器部署
- 關閉防火墻
systemctl stop firewalld
setenforce 0 - 安裝ipvsadm和keepalived
yum -y install ipvsadm keepalived - 加載ipvs內核模塊并查看
modprobe ip_vs
cat /proc/net/ip_vs - 配置keepalived
cd /etc/keepalived
備份配置文件
cp keepalived.conf keepalived.conf.bak
對配置文件進行修改
vim keepalived.conf
主備服務器都要配置,下面這張圖是主的配置截圖,備的配置除了router_id改成LVS_02,state改成BACKUP,priority改成90,其他都一樣 -
配置虛擬IP(VIP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.188.188 NETMASK=255.255.255.255
配置完重啟網卡
systemctl restart network
打開虛擬網卡
ifup ens33:0
查看一下有沒有生效
ip addr啟動keepalived服務
systemctl start keepalived
關于虛擬網卡,在實驗過程中總會碰到一個問題,那就是虛擬網卡連接很不穩定,打開后總是過一段時間就斷開,具體原因我也排查不出來,也可能是網絡不好,如果在后面測試過程中發現失敗,可以用ip addr看一下虛擬網卡是不是斷開了,如果沒了,那就用systemctl restart network重啟網絡 -
啟動ipvsadm服務
主DR服務器(192.168.188.11):
備份
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
配置規則
先清空
ipvsadm -C
ipvsadm -A -t 192.168.188.188:80 -s rr
ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.13:80 -g
ipvsadm -a -t 192.168.188.188:80 -r 192.168.188.14:80 -g
查看分發策略備DR服務器(192.168.188.12):
備份
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
直接查看
ipvsadm -ln,目前并沒有策略
當主服務器斷開后,備服務器會接收到主服務器的策略,測試的時候可以來這看一下 -
調整proc響應參數,關閉Linux內核的重定向參數響應
vim /etc/sysctl.confnet.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
- 關閉防火墻
-
Nginx服務器部署
-
關閉防火墻
systemctl stop firewalld
setenforce 0 -
安裝Nginx,不再贅述,這里只說一件事,pid改不改不影響使用,但是如果你改了nginx.conf里面的pid位置,那么就必須創建相應的目錄
-
為了方便測試,在Nginx1和Nginx2的index.html文件里隨便寫點東西以示區分就行
-
配置虛擬網卡(lo:0)
vim /etc/sysconfig/network-scripts/ifcfg-lo:0DEVICE=lo:0 ONBOOT=yes ???????IPADDR=192.168.188.188 NETMASK=255.255.255.255
重啟網卡
systemctl restart network
啟動虛擬網卡
ifup lo:0
查看
ip addr添加路由規則
route add -host 192.168.188.188 dev lo:0 -
調整proc響應參數
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2
sysctl -p -
配置文件后面再改
-
-
Tomcat服務器部署
-
關閉防火墻
systemctl stop firewalld
setenforce 0 -
安裝JDK、Tomcat不再贅述,不知道怎么安裝可以看前面的實驗
-
創建測試的應用目錄
mkdir /usr/local/tomcat/webapps/test
寫一個頁面,這是Tomcat1的
vim /usr/local/tomcat/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test1 page</title> #指定為 test1 頁面 </head> <body> <% out.println("動態頁面 1,http://www.test1.com");%> </body> </html>
寫一個頁面,這是Tomcat2的
vim /usr/local/tomcat/webapps/test/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test2 page</title> #指定為 test2 頁面 </head> <body> <% out.println("動態頁面 2,http://www.test2.com");%> </body> </html>
-
修改配置文件server.xml
vim /usr/local/tomcat/conf/server.xml
因為新增的Host的name也是localhost和原本的重名了,所以把原本的刪掉<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"><Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true"></Context> </Host>
-
重啟服務
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
-
-
動靜分離配置(只需要在Nginx服務器上修改就行)
-
修改nginx主配置文件
vim /usr/local/nginx/conf/nginx.conf
如果你只用了4臺機器,也就是說Nginx服務器同時是Tomcat服務器,那么就把服務器地址池里的IP地址改成Nginx的IP地址就行,端口不變 -
保存并重啟服務
systemctl restart nginx
-
-
測試,在客戶端的瀏覽器輸入VIP,也就是192.168.188.188可以訪問到靜態頁面,多刷新幾次看看負載均衡有沒有問題
??????
這里要說一下,可能是LVS本身有問題,導致Nginx1的頁面和Nginx2的頁面總有一個很難刷新出來,這并不代表就是錯的,如果一直只能看到Nginx1,那就把Nginx1服務器上的Nginx服務直接停了,再刷新,如果能訪問到Nginx2那就說明沒問題
再輸入192.168.188.188/index.jsp就能訪問到動態頁面,多刷新幾次看看負載均衡有沒有問題,這里用的Nginx的調度算法,就能正常顯示Tomcat1和Tomcat2的動態頁面