我試圖在memcached conf文件中以 -l 11211 -l 11212 的方式添加。但它僅僅是聽第一個即1121我們如何在不同端口的同一服務器上創建兩個memcached服務器實例?
回答
下面是memcached的說,-l
命令是:
-l <addr> interface to listen on (default: INADDR_ANY, all addresses)
<addr> may be specified as host:port. If you don't specify
a port number, the value you specified with -p or -U is
used. You may specify multiple addresses separated by comma
or by using -l multiple times
首先,你需要指定你想,如果你正在使用Memcached的偵聽的接口-l
標誌。對所有接口使用0.0.0.0
並使用127.0.0.1
您只是想從localhost
訪問memcached。其次,不要使用兩個-l
標誌。只能使用一個,並用逗號分隔每個地址。下面的命令應該做你想要的。
memcached -l 0.0.0.0:11211,0.0.0.0:11212
請記住,這將有一個memcached實例在兩個端口上偵聽。在一臺機器上有兩個memcached實例運行這兩個命令。
memcached -p 11211 -d
memcached -p 11212 -d
感謝您的回答。作爲魅力工作:) – panalbish 2011-05-14 13:13:05
哇感謝這真的會幫助我與我的羣集。 – WojonsTech 2012-09-22 02:53:05
這些都不適用於1.4.2,而且引用的文檔似乎不再存在。 – Brunis 2014-08-01 11:28:15
首先我用mikewied的解決方案,但後來碰到了自動啓動守護進程的問題。該解決方案另一個令人困惑的事情是,它不使用配置等。我正要在/etc/init.d中創建自己的啓動腳本,但後來我查看了/etc/init.d/memcached文件,並看到這個美麗的解決方案
# Usage:
# cp /etc/memcached.conf /etc/memcached_server1.conf
# cp /etc/memcached.conf /etc/memcached_server2.conf
# start all instances:
# /etc/init.d/memcached start
# start one instance:
# /etc/init.d/memcached start server1
# stop all instances:
# /etc/init.d/memcached stop
# stop one instance:
# /etc/init.d/memcached stop server1
# There is no "status" command.
基本上這個問題的讀者只需要閱讀/etc/init.d/memcached
文件。
乾杯
在/etc/memcached.conf您可以編輯象下面
-l 192.168.112.22,127.0.0.1
必須使用逗號之間有兩個IP地址
David Dzhagayev的回答是最好的。如果你沒有正確版本的memcache初始化腳本,這裏是他正在談論的那個:
它應該與任何使用init的linux發行版一起工作。
#! /bin/bash
### BEGIN INIT INFO
# Provides: memcached
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $local_fs
# Should-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start memcached daemon
# Description: Start up memcached, a high-performance memory caching daemon
### END INIT INFO
# Usage:
# cp /etc/memcached.conf /etc/memcached_server1.conf
# cp /etc/memcached.conf /etc/memcached_server2.conf
# start all instances:
# /etc/init.d/memcached start
# start one instance:
# /etc/init.d/memcached start server1
# stop all instances:
# /etc/init.d/memcached stop
# stop one instance:
# /etc/init.d/memcached stop server1
# There is no "status" command.
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/memcached
DAEMONNAME=memcached
DAEMONBOOTSTRAP=/usr/share/memcached/scripts/start-memcached
DESC=memcached
test -x $DAEMON || exit 0
test -x $DAEMONBOOTSTRAP || exit 0
set -e
. /lib/lsb/init-functions
# Edit /etc/default/memcached to change this.
ENABLE_MEMCACHED=no
test -r /etc/default/memcached && . /etc/default/memcached
FILES=(/etc/memcached_*.conf)
# check for alternative config schema
if [ -r "${FILES[0]}" ]; then
CONFIGS=()
for FILE in "${FILES[@]}";
do
# remove prefix
NAME=${FILE#/etc/}
# remove suffix
NAME=${NAME%.conf}
# check optional second param
if [ $# -ne 2 ];
then
# add to config array
CONFIGS+=($NAME)
elif [ "memcached_$2" == "$NAME" ];
then
# use only one memcached
CONFIGS=($NAME)
break;
fi;
done;
if [ ${#CONFIGS[@]} == 0 ];
then
echo "Config not exist for: $2" >&2
exit 1
fi;
else
CONFIGS=(memcached)
fi;
CONFIG_NUM=${#CONFIGS[@]}
for ((i=0; i < $CONFIG_NUM; i++)); do
NAME=${CONFIGS[${i}]}
PIDFILE="/var/run/${NAME}.pid"
case "$1" in
start)
echo -n "Starting $DESC: "
if [ $ENABLE_MEMCACHED = yes ]; then
start-stop-daemon --start --quiet --exec "$DAEMONBOOTSTRAP" -- /etc/${NAME}.conf $PIDFILE
echo "$NAME."
else
echo "$NAME disabled in /etc/default/memcached."
fi
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --oknodo --retry 5 --pidfile $PIDFILE --exec $DAEMON
echo "$NAME."
rm -f $PIDFILE
;;
restart|force-reload)
#
# If the "reload" option is implemented, move the "force-reload"
# option to the "reload" entry above. If not, "force-reload" is
# just the same as "restart".
#
echo -n "Restarting $DESC: "
start-stop-daemon --stop --quiet --oknodo --retry 5 --pidfile $PIDFILE
rm -f $PIDFILE
if [ $ENABLE_MEMCACHED = yes ]; then
start-stop-daemon --start --quiet --exec "$DAEMONBOOTSTRAP" -- /etc/${NAME}.conf $PIDFILE
echo "$NAME."
else
echo "$NAME disabled in /etc/default/memcached."
fi
;;
status)
status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
exit 1
;;
esac
done;
exit 0
好的,非常好的答案,特里斯坦CHARBONNIER。 請更換代碼到文件在/ usr /共享/分佈式緩存/腳本/啓動memcached的:
#!/usr/bin/perl -w
# start-memcached
# 2003/2004 - Jay Bonci
# This script handles the parsing of the /etc/memcached.conf file
# and was originally created for the Debian distribution.
# Anyone may use this little script under the same terms as
# memcached itself.
use strict;
if($> != 0 and $< != 0)
{
print STDERR "Only root wants to run start-memcached.\n";
exit;
}
my $params; my $etchandle; my $etcfile = "/etc/memcached.conf";
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/memcached.pid
my $memcached = "/usr/bin/memcached";
my $pidfile = "/var/run/memcached.pid";
if (scalar(@ARGV) == 2) {
$etcfile = shift(@ARGV);
$pidfile = shift(@ARGV);
}
# If we don't get a valid logfile parameter in the /etc/memcached.conf file,
# we'll just throw away all of our in-daemon output. We need to re-tie it so
# that non-bash shells will not hang on logout. Thanks to Michael Renner for
# the tip
my $fd_reopened = "/dev/null";
sub handle_logfile
{
my ($logfile) = @_;
$fd_reopened = $logfile;
}
sub reopen_logfile
{
my ($logfile) = @_;
open *STDERR, ">>$logfile";
open *STDOUT, ">>$logfile";
open *STDIN, ">>/dev/null";
$fd_reopened = $logfile;
}
# This is set up in place here to support other non -[a-z] directives
my $conf_directives = {
"logfile" => \&handle_logfile,
};
if(open $etchandle, $etcfile)
{
foreach my $line (< $etchandle>)
{
$line ||= "";
$line =~ s/\#.*//g;
$line =~ s/\s+$//g;
$line =~ s/^\s+//g;
next unless $line;
next if $line =~ /^\-[dh]/;
if($line =~ /^[^\-]/)
{
my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
$conf_directives->{$directive}->($arg);
next;
}
push @$params, $line;
}
}else{
$params = [];
}
push @$params, "-u root" unless(grep "-u", @$params);
$params = join " ", @$params;
if(-e $pidfile)
{
open PIDHANDLE, "$pidfile";
my $localpid = <PIDHANDLE>;
close PIDHANDLE;
chomp $localpid;
if(-d "/proc/$localpid")
{
print STDERR "memcached is already running.\n";
exit;
}else{
`rm -f $localpid`;
}
}
my $pid = fork();
if($pid == 0)
{
reopen_logfile($fd_reopened);
exec "$memcached $params";
exit(0);
}else{
if(open PIDHANDLE,">$pidfile")
{
print PIDHANDLE $pid;
close PIDHANDLE;
}else{
print STDERR "Can't write pidfile to $pidfile.\n";
}
}
簡單的解決方案,以CentOS 6的
首頁複印/etc/sysconfig/memcached
到/etc/sysconfig/memcached2
並寫入新設置到新的文件。
然後/etc/init.d/memcached
複製到/etc/init.d/memcached2
並在新文件中的變化:
- 端口連接到新的端口(它應該從
/etc/sysconfig/memcached2
復位,所以我們這樣做是以防萬一) /etc/sysconfig/memcached
到/etc/sysconfig/memcached2
/var/run/memcached/memcached.pid
到/var/run/memcached/memcached2.pid
/var/lock/subsys/memcached
到/var/lock/subsys/memcached2
現在你可以使用service memcached2 start
,service memcached2 stop
等。不要忘記chkconfig memcached2在機器啓動時運行它。
如果有人絆倒這個問題,memcached的debian發行版有一個bug(這意味着像Ubuntu這樣的風格也會受到影響)。
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784357
由於這個錯誤,即使你有單獨的配置文件,當您運行sudo service memcached restart
,只有在/etc/memcached.conf
默認的配置文件將被加載。
正如comment here提到的,臨時的解決辦法是
刪除
/lib/systemd/system/memcached.service
運行
sudo systemctl daemon-reload
(不用擔心,它是安全的 左右)最後,運行
sudo service memcached reload
- 1. 如何在不同的端口上啓動多個memcached服務器
- 2. 在兩個不同的端口上運行Tomcat服務器
- 3. 如何在同一臺服務器上創建另一個Redis服務器實例(由Laravel Forge管理)
- 4. Perl - 創建偵聽不同端口的多個HTTP服務器
- 5. 服務器代理正在linux機器上運行服務正在不同的端口上運行我們如何獲得不同端口上使用的CPU?
- 6. 同一臺服務器上的兩個OwnCloud實例
- 7. Apache Web服務器,在同一服務器上的不同端口上的多個應用程序
- 8. 如何創建兩個配置相同服務的實例?
- 9. 跨域Ajax,同一個服務器但不同的端口?
- 10. 我們應該需要兩臺服務器,在服務器端
- 11. 在同一個端口上打開多個服務器
- 12. 兩個網絡服務器在同一實例中的不同域
- 13. 偵聽兩個不同端口的TCP服務器
- 14. WCF客戶端和服務在同一個服務器上的網絡服務
- 15. Angularjs頁面和服務器在兩個不同服務器中
- 16. 在Memcached的多個服務器上設置多個實例
- 17. Symfony2在同一臺服務器上的兩個實例不能正常運行
- 18. ArangoDB在同一臺服務器上的多個實例
- 19. 在同一個端口上運行apache服務器和節點
- 20. jetty服務器9.1多個嵌入式端口和應用程序在同一服務器實例中
- 21. 在同一臺服務器上運行多個Microsoft主數據服務實例
- 22. WCF服務在兩個不同的服務合同上暴露2個端點
- 23. 在不同的服務器上創建相同的會話
- 24. 如何運行監聽兩個不同端口的兩個java套接字服務器實例?
- 25. 不同的服務器上
- 26. OSGI兩個相同服務的實例
- 27. WWF服務和ASP.NET客戶端在同一臺服務器上
- 28. 多個RabbitMQ實例在同一臺服務器和epmd上
- 29. Nginx:隱藏單個服務器上不同域的端口
- 30. 在我爲一個服務器準備我的測試不同的服務器
爲了模擬集羣環境,我在一臺服務器上運行兩個tomcat,但兩臺tomcat服務器都共享一臺mysql服務器。如果我錯了,請糾正我。 對於粘性會話共享的目的,我需要運行memcahed作爲守護進程。 – panalbish 2011-05-08 16:37:17