大并发高可用负载均衡系统部署方案设计.docx
《大并发高可用负载均衡系统部署方案设计.docx》由会员分享,可在线阅读,更多相关《大并发高可用负载均衡系统部署方案设计.docx(28页珍藏版)》请在冰豆网上搜索。
大并发高可用负载均衡系统部署方案设计
大并发高可用负载均衡系统
〔实施部署方案〕
某某俊泽-2015
一、方案说明
为满足公司业务平台的开展需要,应对业务平台的多用户大并发量的访问请求,需要一套高效可靠的系统部署方案。
目前各业务平台存在的问题有,业务系统〔web\数据库〕单机运行,单台应用服务器提供的访问能力有限,存在单点故障,虽然现在能做到故障急时报警,但出现故障后恢复时间较见;另外业务数据存在安全隐患,数据定时备份,数据库或数据库服务器故障后存在数据留失风险,仅故障恢复时间较常等。
本套部署方案旨在加固业务系统的可靠性、可扩展性,提高业务系统的并发访问,提高业务数据安全性。
二、系统架构描述
1、系统整体结构图
2、WEB端高可用负载均衡
2.1Nginx负载均衡简介
nginx是一款高性能的和反向代理服务器软件,截止到2014年底,Nginx仅次于apache成为第二大web服务器软件,而在全球最忙碌top10000中使用比例更是高达42.7%。
其开展速度和流行程度已经远远超过其它同类软件,成为大型和高并发的首选。
Nginx的优势
●轻量级安装文件小运行时CPU内存使用率低
●性能强,支持多核心,处理静态文件效率高,内核采用的poll模型最大可以支持50K并发连接
●支持热部署,同时启动速度快,可以不连续服务的情况下对软件和配置进展升级
●支持负载均衡,支持容错和健康检查
●代理功能强大,支持无缓存的反向代理。
主流的负载均衡方案优缺点参考:
c:
\iknow\docshare\data\cur_work\\uid-27022856-id-3236257.html
2.2高可用方案简介
单台调度服务器如果出现故障就会造成业务不可访问,在关键的业务环境里通常都会提供一台备用调度服务器,用来降低单点故障给业务系统带来的风险。
这里推荐使用开源软件Keepalive来提供nginx
调度服务器的高可用,当主nginx宕机后,keepalive会将调度业务切换至备用调度主机,继续提供用户访问。
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器参加到服务器群中,这些工作全部自动完成,不需要人工干预,需要人工做的只是修复故障的web服务器。
官方c:
\iknow\docshare\data\cur_work\.keepalived.org\download.html
3、数据库高可用方案介绍
三、WEB端负载均衡与高可用系统部署
3.1前端调度服务器Nginx部署
3.1.1安装说明
nginx安装有源码安装和系统匹配的安装包安装,这里为了方便采用redhat下的RPM包安装。
3.1.2Nginx安装
1)nginx下载地址
2)下载相关的安装包
wget
3〕安装nginx官方提供的yum源,用yum安装
rpm-ivh
yuminstallnginx
4)查看安装文件
/etc/nginx
/etc/nginx/fastcgi_params
/etc/nginx/koi-utf
/etc/nginx/koi-win
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params
/etc/nginx/win-utf
/etc/sysconfig/nginx
/usr/sbin/nginx
/usr/share/nginx
/usr/share/nginx/html
/var/cache/nginx
/var/log/nginx
3.1.3启动配置
1)启动服务
#servicenginxstart
2)查看进程
[rootRH01~]#ps-ef|grepnginx
nginx3062330622010:
56?
00:
00:
00nginx:
workerprocess
以上信息显示一个主进程和一个工作进程
[rootRH01~]#lsof-i:
80
MANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME
nginx30622root6uIPv4709550t0TCP*:
(LISTEN)
nginx30623nginx6uIPv4709550t0TCP*:
(LISTEN)
3)删除或重命名默认配置文件
4)修改配置文件
[rootRH01~]#vim/etc/nginx/nginx.conf
default_typeapplication/octet-stream;
log_formatmain'$remote_addr-$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$_referer"'
'"$_user_agent""$_x_forwarded_for"';
access_log/var/log/nginx/access.logmain;
sendfileon;
#tcp_nopushon;
keepalive_timeout65;
#gzipon;
include/etc/nginx/conf.d/*.conf;
upstreamtomcat{
ip_hash;
server192.168.18.6:
80weight=10;
server192.168.18.7:
8080weight=10;
}
server{
listen80;
server_namelocahost;
location/{
proxy_passtomcat;
}
}
}
3.1.4测试、维护
3.2高可用keepalive部署
3.2.1keepalive安装
1)安装前请配置yum源
2)yuminstall-ykeepalived
3)查看安装文件路径
#rpm-qlkeepalived
/etc/keepalived
/etc/sysconfig/keepalived
/usr/bin/genhash
/usr/libexec/keepalived
/usr/sbin/keepalived
4)修改配置文件
主调度主机配置文件
!
ConfigurationFileforkeepalived
global_defs{
notification_email{
yaoyiwalkiesoft.
}
notification_email_fromadminwalkiesoft.
smtp_servermail.walkiesoft.
smtp_connect_timeout30
router_id192.168.18.8##对端主机IP
}
vrrp_instanceVI_1{
stateMASTER##主调度服务器
interfaceeth0
virtual_router_id51
priority100##主调度服务器使用高优先级
advert_int1
authentication{
auth_typePASS
auth_pass1111##交互密码
}
virtual_ipaddress{
192.168.18.9##虚拟IP地址
}
}
备机配置文件:
[rootRH04~]#cat/etc/keepalived/keepalived.conf
!
ConfigurationFileforkeepalived
global_defs{
notification_email{
yaoyiwalkiesoft.
}
notification_email_fromadminwalkiesoft.
smtp_servermail.walkiesoft.
smtp_connect_timeout30
}
vrrp_instanceVI_1{
stateBACKUP
interfaceeth0
virtual_router_id51
priority90
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
virtual_ipaddress{
}
}
5)启动服务
在主备机同时启动服务,查看主机是否挂载浮动IP
6)测试
查看主机是否挂载浮动IP,停止主机keepalivd进程,查看备机是否挂载浮动IP,再恢复主机进程,查看浮动IP是否又回到主机。
3.2.2配置监控nginx进程
1)经过前面的配置,如果主服务器的keepalived停止服务,备服务器会自动接收VIP对外服务;一旦主服务器的keepalived恢复,会重新接收VIP。
但如果nginx服务故障,备用调度服务器将无法觉察,所以我们要做到当主服务器故障或nginx进程停止,备机能全权接收提供对处服务。
2〕使用nmap检查nginx端口来判断nginx的状态,记得要首先安装nmap,#yuminstallnmap-y
3〕参加监控脚本如下:
#!
/bin/sh
#checknginxserverstatus
#NGINX=/usr/sbin/nginx
#如果发现nginx不正常,先重启进程,等3秒再检查,仍然失败不再尝试!
!
PORT=80
nmaplocalhost-p$PORT|grep"$PORT/tcpopen"
if[$?
-ne0];then
sleep3
nmaplocalhost-p$PORT|grep"$PORT/tcpopen"
fi
*主备机都要添加
4)为脚本添加执行权限
chmod+x/etc/keepalived/nginx_chk.sh
5)在keepalive中参加脚本配置
vrrp_scriptchk__port{
script"/etc/keepalived/nginx_chk.sh"##监控脚本
interval2##时间
weight2
}
track_script{
chk__port
}
全部配置文件如:
global_defs{
notification_email{
yaoyiwalkiesoft.
}
notification_email_fromadminwalkiesoft.
smtp_servermail.walkiesoft.
smtp_connect_timeout30
}
vrrp_scriptchk__port{
script"/etc/keepalived/nginx_chk.sh"
interval2
weight2
}
vrrp_instanceVI_1{
stateMASTER
interfaceeth0
virtual_router_id51
priority100
advert_int1
authentication{
auth_typePASS
auth_pass1111
}
virtual_ipaddress{
}
track_script{
chk__port
}
}
6)更进一步,为了防止启动keepalived之前没有启动nginx,可以在/etc/init.d/keepalived的start中首先启动nginx:
start(){
sleep3
[-x$exec]||exit5
[-e$config]||exit6
echo-n$"Starting$prog:
"
daemon$exec$KEEPALIVED_OPTIONS
retval=$?
echo
[$retval-eq0]&&touch$lockfile
return$retval
}
6)测试维护
查看检测日志:
#tail-f/var/log/messages
四、数据高可用方案部署
1、主库准备工作
HostIPDB_NAMEDB_UNIQUE_NAMENetServiceName(网络服务名)
主库192.168.137.128ORCLDBWENDINGdb_wending
备库192.168.137.129ORCLDBPHYSTDBYdb_phystdby
保护模式:
默认最大性能模式
注意DataGuard启动顺序:
启动顺序:
先standby,后primary;
关闭顺序:
先primary,后standby;
1.1、检查数据库是否支持DataGuard(企业版才支持),是否归档模式,Enableforcelogging
$sqlplus'/assysdba'
SQL>select*fromv$optionwhereparameter='ManagedStandby';
确认主库处于归档模式
SQL>archiveloglist〔先检查是否归档模式,不是如此修改〕
startupmount
alterdatabasearchivelog;
alterdatabaseopen;
将primary数据库置为FORCELOGGING模式
SQL>alterdatabaseforcelogging;(强制产生日志)
1.2、如果主库没有密码文件如此建立密码文件,从而可以OS验证的方式登陆
$orapwdfile=$ORACLE_HOME/dbs/orapw$ORACLE_SIDpassword=iamwangncentries=5
1.3、配置standbyredolog〔最优性能模式可以忽略,如果将来变成备库且要转为其它两种模式如此要建立〕
SQL>alterdatabaseaddstandbylogfile
group4('/orahome/oradata/WENDING/stdby_redo04.log')size50m,
group5('/orahome/oradata/WENDING/stdby_redo05.log')size50m,
group6('/orahome/oradata/WENDING/stdby_redo06.log')size50m,
group7('/orahome/oradata/WENDING/stdby_redo07.log')size50m;
standbyredolog的组数参考公式:
(onlineredolog组数+1)*数据库线程数;单机线程数为1,RAC一般为2。
standbyredolog的组成员数和大小也尽量和onlineredolog一样。
1.4、设置主库初始化参数
$sqlplus'/assysdba'
SQL>createpfile='/home/oracle/pfile.ora'fromspfile;(备份参数文件)
SQL>altersystemsetLOG_ARCHIVE_CONFIG='DG_CONFIG=(WENDING,PHYSTDBY)'scope=spfile;〔启动db承受或发送redodata,包括所有库的db_unique_name〕
SQL>altersystemsetLOG_ARCHIVE_DEST_1='LOCATION=/orahome/arch1/WENDINGVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=WENDING'scope=spfile;〔主库归档目的地〕
SQL>altersystemsetLOG_ARCHIVE_DEST_2='SERVICE=db_phystdbyLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=PHYSTDBY'scope=spfile;(当该库充当主库角色时,设置物理备库redodata的传输目的地)
SQL>altersystemsetLOG_ARCHIVE_MAX_PROCESSES=5scope=spfile;〔最大AR进程数〕
SQL>altersystemsetLOG_ARCHIVE_DEST_STATE_1=ENABLEscope=spfile;〔允许redo传输服务传输数据到目的地,默认是enable〕
SQL>altersystemsetLOG_ARCHIVE_DEST_STATE_2=ENABLEscope=spfile;〔同上〕
SQL>altersystemsetREMOTE_LOGIN_PASSWORDFILE=EXCLUSIVEscope=spfile;〔exclusiveorshared,所有库sys密码要一致,默认是exclusive〕
--以下是主库切换为备库,充当备库角色时的一些参数设置,如果不打算做数据库切换就不用设置了
SQL>altersystemsetFAL_SERVER=db_phystdbyscope=spfile;〔配置网络服务名,假设转换为备库角色时,从这里获取丢失的归档文件〕
SQL>altersystemsetFAL_CLIENT=db_wendingscope=spfile;〔配置网络服务名,fal_server拷贝丢失的归档文件到这里〕
SQL>altersystemsetDB_FILE_NAME_CONVERT='PHYSTDBY','WENDING'scope=spfile;〔前为切换后的主库路径,后为切换后的备库路径,如果主备库目录结构完全一样,如此无需设定〕
SQL>altersystemsetLOG_FILE_NAME_CONVERT='PHYSTDBY','WENDING'scope=spfile;〔同上,这两个名字转换参数是主备库的路径映射关系,可能会是路径全名,看情况而定〕
SQL>altersystemsetSTANDBY_FILE_MANAGEMENT=autoscope=spfile;〔auto后当主库的datafiles增删时备库也同样自动操作,且会把日志传送到备库standby_archive_dest参数指定的目录下,确保该目录存在,如果你的存储采用文件系统没有问题,但是如果采用了裸设备,你就必须将该参数设置为manual〕
SQL>altersystemsetSTANDBY_ARCHIVE_DEST='LOCATION=/orahome/arch1/WENDING'scope=spfile;〔一般和LOG_ARCHIVE_DEST_1的位置一样,如果备库采用ARCH传输方式,那么主库会把归档日志传到该目录下〕
有了以上参数设置,如此无论该库充当主库角色还是备库角色都无需再修改了。
然后重启数据库:
SQL>shutdownimmediate
SQL>startup;
1.5、备份主库数据文件
关闭应用服务器,停止监听,开始rman备份:
$lsnrctlstop
$rmantarget/
RMAN>backupfulldatabaseformat'/backup/backup_%T_%s_%p.bak';
##RMAN>sql"altersystemarchivelogcurrent";
##RMAN>backuparchivelogallformat='/backup/arch_%T_%s_%p.bak';
1.6、在主库上建立备库控制文件〔控制文件通常需要有多份,手工将文件复制几份〕
$sqlplus'/assysdba'
SQL>alterdatabasecreatestandbycontrolfileas'/backup/stdby_control01.ctl';
$cd/backup/
1.7、为备库准备init参数
$sqlplus'/assysdba'
SQL>createpfile='/backup/initPHYSTDBY.ora'fromspfile;
$cd/backup/
$viinitPHYSTDBY.ora
注意主备库不同角色的属性配置,注意文件路径等,注意db_name要和主库一致,主要是以下参数:
audit_file_dest='/u01/app/oracle/admin/PHYSTDBY/adump'
background_dump_dest='/u01/app/oracle/admin/PHYSTDBY/bdump'
core_dump_dest='/u01/app/oracle/admin/PHYSTDBY/bdump'
user_dump_dest='/u01/app/oracle/admin/PHYSTDBY/udump'
--
control_files='/orahome/oradata/stdby_control01.ctl','/orahome/oradata/stdby_control02.ctl','/orahome/oradata/stdby_control03.ctl'
db_unique_name='PHYSTDBY'
log_archive_config='DG_CONFIG=(PHYSTDBY,WENDING)'
log_archive_dest_1='LOCATION=/orahome/arch1/PHYSTDBYVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=PHYSTDBY'
log_archive_dest_2='SERVICE=db_wendingLGWRASYNCVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=WENDING'
--
fal_client='DB_PHYSTDBY'
fal_server='DB_WENDING'
db_file_name_convert='WENDING','PHYSTDBY'
log_file_name_convert='WENDING','PHYSTDBY'
standby_archive_de