RHLE6/CENTOS6解析域名慢处理及关闭ipv6

业务发现访问域名api的时候总是慢,换成IP就快,如:
curl -i 'http://api.xxxx.com/credit/getfiel?us=zhang&pwd=74432a70431

方法一:关闭ipv6

1、查看系统是否开启ipv6
a) 命令:ifconfig
注释:有 “inet6 addr:。。。。。。。“ 的表示开启了ipv6功能

b)通过内核模块加载信息查看
命令:lsmod | grep ipv6

2、ipv6关闭方法
在/etc/modprobe.d/dist.conf结尾添加

alias net-pf-10 off
alias ipv6 off

3、reboot重启电脑。


方法二:设置options single-request-reopen

修改如下:
在/etc/resolv.conf文件添加下面一行:
options single-request-reopen

修改/etc/sysctl.conf文件:
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6=1

# sysctl -p 使之生效


具体说明:

下面描述的问题我在几次实际工作中都碰到过,一直没有做一个比较明确的整理,昨天再次碰到的时候(在构建capistrano环境是用bundle 安装包的时候发现速度极其慢),查看到一个写的比较好的blog,于是想把他翻译成中文,share在这里。 版权归原博主所有。

先把结论摆上,在RHLE6/CENTOS6的环境里,需要在/etc/resolv.conf加如下参数

options single-request-reopen     # 注意全部是小写字母

原因说明: RHEL5/CentOS5/Ubuntu 10.04等等linux下,dns的解析请求过程如下。


1  主机从一个随机的源端口,请求 DNS的AAAA 记录,
2  主机接受dns服务器返回AAAA记录,
3  主机从一个另一个随机的源端口,请求 DNS的A 记录,
3  主机dns 服务器返回A记录,

如果是RHEL6/CentOS6,交互过程有所不同,如图:

1 主机从一个随机的源端口,请求 DNS的A 记录,
2 主机从同一个源端口,请求 DNS的AAAA 记录,
3 主机接受dns服务器返回A记录,
4 主机接受 dns服务器返回AAAA记录,

上面3,4并没有严格的先后顺序,实际的顺序受网络环境,服务器环境的影响。
理论上讲centos6的这种工作机制,效率更高,端口复用度更高,能节省更多的资源。
但是这里也同样存在着一个问题。比如在存在防火墙等机制的网络环境中,同样源目的ip,同样源目的port,同样的第4层协议的连接会被防火墙看成是同一个会话,因此会存在返回包被丢弃现象。
如下图。

此时的整个dns解析过程如下:
1 主机从一个随机的源端口,请求 DNS的A 记录,
2 主机从同一个源端口,请求 DNS的AAAA 记录,
3  主机先收到dns返回的AAAA记录,
4  防火墙认为本次交互通信已经完成,关闭连接,
5  于是剩下的dns服务器返回的A记录响应包被防火墙丢弃
6  等待5秒超时之后,主机因为收不到A记录的响应,重新通过新的端口发起A记录查询请求,此后的机制等同于centos5)
7  主机收到dns的A记录响应;
8  主机从另一个新的源端口发起AAAA
9  主机收到dns的AAAA记录响应;
我们看到在这个解析的序列里面,dns解析有5秒的延迟发生。所以当用linux系统安装大量远程包的时候宏观上看延迟就非常大了(linux是不缓存dns解析记录的)。

那么到底  options single-request-reopen  这个参数的作用是什么的,man 5 resolv,conf的结果如下

single-request-reopen (since glibc 2.9)
    The resolver uses the same socket for the A and AAAA
    requests.  Some hardware mistakenly sends back only one
    reply.  When that happens the client system will sit
    and wait for the second reply.  Turning this option on
    changes this behavior so that if two requests from the
    same port are not handled correctly it will close the
    socket and open a new one before sending the second
    request


参考:

http://blog.sina.com.cn/s/blog_7f2122c50101uk9m.html

