之前一篇文章 Redis安裝及主從配置 介紹了redis的安裝配置,另一篇檔案介紹了 Docker Centos安裝Openssh 。今天將兩篇檔案結合一下——在Docker Centos環境下搭建redis快取資料庫。
Redis安裝及主從配置 中執行到 “2.2.4啟動 redis 服務” 即可認定為redis環境搭建完畢。但是要在docker容器中搭建這些東西就不這麼容易了。比如你的容器中要存在make、g++、autoconfig等環境,但是仔細想想,這些編譯需要的環境在真正執行的時候並沒有什麼O用。所以我們今天不用這種方式搭建。我們用的方式如下:
1、在docker宿主機上,按照Docker Centos安裝Openssh,搭建Docker centos ssh 環境
2、在普通Linux伺服器上,按照Redis安裝及主從配置 執行到 “2.2.4啟動 redis 服務”
3、將上一步生成的資料夾 /usr/local/webserver/redis 拷貝到Docker centos ssh 環境中,並未可執行檔案賦許可權
4、編寫開機啟動指令碼
[root@redis /]# vi /run.sh #!/bin/bash /usr/local/webserver/redis/start.sh /usr/sbin/sshd -D
OK,就這麼簡單的完成了。
另外想分享一個我遇到的問題,建立了redis容器之後,在宿主機上對容器進行重啟的過程中,如果redis資料庫在進行讀寫任務的話,重新啟動的容器有可能無法啟動redis服務。具體報錯如下:
[root@redis redis]# /usr/local/webserver/redis/redis-server /usr/local/webserver/redis/conf/redis.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 2.6.16 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in stand alone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 42 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' [42] 27 Jul 07:03:30.511 # Server started, Redis version 2.6.16 [42] 27 Jul 07:03:30.511 # 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. [42] 27 Jul 07:03:30.511 # Wrong signature trying to load DB from file [42] 27 Jul 07:03:30.511 # Fatal error loading the DB: Invalid argument. Exiting.
分析原因是redis在運算元據檔案時被強制停止,導致資料檔案不完整、格式正確。
解決方法:
刪除/usr/local/webserver/redis/db/ 資料夾下的 *.rdb 檔案,重啟redis容器即可