一 LVS工作原理
1. lvs-nat模型
lvs-nat:多目标的DNAT, 通过将请求报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT 实现转发。
(1) RIP和DIP必须在同一IP网络,且应该使用私有地址,RS的网络要指向DIP(保证响应报文必须由VS); (2) 请求报文和响应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈; (3) 支持端口映射; (4) VS必须是Linux, RS可以是任意OS.
lvs-nat模型工作原理如图:
2. lvs-dr模型
lvs-dr:通过为请求报文的重新封装一个MAC首部进行转发,源MAC是DIP所在接口的MAC, 目标MAC是挑选出某RS的RIP所在接口的MAC地址,IP首部不会发生变化。
(1) 确保前端路径将目标IP为VIP的请求报文发往Director; 解决方案: 在路由器上静态绑定VIP和Director的MAC地址; 禁止RS响应VIP的ARP请求,禁止RS对VIP进行通告。 (a) arptables; (b) 修改RS的内核参数,并把VIP绑定lo的别名上 arp_ignore, arp_announce. (2) RS的RIP可以使用私有地址,也可以使用公网地址; (3) RS跟Director必须在同一物理网络; (4) 请求报文必须由Director调度,但响应报文必须不能经由Director; (5) 不支持端口映射; (6) RS可以使用大多的OS;
lvs-dr模型工作原理如图:
3. lvs-tun模型
lvs-tun:转发方式:不修改请求报文的IP首部(源IP为CIP, 目标IP为VIP),而是源IP首部之外再封装一个IP首部(源IP为DIP, 目标IP为挑选出的RS的RIP)。
(1) RIP, DIP, VIP全得是公网地址; (2) RS网关不能指向也可能指向DIP; (3) 请求报文经由Director转发,但响应报文将直接发往CIP; (4) 不支持端口映射; (5) RS的OS必须支持隧道功能。
lvs-tun模型工作原理如图:
4. lvs-fullnat
lvs-fullnat:通过同时修改请求报文的源IP地址(CIP—>DIP)和目标地址(VIP—>RIP)进行转发。
(1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通; (2) RS收到的请求报文源IP为DIP, 因此响应报文将直接响应给DIP; (3) 请求和响应报文都经由Director; (4) 支持端口映射。
二 搭建LVS-DR的高性能集群实验
1. 架构描述
通过Director访问调度到RS1和RS2实现负载均衡,另一台服务器负责动态分离及给RS1和RS2提供共享实现数据同步并提供数据库服务。
架构图如下:
2. 环境情况
操作系统:CentOS7.2
Director:ipvsadm
-
VIP:192.168.20.108
-
DIP:192.168.237.128
RS1:nginx
-
RIP:192.168.237.129
RS2:nginx
-
RIP:192.168.237.130
RS3:MariaDB+PHP+NFS
-
IP:192.168.237.131
3. 安装配置
(1) RS1安装配置nginx
#安装nginx yum install nginx #配置nginx vim /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root html; fastcgi_pass 192.168.237.131:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} #启动nginx systemctl start nginx #RS2同RS1安装配置nginx
(2) RS3安装配置MariaDB,NFS及PHH-FPM
#安装MariaDB, NFS, PHP-FPM和PHP yum install mariadb nfs-utils php-fpm php #启动MariaDB systemctl start mariadb #创建共享目录,与RS1和RS2的nginx根目录一致 mkdir -p /usr/share/nginx/html #配置NFS vim /etc/exports /usr/share/nginx/html 192.168.237.0/24(rw,no_root_squash) #启动NFS服务 systemctl start nfs #创建nginx用户,与RS1和RS2上的nginx用户UID和GID一致, nginx的UID为994, GID为996 groupadd -g 996 nginx useradd -u 994 -g nginx -s /sbin/nologin nginx #配置php-fpm vim /etc/php-fpm.d/www.conf listen = 192.168.237.131:9000 listen.allowed_clients = 192.168.237.129,192.168.237.130 user = nginx group = nginx #启动PHP-FPM systemctl start php-fpm
(3) 在RS1和RS2上挂载共享文件
#安装NFS yum install nfs-utils #挂载共享文件 mount 192.168.237.131:/usr/share/nginx/html /usr/share/nginx/html #RS2同RS1操作
(4) 在Director安装配置ipvs
#安装ipvs yum install ipvsadm #增加集群服务 ipvsadm -A -t 192.168.20.108:80 -s rr #配置集群规则 ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.129:80 -g ipvsadm -a -t 192.168.20.108:80 -r 192.168.237.130:80 -g #开启路由转发 echo 1 > /proc/sys/net/ipv4/ip_forward
(5) 在RS1上配置VIP及修改相关内核参数
#修改arp_ignore和arp_announce两个内核参数 echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce #配置VIP ifconfig lo:0 192.168.20.108 netmask 255.255.255.255 broadcast 192.168.20.108 #增加路由 route add -host 192.168.20.108 dev lo:0 #RS2同RS1配置
(6) 创建wordpress数据库并分配权限
#创建数据库 MariaDB [(none)]> create database wordpress; #创建数据库用户、设置密码并分配权限 MariaDB [(none)]> grant all on wordpress.* to 'wordpress'@'192.168.237.131' identified by '123456';
(7) 安装wordpress
#解压目录到nginx根目录 [root@localhost ~]# tar xvzf wordpress-4.5.3-zh_CN.tar.gz -C /usr/share/nginx/html/
在浏览器中输入192.168.237.129/wordpress/wp-admin/setup-config.php
这样就可以进行安装了,就不再具体演示。
不过LVS调度还有些问题,有待进一步研究。
原创文章,作者:N25_zzc,如若转载,请注明出处:http://www.178linux.com/62885