您好,登錄后才能下訂單哦!
要在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
安裝過程中會顯示把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目錄下
軟件安裝完成,下面是初始化數據:
切換到utils目錄下,執行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,
數據文件dump.rdb存放到/var/lib/redis/6379目錄下,
啟動腳本為/etc/init.d/redis_6379
查看日志發現有如下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,第一個錯誤大概是說somaxconn的值128設置過小,從/proc/sys/net/core/somaxconn這個路徑也可大概知道這個值的設置是關于網絡連接中某個最大值的限定設置,此值表示網絡連接的隊列大小,在配置文件redis.conf中的“tcp-backlog 511”就配置在高并發環境下的最大隊列大小,此值受限于系統的somaxconn與tcp_max_syn_backlog這兩個值,所以應該把這兩個內核參數值調大,具體解決方法如下:
$ vim /etc/sysctl.conf
$ net.core.somaxconn = 20480 #最大隊列長度,應付突發的大并發連接請求,默認為128
$ net.ipv4.tcp_max_syn_backlog = 20480 #半連接隊列長度,此值受限于內存大小,默認為1024
$ sysctl -p #使參數生效
2,警告:過量使用內存設置為0!在低內存環境下,后臺保存可能失敗。為了修正這個問題,請在/etc/sysctl.conf 添加一項 'vm.overcommit_memory = 1' ,然后重啟(或者運行命令'sysctl vm.overcommit_memory=1' )使其生效。
vm.overcommit_memory不同的值說明:
0 表示檢查是否有足夠的內存可用,如果是,允許分配;如果內存不夠,拒絕該請求,并返回一個錯誤給應用程序。
1 允許分配超出物理內存加上交換內存的請求
2 內核總是返回true
redis的數據回寫機制分為兩種
同步回寫即SAVE命令。redis主進程直接寫數據到磁盤。當數據量大時,這個命令將阻塞,響應時間長
異步回寫即BGSAVE命令。redis 主進程fork一個子進程,復制主進程的內存并通過子進程回寫數據到磁盤。
由于RDB文件寫的時候fork一個子進程。相當于復制了一個內存鏡像。當時系統的內存是4G,而redis占用了近3G的內存,因此肯定會報內存無法分配。如果 「vm.overcommit_memory」設置為0,在可用內存不足的情況下,就無法分配新的內存。如果 「vm.overcommit_memory」設置為1。 那么redis將使用交換內存。
解決方法
$ vim /etc/sysctl
$ vm.overcommit_memory = 1 #末尾追加
$ sysctl -p #參數生效
注:使用交換內存并不是一個完美的方案。最好的辦法是擴大物理內存。
3,Transparent Huge Pages (THP)告警,這是一個關于透明內存巨頁的話題。簡單來說內存可管理的最小單位是page,一個page通常是4kb,那1M內存就會有256個page,CPU通過內置的內存管理單元管理page表記錄。Huge Pages就是表示page的大小已超過4kb了,一般是2M到1G,它的出現主要是為了管理超大內存。個人理解上TB的內存。而THP就是管理Huge Pages的一個抽象層次,根據一些資料顯示THP會導致內存鎖影響性能,所以一般建議關閉此功能。
/sys/kernel/mm/transparent_hugepage/enabled有三個值,如下:
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
####
# always 盡量使用透明內存,掃描內存,有512個 4k頁面可以整合,就整合成一個2M的頁面
# never 關閉,不使用透明內存
# madvise 避免改變內存占用
關于THP的內容就介紹到這里,現在根據警告是做些修改:
$ vim /etc/rc.local
$ echo never > /sys/kernel/mm/transparent_hugepage/enabled #在開機腳本里追加此命令
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。