2023年12月5日
版本 1
查看文件系统版本
[root@localhost ~]# cat /etc/redhat-release
CentOS Stream release 9
查看内核信息
[root@localhost ~]# uname -r
5.14.0-386.el9.x86_64
关闭防火墙
关闭selinux
配置网卡
配置网卡的时候,如果配置网卡完成之后,重启网卡,不能ping外网。
解决 进入/etc/resolv.conf 配置上级的dns解析
配置主机名
hostnamectl set-hostname --static 主机名
主机为192.168.8.151 和192.168.8.154
主为151 从为154
yum list dnsmasq
yum info dnsmasq
使用 yum -y install 命令安装 dnsmasq 软件包
yum -y install dnsmasq
dnsmasq -v
rpm -ql dnsmasq
查看默认配置文件,其中警号#开头的为注释信息。
[root@hanyw-pgsql conf]# grep -Ev '^$|#' /etc/dnsmasq.conf
user=dnsmasq // 用户
group=dnsmasq // 用户组 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig // 配置文件的包含目录
查看 dnsmasq 服务用户
[root@hanyw-pgsql conf]# id dnsmasq
uid=984(dnsmasq) gid=984(dnsmasq) groups=984(dnsmasq)
151主机和154主机一起配置
[root@hanyw-pgsql conf]# cp -av /etc/dnsmasq.conf /opt/
'/etc/dnsmasq.conf' -> '/opt/dnsmasq.conf'
154主机配置文件
cat >/etc/dnsmasq.conf< ###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ###### port=53 resolv-file=/etc/resolv.conf strict-order listen-address=192.168.8.154,127.0.0.1 addn-hosts=/etc/dnsmasq_hosts cache-size=150 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig log-facility=/etc/dnsmasqlog/dnsmasq.log ###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ###### ldp 配置日志的目的:就是客户端请求dns域名的行为,做分析使用。 151主机配置文件 cat >/etc/dnsmasq.conf< ###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ###### port=53 resolv-file=/etc/resolv.conf strict-order listen-address=192.168.8.151,127.0.0.1 addn-hosts=/etc/dnsmasq_hosts cache-size=150 conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig log-facility=/etc/dnsmasqlog/dnsmasq.log ###### hanyw echo $(date +%Y/%m/%d-%H:%S:%M) ###### ldp 注意:日志需要创建目录/etc/dnsmasqlog 主配置文件也可以添加上级dns,如下图所示 151主机和154主机配置一样 154主机配置 [root@localhost etc]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.8.154 nameserver 192.168.8.151 nameserver 8.8.8.8 151主机配置 [root@localhost etc]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.8.151 nameserver 192.168.8.154 nameserver 8.8.8.8 这里就是将本机的dns请求先指向本机,之后本机找不到,再指向8.8.8.8服务器。从上到下。 154主机和151主机配置相同 [root@localhost ~]# cat /etc/dnsmasq_hosts 192.168.8.156 www.ljh.com 192.168.8.157 www.ljh.com 这里可以配置nginx 的域名vip 重启系统网络服务 [root@localhost etc]# systemctl restart NetworkManager 再次查看resolv.conf [root@localhost etc]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.8.154 nameserver 192.168.8.151 nameserver 8.8.8.8 如果出现下图,则应是网卡配置错误 将网卡的dns配置注释掉。 之后进行重启,再次查看 systemctl enable dnsmasq.service systemctl start dnsmasq ps axu |grep dnsmasq ss -ntpl |grep 53 重启:systemctl reatart dnsmasq 检查语法 [root@localhost ~]# dnsmasq --test dnsmasq: syntax check OK. 开机自启 systemctl enable dnsmasq.service 检测开机自启是否设置成功 [root@localhost etc]# systemctl list-unit-files |grep -i enable |grep dns dnsmasq.service enabled disabled 标记为红色的字段,表示 dnsmasq 开机自启动设置成功。 关闭 systemctl stop dnsmasq 开启 systemctl start dnsmasq yum install bind-utils dig命令 默认不指定@ @指的是dns服务器地址,默认会从本机的/etc/resolv.conf中读取dns的配置 不加@的话,从列表中的第一个dns服务器的ip地址中查找。 首先要了解什么是dns不可用了,不可用就是/etc/resolv.conf配置文件当中,第一个dns服务器错误,之后会找第二个dns服务器,第二个服务器出错,之后,就会找第三个。以此类推,也就是解析顺序。 crontab -e 进入 crontab -l 查看里面内容 yum -y install rsync ssh-keygen 发给主服务器 ssh-copy-id 192.168.8.151 在从服务器上面配置定时任务,定时和主服务器的dnsmasq_hosts文件进行同步。 定时任务 [root@localhost ~]# crontab -l * * * * * /usr/bin/rsync -az --delete 192.168.8.151:/etc/dnsmasq_hosts /etc/ 2>&1 > /dev/null 缺点 基于分钟级别的数据同步,数据延迟至少在 1 分钟左右,会丢失 1 分钟的数据。 因为系统默认每分钟执行一次,所以数据同步延迟至少在一分钟左右。 进一步改进 使用以下 cron 表达式: * * * * * sleep 5; command 这种方法虽然可以实现每 5 秒钟执行一次的效果,但它并不是最稳定和可靠的方式, 因为它依赖于操作系统在给定时间精度上的准确性。如果您需要更加精确的任务调度,建议 使用类似 systemd 或者其他的调度工具来处理。 [root@localhost ~]# crontab -l * * * * * /usr/bin/rsync -az --delete 192.168.8.151:/etc/dnsmasq_hosts /etc/ 2>&1 > /dev/null ; sleep 5 使用systemd内置的定时器和systemctl命令来实现每5秒执行一次任务 在/etc/systemd/system/目录下创建一个新的文件系统example.service,并写入以下内容 演示配置没有完成 解决dns服务器的数据一致性的问题 主从服务器的dnsmasq_hosts 文件全部挂载到nfs服务器上面进行挂载 查看 nfs-utils 软件包是否存在 yum info nfs-utils 安装 nfs-utils 软件包 yum install -y nfs-utils showmount -e ip(文件服务器的ip地址) 如下图所示 这里的话共享服务器提供的共享目录是/data,但是我们需要将etc/dnsmasq_hosts 文件挂载共享服务器上面 解决 在本机上面创建/data/dnsmasq/etc/目录,之后在该目录下创建/etc/dnsmasq_hosts 的软链接。 mkdir -pv /data/dnsmasq/etc/ mount -t nfs 共享服务器ip地址:/data/nfs/bj-server /data/dnsmasq/etc/ 进入 /etc/fstab 文件里面 写入 本机ip地址 对方的共享目录 本机挂载的目录 nfs dafaults 0 0 例子: ln -sv /etc/dnsmasq_hosts /data/dnsmasq/etc 也可以在/data/dnsmasq/etc目录下执行 ln -sv /etc/dnsmasq_hosts . mount -a 将 /etc/fstab 中定义的所有档案系统挂上 如果要考虑ngs共享存储挂了的话,在/etc/fstab 文件里面再挂载一个共享文件服务器的ip地址,但是该行的配置要注释掉,之后可以写一个脚本,检测如果共享服务器挂掉之后,可将备用的配置前面的#号注释掉。 前期配置 角色 ip 主机名 vip 域名 软件 dns服务器 192.168.8.151 dnsM151 192.168.8.156 www.ljh.com 大炮 dns服务器 192.168.8.154 dnsB154 192.168.8.157 www.ljh.com 大炮 yum -y install keepalived 就是主服务器挂掉之后,备用服务器顶上,之后如果主服务器状态恢复之后,主服务器会将vip抢占过来 global_defs { router_id dnsM151 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 99 mcast_src_ip 192.168.8.151 priority 100 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 192.168.8.157 } track_script { chk_dns } } 154配置 global_defs { router_id dnsB154 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface ens160 virtual_router_id 99 mcast_src_ip 192.168.8.154 priority 90 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 192.168.8.157 } track_script { chk_dns } } 在151和154主机上面都要 mkdir -pv /data/scripts/shell/ 目录 之后创建 touch mkdir -pv /data/scripts/shell/checkDnsmasq.sh 启动脚本 创建shell脚本存放路径 mkdir -pv /data/scripts/shell 创建检测dnsmasq的检测脚本 touch /data/scripts/shell/checkDnsmasq.sh cat >/data/scripts/shell/checkDnsmasq.sh< #!/bin/bash #检测 dnsmasq 是否启动了 dnsProcessNum=\$(ps axu |grep dnsmasq |grep -v grep | wc -l) if [ \$dnsProcessNum -eq 0 ];then systemctl start dnsmasq sleep 5 if [ \$(ps axu |grep dnsmasq |grep -v grep | wc -l) -eq 0 ];then systemctl stop keepalived fi fi EOF bash -n /data/scripts/shell/checkDnsmasq.sh chmod 700 /data/scripts/shell/checkDnsmasq.sh 非抢占就是两台服务器配置都是BACKUP ,但是优先级不同。主服务器挂掉之后,备份服务器顶上,但是之后主服务器恢复之后,不会把vip抢占过来。保证了稳定性 这两个节点 state 指定的都是 BACKUP,同时,其中一个优先级高于一个节点,优先级 (Master)高的节点配置了 nopreempt 参数表示非抢占模式,从节点不配置 nopreempt 参数。 151主机 cat > /etc/keepalived/keepalived.conf< global_defs { router_id dnsM151 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP # 配 置 为 非 抢 占 模 式 n o p r e e m p t interface ens160 virtual_router_id 99 mcast_src_ip 192.168.8.151 priority 100 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 192.168.8.157 } track_script { chk_dns } } EOF 154主机 cat > /etc/keepalived/keepalived.conf< global_defs { router_id dnsB154 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface ens160 virtual_router_id 99 mcast_src_ip 192.168.8.154 priority 90 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 192.168.8.157 } track_script { chk_dns } } EOF router_id 不同,均为本节点 hostname interface 本节点的网络接口,通过 ifconfig 查看 mcast_src_ip 不同,均为本节点的 IP priority 节点优先级,MASTER 要大于 BACKUP 与抢占模式配置文件的差异点 nopreempt 在 vrrp_instance 块下都配置了,所以 MASTER 从故障中恢复后,不会抢占 vip state 均为 BACKUP 重启 systemctl restart keepalived 关闭 systemctl stop keepalived 模式说明: 设置两台主机都处于工作模式相互备份 必须有两个ip地址,分别绑定在两个节点上。 vip地址1 2 主机 a b 主机a 为 1 地址的主节点,主机a为2地址的备节点 主机b为1地址的备节点,主机b为2节点的主节点 当一个主机不可用时,则另外的一台服务器上面的备用节点成为主节点。 需要修改的内容 global_defs { router_id dnsM151 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 151 mcast_src_ip 192.168.8.151 priority 100 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 } track_script { chk_dns } } vrrp_instance VI_2 { state BACKUP interface ens160 virtual_router_id 154 mcast_src_ip 192.168.8.151 priority 80 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.157 } track_script { chk_dns } } global_defs { router_id dnsB154 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface ens160 virtual_router_id 151 mcast_src_ip 192.168.8.154 priority 100 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.157 } track_script { chk_dns } } vrrp_instance VI_2 { state MASTER interface ens160 virtual_router_id 154 mcast_src_ip 192.168.8.154 priority 80 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 } track_script { chk_dns } } global_defs { router_id dnsM151 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 151 mcast_src_ip 192.168.8.151 priority 100 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 } track_script { chk_dns } } vrrp_instance VI_2 { state BACKUP interface ens160 virtual_router_id 154 mcast_src_ip 192.168.8.151 priority 80 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.157 } track_script { chk_dns } } global_defs { router_id dnsB154 } vrrp_script chk_dns{ script "/data/scripts/shell/checkDnsmasq.sh" interval 2 weight -20 } vrrp_instance VI_2 { state BACKUP interface ens160 virtual_router_id 151 mcast_src_ip 192.168.8.154 priority 80 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.156 } track_script { chk_dns } } vrrp_instance VI_1 { state MASTER interface ens160 virtual_router_id 154 mcast_src_ip 192.168.8.154 priority 100 advert_int 3 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.8.157 } track_script { chk_dns } } router_id dnsM151 修改为主机的主机名 /data/scripts/shell/checkDnsmasq.sh 配置keepalived的启动脚本 两个vip实例分别为主备 网卡配置名称 virtual_router_id 不同 mcast_src_ip 相同 priority 优先级不同,该主机的主vip优先级高 从ip优先级低 配置的ip地址不同 virtual_ipaddress { 192.168.8.156 主从模式和主主模式 抢占模式 就是主服务器挂掉之后,备用服务器顶上,之后如果主服务器状态恢复之后,主服务器会将vip抢占过来,主从服务器分别配置MASTER和BACKUP。 非抢占模式 主从服务器都配置BACKUP,但是主服务器优先级高,从服务器优先级低 。主节点配置nopreempt 参数表示非抢占模式,从节点不配置 nopreempt 参数。 两台主机都处于工作模式, 必须有两个ip地址,分别绑定在两个节点上,ip地址在两台服务器上面,一台服务器为主vip,另外一台服务器为备vip 配置完成之后,断网线和关掉keepalived服务,服务器宕机或者关机四种检测方法。 断网线和关掉keepalived服务和关机都可以实现keepalived的vip切换 但是关闭网卡或者关闭Networkmanger(停止网卡服务)和服务器宕机不会进行vip的切换。换而言之 就是 keepalived 应该不能监测网卡故障。 你可以写一个监控脚本,一定时间内,ping 不通自己的 IP,就把自己的 keepalived杀死,就可以进行vip的切换。配置网卡配置文件时需要将dns注释掉
配置本机dns请求的ip地址
配置dns域名解析记录
确认dns(本机)配置是否正确
设置开机自启动
查看dnsmasq 服务
查看 dnsmasq 服务状态
查看 dnsmasq 的进程
过滤服务器端监听的 53 端口库(查看 dnsmasq 服务的端口)
dnsmasq命令
dig命令测试
同步主 DNS 数据到从 DNS 方案选型
使用系统默认的定时任务结合 rsync
crontab 命令(定时任务)
rsync 命令
从服务器上面配置秘钥
内置定时器
nfs共享存储
安装
查看共享服务器的提供的共享文件夹
创建dns域名解析的目录
挂载 NFS 共享存储
永久挂载
创建软链接
keepalived实现dns集群高可用 主从架构
安装keepalived
抢占模式
151配置
创建启动脚本
创建dnsmasq检测脚本
非抢占模式
主主模式
正确配置
151主机配置
154主机配置
错误配置
151主机配置
154主机配置
注意修改的配置
keepalived 两种模式的总结
主从模式
主主模式
keepalived检测机制