1、结合图形描述LVS的工作原理;
LVS是一种用软件实现的LB集群; 作用于传输层; LVS工作原理:通过Director调度把用户请求按照分配算法分配给后端的Real server,然后由后端Real server响应客户请求; lvs模式分为三种。 lvs-nat: 多目标的DNAT:通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现; (1) RIP和DIP应该使用私网地址,RS的网状应该指向DIP; (2) 请求和响应报文都要经由director转发;极高负载的场景中,Director可能会成为系统瓶颈; (3) 支持端口映射; (4) VS必须为Linux,RS可以是任意的OS; (5) RS的RIP与Director的DIP必须在同一IP网络; lvs-dr: 通过修改请求报文的MAC地址进行转发;IP首部不会发生变化(源IP为CIP,目标IP始终为VIP); (1) 确保前端路由器将目标IP为VIP的请求报文一定会发送给Director; 解决方案: 静态绑定; 禁止RS响应VIP的ARP请求; (a) arptables; (b) 修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应; (2) RS的RIP可以使用私有地址,也可以使用公网地址; (3) RS跟Director必须在同一物理网络中; (4) 请求报文必须由Director调度,但响应报文必须不能经由Director; (5) 不支持端口映射; (6) 各RS可以使用大多数的OS; lvs-tun 转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部这外再次封装一个IP首部(源IP为DIP,目标IP为RIP); (1) RIP,DIP,VIP全得是公网地址; (2) RS的网关不能也不可能指向DIP; (3) 请求报文经由Director调度,但响应报文将直接发给CIP; (4) 不支持端口映射; (5) RS的OS必须支持IP隧道功能; lvs调度后端Real server方法: 根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法;
静态方法:仅根据算法本身进行调度; RR:Round Robin,轮询/论调; WRR:Weighted RR,加权轮询; SH:Source Hashing,源地址哈希;(短链接,需要保持持久链接时使用;如电商购物;把源地址跟原来挑选车来rs绑定,使得下次能继续访问这台rs) DH:Destination Hashing,目标地址哈希; 正向的web代理(缓存)。负载均衡内网用户对外部服务器的请求 哈希目标地址;
动态方法:根据算法及各RS当前的负载状态进行评估调度; LC:least connections,最少链接;(如果没有最少的,根据rs表至上而下轮询) OVerhead=Active*256+Inactive WLC:Weighted LC,加权最少链接; OVerhead=(Active*256+Inactive)/weight SED:Shortest Expections Delay OVerhead=(Active+1)*256+Inactive NQ:Never Queue 每个rs先分配一个,然后再SED LBLC:Locality-Based LC 动态的DH算法; LBLCR:LBLC with Replication, 带复制功能的LBLC;
2、搭建一套LVS-DR模型的高性能集群,并实现以下功能:
(1)、wordpress程序通过nfs共享给各个realserver;
(2)、后端realserver中的nginx和php分离
准备三台服务器,两台Real server(Centos 6.6)分别搭建nginx和php+nfs+wordpress,另一台服务器搭建+Director(Centos 7.1) 所有服务器统一安装编译环境 yum groupinstall "Development Tools" "Server Platform Development" -y
Real server1配置:
IP地址:192.168.10.100做nginx服务器,系统:Centos 6.6选择nginx-1.10.1版本,从官网获取到安装包,放置服务器/root目录下 安装依赖包: yum install -y openssl-devel pcre-devel zlib-devel 做好准备工作下面开始安装 [root@caicai ~]# tar xf nginx-1.10.1.tar.gz [root@caicai ~]# cd nginx-1.10.1[root@caicai ~]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --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 --with-http_ssl_module --with-http_gzip_static_module --with-debug --with-http_stub_status_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/uwsg --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre [root@caicai nginx-1.10.1]# make && make install 编译安装好以后创建用户 [root@caicai ~]# groupadd -r -g 501 nginx [root@caicai ~]# useradd -r -g nginx -u 501 nginx 接下来就可以启动nginx了,但是为了方便我们应该把nginx脚本加入PATH中 [root@caicai ~]# vim /etc/profile.d/nginx.sh export PATH=/usr/local/nginx/sbin:$PATH [root@caicai ~]# exec bash /etc/profile.d/nginx.sh (执行此命令会断开ssh,重新连接就好)配置好以后就可以直接使用nginx命令启动nginx服务了 Ye~! [root@caicai ~]# nginx查看下是否正常启动 [root@caicai ~]# ss -tnl | grep :80LISTEN 0 128 *:80 *:* [root@caicai ~]# lsof -i:80COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 6444 root 6u IPv4 55359 0t0 TCP *:http (LISTEN) nginx 6445 nginx 6u IPv4 55359 0t0 TCP *:http (LISTEN) 待Real server2配置完第4部回来配置: [root@caizhijian ~]# mkdir /www [root@caicai ~]# chown -R nginx:nginx /www/ [root@caicai ~]# chown -R nginx:nginx /www [root@caicai ~]# mount -t nfs 192.168.10.101:/www /www [root@caicai ~]# vim /etc/nginx/nginx.conf location / { root /www; index index.php 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 html; } location ~ \.php$ { root /www; fastcgi_pass 192.168.10.101:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name; include fastcgi_params; } 检查下配置语法是否有问题: [root@caicai ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 没问题reload重新加载一下配置文件: [root@caicai ~]# nginx -s reload
Real server2配置:
IP地址:192.168.10.101 做php服务器 为了方便这里就直接使用yum安装了;
1、安装php-fpm和一些插件 [root@caizhijian ~]# yum install -y php-fpm php-mysql php-mbstring php-gd php-xml 2、编辑配置文件 [root@caizhijian ~]# vim /etc/php-fpm.d/www.conf ;listen.allowed_clients = 127.0.0.1 //注释掉只能本地访问,默认所有ip都可以访问 user = nginx //更改使用的用户 user = nginx //更改使用的组 listen = 192.168.10.101:9000 //修改监控地址 3、开启nfs功能(默认Centos 5以上的版本已经默认安装了,可直接启用) [root@caizhijian ~]# vim /etc/exports /www *(rw) [root@caizhijian ~]# service nfs start 4、新建用户和共享文件 [root@caicai ~]# groupadd -r -g 501 nginx [root@caicai ~]# useradd -r -g nginx -u 501 nginx [root@caizhijian ~]# mkdir /www [root@caicai ~]# chown -R nginx:nginx /www/ [root@caicai ~]# chown -R nginx:nginx /www 5、建测试页做测试 [root@caizhijian ~]# vim /www/index.php <?php phpinfo(); ?> 打浏览器访问http://192.168.10.100测试能否访问6、安装wordpress程序 获取wordpress程序程序包wordpress-4.5.3-zh_CN.tar.gz,放置/root目录下 [root@caizhijian ~]# tar xf wordpress-4.5.3-zh_CN.tar.gz -C /www [root@caizhijian ~]# chown -R nginx:nginx /www 访问下http://192.168.10.100/wordpress
LVS-dr配置:
准备2张网卡配置VIP、DIP VIP地址:192.168.10.99 DIP地址:192.168.10.98 用虚拟机克隆一台Real server1,多装一台nginx服务器做验证命名为Real server3; 设置ip地址为:192.168.10.102 [root@caicai ~]# ifconfig eth1 192.168.10.102 netmask 255.255.255.0 挂载nfs [root@caicai ~]# mount -t nfs 192.168.10.101:/www /usr/local/nginx/html/www/ 在各主机(Director,RS)均需要配置VIP;因此,要解决地址冲突问题,这里采用修改内核参数限制arp响应通告; 建立一个bash脚本分别在Real server1和Real server3上执行 #!/bin/bash case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_annouce echo 1 > /proc/sys/net/ipv4/conf/lo/arp_annouce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_annouce ifconfig lo:0 192.168.10.99 netmask 255.255.255.0 broadcast 192.168.10.99 up route add -host 192.168.10.99 dev lo:0 ;; stop) echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_annouce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_annouce ifconfig lo:0 down ;; esac 接下来配置Director主机 [root@localhost ~]# yum install ipvsadm -y添加规则 [root@localhost ~]# ipvsadm -A -t 192.168.10.99:80 -s rr [root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.100 -g -w 1 [root@localhost ~]# ipvsadm -a -t 192.168.10.99:80 -r 192.168.10.102 -g -w 2 到这就配置完了,还有很多东西需要改进(例如数据库等)
原创文章,作者:N21_志建,如若转载,请注明出处:http://www.178linux.com/56462
评论列表(1条)
赞,又是一位比较超前的。LVS现在的话应该说是四种,课程里面也讲解了这四种的区别和使用场景,建议再细化下~~继续加油~