1、组件及实现的功能Keepalived:实现对Haproxy服务的高可用,并采用双主模型配置;
Haproxy:实现对Nginx的负载均衡和读写分离;
Nginx:实现对HTTP请求的高速处理;
2、架构设计图

文章插图
3、Keepalived部署在两个节点上都需要执行安装keepalived,命令如下:
$ yum -y install keepalived 修改 172.16.25.109 节点上 keepalived.conf 文件配置,命令如下
$ vim /etc/keepalived/keepalived.conf修改后的内容如下:
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from admin@lnmmp.comsmtp_connect_timeout 3smtp_server 127.0.0.1router_id LVS_DEVEL}vrrp_script chk_maintaince_down {script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"interval 1weight 2}vrrp_script chk_haproxy {script "killall -0 haproxy"interval 1weight 2}vrrp_instance VI_1 {interface eth0state MASTERpriority 100virtual_router_id 125garp_master_delay 1authentication { auth_type PASS auth_pass 1e3459f77aba4ded}track_interface {eth0}virtual_ipaddress { 172.16.25.10/16 dev eth0 label eth0:0}track_script { chk_haproxy}notify_master "/etc/keepalived/notify.sh master 172.16.25.10"notify_backup "/etc/keepalived/notify.sh backup 172.16.25.10"notify_fault "/etc/keepalived/notify.sh fault 172.16.25.10"}vrrp_instance VI_2 {interface eth0state BACKUPpriority 99virtual_router_id 126garp_master_delay 1authentication { auth_type PASS auth_pass 7615c4b7f518cede}track_interface {eth0}virtual_ipaddress { 172.16.25.11/16 dev eth0 label eth0:1}track_script { chk_haproxychk_maintaince_down}notify_master "/etc/keepalived/notify.sh master 172.16.25.11"notify_backup "/etc/keepalived/notify.sh backup 172.16.25.11"notify_fault "/etc/keepalived/notify.sh fault 172.16.25.11"}同理修改 172.16.25.110 节点上 keepalived.conf 配置,内容如下:
! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from admin@lnmmp.comsmtp_connect_timeout 3smtp_server 127.0.0.1router_id LVS_DEVEL}vrrp_script chk_maintaince_down {script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"interval 1weight 2}vrrp_script chk_haproxy {script "killall -0 haproxy"interval 1weight 2}vrrp_instance VI_1 {interface eth0state BACKUPpriority 99virtual_router_id 125garp_master_delay 1authentication { auth_type PASS auth_pass 1e3459f77aba4ded}track_interface {eth0}virtual_ipaddress { 172.16.25.10/16 dev eth0 label eth0:0}track_script { chk_haproxychk_maintaince_down}notify_master "/etc/keepalived/notify.sh master 172.16.25.10"notify_backup "/etc/keepalived/notify.sh backup 172.16.25.10"notify_fault "/etc/keepalived/notify.sh fault 172.16.25.10"}vrrp_instance VI_2 {interface eth0state MASTERpriority 100virtual_router_id 126garp_master_delay 1authentication { auth_type PASS auth_pass 7615c4b7f518cede}track_interface {eth0}virtual_ipaddress { 172.16.25.11/16 dev eth0 label eth0:1}track_script { chk_haproxy}notify_master "/etc/keepalived/notify.sh master 172.16.25.11"notify_backup "/etc/keepalived/notify.sh backup 172.16.25.11"notify_fault "/etc/keepalived/notify.sh fault 172.16.25.11"}# vi /etc/keepalived/notify.sh#!/bin/bash# Author: Jason.Yu # description: An example of notify script#contact='root@localhost'notify() {mailsubject="`hostname` to be $1: $2 floating"mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"echo $mailbody | mail -s "$mailsubject" $contact}case "$1" inmaster) notify master $2 /etc/rc.d/init.d/haproxy restart exit 0;;backup) notify backup $2 # 在节点切换成backup状态时,无需刻意停止haproxy服务,防止chk_maintaince和chk_haproxy多次对haproxy服务操作; exit 0;;fault) notify fault $2 # 同上 exit 0;;*) echo 'Usage: `basename $0` {master|backup|fault}' exit 1;;esac在两个节点上执行 keepalived 启动命令,命令如下:
$ service keepalived start

