高可用
为了保证DNS节点的高可用,我们使用keepalived将两台机器分别作为主从节点,做一个简单的主从节点方式的高可用。正常情况下,主节点的priority为100,从节点的priority为90,此时VIP在主节点上,请求和流量从VIP进入,由主节点提供服务,从节点作为备用。
当主节点出现异常时,VIP偏移到从节点,从节点进入MASTER状态,直到主节点本身的服务恢复正常再切换过去。
1、安装keepalived
yum install -y keepalived
systemctl start keepalived
systemctl enable keepalived
2、配置keepalived.conf
master节点:
vim /etc/keepalived/keepalived.conf
global_defs {
router_id dns_server1 # 机器标识(backup节点为dns_server2)
}
vrrp_script chk_dns {
script "/etc/keepalived/check_port.sh 192.168.1.177" # 一句指令或者一个脚本文件,需返回0(成功)或非0(失败)
interval 1 # 脚本执行间隔(s)
fall 2 # 转换为失败状态,所需的执行成功次数
rise 30 # 转换为成功状态,所需的执行成功次数
weight -20 # 优先级(priority)变化幅度, 脚本执行成功正数增加权重, 脚本执行失败负数减小权重
}
vrrp_instance dns {
state MASTER # MASTER或BACKUP,实际通过priority确认(backup节点为BACKUP)
interface ens192 # 绑定的网卡(用来发VRRP包; 绑定VIP), 网卡down会进入FAULT状态
virtual_router_id 9 # 取值在0-255之间,用来区分多个instance的VRRP组播(保证主备节点一致)
priority 100 # 选举权重,master权重一般高于backup, 取值范围是1-255(backup节点为90)
advert_int 1 # VRRP包的时间间隔(s)
# nopreempt # 非抢占式(注意非抢占式适用于网卡监听track_interface--失败FAULT状态, 不适合脚本监听track_script--失败权重降低设置为非抢占式也不会切换master,backup)
authentication {
# 认证权限,防止非法节点进入
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
# VIP, 可设置多个
192.168.1.177
}
track_script {
# 健康检查脚本
chk_dns
}
# 注意: 此处配置脚本输出文件无法起作用
notify "/etc/keepalived/change_state.sh /var/log/keepalived.log" # 任何一状态切换时都会执行的脚本, 会传递状态变化参数
}
backup:
global_defs {
router_id dns_server2 # 机器标识(backup节点为dns_server1)
}
vrrp_script chk_dns {
script "/etc/keepalived/check_port.sh 192.168.1.177" # 一句指令或者一个脚本文件,需返回0(成功)或非0(失败)
interval 1 # 脚本执行间隔(s)
fall 2 # 转换为失败状态,所需的执行成功次数
rise 30 # 转换为成功状态,所需的执行成功次数
weight -20 # 优先级(priority)变化幅度, 脚本执行成功正数增加权重, 脚本执行失败负数减小权重
}
vrrp_instance dns {
state BACKUP # MASTER或BACKUP,实际通过priority确认(backup节点为BACKUP)
interface ens192 # 绑定的网卡(用来发VRRP包; 绑定VIP), 网卡down会进入FAULT状态
virtual_router_id 9 # 取值在0-255之间,用来区分多个instance的VRRP组播(保证主备节点一致)
priority 90 # 选举权重,master权重一般高于backup, 取值范围是1-255(backup节点为90)
advert_int 1 # VRRP包的时间间隔(s)
# nopreempt # 非抢占式(注意非抢占式适用于网卡监听track_interface--失败FAULT状态, 不适合脚本监听track_script--失败权重降低设置为非抢占式也不会切换master,backup)
authentication {
# 认证权限,防止非法节点进入
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
# VIP, 可设置多个
192.168.1.177
}
track_script {
# 健康检查脚本
chk_dns
}
# 注意: 此处配置脚本输出文件无法起作用
notify "/etc/keepalived/change_state.sh /var/log/keepalived.log" # 任何一状态切换时都会执行的脚本, 会传递状态变化参数
}
3、check_port.sh
放置于:/var/keepalived/ 监听ip及named服务
#!/bin/sh
isMaster=`ip addr show | grep "scope global" | grep $1`
if [ -n "$isMaster" ]
then
PORT_PROCESS=`ps -ef | grep named | grep -v grep | wc -l`
if [ $PORT_PROCESS -eq 0 ]
then
echo "named Is Not Running, End."
exit 1
fi
else
echo "is backup"
fi
4、change_state.sh
放置于:/var/keepalived/
#!/bin/sh
# 参数1: 转态变化输出文件; 参数3: VRRP 实例; 参数4: 新转态; 状态5: 权重
# 示例: /var/log/keepalived.log INSTANCE nfs MASTER 100
outFilename=$1
instance=$3
newState=$4
priority=$5
date=`date "+%Y-%m-%d %H:%M:%S"`
content="$date $3 change to $4, priority: $5"
echo "$content" >> $1
5、其他问题
1、设置可执行及写权限:chmod 744
2、脚本执行时selinux报错可以选择更改selinux 开机状态
selinux开机状态的控制文件 : /etc/sysconfig/selinux
SELINUX=enforcing | permissive | disabled
enfirocing 强制模式: SELINUX 主动拒绝访问尝试读取类型上下文为 tmp_t的 web
服务器。在强制模式中,SELINXU 既记录冲突,也强制执行规则permissive 警告模式(许可模式): 通常用于对问题进行故障排除。在许可模式下,即使没有明确规则, SELINUX
也允许所有交互,并且记录所有被拒绝的交互。此模式可以用于确定你是否有
SELINUX问题。无需重新引导即可从强制模式转为许可模式,或再从许可模式转回强制模式disabled 关闭