[Pacemaker] Squid ocf agent. Temporaly unknown error stopping squid daemon.
Mauricio Esteban
mauriciomem at gmail.com
Wed May 8 00:56:26 CEST 2013
Hello,
I'm working on a ACTIVE/PASSIVE proxy cluster on debian 6.0.7. The cluster
has two resources configured, an OCF IPaddr2 agent and a squid OCF agent.
The IPaddr2 agent is working fine, but the squid agent shows a temporary
error when I manually stop the service (/etc/init.d/squid stop) in the node
with the
running resource.
If I stop the resource, restart the server o put on standby the node
running the squid agent, the service stops fine and passes it to the other
node.
The only issue appears during the stop of the service.
The servers (debian 6.0.7) kernel and packages version:
uname -r
2.6.32-5-amd64
pacemaker 1.0.9.1+hg15626-1
heartbeat 1:3.0.3-2
libheartbeat2 1:3.0.3-2
Pacemaker configuration:
crm configure show
node $id="433a22e8-9620-4889-b407-47125a40d4ae" proxyfailovernoc \
attributes standby="off"
node $id="dfb4a72b-24bb-4410-809d-514952f68e76" proxynoc \
attributes standby="off"
primitive ClusterIP ocf:heartbeat:IPaddr2 \
params ip="10.5.15.42" cidr_netmask="32" nic="eth0" \
op monitor interval="10s"
primitive ClusterSquid ocf:heartbeat:Squid \
params squid_exe="/usr/sbin/squid"
squid_conf="/etc/squid/squid.conf" squid_pidfile="/var/run/squid.pid"
squid_port="80" squid_stop_timeout="30" \
op start interval="0" timeout="60s" \
op stop interval="0" timeout="120s" \
op monitor interval="2s" timeout="30s" \
meta target-role="Started" failure-timeout="30s"
property $id="cib-bootstrap-options" \
dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \
cluster-infrastructure="Heartbeat" \
stonith-enabled="false" \
last-lrm-refresh="1367960908" \
expected-quorum-votes="2"
This is my pacemaker status before stopping squid:
crm_mon -1ro
============
Last updated: Tue May 7 18:08:36 2013
Stack: Heartbeat
Current DC: proxyfailovernoc (433a22e8-9620-4889-b407-47125a40d4ae) -
partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ proxyfailovernoc proxynoc ]
Full list of resources:
ClusterIP (ocf::heartbeat:IPaddr2): Started proxyfailovernoc
ClusterSquid (ocf::heartbeat:Squid): Started proxynoc
Operations:
* Node proxynoc:
ClusterIP: migration-threshold=1000000
+ (6) start: rc=0 (ok)
+ (7) monitor: interval=10000ms rc=0 (ok)
+ (9) stop: rc=0 (ok)
ClusterSquid: migration-threshold=1000000
+ (12) monitor: interval=2000ms rc=0 (ok)
* Node proxyfailovernoc:
ClusterIP: migration-threshold=1000000
+ (10) stop: rc=0 (ok)
+ (11) start: rc=0 (ok)
+ (12) monitor: interval=10000ms rc=0 (ok)
crm_verify -LVVV
crm_verify[5411]: 2013/05/07_18:10:43 info: main: =#=#=#=#= Getting XML
=#=#=#=#=
crm_verify[5411]: 2013/05/07_18:10:43 info: main: Reading XML from: live
cluster
crm_verify[5411]: 2013/05/07_18:10:43 info: unpack_config: Node scores:
'red' = -INFINITY, 'yellow' = 0, 'green' = 0
crm_verify[5411]: 2013/05/07_18:10:43 info: determine_online_status: Node
proxynoc is online
crm_verify[5411]: 2013/05/07_18:10:43 info: determine_online_status: Node
proxyfailovernoc is online
crm_verify[5411]: 2013/05/07_18:10:43 notice: native_print: ClusterIP
(ocf::heartbeat:IPaddr2): Started proxyfailovernoc
crm_verify[5411]: 2013/05/07_18:10:43 notice: native_print:
ClusterSquid (ocf::heartbeat:Squid): Started proxynoc
crm_verify[5411]: 2013/05/07_18:10:43 notice: RecurringOp: Start recurring
monitor (2s) for ClusterSquid on proxynoc
crm_verify[5411]: 2013/05/07_18:10:43 notice: LogActions: Leave resource
ClusterIP (Started proxyfailovernoc)
crm_verify[5411]: 2013/05/07_18:10:43 notice: LogActions: Leave resource
ClusterSquid (Started proxynoc)
Squid status before stopping daemon
netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:*
LISTEN 2068/(squid)
cat /var/run/squid.pid
2068
ps auxf | grep squid
root 2063 0.0 0.0 21832 660 ? Ss 18:00 0:00
/usr/sbin/squid -f /etc/squid/squid.conf
proxy 2068 0.0 0.1 29864 6408 ? S 18:00 0:00 \_
(squid) -f /etc/squid/squid.conf
At the moment I run /etc/init.d/squid stop, appears in the HA log:
tail -f /var/log/ha.log
Squid[7405]: 2013/05/07_18:17:36 INFO: squid:Inconsistent processes:
2063,2068,
Squid[7405]: 2013/05/07_18:17:37 INFO: squid:Inconsistent processes:
2063,2068,
Squid[7405]: 2013/05/07_18:17:38 INFO: squid:Inconsistent processes:
2063,2068,
Squid[7405]: 2013/05/07_18:17:39 INFO: squid:Inconsistent processes:
2063,2068,
Squid[7405]: 2013/05/07_18:17:39 ERROR: squid:Inconsistency of processes
remains unsolved
May 07 18:17:39 proxynoc crmd: [1426]: info: process_lrm_event: LRM
operation ClusterSquid_monitor_2000 (call=12, rc=1, cib-update=25,
confirmed=false)
unknon error
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_ha_callback: Update
relayed from proxyfailovernoc
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_local_callback:
Expanded fail-count-ClusterSquid=value++ to 1
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_trigger_update: Sending
flush op to all hosts for: fail-count-ClusterSquid (1)
May 07 18:17:41 proxynoc lrmd: [1423]: info: cancel_op: operation
monitor[12] on ocf::Squid::ClusterSquid for client 1426, its parameters:
squid_exe=[/usr/sbn/squid] squid_port=[80] crm_feature_set=[3.0.1]
squid_stop_timeout=[30] squid_pidfile=[/var/run/squid.pid]
CRM_meta_name=[monitor]
squid_conf=[/etc/squid/sqid.conf] CRM_meta_timeout=[30000]
CRM_meta_interval=[2000] cancelled
May 07 18:17:41 proxynoc crmd: [1426]: info: do_lrm_rsc_op: Performing
key=2:9:0:cb9946fc-164c-495f-a75b-bbaeca933a6c op=ClusterSquid_stop_0 )
May 07 18:17:41 proxynoc lrmd: [1423]: info: rsc:ClusterSquid:13: stop
May 07 18:17:41 proxynoc crmd: [1426]: info: process_lrm_event: LRM
operation ClusterSquid_monitor_2000 (call=12, status=1, cib-update=0,
confirmed=true)
Canelled
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_perform_update: Sent
update 17: fail-count-ClusterSquid=1
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_ha_callback: Update
relayed from proxyfailovernoc
May 07 18:17:41 proxynoc attrd: [1425]: info: find_hash_entry: Creating
hash entry for last-failure-ClusterSquid
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_trigger_update: Sending
flush op to all hosts for: last-failure-ClusterSquid (1367961460)
May 07 18:17:41 proxynoc attrd: [1425]: info: attrd_perform_update: Sent
update 20: last-failure-ClusterSquid=1367961460
May 07 18:17:41 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr) ls:
May 07 18:17:41 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr) cannot access /proc/2068/exe
May 07 18:17:41 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr) : No such file or directory
May 07 18:17:41 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr)
Squid[7471]: 2013/05/07_18:17:42 INFO: squid:stop_squid:315: stop NORM
1/30
May 07 18:17:42 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr) ls:
May 07 18:17:42 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr) cannot access /proc/2068/exe
May 07 18:17:42 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr) : No such file or directory
May 07 18:17:42 proxynoc lrmd: [1423]: info: RA output:
(ClusterSquid:stop:stderr)
May 07 18:17:42 proxynoc crmd: [1426]: info: process_lrm_event: LRM
operation ClusterSquid_stop_0 (call=13, rc=0, cib-update=26,
confirmed=true) ok
May 07 18:17:43 proxynoc crmd: [1426]: info: do_lrm_rsc_op: Performing
key=8:10:0:cb9946fc-164c-495f-a75b-bbaeca933a6c op=ClusterSquid_start_0 )
May 07 18:17:43 proxynoc lrmd: [1423]: info: rsc:ClusterSquid:14: start
Squid[7504]: 2013/05/07_18:17:43 INFO: squid:Waiting for squid to be
invoked
Squid[7504]: 2013/05/07_18:17:45 INFO: squid:Waiting for squid to be
invoked
May 07 18:17:46 proxynoc crmd: [1426]: info: process_lrm_event: LRM
operation ClusterSquid_start_0 (call=14, rc=0, cib-update=27,
confirmed=true) ok
May 07 18:17:47 proxynoc crmd: [1426]: info: do_lrm_rsc_op: Performing
key=9:10:0:cb9946fc-164c-495f-a75b-bbaeca933a6c
op=ClusterSquid_monitor_2000 )
May 07 18:17:47 proxynoc lrmd: [1423]: info: rsc:ClusterSquid:15: monitor
May 07 18:17:47 proxynoc crmd: [1426]: info: process_lrm_event: LRM
operation ClusterSquid_monitor_2000 (call=15, rc=0, cib-update=28,
confirmed=false) ok
This status is only shown between 2 to 4 seconds and everything becomes as
before:
crm_mon
============
Last updated: Tue May 7 18:19:22 2013
Stack: Heartbeat
Current DC: proxyfailovernoc (433a22e8-9620-4889-b407-47125a40d4ae) -
partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ proxyfailovernoc proxynoc ]
ClusterIP (ocf::heartbeat:IPaddr2): Started proxyfailovernoc
ClusterSquid (ocf::heartbeat:Squid): Started proxynoc FAILED
Failed actions:
ClusterSquid_monitor_2000 (node=proxynoc, call=15, rc=1,
status=complete): unknown error
The logs shows at the beginning some inconsistent pid numbers, and a
standard error thrown by de RA output. Searching in the squid ocf script
(/usr/lib/ocf/resource.d/heartbeat/Squid), the function get_pids() take the
squid daemon pid from different sources.
If I execute the three commands it shows:
# Seek by pattern
SQUID_PIDS[0]= 8205
# Seek by pidfile
SQUID_PIDS[1]= 8207
# Seek by port
SQUID_PIDS[2]= 8207
At first glance, the problem seems to be at the search through the pattern.
If i change the command store in the variable, I can correct the value:
#SQUID_PIDS[0]=$(pgrep -f "$PROCESS_PATTERN")
SQUID_PIDS[0]=$(pgrep -f "\(squid\) -f /etc/squid/squid.conf")
with this change all searches find the same ips
get_pids()
{
SQUID_PIDS=()
# Seek by pattern
SQUID_PIDS[0]=$(pgrep -f "$PROCESS_PATTERN")
# Seek by pidfile
SQUID_PIDS[1]=$(awk '1{print $1}' $SQUID_PIDFILE 2>/dev/null)
if [[ -n "${SQUID_PIDS[1]}" ]]; then
typeset exe
exe=$(ls -l "/proc/${SQUID_PIDS[1]}/exe")
if [[ $? = 0 ]]; then
exe=${exe##*-> }
if ! [[ "$exe" = $SQUID_EXE ]]; then
SQUID_PIDS[1]=""
fi
else
SQUID_PIDS[1]=""
fi
fi
# Seek by port
SQUID_PIDS[2]=$(
netstat -apn |
awk '/tcp.*[0-9]+\.[0-9]+\.+[0-9]+\.[0-9]+:'$SQUID_PORT' /{
sub("\\/.*", "", $7); print $7; exit}')
}
But the problem remains still:
Squid[18840]: 2013/05/07_18:55:23 INFO: squid:Inconsistent processes:
8207,8207,
Squid[18840]: 2013/05/07_18:55:24 INFO: squid:Inconsistent processes:
8207,8207,
Squid[18840]: 2013/05/07_18:55:25 INFO: squid:Inconsistent processes:
8207,8207,
Squid[18840]: 2013/05/07_18:55:26 INFO: squid:Inconsistent processes:
8207,8207,
In this case, it shows the same process id. The standard error continues to
appear.
I think this shows that the process monitor_squid() doesn't save all the
pids from get_pids() at the moment I stop the daemon. If echoed the output
the get_pid function inside the while loop, it only shows two of the three
pids searches.
monitor_squid()
{
typeset trialcount=0
while true; do
get_pids
if are_all_pids_found; then
are_pids_sane
return $OCF_SUCCESS
fi
if is_squid_dead; then
return $OCF_NOT_RUNNING
fi
ocf_log info "$SQUID_NAME:Inconsistent processes:" \
"${SQUID_PIDS[0]},${SQUID_PIDS[1]},${SQUID_PIDS[2]}"
(( trialcount = trialcount + 1 ))
if (( trialcount > SQUID_CONFIRM_TRIALCOUNT )); then
ocf_log err "$SQUID_NAME:Inconsistency of processes
remains unsolved"
return $OCF_ERR_GENERIC
fi
sleep 1
done
}
I don't know how to correct this issue. Every time this process happen my
failure count goes up.
I cant find a solution, I don't know if the process should stay in the
array value at the moment I stop the daemon, but it shows an error.
Tell me if you need more information.
Thanks in advance
Mauricio Esteban.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://oss.clusterlabs.org/pipermail/pacemaker/attachments/20130507/b3ee6393/attachment-0001.html>
More information about the Pacemaker
mailing list