群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat服務器池+後端數據庫
1、2臺CentOS 7作為nginx服務器綁定同一塊虛擬網卡:vnet1
對應的IP分別為:192.168.80.100
192.168.80.110
2、2臺CentOS 7作為tomcat服務器同樣綁定同一款網卡:vnet1
對應的IP設置為:192.168.80.120
192.168.80.130
3、1臺CentOS 7 作為後端數據庫綁定網卡:vnet1對應的IP為192.168.80.140
二、項目簡介
1、拓撲圖
2、項目說明
(1)兩臺nginx服務器作反代理
(2)兩臺nginx服務器實現雙機熱備
(3)Nginx+tomcat實現負載均衡
(4)在tomcat上部署商城項目實現tomcat服務器與數據庫的對接
實現niginx服務器互為熱備份,一臺服務器停止,另外一臺繼續運行。tomcat負載均衡,同樣一臺停止工作另外一臺能繼續工作,整個項目是為了讓商城項目成功運行,並且在後臺服務器down機過程中,用戶無感知。
三、項目部署
部署nginx服務器
1、安裝nginx服務器(另外一臺相同操作)
yum install -y \ //搭建安裝工具和編輯環境 gcc gcc-c++ make openssl-devel zlib-devel pcre-devel useradd -s /sbin/nologin -M nginx //添加帳號 tar vxf nginx-1.13.9.tar.gz //解壓nginx源碼包 cd nginx-1.13.9 ./configure \ //檢查環境 --prefix=/usr/local/nginx \ //指定安裝路徑 --user=nginx --group=nginx make && make install //編譯並且安裝 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ //nginx命令做軟連接方便使用 vi /etc/init.d/nginx //制作nginx啟動腳本 #!/bin/bash # chkconfig: 35 99 20 # description: Nginx Service Control Script PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG ;; stop) kill -s QUIT $(cat $PIDF) ;; restart) $0 stop $0 start ;; reload) kill -s HUP $(cat $PIDF) ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac exit 0 chmod +x /etc/init.d/nginx //更改啟動腳本的權限 chkconfig --add nginx //將腳本添加到systemctl環境中 systemctl start nginx //啟動nginx服務器
2、驗證兩臺nginx服務器搭建成功
驗證第一臺:192.168.80.100
驗證第二臺:192.168.80.110
部署keepalived雙機熱備
1、nginx主服務器中安裝keepalived
yum -y install \ //安裝所需環境 popt-devel kernel-devel openssl-devel tar xvf keepalived-1.4.2.tar.gz //解壓源碼安裝包 cd keepalived-1.4.2 //進目錄 ./configure --prefix=/ //檢查編譯環境 make && make install //編譯並安裝 cp keepalived/etc/init.d/keepalived /etc/init.d/ //將keepalived添加開機進程中 systemctl enable keepalived //設置開機自啟
2、修改keepalived配置文件
vi /etc/keepalived/keepalived.conf
刪除所有內容添加下面內容:
! Configuration File for keepalived
global_defs {
route_id NGINX-01 //服務器名稱
}
vrrp_script nginx {
script "/opt/nginx.sh" //keepalived狀態檢查配置文件的路徑
interval 2
weight -10 //檢查失敗對應優先級減少的值
}
vrrp_instance VI_1 {
state MASTER //狀態為主服務器
interface ens33
virtual_router_id 51
priority 150 //優先級設為150
advert_int 1
authentication {
auth_type PASS //認證方式
auth_pass 1111 //認證密碼
}
track_script {
nginx
}
virtual_ipaddress {
192.168.80.90 //兩臺nginx服務器共同的虛擬IP也稱漂移地址
}
}
3、添加檢查keepalived狀態的配置文件
vi /opt/nginx.sh //該腳本方便同時將nginx和keepalived服務器同時啟動
添加以下內容
#!/bin/bash
#Filename:nginx.sh
A=$(ps -ef | grep keepalived | grep -v grep | wc -l)
if [ $A -gt 0 ]; then
/etc/init.d/nginx start
else
/etc/init.d/nginx stop
fi
chmod +x /opt/nginx.sh //添加執行權限
systemctl start keepalived //開啟服務
4、驗證漂移地址vip是否生成ip addr show dev ens33
5、nginx從服務器所有部署如上區別如下:
(1)keepalived.conf配置文件中route_id更改為NGINX-02,狀態state更改為從服務器BACKUP,優先級priority更改為100。vi /etc/keepalived/keepalived
刪除所有內容添加下面內容:
! Configuration File for keepalived
global_defs {
route_id NGINX-02 //服務器名稱為02
}
vrrp_script nginx {
script "/opt/nginx.sh" //keepalived狀態檢查配置文件的路徑
interval 2
weight -10 //檢查失敗對應優先級減少的值
}
vrrp_instance VI_1 {
state BACKUP //狀態為從服務器
interface ens33
virtual_router_id 51
priority 100 //優先級設為100與主相差50
advert_int 1
authentication {
auth_type PASS //認證方式
auth_pass 1111 //認證密碼
}
track_script {
nginx
}
virtual_ipaddress {
192.168.80.90 //兩臺nginx服務器共同的虛擬IP也稱漂移地址
}
}
(2)nginx.sh腳本中nginx服務的啟動不是根據keepalived的啟動而啟動,而是根據
判斷漂移地址是否存在而啟動nginx服務。
vi /opt/nginx.sh
#!/bin/bash
#Filename:nginx.sh
A=$(ip addr | grep 192.168.80.90/32 | grep -v grep | wc -l)
if [ $A -gt 0 ]; then
/etc/init.d/nginx start
else
/etc/init.d/nginx stop
fi
6、驗證nginx從服務器配置是否生效
停止主服務器查看漂移地址
漂移地址出現在從服務器上
重啟主服務器再次查看漂移地址
漂移地址重新回到主服務器從服務器處於熱備狀態
7、驗證漂移地址是否能訪問nginx
主服務器down機驗證訪問
部署tomcat
說明:
由於tomat服務器是運行在jdk環境中,因此首先要搭建jdk環境。
1、搭建jdk環境
tar xvf jdk-8u144-linux-x64.tar.gz //解壓jdk
cp -r jdk1.8.0_144/ /usr/local/java //將解壓好的jdk下的文件復制到java目錄下
vi /etc/profile //添加jdk系統變量
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib
source /etc/profile //刷新下文件
java -version //查看版本成功說明環境搭建成功
2、安裝tomcat
tar xvf apache-tomcat-8.5.23.tar.gz //解壓軟件包
cp -r apache-tomcat-8.5.23 /usr/local/tomcat8 //將解壓好包復制到tomcat8目錄下
//將tomcat啟動命令軟鏈接到系統命令的目錄下重命名為tomcatup方便使用
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
tomcatup //啟動tomcat
3、驗證兩臺tomcat服務器是否成功訪問(另一臺tomcat部署操作上同)
驗證訪問第一臺192.168.80.120:8080
驗證訪問第二臺192.168.80.130:8080
部署nginx反代理
1、配置nginx服務器vi /usr/local/nginx/conf/nginx.conf
刪除location塊中的內容添加反向代理proxy_pass http://tomcat_pool;
2、定義上遊請求實現負載均衡
在server模塊上面添加名為tomcat_pool地址池
upstream tomcat_pool {
servername 192.168.80.120:8080 weight=1;
Servername 192.168.80.130:8080 weight=1;
}
3、檢查配置文件重啟nginx
nginx -t
systemctl restart nginx
4、驗證通過nginx服務器vip地址:192.168.80.90訪問tomcat服務器
部署後端數據庫
1、搭建安裝環境
yum -y install gcc gcc-c++ make ncurses ncurses-devel bison Cmake
2、添加數據庫用戶useradd -s /sbin/nologin mysql //添加數據庫用戶
3、安裝mysql數據庫
tar xf mysql-boost-5.7.20.tar.gz –C /opt/ //解壓源碼包
cmake \ //檢查安裝配置環境
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DWITH_SYSTEMD=1
make && make install //編譯安裝
chown -R mysql.mysql /usr/local/mysql/ //將數據庫安裝目錄的使用權限給用戶mysql
vi /etc/my.cnf //將主配置文件清空添加以下內容
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
chown mysql:mysql /etc/my.cnf //更改主配置文件的權限
echo ‘PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH‘ >> /etc/profile
echo ‘export PATH‘ >> /etc/profile //添加系統環境變量
source /etc/profile //刷新立即生效
cd /usr/local/mysql/ //進入安裝目錄初始化數據庫
bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
cp usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ //制作數據庫系統啟動命令
systemctl daemon-reload //刷新識別啟動腳本
systemctl start mysqld //啟動數據庫
netstat -anpt | grep 3306 //查看端口是否在監聽狀態
systemctl enable mysqld //開機自啟
mysqladmin -u root -p password "abc123" //添加數據庫用戶
mysql -u root -p //進入數據庫
部署商城項目
1、將商城項目上傳到兩臺tomcat服務器中(兩臺配置一樣以其中一臺為例)tar xf SLSaleSystem.tar.gz //解壓寫好的商城項目
2、修改tomcat主配置文件vi /usr/local/tomcat8/conf/server.xml
在webapps站點下指定項目的路徑
<Context docBase="" path="/root/SLSaleSystem" reloadable="flase">
3、tomcat與後端數據庫對接實現用戶登陸
mysql -u root –p //進入數據庫
create database slsaledb; //為商城項目創建數據庫
GRANT all ON slsaledb.* TO ‘testuser‘@‘%‘ IDENTIFIED BY ‘admin123‘; //授權testuser 用戶連接slsaledb數據庫
flush privileges;
mysql -u root -p < slsaledb-2014-4-10.sql //商城項目對應的數據庫文件上傳到slsaledb數據庫中
4、更改商城項目中的數據庫對接配置文件vi SLSaleSystem/WEB-INF/classes/jdbc.properties
5、重啟tomcat服務器並用本地服務器地址訪問登陸
tomcatdown
tomcatup
訪問192.168.80.120:8080
6、驗證nginx代理服務器vip訪問
由於商城項目有登陸會話界面因此要想登陸成功需要在nginx服務器的代理地址池中添加會話保持功能,ip_hash;
7、測試用戶down機用戶無感知訪問
先down掉主nginx服務器驗證訪問
systemctl stop keepalived
killall -9 nginx
netstat -anput | grep nginx
同時down掉一臺tomcat服務器驗證訪問(down掉192.168.80.120服務器)tomcatdown
並用tomcat本地IP驗證down機成功
訪問vip:192.168.80.90
四、總結
本文只做了簡單的架構,現實中還需在nginx服務器和tomcat服務器中做各種優化,以便讓客戶感受最佳的訪問效果。
群集架構篇——nginx反向代理+keepalived雙機熱備+tomcat服務器池+後端數據庫