我希望在HA设置中将keydb/redis用于php会话存储。目前,我有两个keydb实例,其配置如下:
实例1 (192.168.2.10)
requirepass pass123
masterauth pass123
# you will need to configure the following
multi-master yes
active-replica yes
replicaof 192.168.2.9 6379实例2 (192.168.2.9)
requirepass pass123
masterauth pass123
# you will need to configure the following
multi-master yes
active-replica yes
replicaof 192.168.2.10 6379然后,我在php设置中配置了以下内容
session.save_handler = redis
session.save_path = "tcp://192.168.2.10:6379?timeout=1.5&auth=pass123, tcp://192.168.2.9:6379?timeout=1.5&auth=pass123"当两个实例都联机时,一切都按预期工作。当我将其中一个keydb服务器脱机时,如果php选择了该实例,它将出错-而不是使用一个活动的实例。
有没有一种不通过haproxy或哨兵样式配置来运行它的方法?
发布于 2023-02-22 22:14:32
我也有一个类似的问题,不想经历设置哈代的麻烦。相反,我将我的Keydb主机名放在我的/etc/hosts文件中,然后创建一个check_keydb脚本,该脚本监视每个服务器,然后在其中一个Keydb服务器运行时修改/etc/hosts文件。这个脚本从cron每分钟运行一次。如果发现问题,它也会给我发电子邮件警报。
要检查Keydb服务器的状态,我使用nc发送PING命令,然后等待+PONG响应。
在我的例子中,我只使用一个主Keydb服务器,另一个是热备份。但是,您可以轻松地修改脚本以处理多个活动服务器。如果服务器出现故障,只需让脚本从/etc/hosts文件中删除其主机名即可。
下面是我剧本的副本。当然,您需要调整IP地址,并对特定配置进行任何必要的更改。
#
# Checks both connections to our mirrored Keydb/Redis servers.
# If one of them is down, adjust the keydb hostname in /etc/hosts
# and make it point to the IP address of the active server.
#
FROM_EMAIL="check_keydb@mydomain.com"
NOTIFY_EMAIL="admin@mydomain.com"
PORT=6379
TARGET1=keydb1
TARGET2=keydb2
TARGET1_STATUS=up
TARGET2_STATUS=up
RESPONSE=$(echo PING | nc -w 2 $TARGET1 $PORT | tr -d '\r\n')
if [ "$RESPONSE" != "+PONG" ]
then
TARGET1_STATUS=down
fi
RESPONSE=$(echo PING | nc -w 2 $TARGET2 $PORT | tr -d '\r\n')
if [ "$RESPONSE" != "+PONG" ]
then
TARGET2_STATUS=down
fi
HOSTS_FILE=/etc/hosts
if [[ "$TARGET1_STATUS" != "up" || "$TARGET2_STATUS" != "up" ]]
then
grep -v -E '^\s*10\.15\.124\.3[12]\s+keydb\s+' $HOSTS_FILE > /tmp/hosts.tmp
cat <<__EOT__ | mail -r $FROM_EMAIL -s 'keydb server has problems' $NOTIFY_EMAIL
$TARGET1:$PORT $TARGET1_STATUS
$TARGET2:$PORT $TARGET2_STATUS
__EOT__
fi
if [ "$TARGET1_STATUS" != "up" ]
then
cp /tmp/hosts.tmp $HOSTS_FILE
echo "10.15.124.32 keydb # main connection" >> $HOSTS_FILE
echo $TARGET1:$PORT $TARGET1_STATUS
exit 1
fi
if [ "$TARGET2_STATUS" != "up" ]
then
cp /tmp/hosts.tmp $HOSTS_FILE
echo "10.15.124.31 keydb # main connection" >> $HOSTS_FILE
echo $TARGET2:$PORT $TARGET2_STATUS
exit 1
fi
echo "OK"
exit 0警告:在生产服务器上激活脚本之前,请确保保存原始/etc/hosts文件的副本。30年后,我应该知道得更清楚了,但我忘了这么做,不小心弄坏了我的原版,导致几个重要的服务离线几分钟,直到我可以从备份中恢复文件。只要做一个cp /etc/hosts /etc/hosts.bak,如果出了问题,你可以省去很多麻烦。
此外,如果有多个need服务器访问您的Keydb服务器,则需要在每个服务器上运行此脚本,使其调整其本地/etc/hosts文件。然而,如果是这样的话,那么仅仅设置make并进行真正的负载平衡/故障转移可能会更有意义。
作为修改/etc/hosts文件的替代方法,您可以创建一个类似的脚本来修改您的php.ini文件,并将session.save_path =变量设置为只包含当前活动的Keydb服务器(只需记住对正在运行的任何set服务器执行“重新加载”命令)。
https://serverfault.com/questions/1116372
复制相似问题