<think>好的,用户问的是如何在RHEL 8上安装Redis。首先,我需要确认RHEL 8的常见安装方法。通常,Red Hat系列的软件可以通过yum或dnf来安装,但默认仓库里可能没有最新版的Redis。所以可能需要启用EPEL仓库,或者从源码编译安装。 首先,检查是否已经启用了EPEL。EPEL提供很多额外的软件包,可能包括Redis。用户可能需要先安装EPEL,然后用yum或dnf安装Redis。不过要确认EPEL中的Redis版本是否符合用户需求。如果用户需要最新版,可能需要源码安装或者添加其他第三方仓库。 另外,Redis的官方文档可能有推荐的安装方法,比如用Remi仓库。不过对于企业环境,可能更倾向于使用EPEL或者源码编译,以确保稳定性。需要注意的步骤包括安装依赖项,如gcc和make,如果选择源码安装的话。 安装完成后,还需要配置systemd服务,设置开机启动,调整配置文件,比如绑定地址、设置密码等安全措施。还有防火墙配置,开放Redis的端口6379。最后,可能需要验证安装是否成功,通过redis-cli连接测试。 需要提醒用户注意安全,比如不要以root运行,设置密码,限制访问IP等。另外,SELinux可能会影响Redis的运行,可能需要调整策略或关闭,不过在生产环境中不建议关闭SELinux,而是配置正确的上下文。 可能用户是系统管理员或开发人员,需要部署Redis作为缓存或数据库。需要根据使用场景调整配置,比如持久化设置,内存限制等。如果用户遇到问题,可能需要查看日志文件,路径通常在/var/log/redis/redis.log。 总结步骤大概是:启用EPEL,安装Redis,启动服务,配置防火墙,安全设置,测试连接。如果是源码安装,则下载源码,编译安装,创建服务文件,配置环境变量等。</think>以下是在 Red Hat Enterprise Linux 8 (RHEL 8) 上安装 Redis 的步骤: --- ### 方法 1:通过 EPEL 仓库安装(推荐) 1. **启用 EPEL 仓库** ```bash sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm ``` 2. **安装 Redis** ```bash sudo dnf install redis -y ``` 3. **启动并设置开机自启** ```bash sudo systemctl start redis sudo systemctl enable redis ``` 4. **验证状态** ```bash sudo systemctl status redis ``` --- ### 方法 2:源码编译安装(获取最新版本) 1. **安装依赖** ```bash sudo dnf install gcc make tcl -y ``` 2. **下载并解压 Redis** ```bash wget https://download.redis.io/releases/redis-7.2.4.tar.gz tar xzf redis-7.2.4.tar.gz cd redis-7.2.4 ``` 3. **编译安装** ```bash make sudo make install ``` 4. **配置系统服务** - 创建服务文件: ```bash sudo nano /etc/systemd/system/redis.service ``` - 添加以下内容: ```ini [Unit] Description=Redis In-Memory Data Store After=network.target [Service] ExecStart=/usr/local/bin/redis-server /path/to/your/redis.conf Restart=always User=redis Group=redis [Install] WantedBy=multi-user.target ``` 5. **创建 Redis 用户并调整权限** ```bash sudo useradd -r redis sudo mkdir /var/lib/redis sudo chown redis:redis /var/lib/redis ``` --- ### 通用配置步骤 1. **修改配置文件** ```bash sudo nano /etc/redis.conf ``` - 主要配置项: ```ini bind 0.0.0.0 # 允许远程访问(需谨慎) requirepass your_password # 设置密码 daemonize yes # 后台运行 ``` 2. **开放防火墙端口** ```bash sudo firewall-cmd --permanent --add-port=6379/tcp sudo firewall-cmd --reload ``` 3. **测试连接** ```bash redis-cli 127.0.0.1:6379> ping # 返回 PONG 表示成功 ``` --- ### 安全建议 1. 使用强密码(`requirepass` 配置项) 2. 限制绑定 IP(默认 `bind 127.0.0.1` 更安全) 3. 定期备份 RDB/AOF 文件 4. 不要以 root 用户运行 Redis 如果遇到 SELinux 限制,可临时禁用或配置策略: ```bash sudo setenforce 0 # 临时关闭(重启失效) sudo nano /etc/selinux/config # 永久修改 SELINUX=disabled ``` 建议根据实际需求选择安装方式。EPEL 方式更简单,源码安装可获取最新特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值