要在centos7上安裝redis的主從,下面記錄一下安裝過(guò)程。
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名注冊(cè)、虛擬主機(jī)、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
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
安裝過(guò)程中會(huì)顯示把redis放在什么目錄下:下面是安裝過(guò)程中的一部分
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ò)誤大概是說(shuō)somaxconn的值128設(shè)置過(guò)小,從/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,警告:過(guò)量使用內(nèi)存設(shè)置為0!在低內(nèi)存環(huán)境下,后臺(tái)保存可能失敗。為了修正這個(gè)問(wèn)題,請(qǐng)?jiān)?etc/sysctl.conf 添加一項(xiàng) 'vm.overcommit_memory = 1' ,然后重啟(或者運(yùn)行命令'sysctl vm.overcommit_memory=1' )使其生效。
vm.overcommit_memory不同的值說(shuō)明:
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ù)回寫(xiě)機(jī)制分為兩種
同步回寫(xiě)即SAVE命令。redis主進(jìn)程直接寫(xiě)數(shù)據(jù)到磁盤(pán)。當(dāng)數(shù)據(jù)量大時(shí),這個(gè)命令將阻塞,響應(yīng)時(shí)間長(zhǎng)
異步回寫(xiě)即BGSAVE命令。redis 主進(jìn)程fork一個(gè)子進(jìn)程,復(fù)制主進(jìn)程的內(nèi)存并通過(guò)子進(jìn)程回寫(xiě)數(shù)據(jù)到磁盤(pán)。
由于RDB文件寫(xiě)的時(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)存無(wú)法分配。如果 「vm.overcommit_memory」設(shè)置為0,在可用內(nèi)存不足的情況下,就無(wú)法分配新的內(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)存巨頁(yè)的話題。簡(jiǎn)單來(lái)說(shuō)內(nèi)存可管理的最小單位是page,一個(gè)page通常是4kb,那1M內(nèi)存就會(huì)有256個(gè)page,CPU通過(guò)內(nèi)置的內(nèi)存管理單元管理page表記錄。Huge Pages就是表示page的大小已超過(guò)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頁(yè)面可以整合,就整合成一個(gè)2M的頁(yè)面
# 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 #在開(kāi)機(jī)腳本里追加此命令
名稱欄目:redis3.2.3安裝
網(wǎng)站路徑:http://m.kartarina.com/article32/gesgpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、品牌網(wǎng)站制作、網(wǎng)站制作、云服務(wù)器、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)