1、结合图形描述LVS的工作原理;
NAT模型
NAT模型其实就是通过网络地址转换来实现负载均衡的,它的工作方式几乎跟iptables 中的DNAT一模一样的,NAT模型的工作方式:
1.用户请求VIP(也就是是CIP请求VIP)
2,Director Server 收到用户的请求后,发现源地址为CIP请求的目标地址为VIP,那么Dorector Server会认为用户请求的是一个集群服务,那么Director Server 会根据此前设定好的调度算法将用户请求负载给某台Real Server ,假如说此时Director Server 根据调度算法的结果会将请求分摊到Real Server 2上去,那么Director Server 会将用户的请求报文中的目标地址,从原来的VIP改为Real Server 2的IP,然后再转发给Real Server 2
3,此时Real Server 1收到一个源地址为CIP目标地址为自己的请求,那么Real Server 1处理好请求后会将一个源地址为自己目标地址为CIP的数据包通过Director Server 发出去,
4.当Driector Server收到一个源地址为Real Server 1 的IP 目标地址为CIP的数据包,此时Driector Server 会将源地址修改为VIP,然后再将数据包发送给用户,
DR模型:
1.director必须与realserver位于同一个网络。
2.director只负责处理入站请求。而响应报文则由realserver直接返回给client端。大大节省director的资源。
3.不能做端口映射
整个工作原理如下:
客户端通过路由器将请求交给director的VIP。director接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的ip地址不变。realserver接收请求,并直接响应客户端。这时,便出现一个问题:director此时与realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是vip而并非自己,便会丢弃,而不会响应。。为了解决这个问题,我们需要在所有realserver上都配上VIP。这时会出现第二个问题:director与realserver位于同一个网络中,当出现多个vip时,通过arp广播,整个网络必然混乱,我们无法保证客户端的请求一定会发往director。为保证当客户端请求抵达网络时,只有director来响应请求。我们需要realserver忽略对vip的arp请求,并且在arp通告时,不通告vip地址。我们需要配置如下两个内核参数:
arp_ignore :当一台主机某个接口接收到arp请求时,这台机上的ip地址是否通过该接口响应给对应请求的限制级别。简单来说,当这台主机有多块网卡,或者有多个ip地址时,是否通过该接口将所有ip地址响应给对应的请求。
0:不作任何限制。将所有本机的ip地址都响应给对应请求。
1:当请求的ip就配置在本接口上时,才予以响应。换句话说,就是只响应当前接口的ip地址。
arp_announce:当一台主机加入到一个新的网络。会发出ARP通告,向网络中其他主机通告自己的ip地址及mac等信息。arp_anounce就用来限制通告的级别。当这台主机有多块网卡或者多个ip地址时,是否通过某一个接口将所有ip地址通告给该网络中的主机。
0:不作任何限制。从任意接口通告所有ip地址。
1:尽可能避免通告非本接口上的ip。
2:只通知本接口的ip。非本接口的ip不予通告。
由此我们亦可知,在realserver上配置vip时显然也不能配置的物理接口的虚接口上,而应该配置在loopback上。
1、当Director收到用户的请求后根据预先设定的调度算法来确定将请求负载到某台Real Server上去,假如说此时根据调度算法的结果,会将请求负载到Real Server 1上面去,此时Director会将数据帧中的目标MAC地址修改为Real Server1的MAC地址,然后再将数据帧发送出去。
2、当Real Server1 收到一个源地址为CIP目标地址为VIP的数据包时,Real Server1发现目标地址为VIP,而自己本地是有VIP的,于是接受数据包并给予处理,当Real Server1处理完请求后,会将一个源地址为VIP目标地址为CIP的数据包发出去,此时的响应请求就不会再经过Director Server了,而是直接响应给用户。
2、搭建一套LVS-DR模型的高性能集群,并实现以下功能:
(1)、wordpress程序通过nfs共享给各个realserver;
(2)、后端realserver中的nginx和php分离
准备:
nod1:192.168.50.178 centos 6.8
nod2:192.168.50.206 centos 6.3
NFS & php-fpm:192.168.50.173 centos 7
directory: 192.168.50.176 centos 6.3
NFS存储:
新建/data目录,并输出为共享:/etc/exports文件如下
安装php-fpm ,修改/etc/php-fpm.d/www.conf
确认监听端口为9000
listen = 192.168.50.173:9000
将白名单注释
;listen.allowed_clients =
分别在nod1和nod2上将共享目录挂载至本地/data
mount -t nfs 192.168.50.173:/data /data
分别在nod1和nod2上安装nginx,修改/etc/nginx/conf.d/default.conf,
新建一个location, 将.php交指php-fpm服务器处理
location ~ \.php$ { #root /data; fastcgi_pass 192.168.50.173:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include /etc/nginx/fastcgi_params; }
编辑/etc/nginx/fastcgi_params,将内容更改为
fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name;
启动nginx服务,并测试phpinfo正常。
在192.168.50.178上安装mysql-server,并新建数据库wp, 新用户pa, 并进行相应授权
下载wordpress程序包,并解压至/data/wp目录下
编辑/data/wp/wp-config.php文件,内容如下
........................................................................... define('DB_NAME', 'wp'); define('DB_USER', 'pa'); define('DB_PASSWORD', '45455654545'); define('DB_HOST', '192.168.50.178'); define('DB_CHARSET', 'utf8'); define('DB_COLLATE', ''); ........................................................................... ?>
#######尝试通过http://192.168.50.178/wp/index.php访问时,出现错误提示"PHP似乎没有安装运行WordPress所必需的MySQL扩展。"在php-fpm机器上安装php-mysql就可以了。
确保两个realserver都能正常访问wordpress后,开始lvs配置,具体配置步骤如下:
nod1 & nod2:
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore ifconfig lo:0 192.168.50.222/32 broadcast 192.168.50.222 up route add -host 192.168.50.222 dev lo:0
director
ifconfig eth0:0 192.168.50.222/32 broadcast 192.168.50.222 up ipvsadm -A -t 192.168.50.222:80 -s rr ipvsadm -a -t 192.168.50.222:80 -r 192.168.50.178 -g ipvsadm -a -t 192.168.50.222:80 -r 192.168.50.206 -g
配置完成后,通过http://192.168.50.222/wp可以正常访问,同时通过iptables -L -n可以看到请求被调度到不同的服务器进行响应
3、基于heartbeat v2 crm实现HA LAMP组合;要求,部署wordpress,用于编辑的文章中的任何数据在节点切换后都能正常访问;
1、实验环境:nod1 192.168.50.206 centos6.8
nod2 192.168.50.178 centos6.3
vip 192.168.50.244
NFS & Mysql 192.168.50.173
2、部署nfs,mysql
编辑192.168.50.173上的/etc/export文件,内容如下
/data 192.168.50.206(rw,no_root_squash)
/data 192.168.50.178(rw,no_root_squash)
安装mysql,新建wordpress数据库,新建wp用户名,并授权外网登录
]# mysql >CREATE DATABASE WP; >GRANT ALL PRIVILEGES ON *.* TO 'pa'@'%'IDENTIFIED BY '454545' WITH GRANT OPTION;3、两台nod机器
挂载nfs至本地/data目录
mount -t nfs 192.168.50.173:/data /data
1、直接yum安装httpd, 此处版本为httpd 2.2
编辑/etc/httpd/conf/httpd, 新建虚拟机,将/data设置为httpd工作目录:
<VirtualHost *:80> ServerAdmin admin@mydome.com DocumentRoot /data ServerName localhost ErrorLog logs/mydome.com-error_log CustomLog logs/mydome.com-access_log common </VirtualHost>
2、、安装fastcgi模块
下载
wget http://www.pccc.com/downloads/apache/current/mod_fastcgi-current.tar.gz
安装
# tar zxvf mod_fastcgi-2.4.6.tar.gz
# cd mod_fastcgi-2.4.6
# cp Makefile.AP2 Makefile
# vim Makefile
修改top_dir目录,64位系统的路径为 /usr/lib64/httpd,32位系统的路径为/usr/lib/httpd
top_dir = /usr/lib64/httpd
#make
#make install
当出现错误:“Makefile:12: /usr/lib64/httpd/build/special.mk: No such file or directory”,执行:
yum install libtool httpd-devel apr-devel apr
加载模块
# vim /etc/httpd/conf/httpd.conf
找到LoadModule部分,添加一行加载语句
…
LoadModule fastcgi_module modules/mod_fastcgi.so
…
3、安装php-fpm
yum install php-fpm
service php-fpm start
chkconfig php-fpm on
netstat -anp |grep php
4、新建php-fpm配置文件
新建/etc/httpd/conf.d/fastcgi.conf,内容如下:
AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /var/www/cgi-bin/php5-fcgi FastCgiExternalServer /var/www/cgi-bin/php5-fcgi -idle-timeout 60 -host 127.0.0.1:9000 -pass-header Authorization编辑/etc/httpd/conf/httpd.conf,添加:
AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps DirectoryIndex index.php index.html5、解压wordpress程序到/data/wp目录,并安装,安装时数据库路径为192.168.50.173
验证通过192.168.50.178/wp和 192.168.50.206/wp可以正常访问
4、安装heartbeat
依赖关系
yum install net-snmp-libs libnet PyXML perl-Time-Date libtool-ltdl
安装hearheat包
rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
编辑/etc/ha.cfg文件:内容如下
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 192.168.50.178 #使用单播,为别一台nod的ip地址
auto_failback on
node nod1
node nod2
ping 192.168.50.1
apiauth ipfail gid=root uid=root
编辑/etc/authkeys文件,内容如下:
auth 2
#1 crc
2 sha1 Hi354fdafdgI!
#3 md5 Hello!
编辑/etc/haresources文件,内容如下
nod1 192.168.50.244 httpd
5、验证heartbeat服务在两台nod机器上启动heartbeat服务:service heartbeat start
在nod1上查看ip addr可以看到vip已经被配置,
在nod1上使用usr/lib64/heartbeat/hb_standby ,将nod1下线为维扩模式,此时vip被取消配置,httpd服务被停止
在nod2上查看vip已经被自动配置,httpd服务自动启动,监听在80端口,heartbeat服务正常。
使用 /usr/lib64/heartbeat/hb_takeover命令,将nod1重新上线
6、验证数据库是共享使用,发表的文章,两个节点内容一致
确保vip被配置在nod1节点上,登录后发,发表一篇文章,前台访问页面如下:
将nod1配置为standby, 确保vip位于nod2上,访问wordpress首页如下:
原创文章,作者:N21-沉舟,如若转载,请注明出处:http://www.178linux.com/58262
评论列表(1条)
写的很棒,完全可以作为范例来展示