本帖最后由 liang 于 2016-4-26 21:54 编辑
网站业务架构演变过程
http://www.apelearn.com/bbs/foru ... d=8644&fromuid=6493
阅读上面的文章后做的实验
实验1:一台WEB服务器一台mysql服务器
http://www.apelearn.com/bbs/foru ... =11876&fromuid=6493
实验2:web服务器添加memcached
http://www.apelearn.com/bbs/foru ... =11884&fromuid=6493
实验3:两台Web服务器+mysql主从
http://www.apelearn.com/bbs/thread-11903-1-1.html
网站业务架构演变过程
http://www.apelearn.com/bbs/foru ... d=8644&fromuid=6493
阅读上面的文章后做的实验
实验1:一台WEB服务器一台mysql服务器
http://www.apelearn.com/bbs/foru ... =11876&fromuid=6493
实验2:web服务器添加memcached
http://www.apelearn.com/bbs/foru ... =11884&fromuid=6493
实验3:两台Web服务器+mysql主从
http://www.apelearn.com/bbs/thread-11903-1-1.html
实验四:HA高可用+ngixg负载均衡+mysql主从
实验三中使用DNS轮询负载均衡,当一台web出问题会有一半的用户无法访问,所以在实验三的基础上增加两台服务器,做HA高可用,Nginx负载均衡,停掉mysql-m服务器中的DNS
HA-master eth0192.168.2.16 eth1 192.168.5.109 hearbeat nginx
HA-slave eth0192.168.2.17 eth1 192.168.5.110 hearbeat nginx
web1 eth0192.168.2.128 eth1 192.168.5.104 LNMP+NFS_server
web2 eth0 192.168.2.9 eth1 192.168.5.105 LNMP+NFS_client
mysql-m eth0 192.168.2.5 eth1 192.168.5.101 Mysql
mysql-s eth0 192.168.2.10 eth1 192.168.5.108 Mysql
eth0 都为外网IP,eth1都为内网IP
一,安装之前
(1)关闭防火墙
iptables -F;\
service iptables save
关闭selinux
setenforce 0;\
sed -i 's/SELINUX=enforcing/SELINUX=disabled/'/etc/selinux/config
(2)配置host,主和从
vim /etc/hosts
192.168.2.16 HA-master ##hostname 为uname –n的名字
192.168.2.17 HA-slave
(3)安装扩展源epel,主和从
http://mirrors.aliyun.com/repo/ 阿里云的epel源
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo 6.x
yum clean all;\
yum makecache
yum install -y epel-release
二,主、备上配置nginx做负载均衡
yum install -y nginx
1,主,备配置
vim /etc/nginx/conf.d/lb.conf
upstream test { ##定义后端RS,test为自定以名,和proxy_pass 保持一致
#ip_hash; ##调度算法,一个用户请求被分到固定RS上,避免session丢失(实验时访问IP是不变的可注释)
server192.168.2.3:80 weight=2; ##默认为80端口,权重2,
server192.168.2.8:80 weight=1;
}
server {
listen 80;
server_namewww.test.com;
location / {
proxy_pass http://test/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
清除防火墙
ipvsadm -C
iptables -t nat -F
iptables –F
三,安装配置安装heartbeat,主和备
yum install –y heartbeat* libnet
1,主上配置
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d
cd /etc/ha.d
(1)vim authkeys ##修改验证文件
auth 3 ##修改验证级别
#1 crc
#2 sha1 HI!
3 md5 Hello! ##打开第三级别
chmod 600 authkeys ##修改权限
(2)vim haresources
#node1 10.0.0.170 Filesystem::/dev/sda1::/data1::ext2 修改这行为
HA-master 172.16.1.110/24/eth0:0 nginx ##设置动态虚拟IP
(3)vim ha.cf 修改以下内容
debugfile /var/log/ha-debug ##调试信息
logfile /var/log/ha-log ##日志文件
logfacility local0 ##日志级别
keepalive 2 ##心跳时间间隔,多长探测一次,单位秒
deadtime 30 ##超出多久没有到对方心跳,默认对方以死亡
warntime 10 ##超出多久没有到对方心跳,发出警告并记录日志
initdead 60 ##对方重启等待时间
udpport 694 ##广播通信端口,默认694
ucast eth1 192.168.5.110 ##设置对方心跳检测的网卡和IP
auto_failback on ##自动恢复
node HA-master ##指定主从,名字要和uname -n的结果一致
node HA-slave
ping 192.168.5.2
respawn hacluster /usr/lib64/heartbeat/ipfail ##指定与heartbeat一同启动的进程,注意路径
三个文件修改后,拷贝到备
scp authkeys ha.cf haresources HA-slave:/etc/ha.d/
2,备上配置
cd /etc/ha.d/
vim ha.cf
ucast eth1 192.168.5.109 修改对方的心跳检测IP
3,启动heartbeat
先主,后备
ps aux |grep nginx ##查看nginx是否启动
service heartbeat start ##启动会较慢
ifconfig 查是否有eth0:0: 172.16.1.110
四,测试
1, 测试负载均衡
Web1与Web2是做NFS根目录共享,所以先卸载web2/NFS_client上挂载的网站根目录
umount 192.168.5.104:/data/www/
在web1,web2 网在根目录建立测试文件
echo “web11111”>1.txt
echo “web22222”>1.txt
windows上修改hosts
172.16.1.110 www.test.com
浏览器中访问 www.test.com/1.txt 查看是否安设置的权重分发访问
或者vim /etc/hosts 172.16.1.110 www.test.com
curl www.test.com/1.txt
重新挂载NFS共享目录
mount -t nfs -onolock,nfsvers=3192.168.5.104:/data/www/ /data/www/
2,测试高可用
测试1
主上故意禁ping
iptables -I INPUT -p icmp -j DROP
测试2
主上停止heartbeat服务
service heartbeat stop
测试脑裂
主和备上都down掉eth1网卡
ifdown eth1
最后的测试过程感觉不怎么好,过程有误的地方请指正
编辑回复