注:以下內(nèi)容均在虛擬機上完成,屬測試環(huán)境村缸。
歡迎大家留言交流祠肥!
架構:
兩臺服務器,兩個實體IP梯皿,一個虛擬IP仇箱。
如下圖所示,服務器正常運行時东羹,keepalived主保證Nginx的HA剂桥,Nginx主負責兩臺Tomcat服務器負載均衡,Redis主負責Tomcat1和2的Session共享属提。
當主節(jié)點的一個或者多個服務無法正常運行渊额,甚至節(jié)點宕機時,備節(jié)點能立即接續(xù)主節(jié)點來執(zhí)行業(yè)務垒拢。從而實現(xiàn)業(yè)務的不中斷或短暫中斷旬迹。
優(yōu)勢:適合硬件有限的小規(guī)模集群,且能保證服務器的穩(wěn)定求类、高可用運行奔垦。可持續(xù)發(fā)展來看尸疆,集群規(guī)拇涣裕可升級——麻雀雖小五臟俱全。
劣勢:對業(yè)務的處理能力有限寿弱,畢竟服務器僅兩臺犯眠。
環(huán)境:
節(jié)點名 | IP | 配置 | 端口開放 | VIP |
---|---|---|---|---|
web1 | 172.16.69.120 | 6G內(nèi)存、256Gb磁盤 | 8080症革、8888筐咧、11211 | 172.16.69.180 |
web2 | 172.16.69.121 | 6G內(nèi)存、256Gb磁盤 | 8080噪矛、8888量蕊、11211 | 172.16.69.180 |
CentOS6.7 64位
JDK 1.7.0_80
Keepalived v1.2.13
Nginx 1.10.2
Tomcat 7.0.75
Redis 4.0.2
所需jar包:
commons-pool2-2.4.1.jar
jedis-2.6.2.jar
tomcat-redis-session-manager1.2.jar
集群:
一、安裝前準備(雙節(jié)點都需要實施)
1艇挨、下載所需的包残炮,網(wǎng)址:鏈接:https://pan.baidu.com/s/1aMMQQx5Pjd7GfHx6Z6kfzA 密碼:ys93
下載好以后,通過winSCP缩滨、Xftp等工具將包上傳到/home/soft目錄下(mkdir /home/soft)
并賦予該目錄下所有文件/文件夾可執(zhí)行權限(chmod -R 755 *)
2势就、測試環(huán)境泉瞻,先關閉防火墻。
CentOS6.7默認用的是iptables防火墻
#service iptables stop --關閉iptables
#chkconfig iptables off --禁止iptables開機啟動
二苞冯、配置本地yum源(雙節(jié)點都需要安裝)
1袖牙、先將ios文件上傳到media目錄下
2、掛載:
#mkidr /mnt/rom --創(chuàng)建掛載的目錄
#mount -o loop -t iso9660 /media/CentOS-6.7-x86_64-bin-DVD1.iso /mnt/rom ——掛載
3抱完、修改yum配置
#mkdir /home/yum.repos.d_bak --創(chuàng)建備份目錄
#cd /etc/yum.repos.d
#mv * /home/yum.repos.d_bak --將配置文件移走贼陶,以作備份
#vi myself.repo --新建配置文件
[myself]
name=CentOS-6.7
baseurl=file:///mnt/rom --iso掛載目錄
\gpgcheck=0 --不啟用包檢查
enabled=1 --啟用這個倉庫
gpgkey=file:///mnt/rom/RPM-GPG-KEY-CentOS-6
輸入yum list若不報錯即配置成功刃泡。
三巧娱、安裝JDK(雙節(jié)點都需要安裝)
在安裝JDK前,最好檢測下是否安裝了openjdk烘贴,若有禁添,最好卸載。(rpm -qa | grep jdk)
1桨踪、安裝JDK:
#cd /home/soft
#rpm -ivh jdk-7u80-linux-x64.rpm
2老翘、檢測:
#java -version
返回值若如下所示,說明安裝成功
四锻离、安裝Nginx(雙節(jié)點都需要安裝)
1铺峭、安裝依賴環(huán)境
#yum -y install gcc pcre-devel zlib-devel openssl-devel
2、安裝nginx
#cd /home/soft
#tar -xvf nginx-1.10.2.tar.gz
#cd nginx-1.10.2
#./configure
#make
#make install
檢查nginx是否安裝成功
#cd /usr/local/nginx/sbin
#./nginx -t
若出現(xiàn)以下內(nèi)容則表示安裝成功
3汽纠、配置nginx以實現(xiàn)負載均衡分發(fā)
#cd /usr/local/nginx/conf
#mv nginx.conf nginx.conf.bak --備份配置文件
#vi nginx.conf
主從節(jié)點配置文件一樣
#Nginx所用用戶和組
user root;
#工作的子進程數(shù)量(通常等于CPU數(shù)量或者2倍于CPU)
worker_processes 2;
#錯誤日志存放路徑
#error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info;
#指定pid存放文件
pid logs/nginx.pid;
events {
#使用網(wǎng)絡IO模型Linux建議epoll卫键,F(xiàn)reeBSD建議采用kqueue
use epoll;
#允許最大連接數(shù),這個與Linux系統(tǒng)進程最大打開文件數(shù)限制有關
#可用 ulimit -n 1024進行設置
worker_connections 1024;
}
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;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 0;
#keepalive_timeout 65;
# 負載均衡器配置莉炉,名稱為172.16.69.180
# 這個名稱和后面對應即可
upstream 172.16.69.180{
# 這里我部署了兩臺tocmat
# weight均為5,表示兩臺tomcat負載平均分配
server 172.16.69.120:8080 weight=5;
server 172.16.69.121:8080 weight=5;
}
server {
#nginx服務端口設置為8888
listen 8888;
# 對應上面upstream的名稱
server_name 172.16.69.180;
#charset koi8-r;
#access_log logs/host.access.log main;
# 動態(tài)資源處理
location / {
proxy_set_header Host $host:8888;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_pass http://172.16.69.180;
}
# 靜態(tài)資源處理
location ~ .*\.(js|css|ico|gif|jpg|jpeg|png|bmp|swf)$ {
root /usr/local/source/;
}
}
}
五、安裝keepalived(雙節(jié)點都需要安裝)
1碴犬、安裝Keepalived(兩種安裝方式)
第一種(推薦):
#yum -y install keepalived
第二種:
#cd /home/soft
#tar -xvf keepalived-1.2.13.tar.gz
#cd keepalived-1.2.13
#./configure
#make
#make install
2絮宁、Keepalived主從節(jié)點配置
聲明:以下兩個配置文件中我標記了interface eth1這個參數(shù),不同的節(jié)點用到的網(wǎng)絡接口名會不同服协,具體請使用ifconfig查看當前IP對應的接口名绍昂。
主節(jié)點配置文件:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
#該腳本檢測ngnix的運行狀態(tài),并在nginx進程不存在時嘗
#試重新啟動ngnix偿荷,如果啟動失敗則停止keepalived治专,準備讓其它機器接管。
script "/home/ha/shell/check_nginx.sh"
#每1s檢測一次
interval 1
# 檢測失斣舛ァ(腳本返回非0則優(yōu)先級2)
weight 2
}
vrrp_instance VI_1 {
#指定keepalived的角色张峰,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器
state MASTER
# 指定HA監(jiān)測的網(wǎng)絡接口
interface eth1
# 虛擬路由標識棒旗,要求主從節(jié)點一致
virtual_router_id 55
# 優(yōu)先級喘批,在同一vrrp_instance下要求主節(jié)點的優(yōu)先級高于從節(jié)點
priority 100
# 設定主從節(jié)點之間同步檢查的時間間隔撩荣,單位是秒
advert_int 1
authentication {
# 設置驗證類型,主要有PASS和AH兩種
auth_type PASS
# 設置驗證密碼饶深,在同一個vrrp_instance下餐曹,MASTER與BACKUP必須使用相同的密碼才能正常通信
auth_pass 1111
}
virtual_ipaddress {
# 設置虛擬IP地址,可以設置多個虛擬IP地址敌厘,每行一個
172.16.69.180
}
track_script {
# 引用VRRP腳本台猴,即在 vrrp_script 部分指定的名字。
#定期運行它們來改變優(yōu)先級俱两,并最終引發(fā)主備切換饱狂。
chk_nginx
}
}
備節(jié)點配置文件:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
#該腳本檢測ngnix的運行狀態(tài),并在nginx進程不存在時嘗
#試重新啟動ngnix宪彩,如果啟動失敗則停止keepalived休讳,準備讓其它機器接管。
script "/home/ha/shell/check_nginx.sh"
#每1s檢測一次
interval 1
# 檢測失斈蚩住(腳本返回非0則優(yōu)先級2)
weight 2
}
vrrp_instance VI_1 {
#指定keepalived的角色俊柔,MASTER表示此主機是主服務器,BACKUP表示此主機是備用服務器
state BACKUP
# 指定HA監(jiān)測的網(wǎng)絡接口
interface eth1
# 虛擬路由標識活合,要求主從節(jié)點一致
virtual_router_id 55
# 優(yōu)先級雏婶,在同一vrrp_instance下要求主節(jié)點的優(yōu)先級高于從節(jié)點
priority 50
# 設定主從節(jié)點之間同步檢查的時間間隔,單位是秒
advert_int 1
authentication {
# 設置驗證類型白指,主要有PASS和AH兩種
auth_type PASS
# 設置驗證密碼留晚,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通信
auth_pass 1111
}
virtual_ipaddress {
# 設置虛擬IP地址侵续,可以設置多個虛擬IP地址倔丈,每行一個
172.16.69.180
}
track_script {
# 引用VRRP腳本,即在 vrrp_script 部分指定的名字状蜗。
#定期運行它們來改變優(yōu)先級需五,并最終引發(fā)主備切換。
chk_nginx
}
}
3轧坎、創(chuàng)建檢測腳本(雙節(jié)點都需要創(chuàng)建宏邮,可使用scp傳輸)
#mkdir -p /home/ha/shell
#touch /home/ha/shell/check_nginx.sh
#
#vi /home/ha/shell/check_nginx.sh
---------------------------------------------------------------------------
#!/bin/sh
echo "1" >> /var/tmp/keepalived.log
Count1=`netstat -antp |grep -v grep |grep nginx |wc -l`
if [ $Count1 -eq 0 ]; then
#/usr/local/nginx/sbin/nginx
#sleep 2
echo "2" >> /var/tmp/keepalived.log
Count2=`netstat -antp |grep -v grep |grep nginx |wc -l`
if [ $Count2 -eq 0 ]; then
echo "nginx pid not found" >> /etc/keepalived/keepalived.log
killall keepalived
else
echo "jinbulai" >> /var/tmp/keepalived.log
exit 0
fi
else
echo "4" >> /var/tmp/keepalived.log
exit 0
fi
賦予腳本可執(zhí)行權限:
#chmod 755 /usr/sbin/check_nginx.sh
六、部署Tomcat(雙節(jié)點都需要操作)
1缸血、創(chuàng)建用戶tomcat
#useradd -d /home/tomcat -m tomcat
#passwd tomcat
根據(jù)提示設置tomcat用戶密碼即可蜜氨,我這里設置成tomcat@123
2、部署Tomcat
#tar -xvf apache-tomcat-7.0.75.tar.gz -C /home/tomcat --將soft下的tomcat解壓到tomcat用戶目錄下
#cd /home/tomcat
#chmod -R 755 * --賦予tomcat用戶目錄下文件/文件夾可執(zhí)行權限
#chown -R tomcat:tomcat * --將tomcat用戶目錄下文件/文件夾的用戶和組改為tomcat
3捎泻、修改tomcat的內(nèi)存分配
#cd /home/tomcat/apache-tomcat-7.0.75/bin
#vi .catalina.sh --添加以下內(nèi)容
JAVA_OPTS="-Xms2048m -Xmx4096m -XX:PermSize=1024m -XX:MaxNewSize= 2048m -XX:MaxPermSize=2048m"
4飒炎、修改tomcat的配置信息
#cd /home/tomcat/apache-tomcat-7.0.75/conf
#vi server.xml
添加jvmRoute信息,且主從節(jié)點不一致(例:主——tomcat1笆豁、從——tomcat2)
5郎汪、添加測試文件(雙節(jié)點添加)
#cd /home/tomcat/apache-tomcat-7.0.75/webapps/
#mkdir test
#vi index.jsp
主機如下配置赤赊,從機需要將This is Tomcat Server 1改成This is Tomcat Server 2
--------------------------------------------------------------------------
<%--
Created by IntelliJ IDEA.
User: ccdk
Date: 2018/4/27
Time: 下午7:01
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>測試頁面</title>
</head>
<body>
SessionID:<%=session.getId()%> <BR>
SessionIP:<%=request.getServerName()%> <BR>
SessionPort:<%=request.getServerPort()%>
<%out.println("This is Tomcat Server 1");%>
</body>
</html>
添加完以后要修改文件所屬用戶、組
七煞赢、安裝Redis(雙節(jié)點都需要安裝配置)
1抛计、安裝Redis
#tar -xvf redis-4.0.2.tar.gz
#cd redis-4.0.2
#make PREFIX=/usr/local/redis install
#cp /home/soft/redis-4.0.2/redis.conf /usr/local/redis/ --將配置文件拷貝到/usr/local/redis目錄下,方便啟動
2照筑、配置redis
#cd /usr/local/redis/
#vi redis.conf
主節(jié)點配置:
--------------------------------------------------------------------------
# bind 127.0.0.0 --把監(jiān)聽本地注釋掉
port 6000 #設定監(jiān)聽端口
protected-mode no
pidfile "/var/run/redis_6000.pid"
從節(jié)點配置:
--------------------------------------------------------------------------
# bind 127.0.0.0
port 6000
protected-mode no
pidfile "/var/run/redis_6000.pid"
slaveof 172.16.69.120 6000
3烙无、配置Tomcat連接Redis
這里需要先將jar包傳到/home/tomcat/apache-tomcat-7.0.75/lib/
commons-pool2-2.4.1.jar
jedis-2.6.2.jar
tomcat-redis-session-manager1.2.jar
接下來修改context.xml(主備機一樣):
#vi /home/tomcat/apache-tomcat-7.0.75/conf/context.xml
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="172.16.69.120"
port="6000"
maxInactiveInterval="180"/>
4弛秋、啟動Redis秩命,檢測是否正常
#cd /usr/local/redis
#./bin/redis-server ./redis.conf & --啟動
主機啟動成功示例:
從機啟動成功示例:
5阔涉、配置Sentinel
#cd /usr/local/redis/
#vi sentinel.conf
主從節(jié)點一致:
--------------------------------------------------------------------------
#守護進程
daemonize yes
protected-mode no
#端口
port 23456
#運行日志
logfile "/usr/local/redis/redis/sentinel.log"
pidfile "/var/run/sentinel.pid"
#配置監(jiān)控主服務器,mymaster:定義主服務器名,172.16.69.120:主服務ip 6000:主服務端口 2:設置當有1個sentinel判斷master故障后才真正認為master無法繼續(xù)提供服務,即開始容災措施
sentinel monitor mymaster 172.16.69.120 6000 1
#指定sentinel認定一個服務器斷線的毫秒數(shù),即一個sentinel認定服務SDOWN媒抠,在這個配置時間內(nèi)需要獲得指定個數(shù)的Sentinel判定ODWON,才開始failover
sentinel down-after-milliseconds mymaster 2000
#從節(jié)點數(shù)量為幾后面就寫幾弟断,我這里只有一個從節(jié)點咏花,所以寫1
sentinel parallel-syncs mymaster 1
6趴生、啟動Sentinel
#cd /usr/local/redis
#./bin/redis-sentinel ./sentinel.conf & --啟動
7、檢驗
#./bin/redis-cli -h 172.16.69.120 -p 6000 # -h:ip地址,-p:訪問端口
主節(jié)點:
從節(jié)點:
sentinel使用./bin/redis-cli -h 172.16.69.120 -p 23456訪問
八昏翰、基礎指令
1苍匆、啟動順序
Nginx -> Tomcat -> Keepalived -> Redis
2、指令
#cd /usr/local/nginx/sbin
#./nginx --啟動nginx
#./nginx -s stop --關閉nginx
#./nginx -s reload --重啟nginx
#su tomcat --切換成tomcat用戶
#cd /home/tomcat/apache-tomcat-7.0.75/bin
#./startup.sh --啟動tomcat
#./shutdown.sh --關閉tomcat
#service keepalived start --啟動keepalived
#service keepalived stop --關閉keepalived
#service keepalived restart --重啟keepalived
#cd /usr/local/redis
#./bin/redis-server ./redis.conf & --啟動redis
#./bin/redis-cli -p 6000 shutdown --關閉redis
#./bin/redis-sentinel ./sentinel.conf & --啟動sentinel
#./bin/redis-cli -p 23456 shutdown --關閉sentinel
注:redis有兩種啟動方式棚菊。
前臺啟動:./bin/redis-server ./redis.conf
后臺啟動:./bin/redis-server ./redis.conf &
還有種后臺啟動的方式是改redis.conf配置文件浸踩,將daemonize改為yes,這樣直接使用./bin/redis-server ./redis.conf也是后臺啟動统求。
九检碗、結果檢測
當所有服務都啟動好以后,進行負載均衡和session共享的檢測
若出現(xiàn)如下效果码邻,說明已經(jīng)實現(xiàn)了負載均衡和session共享折剃。
純手動碼字...謝謝瀏覽。