目录
1.6.5 在从服务器上查询自动同步主服务器的DNS记录。 - 8 -
1.11.1 安装keepalived(主从均需) - 16 -
1.11.2 编辑keepalived配置文件 - 16 -
1.11.3 从机上的keepalived配置 - 18 -
1.13 测试在部署keepalived情况下的域名解析访问 - 23 -
1.14 lvs+keepaived+bind的方案 - 25 -
1.16 部署准备(前面中的web和bind服务需要保留,在这里需要进行测试,不再重复搭建) - 25 -
1.17.1 安装keepalived(主备均需) - 26 -
1.18.3 测试keepalived+lvs的高可用 - 32 -
-
方案预想
本文围绕以下三个方案进行了部署测试
-
采用dns主从方案,适用于中小型场景
-
keepalived+bind,适用于中小型场景
-
lvs+keepalived+bind,使用大型场景
1.2 bind高可用部署
环境
主机IP
主机名
系统
用途
192.168.222.10
dnsmaster
Centos7.6
提供dns服务
192.168.222.11
slaver
Centos7.6
提供dns服务
192.168.222.20
apache
Centos7.6
Web服务器(www.good.cn)
192.168.222.131
Windows2012
Windowserver2012
模拟用户访问客户端
192.168.222.100
vip
keepalived
虚拟IP
192.168.222.200
Lvs+keepalived
Centos7.6
负载均衡服务器
192.168.222.201
Lvs+keepalived
Centos7.6
负载均衡服务器
192.168.222.240
Lvs+keepalive的VIP
虚拟IP
-
-
主从架构图
-
bind主从高可用
为了实现DNS服务器的高可用,在这里采用了著名的DNS软件bind,并采用其自带的主从方案。目标实现在主DNS挂掉的情况下,其从DNS提供正常服务。注意:这里的从服务器可以为多台,例如dns集群。
-
部署前准备
-
关闭linux防火墙和selinux,且设置为开机不启动。确保udp/tcp的53端口可使用。生产中若需要开启,请开放相关的端口和允许相关的IP访问即可。
-
配置yum源和网络,保证三台linux主机网络互通
-
本文档不对技术词语进行详细解释,请自行搜索学习。
-
-
bind主配置
查看当前镜像所带的bind软件包和yum源可下载版本,离线安装请下载好相关安装包。
安装bind需要三个软件包为bind-chroot,bind-utils,bind-utils为调试工具包。
-
安装,采用yum安装
启动
查看状态,或者查看其UDP端口53的状态
-
主配置文件修改
定义bind服务程序的运行,例如开放哪个接口的53号端口用于监听用户的请求,对于哪些用户的请求予以回应。
vim /etc/named.conf
更改为如下内容,详细解释请访问官网https://www.isc.org/bind/
保存后检查错误,无输出则为OK
-
主区域配置文件修改
-
编辑/etc/named.rfc1912.zones文件,在结尾添加,保存。
-
-
主服务配置正向解析
-
复制一份正向解析模板文件,并把域名和IP地址对应数据填写数据配置文件中保存。注意权限。
cd /var/named/ && cp -a named.localhost good-zone
-
编辑good-zone文件,保存如下内容。IP指向为apache服务器地址,字段意义请查阅官网资料。
-
重启named服务,没有报错则正常
systemctl restart named
-
配置完毕后,使用下列命令检查配置文件是否生效
-
-
从服务器安装bind
-
安装bind
此步骤与主服务器一致
-
启动bind服务
systemctl start named
-
修改从服务器的区域配置文件
在从服务器上的主配置文件/etc/named.conf进行修改,并添加代解析DNS114.114.114.114(服务器使用第二台centos系统)
-
修改从服务器的区域配置文件
vim /etc/named.rfc1912.zones
在末尾添加
重启主和从服务器的bind服务
-
在从服务器上查询自动同步主服务器的DNS记录。
可以看到已经同步过来了。
若需要还可以配置key认证,这是bind9的views功能,可以根据不同的IP来源返回不同的的IP。
-
安装配置apache服务
-
安装
启动httpd,状态正常。
加入开机启动项
systemctl enable httpd
-
编辑html文件
cd /var/www/html/ && mkdir good
进入good目录创建并编辑index.html文件并加入如下内容
-
编辑主配置文件httpd.conf
末尾添加如下内容,是为good网站的虚拟服务器目录
修改完毕重启httpd服务,如有报错自行排查。确保其80端口未被占用。
-
测试
到这里已完成大部分工作,在windows用户主机尝试解析,注意配置windows主机的dns为主从dns。
-
测试网站解析
192.168.222.10为负责此次解析并返回给客户端的服务器
192.168.222.20为www.good.cn的IP地址
可以看到解析外部域名也可以,并且负责解析的服务器为主DNS服务器
-
访问网站测试
访问我们自己的web服务器,成功
访问百度,成功。
web服务器上访问其域名。注意将此服务器的DNS设置为主从DNS并重载网络。
-
测试主从高可用
在这里将主服务器的bind服务关闭,并进行网站访问和解析测试。
在windows客户端访问网站
linux端访问
查看解析
-
主DNS恢复测试
启动主DNS的bind服务
-
windows端访问和解析
可以看到主DNS服务很快提供服务。
-
linux端解析和访问
可以看到主DNS很快恢复服务。
访问也正常
-
keepalived+bind方案
考虑到有些需求需要提供双机高可用并实现部分故障转移且自动恢复,和保护其真实地址的需求,特此可以在之上增加keepalived。
-
架构图
就是在主从基础上加了keepalived
-
安装keepalived(主从均需)
keepalived的原理和细节这里不再阐述,请参考其官网
安装
-
编辑keepalived配置文件
以下为详细配置,可参考进行优化或实施,详细字段意义不再阐述。
新建/etc/keepalived/scripts目录,注意权限
在scripts目录下创建以下脚本,并执行chmod +x ./dns* 增加其执行权限
以下为脚本内容共五个。
-
从机上的keepalived配置
安装yum install -y keepalived
-
配置文件
主要有三个地方需要注意,这是和主配置不一样地方,如下图
脚本也是和主一样
-
测试keepalived
主从机器启动keepalived,无报错正常。
-
查看其VIP绑定情况
查看其日志,可以看到绑定后主服务器将会发送VRRP广播包。
查看从服务器的ip情况,可以看到正常。
-
测试VIP转移
-
制造故障
这里制造故障可以有,bind的named进程挂了,或者是keepalived挂了,或者是机器宕机都会实现VIP漂移。
-
制造named进程故障
这里直接关闭其服务,可以看到VIP迅速漂移了。注意如果named恢复正常,且不做相关措施keepalived原主可能会抢占回来。可以设置不抢占模式,且将MASTER改为BACKUP。
查看从服务的网络情况,可以看到VIP已经很快的绑定到从服务器上,查看其漂移日志。
-
制造keepalived故障
注意如果keepalived恢复会抢占VIP,需要配置其不抢占模式且更改其为BACKUP。
关闭keepalived服务,主服务器已经看不到VIP了,可以看到VIP很快转移到从服务器
从服务器VIP绑定日志
从服务器网络情况
-
制造宕机情况
这类情况其实和上述情况一致,这里不再测试。
-
测试在部署keepalived情况下的域名解析访问
此时我们需要把DNS服务器改为VIP,也就是192.168.222.100
我们在web服务器测试
-
测试解析和访问情况
更改服务器DNS配置,并重启网络
查看网站解析,www.good.cn为自己搭建的网站,可以看到VIP完成其解析任务,访问也正常。
看看百度访问解析
-
lvs+keepaived+bind的方案
此方案是在bind的服务加上负载均衡服务lvs,并且使用keepalived保证lvs的高可用,采用的是dr模式中的轮询算法,把请求交给后端的bind服务集群。
-
架构图(参考)
以上架构图为参考,本次测试为lvs+keepalived(两台主备lvs)+bind(2台主从)
-
部署准备(前面中的web和bind服务需要保留,在这里需要进行测试,不再重复搭建)
-
保证主机间网络互通,时钟同步。
-
软件版本请自行选择。
-
关闭防火墙和selinux,避免影响。
-
-
安装必要模块软件(主备均需)
以上是关闭防火墙和加载ip_vs内核模块,安装lvs相关和编译软件等
-
安装keepalived(主备均需)
curl -O https://www.keepalived.org/software/keepalived-2.1.3.tar.gz
tar -zvxf keepalived-2.1.3.tar.gz
cd keepalived-2.1.3
./configure
make && make install
-
设置开机启动(主备均需)
拷贝配置文件至默认目录,因为上面的编译安装时configure是默认配置,所以需要将配置文件拷贝至默认目录中/etc/keepalived/
-
编辑配置文件(lvs1)
注意区别,master,slaver,vip,网卡等
-
编辑配置文件(lvs2)
-
bind服务器配置
在/etc/init.d/下建立lvsrs文件,如下注意修改
提供执行权限
chmod +x lvsrs
并设置开机启动脚本并给予权限chmod +x /etc/rc.local
启动keepalived,执行lvsrs脚本。
-
测试
-
vip绑定情况
如下图VIP目前在lvs1上。
下图中可以看到后端集群的10和11两台dns服务器
关闭从dns服务
如下图lvs1上看到从dns服务器已经不在集群中。因为从dns的bind为53端口提供服务,lvs检查到53端口不正常会将其踢出集群。
-
查看解析情况
在web服务器上设置dns服务器为VIP:192.168.222.240,重启网络。
访问自建网站www.good.cn和百度
查看解析
在windows上访问,也没有问题。
-
测试keepalived+lvs的高可用
关闭lvs1上的keepalived
查看lvs2上的IP,很快就飘到lvs2
查看日志,看到vip的绑定日志
我们再看看解析情况,自己的网站和百度都没有问题也没问题
停掉dns主看看
再看看解析效果,主停掉后,就变成从dns提供服务了
上网也正常
-
总结
理论上主从同步会自动同步区域文件,但其同步频率貌似不在可控范围,可能造成需要数分钟才能保持一致,在区域文件众多且更改频率快的情况下,采用git或者rsync+inotify自动实时同步效率会更好。不过一般的使用是没问题的。
keepalived高可用在主发生故障时,需要其维护人员,将主恢复好后选择在适当的时间将其恢复主的身份。如不需要切换回来,请设置主为不抢占模式,且把MASTER字段改为BACKUP。否则主会抢占VIP。
如果需要web界面的方式管理,可使用flask/Django+mysql+bind-dlz方式开发。不过这里花费的力气将会成倍增加。
以上主从方案适用于中小型企业负载。在这种环境下因请求量和数据量较低,bind受服务器性能的影响不大,且dns服务为无状态服务,软件程序性能也比较好,对cpu和内存并没有太大的压力,所以单台服务器很难遇到性能上的障碍,建议使用queryperf进行压测,但如果有巨量的请求,单台服务器是承受不了的,可考虑采用lvs+keepalive+bind,不过机器数量也在成倍增加,域名数量多,二级域名数量多,可参考互联网解决方案将公司域名分为根域名+顶级域名+二级域名,采取分层解析。可平衡各个DNS服务器的压力。还可以托管cdn或者采用商用方案。
最后如果有较大需求可以使用lvs+keepalived+bind方案,有人可能会问为什么不用nginx,lvs是处理转发,其请求流量不会经过lvs,nginx的话会处理流量,nginx更擅长在应用层的转发,这就会增加nginx的负担,所以lvs四层网络的并发能力是比nginx大很多的。