keepalived高级应用解析

virtual_server IP port#定义虚拟主机IP地址及其端口virtual_server fwmark int #ipvs的防火墙打标,实现基于防火墙的负载均衡集群virtual_server group string #将多个虚拟服务器定义成组,将组定义成虚拟服务lb_algo{rr|wrr|lc|wlc|lblc|lblcr} #定义LVS的调度算法lb_kind {NAT|DR|TUN}#定义LVS的模型presitence_timeout<INT>#定义支持持久连接的时长protocol TCP#规则所能支持的协议sorry_server <IPADDR><PORT>#如果所有real_server都出现故障了,利用此返回信息

real_server(真实服务器)的定义:

real_server<IPADDR><PORT>#定义地址和端口{#每一组都要用花括号定义自有的属性的weight <INT>#定义权重notify_up<STRING>|<QUOTED-STRING> #通知脚本,一旦脚本up就通知notify_down<STRING>|<QUOTED-STRING> #通知脚本,一旦脚本down就通知HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK #定义健康状态检测(HTTP_GET:使用此方法检测的;SSL_GET:如果是HTTPS使用此方式检测;TCP_CHECK:检测TCP协议的服务器健康状况;SMTP_CHECK:用来专门检测SMTP服务器;MISC_CHECK:其他检测机制很少使用一般只使用前三种检测方法)}

健康状态检测的常见的两种方法做阐述了解:

############HTTP_GET|SSL_GET#############{# Aurlto test, can have multiple entries hereurl{#url字段path<STRING> #指明检查哪个url#healthcheckneedsstatus_codeor status_codeand digest .Digest computed with genhash, egdigest9b3a0c85a887a256d6939da88aabd8cddigest<STRING> #获取检测那个url的校验码status_code<INT> #明确指定那个url的校验码和上面的digest不可同时存在}connect_port<PORT>#期望连接后端服务器的哪些端口bindto<IPADDR>#检测哪个IP的哪个端口,,若不指定应和外围的real_server指定的端口地址是一致connect_timeout<INT>#超时时间nb_get_retry<INT>#重试次数delay_before_retry<INT> #重试之前等待的时间}##############3TCK_CHECK##############{ connect_port <PORT>#连接哪个端口 bindto <IPADDR>#连接哪个地址 connect_timeout <INT> #超时时间是多少}

定义好这些之后它自行会检测自行判断能够连接上能够收到信息就说明是正常的否则就是失败的。

定义一个real_server:并且可以实现web健康状态检测??

1、编辑主服务器配置文件定义虚拟服务:

[root@node1keepalived]# vim keepalived.conf virtual_server172.16.18.100 80 {delay_loop 6lb_algo rrlb_kind DRnat_mask 255.255.0.0persistence_timeout 0protocol TCP#real_server 172.16.18.5 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 172.16.18.6 80 {weight 1HTTP_GET {url {path /status_code 200}connect_timeout 3nb_get_retry 3delay_before_retry 3}}}######备服务器同样定义虚拟服务########

2、查看规则:

[root@node1keepalived]# yum -y install ipvsadm[root@node1keepalived]# ipvsadm -L -nIPVirtual Server version 1.2.1 (size=4096)ProtLocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConnTCP 172.16.18.100:80 rr

显然已生成规则,所以总结可得知无须安装ipvsadm依然可以生成规则,只是无法校验规则。

还有这里两个real_server都不存在,原因是健康监测无法通过所以导致这里不存在。

3、测试:

开启real_server主机:172.16.18.6

[root@node~]# vim /var/www/html/index.html[root@nodehtml]# service httpd start[root@node1keepalived]# ipvsadm -L -nIPVirtual Server version 1.2.1 (size=4096)ProtLocalAddress:Port Scheduler Flags -> RemoteAddress:PortForward Weight ActiveConn InActConnTCP 172.16.18.100:80 rr -> 172.16.18.6:80Route 100

二、综合应用实现:

构建keepalived+Nginx实现双主模式高可用集群。

架构说明:这种模式需要使用两个虚拟IP地址,前端有两台Nginx服务器互为主备并同时工作,不会造成资源浪费;如果其中一台服务器出现故障时,将会把所有请求都转发到另一台服务器上面,继续提供服务。

架构拓扑:

应用环境介绍:

系统版本:centosx86_64keepalived版本:1.2.7Nginx:1.4.2Apache:yum源安装

IP地址和主机名介绍:

Nginx1:172.16.18.7([root@node1 ~]#)Nginx2:172.16.18.9([root@node2 ~]#)Apache1:172.16.18.10([root@node ~]#)Apache2:172.16.18.11([root@stu18 ~]#)VIP:172.16.18.100VIP:172.16.18.200

实现步骤:

1、在Nginx1上编译安装Nginx

############安装依赖包组#########[root@node1 ~]# yum groupinstall “Development tools” “Server Platform Development” –y[root@node1 ~]# yum -y install pcre-devel############创建用户############[root@node1 ~]# useradd -r nginx############解压Nginx###########[root@node1 ~]# tar xf nginx-1.4.2.tar.gz############编译安装############[root@node1 ~]# cd nginx-1.4.2[root@node1 nginx-1.4.2]# ./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-pcre[root@node1 nginx-1.4.2]# make && make install#############提供systemV脚本########[root@node1 nginx-1.4.2]# vim /etc/rc.d/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 directories user=`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=`echo $opt | cut -d “=” -f 2`if [ ! -d “$value” ]; then# echo “creating” $valuemkdir -p $value && chown -R $user $valuefifi done}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 2esac#############赋予权限#########[root@node1 nginx-1.4.2]# chmod +x /etc/rc.d/init.d/nginx############启动服务##########[root@node1 init.d]# service nginx start

2、在Nginx2上编译安装Nginx

具体步骤请参考Nginx1编译安装。

3、测试访问

梦想,并不奢侈,只要勇敢地迈出第一步。

keepalived高级应用解析

相关文章:

你感兴趣的文章:

标签云: