Nginx、rsync、lvs+ha

来源:互联网 发布:网络问政回复格式 编辑:程序博客网 时间:2024/06/05 07:35

一、Nginx网站服务

Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器,也是一个IMAP/POP3/SMTP 代理服

1、Apache服务器和nginx的优缺点:
我们之前大量使用Apache来作为HTTPServer。Apache具有很优秀的性能,而且通过模块可以提供各种丰富的功能。
1)首先Apache对客户端的响应是支持并发的 ,运行httpd这个daemon进程之后,它会同时产生多个子进程/线程,每个子进程/线程分别对客户端的请求进行响应;
2)另外,Apache可以提供静态和动态的服务 ,例如对于PHP的解析不是通过性能较差的CGI实现的而是通过支持PHP的模块来实现的(通常为mod_php5,或者叫做apxs2)。
3)缺点:
因此通常称为Apache的这种Server为process-based server,也就是基于多进程的HTTPServer,因为它需要对每个用户请求创建一个子进程/线程进行响应;
这样的缺点是,如果并发的请求非常多(这在大型门户网站是很常见的)就会需要非常多的线程,从而占用极多的系统资源CPU和内存。因此对于并发处理不是Apache的强项。
4)解决方法:
目前来说出现了另一种WebServer,在并发方面表现更加优越,叫做asynchronousservers异步服务器。最有名的为Nginx和Lighttpd。所谓的异步服务器是事件驱动程序模式的event-driven,除了用户的并发请求通常只需要一个单一的或者几个线程。因此占用系统资源就非常少。这几种又被称为lightweight web server。举例,对于10,000的并发连接请求,nginx可能仅仅使用几M的内存;而Apache可能需要使用几百M的内存资源。
使用Apache来作为HTTPServer的情况我这里不再多做介绍;上面我们介绍到Apache对于PHP等服务器端脚本的支持是通过自己的模块来实现的,而且性能优越。
我们同样可以使用nginx或者lighttpd来作为HTTPServer来使用。
nginx和Apache类似都通过各种模块可以对服务器的功能进行丰富的扩展,同样都是通过conf配置文件对各种选项进行配置。对于PHP等,nginx没有内置的模块来对PHP进行支持,而是通过FastCGI来支持的。
nginx则没有自己提供处理PHP的功能,需要通过第三方的模块来提供对PHP进行FastCGI方式的集成。

Nginx(发音engine  x)专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。

2、Nginx的安装及运行控制:

目前Nginx的最新稳定版本为1.0.8,开发版本为1.1.6,其安装文件可以从官方网站http://www.nginx.org下载,下面以稳定版为例,介绍nginx的安装和运行控制。

编译安装Nginx

1)安装支持软件:

Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。

2)创建运行用户、组:

Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。

3)编译安装nginx:

释放nginx源码包

编译前配置:

注:配置前可以参考:./configure  --help给出说明

--prefix:设定Nginx的安装目录

--user和—group:指定Nginx运行用户和组

--with-http_stub_status_module:启用http_stub_status_module模块以支持状态统计

编译:

安装:

至此Nginx安装完成,为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用Nginx的主程序。

Nginx的运行控制:

与apache的主程序httpd类似,Nginx的主程序也提供了”-t”选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子目录中。若要检查位于其他位置的配置文件,可使用”-c”选项来指定路径。

启动、停止Nginx:

直接运行nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加”-c  配置文件路径”选项来指定路径。需要注意的是,若服务器中已安装有httpd等其他WEB服务软件,应采取措施避免部突。

通过检查 Nginx程序的监听状态,或者在浏览器中访问此WEB服务(默认页面将显示“Welcome tonginx!”),可以确认Nginx服务是否正常运行。

或使用elinks浏览器(需安装elinks软件包。yum  -y install elinks)

注意:要在防火墙上允许80端口的通信。

停止Nginx服务:

#Killall -9  nginx

当Nginx进程运行时,PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。

为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和service工具来进行管理,也更加符合RHEL系统的管理习惯。

脚本内容如下:

注:通过kill或killall命令发送HUP信号表示重载配置, 用新的配置开始新的工作进程
关闭旧的工作进程。QUIT信号表示退出进程,KILL信号表示杀死进程。通过”-s”选项指定信号种类。

添加为系统服务。

这样一来,就可以通过nginx脚本来启动、停止、重启、重载Nginx服务器了。

3、配置文件nginx.conf:

在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为”关键字  值;”(末尾以分号表示结束),以”#”开始的部分表示注释。

1)全局配置

由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。

常用配置项:

user  nobody;    

//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody

worker_processes 2;

 //指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般为它的倍数

worker_cpu_affinity 0000000100000010; 

//为每个进程分配cpu,上例中将2个进程分配到两个cpu,当然可以写多个,或者将一个

进程分配到多个cpu

worker_rlimit_nofile 102400; 

//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit

-n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit-n的值

保持一致。(通过”ulimit –n 数值”可以修改打开的最多文件数目)

error_log  logs/error.log;//全局错误日志文件的位置

pid  logs/nginx.pid;  //PID文件的位置

2)I/O事件配置:

使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置

events {

  use epool;   //使用epool模型,对于2.6以上的内核,建议使用epool模型以提高性能

   worker_connections4096;  //每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。

}

3)HTTP配置

使用”http{}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以

及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记”servier {}”内。

http {
   #设定mime类型,即conf/目录下的mime.types文件中的设定。
   include      mime.types;
   default_type application/octet-stream;
   #设定日志格式
   log_format main        '$remote_addr - $remote_user[$time_local]'
   '"$request" $status$bytes_sent '
   '"$http_referer""$http_user_agent" '
   '"$gzip_ratio"';
   log_format download '$remote_addr -$remote_user [$time_local] '
   '"$request" $status$bytes_sent '
   '"$http_referer""$http_user_agent" '
   '"$http_range""$sent_http_content_range"';
   #设定请求缓冲
  client_header_buffer_size    1k;

//客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。
   large_client_header_buffers 4 4k;

open_file_cachemax=102400 inactive=20s;

//这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存

open_file_cache_valid30s;

//这个是指多长时间检查一次缓存的有效信息

open_file_cache_min_uses1;

//open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。
   #设定access log
   access_log logs/access.log main;
   sendfile  on;  //支持文件发送(下载)
   keepalive_timeout 65;  //连接保持超时

   #设定服务器支持shtml
   ssi on;
   ssi_silent_errors on;
   ssi_types text/shtml;
   #设定虚拟主机
   server {                //用来配置虚拟主机
      listen  80; //WEB服务的监听设置,可以采用”IP地址:端口”形式
      server_name www.lnmp.com;//网站名,称可以写多个名称,用空格分隔

       location / {    //表示如何匹配后面的路径的
index index.html; //默认首页

root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据需要可改为/var/www/html等其他路径。

}
      charset gb2312;  //网页的默认字符集
      #设定本虚拟主机的访问日志
      access_log logs/www.lnmp.com.access.logmain;

error_page 500502 503 504  /50x.html; //内部错误的反馈页面

location =/50x.html {

root html;

}
   }
}

Nginx的location

基本语法:
location [=|~|~*|^~] /uri/ { … }

=     表示做精确匹配
~ :为区分大小写匹配
~*: 为不区分大小写匹配
!~ :和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

正则表达式匹配,其中:
文件及目录匹配,其中:
-f !-f 用来判断是否存在文件
-d!-d 用来判断是否存在目录
-e!-e 用来判断是否存在文件或目录
-x !-x 用来判断文件是否可执行

示例1:

location = / {
# 只匹配 / 查询。
}

location  / {

#匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配

}

示例2:

location ^~ /images/ {
# 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}

示例3:

location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
}

4、状态统计及虚拟主机应用:

1)  Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。配置

编译参数时可添加—with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项

注:location /tongji   //匹配任何包含/tongji的任何查询

stub_status on  //打开状态统计功能

Access_log  off//关闭此位置的日志记录

Nginx 支持为目录添加密码认证,使用apache 的 htpasswd 来创建密码文件

htpasswd  -c /usr/local/nginx/.htpasswd 用户名

保存修改过的nginx.conf文件并重启nginx服务使修生效。

新的配置生效后,在浏览器中访问Nginx服务器的/tongji网站位置(http://web服务器

IP/tongji)可以看到状态统计信息

如上图所示:其中”Active connections”表示当前的活动连接数;而”server accepts handled

requests”表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次

数、已处理的请求数.

客户端访问控制:

注:allow 允许规则,deny拒绝规则;规则的执行是按从上向下执行,匹配某条规则后将不

再检查其他规则。

2)虚拟主机:

使用Nginx搭建虚拟主机服务器时,每个虚拟WEB站点拥有独立的”server {}”配置段,各自

监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。

例如:要创建两个站点www.benet.com和www.accp.com

为两个虚拟WEB主机分别建立根目录,并准备测试首页

调整nginx.conf配置文件---域名虚拟主机

配置两个”server {}”区域,分别对应两个WEB站点,指定各自的网站名称、监听地址、网站

根目录、访问日志等信息,然后重载配置

测试:使用浏览器分别通过www.benet.com和www.accp.com访问两个WEB站点(注意域

名解析。

5、LEMP架构及应用部署:

就像构建LAMP平台一样,构建LEMP平台也需要LINUX服务器、MYSQL数据库、PHP解析

环境,区别主要在于Nginx与PHP的协作配置上

1)  以编译方式安装Nginx(过程参照上面相关介绍完成)

2)  安装MYSQL数据库----------以编译方式安装

释放MYSQL的源码包:

编译前配置:

注:--with-charset:指定默认使用的字符集编码;--with-collation:指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则;--with-extra-charsets:指定额外支持的其他字符集编码。

编译并安装MYSQL:

优化调整:

初始化数据库:

启动MYSQL服务及为root用户设置密码:

3)  安装PHP解析环境:

较新版本(如5.3)的PHP已经自带FPM(fastCGI  process  manager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理,优化解析效率,因此在配置PHP编译选项时应添加”--enable-fpm”以启用此模块。

为了提高PHP解析效率,建议将相应版本的ZendGuardLander也装上

释放PHP源码包:

编译前配置:

注:在RHEL6的64系统中按上面的配置项配置可能会报以下错误,如果要是报错的话请按如下方法解决:

解决方法:

根据报错发现是因为libpng.so和libpng.a找不到,但libpng的相关软件包我已经安装了,如下图查询结果,发现libpng的包都安装了。

那为什么还报libpng.so和libpng.a找不到呢?

要解决的问题就是它没找到,我安装了的,那我得去找找看它到底是放那里去了。执行下列命令,可以查找libpng.so在那里。

通过上面的搜索其实就知道一些原因了,configure一般的搜索编译路径为/usr/lib/下,因为php默认就在/usr/lib/下找相关库文件,而x64机器上是在:/usr/lib64.这时你就可以直接把需要的库文件从/usr/lib64中拷贝到/usr/lib/中去就可以了

解决完后重新执行./configure进行编译前的配置

如果报configure: error: libjpeg.(a|so) not found错误解决方法和上面的解决方法类似。具体操作如下:

如果报下面错误

usr/bin/install:cannot create regular file `/usr/local/man/man1/cjpeg.1': No such file ordirectory
make: *** [install] Error 1
提示找不到目录。既然电脑找不到,咱们人脑可以找嘛,自己先创建先
mkdir /usr/local/man
mkdir /usr/local/man1 创建完了再来

类似错误很多,方法也很多,我们得灵活应变,具体问题具体分析!

编译并安装PHP:

注:

安装后的调整:

安装ZendGuardLander(注:若RHEL6是64位系统,该软件得到其官网下载64位的相应软件包,若用32位的就会报错。下载地址:http://www.zend.com/en/products/guard/downloads)

修改php.ini文件:

在php.ini中添加如下配置

配置Nginx支持PHP环境:

若要让Nginx能够解析PHP网页,有两种方法可以选择;其一,充当中介,将访问PHP页面的WEB请求转交给其他服务器(LAMP)去处理;其二,通过使用PHP的FPM模块来调用本机的PHP环境

如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)

修改内容如下:

//确认pid文件位置

//运行用户和运行组

//启动时开启的进程数、最少空闲进程数、最多空闲进程数

按以上提示修改php-fpm.conf文件,改完后保存退出。

启动php-fpm并查看地址监听。

在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid,根据上述信息,可以修改Nginx服务脚本,以便在启动/停止Nginx服务器时将php-fpm进程也自动启动/停止。

在nginx服务脚本中添加如下内容:

这样一为,一旦启动或关闭nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm.

4)  配置Nginx支持PHP解析:

无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在”server{}”配置段中添加location设置,以便指定当访问.php面页时采取何种操作。

对于第一种方法(转交给其他WEB服务器处理),使用的配置语句如下所示,例如,交给IP地址为192.168.0.200的LAMP服务器处理,从而实现由Nginx负责静态页面,LAMP负责动态页面的分离效果。

server  {

  …… //省略部分信息

  location ~  \.php$  {                 //访问.php页面的配置段

          proxy_pass   http://192.168.0.200:80;  //APACHE服务器的监听地址

  }

}

对于第二种方法(调用本机的php-fpm进程),使用的配置语句如下所示。在conf/目录下的fastcgi.conf文件中已经包含必需的宏设置,可通过include语句添加进来。

server  {

  …… //省略部分信息

  location ~  \.php$ {       //访问php页面的配置段

          root    /var/www/benet;   //PHP网页文档根目录

          fastcgi_pass  127.0.0.1:9000;  //php-fpm的监听地址

          fastcgi_index  index.php;  //PHP首页文件

          include   fastcgi.conf;   //包括fastcgi.conf样本配置

  }

}

本文档中我选择的是第二种方法,完成修改后重新加载nginx服务即可生效。

PHP页面访问测试:

在PHP文档根目录下创建一个测试网页,以便测试PHP语名能否正常解析,以及能否访问MYSQL数据库。测试页内容如下 :

然后访测试页如:http://www.benet.com/test.php若能看到成功提示信息表示一切正常。

5)  在LEMP平台中部署WEB应用:

LEMP平台与LAMP平台是非常相似的,区别主要在于所用WEB服务软件的不同,而这与使用PHP开发的WEB应用程序并无太大关系,因此PHP应用的部署方法也是类似的,

下面以“天空网络电影系统(简称SKYUC)”为例介绍在LEMP平台中的部署过程。

释放并部署程序代码:

创建数据库:

安装WEB应用:

访问http://www.benet.com/skyuc/install/index.php,将会打开SKYUC的安装程序,根据页面提示,只需三步即可完成安装。要注意适当调整权限,最简单方法是:

完成安装后,注意将install/目录转移,以避免重复安装,降低安全风险。

访问WEB应用系统:

通过访问http://www.benet.com/skyuc就可以访问了。

架设Discuz论坛:

建立用于bbs论坛的数据库及用户:

解压下载的软件包,上传程序文件:

在浏览器中访问http://www.benet.com/bbs/install根据向导页面的提示进行安装

注:请将 php.ini 中的short_open_tag 设置为 On,然后重启WEB服务,否则程序无法正常运行,修改后要重启nginx服务。

通过访问http://www.benet.com/bbs就可以访问了。

6、Nginx日志分析AWStats+JAWStats安装配置

Awstats 是一款基于 Perl 的 WEB 日志分析工具,而 JAWStats 是一款基于 PHP 的统计套件,旨在为 Awstats 提供更为精美图形界面

1)  安装并配置Awstats:

Awstats 安装非常简单,但必须先确认你服务器上 Perl 的环境已经就绪.

释放并安装Awstats:

生成配置文件:

使用 awstats_configure.pl 向导工具,生成每个网站的配置文件。

 

1.输入 none 然后回车
2.输入 y 确认创建配置文件
3.输入配置文件名称,一般输入域名。

4.配置文件使用默认路径 /etc/awstats
5.按回车继续
6.按回车完成配置文件的创建

按以上步骤完成 Awstats的安装。

修改配置文件

Awstats 支持基于日期变化的动态日志文件,具体可以看注释。

在awstats的配置文件中修改要统计的日志文件的路径,查找LogFile配置行并修改为正确的位置。

生成awstats的统计数据:

Awstats通过awstats.pl脚本对日志进行分析,每次运行会自动将日志信息中新增加的内容添加到统计数据库中。

#方法一:为指定的网站生成数据

#方法二:为所有网站生成数据

配置 Awstats 自动运行:

设置crond计划任务,以便定时运行日志分析程序

若在 Apache 上,那就可以直接打开网页查看统计了(访问http://www.benet.com/awstats/awstats.pl?config=www.benet.com即可进入awstats的日志分析报告界面)。

2)安装和配置 JAWStats

JAWStats 是基于 Awstats 统计数据的,但其界面更为强悍。

释放与安装:

修改配置文件

官方配置说明见:http://www.jawstats.com/documentation
jawstats 是支持多站点的,每个 $aConfig 对应一个站点,并可以自由切换。

<?php

  //core config parameters

  $sDefaultLanguage      = "zh-cn";//设置默认语言

  $sConfigDefaultView    = "thismonth.all";

  $bConfigChangeSites    = true;//是否可以更换站点

  $bConfigUpdateSites    = true;//是否可以更新统计数据

  $sUpdateSiteFilename   = "xml_update.php";

 

  //individual site configuration

  $aConfig["www.benet.com"]= array(// web站点名称(注意不能乱填)

    "statspath"   => "/var/lib/awstats/",//awstats统计数据目录

    "updatepath"  => "/usr/local/awstats/wwwroot/cgi-bin/awstats.pl/",//用于更新统计数据

    "siteurl"     => "http://www.benet.com",//点击首页标题后会前往这个地址

    "sitename"    => "www.benet.com",//首页标题

    "theme"       =>"default",

    "fadespeed"   => 250,

    "password"    => "my-1st-password",//更新统计数据需要输入这个密码

    "includes"    => "",

    "language"    => "zh-cn"

  );

?>

安装中文语言包

设置JAWStats访问密码

Nginx 支持为目录添加密码认证,若不想所有人都能访问到你的统计结果,那继续下面步骤吧。。。

使用apache 的 htpasswd 来创建密码文件

htpasswd  -c /usr/local/nginx/.htpasswds 用户名

修改nginx.conf文件,添加一个server{}虚拟主机,内容如下:

最后大功告成,输入http://stats.benet.com 便可以访问了。

附:

1、如果访问jawstats监视界面为空白页,可以发现jawstats根目录下面的index.php 里面还有个设置:error_reporting(0) 将其修改为error_reporting(E_ALL)

进行上述修改后,再次打开jawstats就会显示相关报错,不同错误会提示不同的错误提示信息,如果发现提示如下:

Fatal error: Allowed memory size of 134217728bytes exhausted (tried to allocate 96779834 bytes) in/data/web/stats/clsAWStats.phpon line 54

可以看出是为php分配的内存不够产生的问题,更改php.init后如下配置:

将memory_limit = 128M 修改为 memory_limit =256M

2、由于jawstats配置有一个bug 需要需改一下

   #vi index.php(在第260行左右)

   #修改前

  <?

    // output booleans for javascript

    function BooleanToText($bValue) {

 #修改后

<?php

    // output booleans for javascript

function BooleanToText($bValue) {

再次访问http://stats.benet.com就可以显示监视到的日志数据了。

二、rsync远程同步

rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。每次只传送两个文件的不同部分(即支持增量备份),而不是每次都整份传送

rsync 包括如下的一些特性:

能更新整个目录树和文件系统;
有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;

传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
能用rsh、ssh 或直接端口做为传输端口;
支持匿名rsync 同步文件,是理想的镜像工具;

Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsyncserver会打开一个873端口,等待客户端去连接。

Rsync的官方站点位于http://rsync.samba.org

rsync 服务器架设比较简单,可能我们安装好rsync后,并没有发现配置文件,以及rsync服务器启动程序,因为每个管理员可能对rsync 用途不一样,所以一般的发行版只是安装好软件就完事了,让管理员来根据自己的用途和方向来自己架设rsync服务器;因为这个rsync应用比较广,能在同一台主机进行备份工作,还能在不同主机之间进行工作。在不同主机之间的进行备份,是必须架设rsync 服务器的。

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。在下行同步(下载)中,备份源负责提供文档的原始位置,发起端应对该位置具有读取权限;在上行同步(上传)中,备份源负责提供文档的目标位置,发起端应对该位置具有写入权限。如下图所示:

使用rsync同步工具时,备份源既可以是SSH服务器,也可以是以服务器模式运行的rsync程序,下面分别讲解配置SSH备份源、rsync备份源的方法。

本文以RHEL6系统中的rsync-3.0.6-5为例)

1、 配置SSH备份源:

使用SSH协议的好处是能够基于更安全的远程连接,增强备份的保密性。这种方式的备份源最容易配置,只要确认源文件夹的位置,并准备一个备份操作用户即可,以服务A(备份源)为例,若要将网站目录/var/www/html作为备份源,允许用户rget做下行备份,用户rput做上行备份,操作步骤如下:

在备份源服务器(IP地址为:192.168.0.1)上新建备份用户rget、rput,分别用来实现下载、上传操作:

确认sshd服务正常运行,且允许用户rget、rput能访问ssh服务器。在/etc/ssh/sshd_config文件中添如下配置项,只允许rget和rput能远程登录ssh服务器。并重启sshd服务,确保修改生效。

调整备份源所提供文档所在目录的权限(如/var/www/html目录),使rget用户有权读取、rput用户有权写入。在linux系统中,正常创建的目录权限为755,文件权限为644,因此对于rget用户来说,默认权限已经满足下行备份的要求。

但是对于rput用户来说,要能够写入才有权限做上行备份,建议使用ACL访问控制机制设置用户rput对/var/www/html的写入权限。

其中”-R”选项表示递归操作,”-m”选项表示修改权限,default表示在html/目录新建的文档用户rput也具有rwx权限。当需要清除所设置的ACL属性时,setfacl命令的-x或-b选项,分别表示用来个别删除和全部删除。到此SSH备份源配置完毕。

有了备份源服务器以后,就可以使用rsync工具来执行远程同步了。本文讲解的备份操作均在客户机(发起端,IP为:192.168.0.3)执行。实际上备份源与发起端可以是同一台主机,其效果相当于本地备份而不是异地备份。

rsync命令的基本用法:

格式:rsync 【选项】 源文件 目标文件

常见的选项:

-a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD

-r,–recursive 对子目录以递归模式处理

-l,--links 表示拷贝链接文件

-p , --perms 表示保持文件原有权限

-t , --times 表示保持文件原有时间

-g , --group 表示保持文件原有属用户组

-o , --owner 表示保持文件原有属主

-D , --devices 表示块设备文件信息

-z , --compress 表示压缩传输

-H 表示硬连接文件

-A 保留ACL属性信息

-P 显示传输进度

-u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

--port=PORT 指定其他的rsync服务端口

--delete 删除那些目标位置有而原始位置没有的文件

--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes /second

--filter “- 文件名”需要过滤的文件

--exclude= :需要过滤的文件

-v 显示同步过程的详细信息

rsync备份操作示例:

下行同步SSH备份源:

将服务器192.168.0.1中的/var/www/html文件夹与客户机(192.168.0.3)本地的/wwwroot文件夹进行同步,保持文件权限和属性、软/硬链接、ACL属性、删除/wwwroot目录中多余的文件,并在传输过程中进行压缩。

确保备份源服务器中/var/www/html目录下有文件:

在客户机本地创建目标目录:

在客户机上执行rsync命令实现下行同步。

验证同步结果:

上行同步SSH备份源:

将客户机中的/usr/share/doc/HTML/目录中的内容上传同步到SSH服务器的/var/www/html目录下,由于备份用户rput并非root用户,因此”-g”、”-o”等选项将无法使用。

验证结果:在192.168.0.1主机上显示/var/www/html目录下的列表

编写rsync备份脚本:

实际生产环境中的备份工作通常是按计划重复执行的,例如每晚上22:30对服务器网站目录做一次下行同步,定期任务可以交给 crond服务来完成,而实际的备份操作则可以写到shell脚本中。

由于计划备份中的脚本在后台执行,无法根据提示来输入密码,因此编写rsync备份脚本时如何解决交互验证的问题就成为关键所在。

SSH备份源的无交互验证:

对于SSH服务器来说,采用密钥验证是避免交互式登录的最佳方法,只要在客户机中创建无私钥短语的密钥对,然后将公钥文件分发给服务器中的备份用户,就可以实现无密码自动登录了。

在客户机上创建密钥对:

将公钥文件分发给服务器:

在客户机测试SSH的密钥验证:

成功实现免交互自动登录后,再次使用rsync访问SSH备份源时,也就不再提示需要密码验证了,注意,执行脚本的必须是在客户机中创创建密钥对的用户。

编写SSH备份源的shell脚本:

脚本内容如下:

对建好的备份脚本设置适当权限:

创建crond计划任务:

至此SSH备份源的rsync远程备份搭建完毕。

下面接着介绍有关rsync备份源的方法

2、配置rsync备份源:

rsync不仅仅用作远程同步的发起端(客户端),也可以作为守护进程运行,为其他客户机提供备份源,配置rsync备份源需要建立配置文件 rsync.conf,创建备份账户,然后将rsync程序以”- -daemon”选项运行。

建立/etc/rsyncd.conf配置文件:

配置文件rsyncd.conf位于/etc/目录下,需自行建立,配置内容的格式与samba服务器类似,具体可以参考man手册页,下面将以源目录/var/www/html、备份账号backuper为例,介绍其配置方法。

在备份源服务器上创建rsyncd.conf文件。该文件要手工创建。

rsync配置文件介绍:

全局参数:对整个rsync服务器生效,如果模块参数和全局参数冲突,针对冲突模块的模块参数生效

模块参数:定义需要通过rsync输出的目录定义的参数

下面是常见的全局配置参数,

port:指定后台程序使用的端口号,默认为873。

uid:该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是" nobody" 。

gid:该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为" nobody" 。

max connections:指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

lock file:指定支持maxconnections参数的锁文件,默认值是/var/run/rsyncd.lock。

motd file:" motdfile" 参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。

log file:" log file" 指定rsync的日志文件,而不将日志发送给syslog。

pid file:指定rsync的pid文件,通常指定为“/var/run/rsyncd.pid”,存放进程ID的文件位置。

hosts allow = 单个IP地址或网络地址   //允许访问的客户机地址

下面是常见的模块配置参数

主要是定义服务器哪个目录要被同步输出。

其格式必须为“[共享模块名]”形式,这个名字就是在rsync客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过path来指定的。

Comment:给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

Path:指定该模块的供备份的目录树路径,该参数是必须指定的。

read only :yes为只允许下载,no为可以下载和上传文件到服务器

exclude:用来指定多个由空格隔开的多个文件或目录(相对路径),将其添加到exclude列表中。这等同于在客户端命令中使用—exclude或----filter来指定某些文件或目录不下载或上传(既不可访问)

exclude from:指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义,每个文件或目录需要占用一行

include: 用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用--include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。

include from:指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users:该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果" auth users" 被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在" secrets file" 选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file:该选项指定一个包含定义用户名:密码对的文件。只有在" authusers" 被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,注意:该文件的权限一定要是600,否则客户端将不能连接服务器。

hosts allow:指定哪些IP的客户允许连接该模块。定义可以是以下形式:

单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,

整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0

“*”则表示所有,默认是允许所有主机连接。

hosts deny:指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。

list:该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。

Timeout:通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。

创建rsyncd.conf文件:

内容如下:

 

基于安全性考虑,对于rsync 的备份源最好仅允许以只读方式做下行同步,若确实需要做上行同步时,建议改用SSH备份源。另外,下行备份可以采用匿名的方式,只要将其中的”auth  users”和”secrets  file”配置记录去掉就可以了。

为备份账户创建数据文件:

根据上一步的设置,创建账号数据文件,添加一行用户记录,以冒号分隔,用户名称为backuper,密码为pwd123。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。

在该文件中添加用户名和密码

设置rsyncd_users.db文件的权限为700,权限设置不对的话身份验证会失败

与配置SSH备份源类似,备份用户backuper也需要对源目录/var/www/html/有相应的读取权限。实际上只要other组有读取权限,则备份用户backuper和运行用户nobody也就有了读取权限了。

启动rsync服务程序,执行”rsync  --daemon”命令就可以启动rsync服务,以独立监听服务的方式运行,若要关闭rsync服务,可以采用kill进程的方式。

将”rsync  --daemon”保存到/etc/rc.local文件中,确保系统启动后自动启动rsync服务。

注:在iptables防火墙上创建规则允许873端口的通信:

上面启动rsync服务程序是通过”rsync  --daemon”方式启动rsync服务。考虑到异地备份的特性,通常并不需要全天不间断运行,最好只是在有客户机连接的时候才启用,因此可以将rsync交给超级服务xinetd管理,只要修改相应配置并启动xinetd服务,就可以提供rsync服务了。也就是当xinetd服务接收到客户端的同步请求后,会把rsync同步请求转给rsync程序。

配置方法:

修改后内容如下:

注:将disable = yes 改为no;确信有- -daemon服务选项.

安装xinetd服务软件包:

启动xinetd服务:

修改selinux的布尔值:

至此rsync备份源配置完毕,下面使用rsync备份工具实现备份操作。

格式1:

rsync 选项  用户名@备份源服务器IP::共享模块名   目标目录

格式2:

rsync 选项  rsync://用户名@备份源服务器IP/共享模块名  目标目录

在客户机上执行rsync命令实现下行同步操作:

编写rsync备份脚本:

rsync备份源的无交互验证,对于rsync备份源来说,可使用环境变量RSYNC_PASSWORD来存放密码。执行 rsync备份任务时,会自动读取该变量,并在需要时发送给rsync源服务器来进行验证。如下所示:

Rsync备份脚本如下:

内容如下:

设置x权限:

设置计划任务,在 crond计划任务中按指定计划执行脚本。

到此rsync备份源配置完毕。

3、配置rsync+inotify实时同步:

Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

正因为inotify通知机制由linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步,下面介绍其配置过程。

两台服务器,均为RHEL6系统,IP分别为:192.168.0.1和192.168.0.3,把192.168.0.1服务器上的/var/www/html目录时实同步到192.168.0.3主机上的/wwwroot目录中。

在服务器192.168.0.1上执行下面的相关操作,实现实时同步:

查看是否支持inotify,从kernel 2.6.13开始正式并入内核。

看看是否有/proc/sys/fs/inotify/目录,以确定内核是否支持inotify

在linux内核中,默认的inotify机制提供了三个调控参数:max_queued_events、max_user_instances、max_user_watches。分别表示监控事件队列、最多监控实例数、每个实例最多监控文件数

当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。例如可直接修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为1048576(建议大于监控目标的总文件数)。

在/etc/sysctl.conf文件中添加如下内容:

执行sysctl  -p使修改后的sysctl.conf文件生效。

安装inotify-tools工具,使用inotify机制还需要安装inotify-tools,以便提供inotifywait、inotifywatch辅助工具程序,用来监控、汇总改动情况。

编译安装inotify-tools软件包:

以监控网站目录/var/www/html为例,可以先执行inotifywait命令,然后在另一个终端向/var/www/html目录下添加文件、移动文件,跟踪屏幕输出结果。其中选项”-e”用来指定要监控哪些事件(create,move,delete,modify,attrib是指监听创建移动删除写入属性更改事件),选项”-m”表示持续监控,”-r”表示递归整个目录,”-q”表示简化输出信息。

其他选项的含义:

-a 存档模式
-h
保存硬连接
-z
压缩文件数据在传输
-t
维护修改时间
--delete
删除于多余文件

在192.168.0.1服务器上执行下面的命令,监控/var/www/html的变化情况:

在另一个终端登录,在/var/www/html目录进行相关的操作,回到原来的终端查看监控变化情况。

使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。

编写触发式同步脚本:

为了简单起见,只要检测到变动时执行rsync上行同步操作即可。需要注意的是,当更新较频繁时,应避免并发执行rsync备份(当rsync进程已经存在则忽略本次同步,或根据rsync进程数量来决定是否同步)

先配置好基于密钥身份验证的SSH服务,确保在服务器192.168.0.1主机上使用adminput用户能无交互式远程登录备份主机192.168.0.3(192.168.0.3主机上创建adminput用户并确保adminput用户拥有对目标目录/wwwroot属主和属组权限。chown adminput:adminput /wwwroot),设置adminput用户针对/wwwroot的acl权限。

脚本内容如下:

触发式上行同步的验证过程如下所述

1)      使用rsync工具执行一次上行同步

2)      在192.168.0.1主机上运行/opt/inotify_rsync.sh脚本程序

3)      切换到本机的/var/www/html目录,执行增加、删除、修改文件等操作

4)      查看192.168.0.3备份主机的/wwwroot目录下的变化情况。

至此有关rsync远程同步的所有操作整理完毕,希望能对大家有所帮助。

三、RHEL6有关群集的应用:

群集(或集群)和称呼来自于英文单词cluster,表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。

根据实际企业环境的不同,群集所提供的功能也各不相同,采用的技术细节也可能各有千秋,但无论哪种群集,都至少包括两台节点服务器。而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。根据群集所针对的目标差异,可分为以下三种类型。

负载均衡群集(laod balancecluster):以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发、高负载的整体性能。LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。

高可用群集(high availabilitycluster):以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果。HA的工作方式包括双工、主从两种模式------双工即所有节点同时在线,主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点。

高性能运算群集(high performancecomputer cluster):以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力.通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。

1、负载均衡群集的分层结构:

在典型的负载均衡群集中,包括三个层次的组件,如图所示:

前端至少有一个负载调度器(loadbalancer,或称为director),负责响应并分发来自客户机的访问请求;后端由大量真实服务器(real server)构成服务器池(serverpool),提供实际的应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明的;为了保持服务的一致性,所有节点使用共享存储设备。

第一层,负载调度器:这是访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP(virtual IP,虚拟IP)地址,也称为群集IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后平滑替换至备用调度器,确保高可用性。

第二层,服务器池:群集所提供的应用服务(如HTTP、FTP)由服务器池承担,其中的每个节点具有独立的RIP(real IP,真实IP)地址,只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等侍错误排除以后再重新纳入服务器池。

第三层,共享存储:为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的纺一性,在linux/unix环境中,共享存储可以使用NAS设备或者提供NFS共享服务的专用服务器。

负载均衡的工作模式:

关于群集的负载调度技术,可以基于IP、端口、内容等进行分发,其中基于IP的负载调度是效果最高的。基于IP的负载均衡模式中,常见的有地址转换(NAT)、IP隧道(TUN)、直接路由(DR)这三种工作模式。

地址转换:简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。服务器节点使用私有IP地址。与负载调度器位于同一个物理网络,安全性要优于其他两种方式。

IP隧道(IP  TUNNEL):简称TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的INTERNET连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置。具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。

直接路由(direct routing):简称DR模式,采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。

以上三种工作模式中,NAT方式只需要一个公网IP地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式,相比较而言,DR和TUN模式的负载能力更强大,适用范围更广,但节点的安全性要稍差一些。

LVS虚拟服务器:

 Linux  virtual server是针对LINUX内核开发的一个负载均衡项目。LVS实际上相当于基于IP地址的虚拟化应用。LVS现在已成为LINUX内核的一部分,默认编译为ip_vs模块,必要时能够自动调用,在RHEL6系统中,以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息。

建议将加载ip_vs模块保存到/etc/rc.local文件中。

下面将介绍LVS所支持的主要负载调度算法,以及在LVS负载均衡调度器上如何使用ipvsadm管理工具

LVS的负载调度算法:

轮询(rr):将收到的访问请求按照顺序轮流分配给群集中的各个节点(真实服务器),均等地对侍每一台服务器,而不管服务器实际的连接数和系统负载。

加权轮询(wrr):根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重。这样可以保证处理能力强的服务器承担更多的访问流量。

最少连接(lc):根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有服务器节点性能相近,采用这种方式可以更好地均衡负载。

加权最少连接(wlc):在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例的活动连接负载。

ipvsadm是在负载调度器上使用的LVS群集管理工具,通过调用ip_vs模块来添加、删除服务器节点,以及查看群集的运行状态。在RHEL6系统中,需要手动安装ipvsadm-1.25-9软件包。

LVS群集的管理工作主要包括:创建虚拟服务器、添加服务器节点、查看群集节点状态、删除服务器节点、保存负载分配策略等。

案例1:地址转换模式(LVS-NAT)

在NAT模式的群集中,LVS负载调度器是所有节点访问internet的网关服务器,其外网地址172.16.16.172同时也作为整个群集的VIP地址。LVS调度器具有两块网卡,分别连接内外网,如图所示:

对于LVS负载调度器来说,需使用iptables为出站响应配置SNAT转发规则,以便节点服务器能够访问internet。所有的节点服务器(节点1:192.168.7.21节点2:192.168.7.22)、共享存储(192.168.7.250)均位于私有网络内,其默认网关设为LVS负载调度器的内网地址(192.168.7.254)。

在负载调度器主机上配置负载调度器,具体操作如下:

1)配置SNAT转发策略:

修改sysctl.conf文件,开启路由转发功能并使修改生效

在nat表的postrouting规则链上创建SNAT策略

2)  配置负载分配策略:

ipvsadm –l或ipvsadm-L 显示ipvadm的策略

ipvsadm –C 清除ipvsadm原有的策略或service  ipvsadm stop也可以清除策略

创建虚拟服务器和添加服务器节点:

查看保存结果:

注:

第1条命令:清除原有策略;也可以使用service ipvsadm stop清除策略

第2条命令:创建虚拟服务器,群集的VIP地址为172.16.16.172,针对TCP的80端口提供负载分流服务,使用的调度算法为轮询。上述操作中,选项-A表示添加虚拟服务器,-t用来指定VIP地址及TCP端口,-s用来指定负载调度算法------轮询(rr)、加权轮询(wrr),最少连接(lc)、加权最少连接(wlc)。若希望使用保持连接,还应添加”-p  600”选项,其中600为保持时间(秒)。

第3、4条命令:添加服务器节点,为虚拟服务器172.16.16.172添加两个服务器节点,IP地址依次为192.168.7.21、192.168.7.22。上述操作中,选项-a表示添加真实服务器,-t用来指定VIP地址及TCP端口,-r用来指定RIP地址及TCP端口,-m表示使用NAT群集模式(-g: DR模式、-i:TUN模式),-w用来设置权重(权重为0时表示暂停节点)。

第5条命令:保存策略,要停止selinux,否则策略不会被保存;也可以使用ipvsadm-save>/etc/sysconfig/ipvsadm保存策略

第6条命令:设置ipvsadm服务为自动启动

3)  查看群集节点状态

结合选项-L可以列表查看LVS虚拟服务器,可以指定只查看某一个VIP地址(默认为查看所有),结合选项-n将以数字形式显示地址、端口等信息。

查看节点状态:

查看负载连接情况:

上述输出结果中,Forward列下的Masq对应masquerade(地址伪装),表示采用的群集模式为NAT,如果是Route,则表示采用的群集模式为DR 。

在共享存储设备主机上配置共享存储服务(这里使用NFS发布共享服务),具体操作如下:

NFS服务的实现依赖于RPC(remote  process call,远程过程调用)机制,以完成远程到本地的映射过程。在RHEL6系统中,需要安装 nfs-utils、rpcbind软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于RPC支持。

将NFS服务器上的/opt/wwwroot目录共享给群集中服务器节点(这里用到的是RHEL5.5系统)

在/etc/exports配置文件的具体配置如下:

其中客户机地址可以是主机名、IP地址、网段地址,允许使用*或?通配符;权限选项中的rw表示允许读写(ro为只读),sync表示同步写入,no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是root_squash,将作为nfsnobody用户降权对侍)

启动相关服务:

注意防火墙规则的设置,要不就将iptables服务停止。

在节点服务器主机上配置节点服务器,具体操作如下:

所有的节点服务器均使用相同的配置,包括httpd服务端口、网站文档内容。实际上各节点的网站文档可存放在共享存储设备中,从而免去同步的过程。

安装httpd软件包,创建测试网页

修改/etc/fstab文件,实现自动挂载

启动httpd服务

其他服务器节点做相同的备配

注:

1、  每一个节点服务器若开启iptables防火墙,要在防火墙上创建允许http数据流的规则

iptables  -I INPUT –p tcp - -dport 80 –j ACCEPT

2、  LVS负载调度器若开启iptables防火墙,要在防火墙上的INPUT、FORWARD链上创建允许http数据流的规则。

iptables  -I INPUT –p tcp - -dport 80 –j ACCEPT

iptables  -I FORWARD -p tcp  - -dport 80 –j ACCEPT

iptables  -I FORWARD -p tcp  - -sport 80 –j ACCEPT

service iptables save

测试LVS群集:

安排多台测试机,从internet中直接访问http://172.16.16.172,将能够看到由真实服务器提供的网面内容

在LVS负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当

删除服务器节点:

需要从服务器池中删除某一个节点时。使用选项-d。执行删除操作必须指定目标对象,包括节点地址、虚拟IP地址。

需要删除整个虚拟服务器时,使用选项-D并指定虚拟IP地址即可,无需指定节点。

保存负载分配策略

使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略,操作类似于 iptables规则的导出、导入,通过系统服务ipvsadm也可以保存策略,例如:service ipvsadm save;当然也可以快速清除、重建负载分配策略

service ipvsadm stop  //停止服务(清除策略)

service ipvsadm start  //启动服务(重建规则)

案例2:直接路由模式(LVS-DR)

在DR模式的群集中,LVS负载调度器作为群集的访问入口,但不作为网关使用;服务器池中的所有节点都各自接入internet,发送给客户端的WEB响应数据包不需要经过LVS负载调度器。如图所示:

这种方式入站,出站访问数据被分别处理,因此LVS负载调度器和所有的节点服务器都需要配置有VIP地址,以便响应对整个群集的访问。考虚到数据存储的安全性,共享存储设备会放在内部的专用网络中。

在负载调度器主机上配置负载调度器,具体操作如下:

1)  配置虚拟IP地址(VIP)

采用虚拟接口的方式(eth0:0),为网卡eth0绑定VIP地址,以便响应群集访问。配置结果为:eth0  172.16.16.173/24、eth0:0  172.16.16.172/24

修改内容如下:

重启network脚本使修改后的IP生效。

修改sysctl.conf文件,开启路由转发功能并使修改生效

2)  调整/proc响应参数

对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,为了避免网络内的ARP解析出现异常,应该关闭linux内核的重定向参数响应。

在sysctl.conf添加如下内容:

注:上图中参数的含义是发送重定向,0表示关闭此项功能。

执行sysctl  -p使修改生效

3)  配置负载分配策略

在共享存储设备主机上配置共享存储服务(这里使用NFS发布共享服务),具体操作如下:

NFS服务器的IP:192.168.7.250,由于NFS服务器的IP和节点服务器(节点1:172.16.16.177,节点2:172.16.16.178)不在同一网段,所以在测试时,NFS服务器和各节点服务器的网关各自指向自已,以便能正常通信。(或者WEB服务器池中每个节点都添加两块网卡,一块网卡用于和internet通信,另一块网卡用于和NFS通信)

修改/etc/exports文件,内容如下:

允许172.16.16.0/24网段的主机访问NFS的共享。

其他略,参考案例1:地址转换模式

在节点服务器主机上配置节点服务器,具体操作如下:

使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突。除此之外,WEB服务的配置与NAT方式类似。

1)  配置虚拟IP地址(VIP)-----节点服务器1的配置

在每个节点服务器,同样需要具有VIP地址172.16.16.172,但此地址仅用作发送WEB响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚拟接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地以避免通信紊乱。

修改内容如下:

//特别注意:子网掩码必须为全1

重启network脚本使修改后的IP生效。

添加VIP本地访问路由:

2)  调整/proc响应参数

在sysctl.conf添加如下内容:

注:上图中参数的含义:

net.ipv4.conf.default.arp_ignore = 1 net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.lo.arp_ignore = 1
arp_ignore:定义了网卡在响应外部ARP请求时候的响应级别
0:默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。

net.ipv4.conf.default.arp_announce = 0net.ipv4.conf.all.arp_announce = 0

net.ipv4.conf.lo.arp_announce = 0

定义了网卡在向外宣告自己的MAC-IP时候的限制级别
有三个值:
0:默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1:尽量避免响应ARP请求中MAC不是本网卡的,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应
2:总是使用最合适的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应。

执行sysctl  -p使修改生效

3)  安装httpd,创建测试页(略,采用和NAT模式一样设置),启用httpd服务程序

安装httpd软件包,创建测试网页

修改/etc/fstab文件,实现自动挂载

其他服务器节点做相同的备配,不再重复叙述。

测试LVS群集:

安排多台测试机,从internet中直接访问http://172.16.16.172,将能够看到由真实服务器提供的网面内容

在LVS负载调度器中,通过查看节点状态可以观察当前的负载分配情况,对于轮询算法来说,每个节点所获得的连接负载应大致相当

至此有关LVS负载均衡群集配置完毕

案例3:用LVS-DR群集模式实现LAMP(如discuz论坛系统):

拓扑图如下所示:192.168.7.250兼做MYSQL数据库服务器

LVS-DR相关配置参考“案例2:直接路由模式(LVS-DR)”的配置。在172.16.16.177和172.16.16.178上安装httpd 和php的相关软件包(yum  –y  install httpd  php-*)并修改httpd.conf文件支持php网页,在192.168.7.250主机上安装mysql(yum  -y install  mysql-*),这里主要介绍有关MYSQL数据库服务器的设置。因为web服务器与mysql数据库服务器不在一台主机上,所以要在mysql服务器上创建数据库用户授权允许在172.16.16.0/255.255.255.0 网段的主机远程访问mysql数据库。

以上两条语句的含义:第1条语句是创建bbsdb数据库;第2条语句创建runbbs用户并授权该用户从172.16.16.0/255.255.255.0网段的主机远程访问MYSQL服务器中的bbsdb数据库并对bbsdb库中的所有表具有所有权限。

GRANT ALL ON *.* TO admin@’%’ IDENTIFIED BY ‘pwd123’;

“%”字符起通配符作用,与LIKE模式匹配的含义相同。在上述语句中,它意味着“任何主机”。这是建立用户最简单的方法,但也是最不安全的。

在WEB服务器池中的某一个节点上释放discuz的压缩包并将upload目录移动或复制到 /var/www/html目录并重命名为bbs,打开浏览器安装discuz,由于web服务器要通过网络连接mysql数据库,如果web服务器池的WEB节点开启了selinux,要在每个web节点上修改selinux的布尔值。如下图:

安装后就可以在测试主机通过访问http://172.16.16.172/bbs访问discuz论坛了。

2、Keepalived双机热备

Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健检查功能,如判断LVS负载调度器、节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集。在非LVS群集环境中使用时Keepalived也可以作为热备软件使用。

Keepalived采用VRRP(virtual  router  redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案-----由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。

热备组内的每台服务器都可以成为主服务器,虚拟IP地址(VIP)可以在热备组内的服务器之间进行转移,所以也称为漂移IP地址,使用Keepalived时,漂移地址的实现不需要手动建立虚拟接口配置文件(如eth0:0),而是由Keepalived根据配置文件自动管理。

案例:负载均衡+高可用群集(LVS-DR+HA):拓扑图如下所示

 

上图设计目的是用Keepalived构建高可用性的LVS负载均衡群集并实现后台的mysql数据库服务器的双机热备功能。使用Keepalived构建LVS群集更加简便易用,主要优势体现在:对LVS负载调度器实现热备切换,提高可用性,对WEB服务器池中的节点进行分健康检查,自动移除失败节点,恢复后再重新加入。

在基于LVS-Keepalived实现的LVS群集结构中,至少包括两台热备的负载调度器,两台以上的节点服务器,本例将以DR模式的LVS群集为基础(即在案例3的基础上),增加一台从负载调度器,使用Keepalived来实现主、从调度器的热备及mysql数据库的热备,从而构建兼有负载均衡、高可用两种能力的LVS网站群集平台。

实验环境:参照上图可知每台主机网卡的IP地址,如下所示:共7台主机

VIP(虚拟IP地址):172.16.16.172/24

主调度器:eth0  172.16.16.173/24   eth1: 192.168.7.173/24

从调度器:eth0  172.16.16.174/24   eth1: 192.168.7.174/24

WEB节点1:  172.16.16.177/24    eth1:  192.168.7.177/24

WEB节点2:  172.16.16.178/24    eth1: 192.168.7.178/24

NFS共享存储:eth0   192.168.7.250/24

MYSQL数据库:eth0   192.168.7.201/24

MYSQL数据库:eth0   192.168.7.202/24

MYSQL数据库的VIP(虚拟IP地址):192.168.7.200/24

具体操作步骤如下:以下有关LVS+HA的相关配置是基于“案例3:用LVS-DR群集模式实现LAMP”的实验的基础上实现的。所以有关LVS-DR的相关配置就不再详细介绍了。

1、LVS+HA---调度器组中的主、从调度器配置(主/从)

查看主调度器网卡接口IP地址:

查看从调度器网卡接口IP地址:

1)主服务器的配置:

安装keepalived软件包与服务控制

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库,除此之外,在LVS群集环境中应用时,也需要用到ipvsadm管理工具。

安装ipvsadm软件包:

编译安装Keepalived

使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行make、make install进行安装。

使用keepalived服务

执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理了。

主服务器的配置

Keepalived服务的配置目录位于/etc/keepalived。其中keepalived.conf是主配置文件,另外包括一个子目录samples/,提供了许多配置样列作为参考。在keepalived的配置文件中,使用”global_defs {……}”区段指定全局参数。使用”vrrp_instance  实例名称 {……}”区段指定VRRP热备参数,注释文字以”!”符号开头。

相关配置及主要配置项解释如下:

! Configuration File for keepalived        #!表示注释

global_defs {

  notification_email {

       root@example.com  #接收警报的 email 地址,可以添加多个

  }

  notification_email_from root@localhost

  smtp_server 127.0.0.1  #使用本机转发 email

  smtp_connect_timeout 30

  router_id  LVS_DEVEL  #load balancer 的标识 ID,即本服务器的名称标识

}

vrrp_instance  VI_1 {    #定义VRRP热备实例

   state MASTER   #热备状态,MASTER表示主服务器;SLAVE表示备用服务器;当有多台备用的服务器,热备状态改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态

   interface eth0   #HA 监测网络接口即承载VIP地址的物理接口

   virtual_router_id 50   #虚拟路由器的ID号。主、备机的virtual_router_id 必须相同

   priority 150    #主机的优先级,数值越大优先能越高。备份机改为 50

   advert_int 1  #主备之间的通告间隔秒数(心跳频率)

   authentication {   #认证信息,每个热备组保持一致

       auth_type PASS   #认证类型,主备切换时的验证

       auth_pass 1111   #密码字串

   }

   virtual_ipaddress {    #指定漂移地址(VIP),可以有多个

       172.16.16.172    #HA 虚拟 ip,可加多个

   }

}

virtual_server 172.16.16.172 80 {  #虚拟服务器地址(VIP)、端口

   delay_loop 6    #健康检查的间隔时间(秒),每隔 6 秒查询 realserver状态

   lb_algo rr    #lvs 调度算法,这里使用轮询

   lb_kind DR   #lvs 负载均衡机制,这里使用直连路由

!   persistence_timeout  60  #同一 IP 的连接 60 秒内被分配到同一台 realserver

   protocol TCP  #用 TCP 协议检查 realserver 状态

   real_server 172.16.16.177  80 {  #第一个WEB节点的地址、端口

       weight 1    #节点的权重

       TCP_CHECK {    #健康检查方式

            connect_port 80  #检查的目标端口

            connect_timeout 3  #故障重试秒数(即连接超时)

            nb_get_retry 3  #重试延迟(即重试次数)

            delay_before_retry 3  #重试间隔(秒)

       }

   }

   real_server 172.16.16.178  80 {  #第二个WEB节点的地址、端口

       weight 1

       TCP_CHECK {

            connect_port 80

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

       }

   }

}

配置主调度器:修改keepalived.conf文件中的全局参数、热备参数、WEB服务器池配置,相关配置参数如下图:

重新启动keepalived服务

2)配置从调度器:

从调度器的配置与主调度器基本相同,也包括全局参数、热备参数、服务器池配置,只需要调整router_id、state、prority参数即可,其余内容完全相同,配置完成以后重启keepalived服务。

安装keepalived软件包与服务控制

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库,除此之外,在LVS群集环境中应用时,也需要用到ipvsadm管理工具。

安装ipvsadm软件包:

编译安装Keepalived

使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行make、make install进行安装。

使用keepalived服务

执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理了。

配置从调度器:修改keepalived.conf文件,只修改红线标注的参数,其他参数和主调度器的配置文件完全一样。修改的地方如下图所示:

重新启动keepalived服务

在同一个keepalived热备组内,所有服务器的keepalived配置文件基本相同。不同之处主要在于服务器的名称标识、热备状态、优先级。

服务器的名称标识(router_id):建议为每个参与热备的服务器指定不同的名称

热备状态(state):至少应有一台主服务器,状态设为MASTER;可以有多台备用的服务器,将状态设为BACKUP.

优先级(priority):数值越大则取得VIP控制权的优先级越高,回此主服务器的优先级应设为最高;其他备用服务器的优先级可依次递减,但不要相同,以免在争夺VIP控制权时发生冲突。

3)测试主、从调度器:(我在测试前事先将主从调度器的selinux关闭和iptables规则清空)

当启动keepalived服务后,实际状态为MASTER的主服务器取得VIP控制权,并将eth0接口自动添加VIP地址,通过ip命令可以查看(注意:ifconfig命令看不到)

查看主服器的eth0接口信息:

从调度器服务器上启动keepalived服务,此时主服务器仍然在线,VIP地址实际上仍然由主服务器控制,其他服务器处于备用状态,因此在备用服务器中将不会为eth0接口添加VIP地址。

此时查看从服务器的eth0接口信息:

Keepalived的日志消息保存在/var/log/messages文件中,在测试主、从故障自动切换功能时,可以跟踪此日志文件来观察热备状态的变化。以连通性测为例

在internet的测试机上执行ping  172.16.16.172  –t,(172.16.16.172为VIP地址),能够正常ping通,说明主服务器以接管VIP地址,并及时响应客户机的请求。

禁用主服务器的eth0网卡,发现ping测试会中断3~4个包即恢复正常,说明已有其他服务器接替VIP地址,并及时响应客户机的请求。

重新启用主服务器的eth0网卡,发现ping测试再次中断3~4个包即恢复正常,说明主服务器已恢复正常,并夺回VIP地址的控制权。

在这述过程中可以查看日志记录来了解MASTER、SLAVE状态的迁移记录。

2、LVS+HA ----配置负载调度器(ipvsadm)

要在主、从负载调度器主机上分别配置负载调度器,这里使用的是LVS-DR模式,需要调整/proc系统的ARP响应参数外还需要本置负载均衡策略,详细配置参考我在前面介绍的LVS-DR的有关设置。

3、LVS+HA ---配置服务器池中的WEB节点服务器(172.16.16.177和172.16.16.178)

根据所选择的群集工作模式不同(DR或NAT),节点服务器的配置也有些差异。具体参考前面有关LVS的配置。

我这里是以DR模式为例。并且LVS-DR+HA这个实验我是在“案例3:用LVS-DR群集模式实现LAMP”的基础上做的,所以WEB节点的配置和LVS-DR配置是一样的。

相关配置略(请参考前面的LVS-DR配置)这里不再详述了。

4、LVS+HA---实现MYSQL数据库的高可用性(HA)

Mysql双主高可用性:

系统环境:RHEL6.0
VIP 192.168.7.200
real server1 192.168.7.201
real server2 192.168.7.202

复制概述

Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

mysql支持的复制类型:

1.基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。
一旦发现没法精确复制时, 会自动选着基于行的复制。
2.基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
3.混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。

复制解决的问题

MySQL复制技术有以下一些特点:
(1) 数据分布 (Datadistribution )
(2) 负载平衡(load balancing)
(3) 备份(Backups)
(4) 高可用性和容错行 Highavailability and failover

复制如何工作

整体上来说,复制有3个步骤:

(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变反映它自己的数据。

下图描述了复制的过程:

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slavemasterbinary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlogdump processBinlog dump processmaster的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
SQL slave thread
SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
复制配置:

1)server1(192.168.7.201)和server2(192.168.7.202)安装好mysql并修改配置文件:
yum -y install mysql-*

servicemysqld start

chkconfigmysqld on
vi /etc/my.cnf:

添加如下内容:
[mysqld]
log-bin=MySQL-bin     //启用二进制日志

server-id=1  //数据库ID号, 为1时表示为Master,其中master_id必须为1到231之间的一个正整数值, 每个同步服务器都必须设定一个唯一的编号,否则同步就不能正常运行了;

##在server2上配置为server-id=2

修改后在server1和server2主机上重启mysqld服务

2)server1和server2相互设置为主从同步(双主)

在Server1主机上的设置:

//建立一个帐户cluster,并且允许从任何地址上来登陆,密码是cluster。

在Server2主机上的设置:

在server2和server1上执行相反的操作,使其互为主从,具体操作如下图所示:

在Server2主机上的设置:

在Server1主机上的设置:

可以在my.cnf文件中添加“binlog_do_db=数据库名”配置项(可以添加多个)来指定要同步的数据库,有关my.cnf中有关其他同步的配置项请自行查看相关文档。

若主MYSQL服务器已经存在,只是后期才搭建从MYSQL服务器,在置配数据同步前应先将主MYSQL服务器的要同步的数据库拷贝到从MYSQL服务器上(如先在主MYSQL上备份数据库,再用备份在从MYSQL服务器上恢复)

3)在server1和server2上安装软件包keepalived

安装keepalived软件包与服务控制

在编译安装Keepalived之前,必须先安装内核开发包kernel-devel以及openssl-devel、popt-devel等支持库。

编译安装Keepalived

使用指定的linux内核位置对keepalived进行配置,并将安装路径指定为根目录,这样就无需额外创建链接文件了,配置完成后,依次执行make、make install进行安装。

使用keepalived服务

执行make install操作之后,会自动生成/etc/init.d/keepalived脚本文件,但还需要手动添加为系统服务,这样就可以使用service、chkconfig工具来对keepalived服务程序进行管理了。

4)修改server1/server2配置文件

Server1主机上的配置文件如下图:

vi/etc/keepalived/keepalived.conf:

! Configuration Filefor keepalived

global_defs {

     router_id MYSQL-HA    ##确保和server2相同

}

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51   ##确保和server2相同,同网内不同集群此项必须不同,否则发生冲突

    priority 100   ##此处server2上设置为50

    advert_int 1

    nopreempt ##不抢占,只在priority高的server1上设置,server2上此项注释掉

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.7.200

    }

}

virtual_server192.168.7.200 3306 {

    delay_loop 2

    lb_algo wrr

    lb_kind DR

    persistence_timeout 60

    protocol TCP

    real_server 192.168.7.201 3306 {

##server2上此处改为192.168.7.202(即server2本机ip)

        weight 3

        notify_down /etcl/keepalived/bin/mysql.sh

            TCP_CHECK {

            connect_timeout 10

            nb_get_retry 3

            delay_before_retry 3

            connect_port 3306

        }

    }

}

Server1主机上有关keepalived.conf文件的具体配置如下:

Server2主机的keepalived.conf参考上面的描述修改。

可以使用scp命令把server1主机上配置好的keepalived.conf文件拷贝到server2主机,只要做简单修改即可,如下图所示:

5)server1和server2上都添加此检测脚本,作用是当mysql停止工作时自动关闭本机的keepalived,从而实现将故障机器踢出(因每台机器上keepalived只添加了本机为realserver).

当mysqld正常启动起来后,要手动启动keepalived服务。

vi /etc/keepalived /mysql.sh,内容如下:

vi /etc/rc.local:

modprobe ip_vs  ##此模块如果无法自动加载则需手动加载

server1和server2启动keepalived守护进程.

/etc/init.d/keepalivedstart

6)测试

在server1上创建一个测试数据库并在数据库中创建一个表,此时在server2上就会自动同步在server1上已创建好的库和表,同样在server2上对数据库或表做任何修改也会同步到server1上。这说明mysql的主从同步实现了

在server1和server2分别执行ip  addr  show dev eth0命令可以看到server1和server2同时获得VIP(群集虚拟IP)的控制权。这说明双主群集实现了。

7)WEB服务器池的某一个节点上重新安装discuz

在server1或server2数据库服务器上创建discuz所用的数据库bbsdb(只需在其中一个 mysql服务器上创建即可)

因为web服务器与mysql数据库服务器不在一台主机上,所以要在mysql服务器server1或server2上创建数据库用户授权允许在192.168.7.0/255.255.255.0 网段的主机远程访问mysql数据库。(只需在其中一个 mysql服务器上创建即可)

Discuz安装过装略,请参考前面的相关设置,这里不再详细介绍

到此有关LVS+HA群集全部讲解完毕。

 

0 0
原创粉丝点击