您好,登錄后才能下訂單哦!
要在centos7上安裝redis的主從,下面記錄一下安裝過程。
cd /apps wget http://download.redis.io/releases/redis-3.2.3.tar.gz tar -zxvf redis-3.2.3.tar.gz cd redis-3.2.3 make make install
安裝過程中會(huì)顯示把redis放在什么目錄下:下面是安裝過程中的一部分
XSLTPROC : /usr/bin/xsltproc XSLROOT : PREFIX : /usr/local BINDIR : /usr/local/bin DATADIR : /usr/local/share INCLUDEDIR : /usr/local/include LIBDIR : /usr/local/lib MANDIR : /usr/local/share/man
redis安裝到/usr/local,/usr/local/bin,/usr/local/share,/usr/local/include,/usr/local/lib,/usr/local/share/man目錄下
軟件安裝完成,下面是初始化數(shù)據(jù):
切換到utils目錄下,執(zhí)行redis初始化腳本install_server.sh
cd utils ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/bin/redis-server] Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful!
初始化后
配置文件為/etc/redis/6379.conf,
日志文件為/var/log/redis_6379.log,
數(shù)據(jù)文件dump.rdb存放到/var/lib/redis/6379目錄下,
啟動(dòng)腳本為/etc/init.d/redis_6379
查看日志發(fā)現(xiàn)有如下warning
28000:M 09 Sep 13:33:02.917 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 28000:M 09 Sep 13:33:02.917 # Server started, Redis version 3.2.3 28000:M 09 Sep 13:33:02.917 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 28000:M 09 Sep 13:33:02.917 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis . To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 28000:M 09 Sep 13:33:02.917 * The server is now ready to accept connections on port 6379
如下解決:
1,第一個(gè)錯(cuò)誤大概是說somaxconn的值128設(shè)置過小,從/proc/sys/net/core/somaxconn這個(gè)路徑也可大概知道這個(gè)值的設(shè)置是關(guān)于網(wǎng)絡(luò)連接中某個(gè)最大值的限定設(shè)置,此值表示網(wǎng)絡(luò)連接的隊(duì)列大小,在配置文件redis.conf中的“tcp-backlog 511”就配置在高并發(fā)環(huán)境下的最大隊(duì)列大小,此值受限于系統(tǒng)的somaxconn與tcp_max_syn_backlog這兩個(gè)值,所以應(yīng)該把這兩個(gè)內(nèi)核參數(shù)值調(diào)大,具體解決方法如下:
$ vim /etc/sysctl.conf
$ net.core.somaxconn = 20480 #最大隊(duì)列長(zhǎng)度,應(yīng)付突發(fā)的大并發(fā)連接請(qǐng)求,默認(rèn)為128
$ net.ipv4.tcp_max_syn_backlog = 20480 #半連接隊(duì)列長(zhǎng)度,此值受限于內(nèi)存大小,默認(rèn)為1024
$ sysctl -p #使參數(shù)生效
2,警告:過量使用內(nèi)存設(shè)置為0!在低內(nèi)存環(huán)境下,后臺(tái)保存可能失敗。為了修正這個(gè)問題,請(qǐng)?jiān)?etc/sysctl.conf 添加一項(xiàng) 'vm.overcommit_memory = 1' ,然后重啟(或者運(yùn)行命令'sysctl vm.overcommit_memory=1' )使其生效。
vm.overcommit_memory不同的值說明:
0 表示檢查是否有足夠的內(nèi)存可用,如果是,允許分配;如果內(nèi)存不夠,拒絕該請(qǐng)求,并返回一個(gè)錯(cuò)誤給應(yīng)用程序。
1 允許分配超出物理內(nèi)存加上交換內(nèi)存的請(qǐng)求
2 內(nèi)核總是返回true
redis的數(shù)據(jù)回寫機(jī)制分為兩種
同步回寫即SAVE命令。redis主進(jìn)程直接寫數(shù)據(jù)到磁盤。當(dāng)數(shù)據(jù)量大時(shí),這個(gè)命令將阻塞,響應(yīng)時(shí)間長(zhǎng)
異步回寫即BGSAVE命令。redis 主進(jìn)程fork一個(gè)子進(jìn)程,復(fù)制主進(jìn)程的內(nèi)存并通過子進(jìn)程回寫數(shù)據(jù)到磁盤。
由于RDB文件寫的時(shí)候fork一個(gè)子進(jìn)程。相當(dāng)于復(fù)制了一個(gè)內(nèi)存鏡像。當(dāng)時(shí)系統(tǒng)的內(nèi)存是4G,而redis占用了近3G的內(nèi)存,因此肯定會(huì)報(bào)內(nèi)存無法分配。如果 「vm.overcommit_memory」設(shè)置為0,在可用內(nèi)存不足的情況下,就無法分配新的內(nèi)存。如果 「vm.overcommit_memory」設(shè)置為1。 那么redis將使用交換內(nèi)存。
解決方法
$ vim /etc/sysctl
$ vm.overcommit_memory = 1 #末尾追加
$ sysctl -p #參數(shù)生效
注:使用交換內(nèi)存并不是一個(gè)完美的方案。最好的辦法是擴(kuò)大物理內(nèi)存。
3,Transparent Huge Pages (THP)告警,這是一個(gè)關(guān)于透明內(nèi)存巨頁的話題。簡(jiǎn)單來說內(nèi)存可管理的最小單位是page,一個(gè)page通常是4kb,那1M內(nèi)存就會(huì)有256個(gè)page,CPU通過內(nèi)置的內(nèi)存管理單元管理page表記錄。Huge Pages就是表示page的大小已超過4kb了,一般是2M到1G,它的出現(xiàn)主要是為了管理超大內(nèi)存。個(gè)人理解上TB的內(nèi)存。而THP就是管理Huge Pages的一個(gè)抽象層次,根據(jù)一些資料顯示THP會(huì)導(dǎo)致內(nèi)存鎖影響性能,所以一般建議關(guān)閉此功能。
/sys/kernel/mm/transparent_hugepage/enabled有三個(gè)值,如下:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
####
# always 盡量使用透明內(nèi)存,掃描內(nèi)存,有512個(gè) 4k頁面可以整合,就整合成一個(gè)2M的頁面
# never 關(guān)閉,不使用透明內(nèi)存
# madvise 避免改變內(nèi)存占用
關(guān)于THP的內(nèi)容就介紹到這里,現(xiàn)在根據(jù)警告是做些修改:
$ vim /etc/rc.local
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled #在開機(jī)腳本里追加此命令
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。