一、在linux架设dns服务的六个步骤
之前写过一篇dns相关的文章,APP中嵌入极光推送后PHP端调用API的程序 及 为方便APP测试服务器部署dns服务_极光推送 单个id api php-CSDN博客 今天又装了个dns,再做个笔记:具体介绍看上面这篇文章。
第一步:安装基础软件
yum install -y bind bind-chroot bind-utils
第二步:配置文件/etc/named.conf编辑
安装成功之后对named的配置文件/etc/named.conf进行基础编辑。把以下两行修改成any:
listen-on port 53 { any; };
allow-query { any; };
第三步:编辑文件 /etc/named.conf
在/etc/named.conf末尾添加一行解析,注意zone,type,file值
zone "shouji.com" IN {
type master;
file "shouji.com.zone";
};
第四步:添加解析文件:shouji.com.zone,
上面添加的解析指了文件名:shouji.com.zone,因此需要添加这个文件。这些文件默认都在/var/named/目录下面
[dev@localhost ~]$ sudo ls -al /var/named/
total 44
drwxr-xr-- 6 root named 4096 Jun 27 13:03 .
drwxr-xr-x. 21 root root 4096 Jun 27 12:41 ..
drwxr-x--- 7 root named 4096 Jun 27 12:41 chroot
drwxrwx--- 2 named named 4096 Jun 27 12:49 data
drwxrwx--- 2 named named 4096 Jun 27 12:49 dynamic
-rw-r----- 1 root named 3171 Jan 11 2016 named.ca
-rw-r----- 1 root named 152 Dec 15 2009 named.empty
-rw-r----- 1 root named 152 Jun 21 2007 named.localhost
-rw-r----- 1 root named 168 Dec 15 2009 named.loopback
drwxrwx--- 2 named named 4096 May 9 21:43 slaves
[dev@localhost ~]$ sudo cp /var/named/named.localhost /var/named/shouji.com.zone
第五步:编辑文件:/var/named/shouji.com.zone
NS @
A 127.0.0.1
#此为原来named.localhost里面的内容不用动,在下面新增加编辑
ns.shouji.com. IN A 192.168.11.11
test IN A 192.168.11.11
可以看到第一行是ns.shouji.com. ,ns的意义就是上面的@,即是一个匹配, 后面添加的test就自动匹配成了test.shouji.com.第一行ns.shouji.com注意后面的.号。另外这些内容中间使用tab分开。注意修改好内容以后要变更一下shouji.com.zone文件的权限,可以变更其所属用户和组为named,或者给其它用户一个可读的权限。
第六步:启动named:
sudo /etc/init.d/named start
#sudo /etc/init.d/named restart 重启
#如果写进了service也以使用
service named start
service named restart
开机即启动named服务:
sudo chkconfig --level 3 named on
需要特别注意的是:shouji.com.zone这个文件要么把它归到named用户和组上,要么给其它用户一个读的权限,否则就相当于没有这个配置,最后查看dns是否配置成功,如下,找到了Address即表示成功。
[dev@localhost ~]$ nslookup test.shouji.com 192.168.11.11
Server: 192.168.11.11
Address: 192.168.11.11#53
Name: test.shouji.com
Address: 192.168.11.11
二、Redis配置文件中不常关注的配置项意义大全
Redis配置文件中不常关注的配置项意义大全:
#GENERAL
include /path/to/other.conf #包含其它的redis配置文件
unixsocket /tmp/redis.sock #指定监听的socket,适用于unix环境
timeout N #客户端空闲N秒后断开连接,参数0表示不启用
loglevel notice #指定服务器信息显示的等级,4个参数分别为debug\verbose\notice\warning
syslog-enabled no #是否启用将记录记载到系统日志功能,默认为不启用
syslog-ident redis #若启用日志记录,则需要设置日志记录的身份
syslog-facility local0 #若启用日志记录,则需要设置日志facility,可取值范围为local0~local7,表示不同的日志级别
#此参数确定TCP连接中已完成队列(3次握手之后)的长度,应小于Linux系统的/proc/sys/net/core/somaxconn的值,此选项默认值为511,而linux的somaxconn默认值为128,当并发量比较大且客户端反应缓慢的时候,可以同时提高这两个参数。
tcp-backlog 511
#指定ACKs的时间周期,单位为秒,值非0的情况表示将周期性的检测客户端是否可用,默认值为60秒。
tcp-keepalive 0
SNAPSHOTTING
stop-writes-on-bgsave-error yes #最近一次save操作失败则停止写操作
rdbchecksum yes #启用CRC64校验码,当然这个会影响一部份性能
#LIMITS
maxclients 10000 #同一时间内最大clients连接的数量,超过数量的连接会返回一个错误信息
maxmemory 20g #设置最大内存
#如果内存使用量到达了最大内存设置,有6种处理方法:
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
#默认的设置是 maxmemory-policy noeviction
maxmemory-samples 5 #LRU算法检查的keys个数
APPEND ONLY MODE
no-appendfsync-on-rewrite no #当主进程在进行向磁盘的写操作时,将会阻止其它的fsync调用
auto-aof-rewrite-percentage 100 #aof文件触发自动rewrite的百分比,值为0则表示禁用自动rewrite
auto-aof-rewrite-min-size 64mb #aof文件触发自动rewrite的最小文件size
aof-load-truncated yes #是否加载不完整的aof文件来进行启动
REPLICATION
#当slave端在主从复制的过程中与master端断开了连接,此时有2种处理方法:一种是继续提供服务即使数据可能不是最新的,另一种是对请求返回一个错误信息,默认配置是继续提供服务
slave-serve-stale-data yes
#主从同步支持两种策略,即disk和socket方式(socket方式尚不完善,还处于实验阶段)。
#新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。
#一个RDB文件从master端传到slave端,分为两种情况:
#1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;
#2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。
#无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。
#默认不使用diskless同步方式
repl-diskless-sync no
#无磁盘diskless方式在进行数据传递之前会有一个时间的延迟,以便slave端能够进行到待传送的目标队列中,这个时间默认是5秒
repl-diskless-sync-delay 5
#设置超时时间
repl-ping-slave-period 10 slave端向server端发送pings的时间区间设置,默认为10秒
repl-timeout 60
#是否启用TCP_NODELAY,如果启用则会使用少量的TCP包和带宽去进行数据传输到slave端,当然速度会比较慢;如果不启用则传输速度比较快,但是会占用比较多的带宽
repl-disable-tcp-nodelay no
#设置backlog的大小,backlog是一个缓冲区,在slave端失连时存放要同步到slave的数据,因此当一个slave要重连时,经常是不需要完全同步的,执行局部同步就足够了。backlog设置的越大,slave可以失连的时间就越长。
repl-backlog-size 1mb
#如果一段时间后没有slave连接到master,则backlog size的内存将会被释放。如果值为0则表示永远不释放这部份内存。
repl-backlog-ttl 3600
#slave端的优先级设置,值是一个整数,数字越小表示优先级越高。当master故障时将会按照优先级来选择slave端进行恢复,如果值设置为0,则表示该slave永远不会被选择。
slave-priority 100
min-slaves-to-write 3
#设置当一个master端的可用slave少于N个,延迟时间大于M秒时,不接收写操作。
min-slaves-max-lag 10
REDIS CLUSTER
#一个正常的redis实例是不能做为一个redis集群的节点的,除非它是以一个集群节点的方式进行启动。
cluster-enabled yes 配置redis做为一个集群节点来启动
cluster-config-file node-6379.conf 每个集群节点都有一个集群配置文件,这个文件不需要编辑,它由redis节点来创建和更新。每个redis节点的集群配置文件不可以相同。
cluster-node-timeout 15000 设置集群节点超时时间,如果超过了指定的超时时间后仍不可达,则节点被认为是失败状态,单位为毫秒。
#一个属于失效的master端的slave,如果它的数据较旧,将不会启动failover。
#现在来讲并没有一个简单的方法去解决如何判定一个slave端的数据的时效性问题,所以可以执行以下两个选择:
#1、如果有多个slave可用于failover,它们会交换信息以便选出一个最优的进行主从复制的offset,slave端会尝试依据offset去获取每个slave的rank,这样在启动failover时对每个slave的利用就与slave端的rank成正比。
#2、每个slave端和它的master端进行最后交互的时间,这可能是最近的ping或指令接收时间,或自与master端失连的过时时间。如果最近的交互时间太久,slave就不会尝试去进行failover。
#第2点可以由用户来进行调整,明确一个slave不会进行failover。自最近一次与master端进行交互,过时时间有一个计算公式:
#(node-timeout * slave-validity-factor)+repl-ping-slave-period
#一个比较大的slave-validity-factor参数能够允许slave端使用比较旧的数据去failover它的master端,而一个比较小的值可能会阻止集群去选择slave端。
#为获得最大的可用性,可以设置slave-validity-factor的值为0,这表示slave端将会一直去尝试failover它的master端而不管它与master端的最后交互时间。
cluster-slave-validity-factor 10 默认值为10
#集群中的slave可以迁移到那些没有可用slave的master端,这提升了集群处理故障的能力。毕竟一个没有slave的master端如果发生了故障是没有办法去进行failover的。
#要将一个slave迁移到别的master,必须这个slave的原master端有至少给定数目的可用slave才可以进行迁移,这个给定的数目由migration barrier参数来进行设置,默认值为1,表示这个要进行迁移的slave的原master端应该至少还有1个可用的slave才允许其进行迁移,要禁用这个功能只需要将此参数设置为一个非常大的值。
cluster-migration-barrier 1
#默认情况下当redis集群节点发现有至少一个hashslot未被covered时将会停止接收查询。 这种情况下如果有一部份的集群down掉了,
#那整个集群将变得不可用。集群将会在所有的slot重新covered之后自动恢复可用。
#若想要设置集群在部份key space没有cover完成时继续去接收查询,就将参数设置为no。
cluster-require-full-coverage yes
#LATENCY MONITOR
#延迟监控,用于记录等于或超过了指定时间的操作,默认是关闭状态,即值为0。
latency-monitor-threshold 0
#ADVANCED CONFIG
#当条目数量较少且最大不会超过给定阀值时,哈希编码将使用一个很高效的内存数据结构,阀值由以下参数来进行配置。
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
#与哈希类似,少量的lists也会通过一个指定的方式去编码从而节省更多的空间,它的阀值通过以下参数来进行配置。
list-max-ziplist-entries 512
list-max-ziplist-value 64
#集合sets在一种特殊的情况时有指定的编码方式,这种情况是集合由一组10进制的64位有符号整数范围内的数字组成的情况。以下选项可以设置集合使用这种特殊编码方式的size限制。
set-max-intset-entries 512
#与哈希和列表类似,有序集合也会使用一种特殊的编码方式来节省空间,这种特殊的编码方式只用于这个有序集合的长度和元素均低于以下参数设置的值时。
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
#设置HyeperLogLog的字节数限制,这个值通常在0~15000之间,默认为3000,基本不超过16000
hll-sparse-max-bytes 3000
#将会在每秒中抽出10毫秒来对主字典进行重新散列化处理,这有助于尽可能的释放内存
activerehashing yes redis
#因为某些原因,client不能足够快的从server读取数据,那client的输出缓存限制可能会使client失连,这个限制可用于3种不同的client种类,分别是:normal、slave和pubsub。
#进行设置的格式如下:
#client-output-buffer-limit <class><hard limit><soft limit><soft seconds>
#如果达到hard limit那client将会立即失连。
#如果达到soft limit那client将会在soft seconds秒之后失连。
#参数soft limit < hard limit。
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
#当一个子进程要改写AOF文件,如果以下选项启用,那文件将会在每产生32MB数据时进行同步,这样提交增量文件到磁盘时可以避免出现比较大的延迟。
aof-rewrite-incremental-fsync yes