文章插图
4、Haproxy部署在两个节点上都需要执行安装 HAProxy,命令如下:
$ yum -y install haproxy【Keepalived+Haproxy+Nginx Nginx实现高可用集群构建】修改 172.16.25.109 和 172.16.25.110 节点上 haproxy.cfg 文件配置(两节点配置文件内容一致),命令如下:
$ vim /etc/haproxy/haproxy.cfg配置文件内容如下:
globallog127.0.0.1 local2chroot/var/lib/haproxypidfile/var/run/haproxy.pidmaxconn4000userhaproxygrouphaproxydaemon # 以后台程序运行;defaultsmodehttp # 选择HTTP模式,即可进行7层过滤;logglobaloptionhttplog # 可以得到更加丰富的日志输出;optiondontlognulloption http-server-close # server端可关闭HTTP连接的功能;option forwardfor except 127.0.0.0/8 # 传递client端的IP地址给server端,并写入“X-Forward_for”首部中;optionredispatchretries3timeout http-request10stimeout queue1mtimeout connect10stimeout client1mtimeout server1mtimeout http-keep-alive 10stimeout check10smaxconn30000listen statsmode httpbind 0.0.0.0:1080 # 统计页面绑定1080端口;stats enable # 开启统计页面功能;stats hide-version # 隐藏Haproxy版本号;stats uri/haproxyadmin?stats # 自定义统计页面的访问uri;stats realmHaproxy\ Statistics # 统计页面密码验证时的提示信息;stats authadmin:admin # 为统计页面开启登录验证功能;stats admin if TRUE # 若登录用户验证通过,则赋予管理功能;frontend http-inbind *:80mode httplog globaloption httpcloseoption logasapoption dontlognullcapture requestheader Host len 20capture requestheader Referer len 60acl url_staticpath_beg-i /static /p_w_picpaths /javascript /stylesheetsacl url_staticpath_end-i .jpg .jpeg .gif .png .css .js .htmluse_backend static_servers if url_static # 符合ACL规则的,请求转入后端静态服务器default_backend dynamic_servers # 默认请求转入后端动态服务器backend static_serversbalance roundrobinserver imgsrv1 192.168.0.25:80 check maxconn 6000 # 静态服务器,可配置多台,还可设置权重weight;backend dynamic_serversbalance source # 对于动态请求利用source调度算法,可一定程度上实现session保持;但最好利用cookie绑定的方式实现session保持server websrv1 192.168.0.35:80 check maxconn 1000 # 动态服务器,可配置多台,还可设置权重weight;两个节点执行启动服务,命令如下:
$ service haproxy start5、Nginx部署yum -y groupinstall “Development tools”yum -y groupinstall “Server Platform Development”yum install gcc openssl-devel pcre-devel zlib-develgroupadd -r nginxuseradd -r -g nginx -s /sbin/nologin -M nginxtar xf nginx-1.4.7.tar.gzcd nginx-1.4.7mkdir -pv /var/tmp/nginx./configure \--prefix=/usr \--sbin-path=/usr/sbin/nginx \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--pid-path=/var/run/nginx/nginx.pid\--lock-path=/var/lock/nginx.lock \--user=nginx \--group=nginx \--with-http_ssl_module \--with-http_flv_module \--with-http_stub_status_module \--with-http_gzip_static_module \--http-client-body-temp-path=/var/tmp/nginx/client/ \--http-proxy-temp-path=/var/tmp/nginx/proxy/ \--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \--http-scgi-temp-path=/var/tmp/nginx/scgi \--with-pcremake && make install配置服务脚本
vi /etc/init.d/nginx # 配置服务脚本#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig:- 85 15# description:Nginx is an HTTP(S) server, HTTP(S) reverse \# proxy and IMAP/POP3 proxy server# processname: nginx# config:/etc/nginx/nginx.conf# config:/etc/sysconfig/nginx# pidfile:/var/run/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/etc/nginx/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginxmake_dirs() {# make required directoriesuser=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`options=`$nginx -V 2>&1 | grep 'configure arguments:'`for opt in $options; doif [ `echo $opt | grep '.*-temp-path'` ]; thenvalue=https://tazarkount.com/read/`echo $opt | cut -d"=" -f 2`if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $valuefifidone}start() {[ -x $nginx ] || exit 5[ -f $NGINX_CONF_FILE ] || exit 6make_dirsecho -n $"Starting $prog: "daemon $nginx -c $NGINX_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {configtest || return $?stopsleep 1start}reload() {configtest || return $?echo -n $"Reloading $prog: "killproc $nginx -HUPRETVAL=$?echo}force_reload() {restart}configtest() {$nginx -t -c $NGINX_CONF_FILE}rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1}case "$1" instart) rh_status_q && exit 0 $1 ;;stop) rh_status_q || exit 0 $1 ;;restart|configtest) $1 ;;reload) rh_status_q || exit 7 $1 ;;force-reload) force_reload ;;status) rh_status ;;condrestart|try-restart) rh_status_q || exit 0;;*) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esacchmod +x /etc/init.d/nginx # 复***务脚本执行权限vi /etc/nginx/nginx.conf # 编辑主配置文件worker_processes2;error_log/var/log/nginx/nginx.error.log;pid /var/run/nginx.pid;events {worker_connections1024;}http {includemime.types;default_typeapplication/octet-stream;log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';sendfile on;keepalive_timeout65;server { listen80; server_namexxrenzhe.lnmmp.com; access_log/var/log/nginx/nginx.access.logmain; location / {root/www/lnmmp.com;indexindex.php index.html index.htm; } error_page404/404.html; error_page500 502 503 504/50x.html; location = /50x.html {root/www/lnmmp.com; } location ~ \.php$ {root/www/lnmmp.com;fastcgi_pass127.0.0.1:9000;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;include fastcgi_params; }}}vi /etc/nginx/fastcgi_params # 编辑fastcgi参数文件fastcgi_paramGATEWAY_INTERFACECGI/1.1;fastcgi_paramSERVER_SOFTWAREnginx;fastcgi_paramQUERY_STRING$query_string;fastcgi_paramREQUEST_METHOD$request_method;fastcgi_paramCONTENT_TYPE$content_type;fastcgi_paramCONTENT_LENGTH$content_length;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;fastcgi_paramSCRIPT_NAME $fastcgi_script_name;fastcgi_paramREQUEST_URI $request_uri;fastcgi_paramDOCUMENT_URI$document_uri;fastcgi_paramDOCUMENT_ROOT$document_root;fastcgi_paramSERVER_PROTOCOL$server_protocol;fastcgi_paramREMOTE_ADDR $remote_addr;fastcgi_paramREMOTE_PORT $remote_port;fastcgi_paramSERVER_ADDR $server_addr;fastcgi_paramSERVER_PORT $server_port;fastcgi_paramSERVER_NAME $server_name;启动服务
service nginx configtest # 服务启动前先验证配置文件是否正确service nginx startps -ef |grep nginx # 检查nginx进程,尤其是worker进程是否与worker_processes值一致ss -antupl |grep 80 # 检查服务端口是否启动6、访问验证Haproxy 统计页面测试

文章插图

文章插图
动静分离测试

文章插图

文章插图
高可用测试

文章插图
到此 Nginx高可用集群构建(Keepalived+Haproxy+Nginx)介绍完成 。
到此这篇关于Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)的文章就介绍到这了,更多相关Nginx 高可用集群内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
