-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
K8SPS-283: Add HAProxy for group replication #399
Changes from 21 commits
01a3032
16cca14
458111b
c7f3887
9626151
6c6038f
5c64874
935c370
6f1295a
58d1a31
b093191
3793730
275ec01
12764c1
988ce81
c4a916e
9ac46e5
0c704be
140e60a
5acfa6e
070a3bd
5f7b5be
d15103c
c376372
8b99311
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -3,12 +3,41 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
set -e | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
set -o xtrace | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
log() { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
local message=$1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
local date=$(/usr/bin/date +"%d/%b/%Y:%H:%M:%S.%3N") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
echo "{\"time\":\"${date}\", \"message\": \"${message}\"}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
echo "${CLUSTER_TYPE}" >/tmp/cluster_type | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ "$1" = 'haproxy' ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ ! -f '/etc/haproxy/mysql/haproxy.cfg' ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cp /opt/percona/haproxy.cfg /etc/haproxy/mysql | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ ! -f '/etc/haproxy/mysql/haproxy.cfg' ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
cp /opt/percona/haproxy.cfg /etc/haproxy/mysql | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
custom_conf='/etc/haproxy-custom/haproxy.cfg' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ -f "$custom_conf" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
log "haproxy -c -f $custom_conf -f /etc/haproxy/mysql/haproxy.cfg" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy -c -f $custom_conf -f /etc/haproxy/mysql/haproxy.cfg || EC=$? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ -n "$EC" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
log "The custom config $custom_conf is not valid and will be ignored." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy_opt='-W -db ' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ -f "$custom_conf" -a -z "$EC" ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Check warning on line 30 in build/haproxy-entrypoint.sh GitHub Actions / shellcheck[shellcheck] build/haproxy-entrypoint.sh#L30 <ShellCheck.SC2166>
Raw output
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy_opt+="-f $custom_conf " | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy_opt+='-f /opt/percona/haproxy-global.cfg ' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy_opt+='-f /etc/haproxy/mysql/haproxy.cfg -p /etc/haproxy/mysql/haproxy.pid -S /etc/haproxy/mysql/haproxy-main.sock' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy_opt='-W -db -f /opt/percona/haproxy-global.cfg -f /etc/haproxy/mysql/haproxy.cfg -p /etc/haproxy/mysql/haproxy.pid -S /etc/haproxy/mysql/haproxy-main.sock' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if [ -f '/etc/haproxy/config/haproxy.cfg' ]; then | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
haproxy_opt="${haproxy_opt} -f /etc/haproxy/config/haproxy.cfg" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+16
to
+40
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [shfmt] reported by reviewdog 🐶
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fi | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec "$@" ${haproxy_opt} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec "$@" "${haproxy_opt}" |
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -2,6 +2,14 @@ | |||||||||||||
|
||||||||||||||
set -e | ||||||||||||||
|
||||||||||||||
log() { | ||||||||||||||
local level=$1 | ||||||||||||||
local message=$2 | ||||||||||||||
local date=$(/usr/bin/date +"%d/%b/%Y:%H:%M:%S.%3N") | ||||||||||||||
egegunes marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [shfmt] reported by reviewdog 🐶
Suggested change
|
||||||||||||||
|
||||||||||||||
echo "{\"time\":\"${date}\", \"level\": \"${level}\", \"message\": \"${message}\"}" | ||||||||||||||
egegunes marked this conversation as resolved.
Show resolved
Hide resolved
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. [shfmt] reported by reviewdog 🐶
Suggested change
|
||||||||||||||
} | ||||||||||||||
|
||||||||||||||
MYSQL_SERVER_IP=$3 | ||||||||||||||
MYSQL_SERVER_PORT='33062' | ||||||||||||||
|
||||||||||||||
|
@@ -11,21 +19,46 @@ | |||||||||||||
TIMEOUT=${CUSTOM_TIMEOUT:-10} | ||||||||||||||
MYSQL_CMDLINE="/usr/bin/timeout $TIMEOUT /usr/bin/mysql -nNE -u${MONITOR_USER} -h ${MYSQL_SERVER_IP} -P ${MYSQL_SERVER_PORT}" | ||||||||||||||
|
||||||||||||||
READ_ONLY=$(MYSQL_PWD="${MONITOR_PASSWORD}" ${MYSQL_CMDLINE} -e 'select @@super_read_only' | /usr/bin/sed -n -e '2p' | /usr/bin/tr -d '\n') | ||||||||||||||
CLUSTER_TYPE=$(/bin/cat /tmp/cluster_type) | ||||||||||||||
|
||||||||||||||
check_async() { | ||||||||||||||
READ_ONLY=$(MYSQL_PWD="${MONITOR_PASSWORD}" ${MYSQL_CMDLINE} -e 'select @@super_read_only' | /usr/bin/sed -n -e '2p' | /usr/bin/tr -d '\n') | ||||||||||||||
|
||||||||||||||
# ${REPLICATION_STATUS[0]} - Replica_IO_Running | ||||||||||||||
# ${REPLICATION_STATUS[1]} - Replica_SQL_Running | ||||||||||||||
REPLICATION_STATUS=($(MYSQL_PWD="${MONITOR_PASSWORD}" ${MYSQL_CMDLINE} -e 'SHOW REPLICA STATUS' | /usr/bin/sed -n -e '12p' -e '13p' | /usr/bin/tr '\n' ' ')) | ||||||||||||||
Check warning on line 29 in build/haproxy_check_replicas.sh GitHub Actions / shellcheck[shellcheck] build/haproxy_check_replicas.sh#L29 <ShellCheck.SC2207>
Raw output
|
||||||||||||||
|
||||||||||||||
log INFO "${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} @@super_read_only: ${READ_ONLY} Replica_IO_Running: ${REPLICATION_STATUS[0]} Replica_SQL_Running: ${REPLICATION_STATUS[1]}" | ||||||||||||||
|
||||||||||||||
if [[ ${READ_ONLY} == '1' ]] && [[ ${REPLICATION_STATUS[0]} == 'Yes' ]] && [[ ${REPLICATION_STATUS[1]} == 'Yes' ]]; then | ||||||||||||||
log INFO "${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} for backend ${HAPROXY_PROXY_NAME} is OK" | ||||||||||||||
exit 0 | ||||||||||||||
else | ||||||||||||||
log INFO "${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} for backend ${HAPROXY_PROXY_NAME} is NOT OK" | ||||||||||||||
exit 1 | ||||||||||||||
fi | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
check_gr() { | ||||||||||||||
READ_ONLY=$(MYSQL_PWD="${MONITOR_PASSWORD}" ${MYSQL_CMDLINE} -e 'SELECT @@super_read_only' | /usr/bin/sed -n -e '2p' | /usr/bin/tr -d '\n') | ||||||||||||||
APPLIER_STATUS=$(MYSQL_PWD="${MONITOR_PASSWORD}" ${MYSQL_CMDLINE} -e "SELECT SERVICE_STATE FROM performance_schema.replication_connection_status WHERE channel_name = 'group_replication_applier'" | /usr/bin/sed -n -e '2p' | /usr/bin/tr -d '\n') | ||||||||||||||
|
||||||||||||||
# ${REPLICATION_STATUS[0]} - Replica_IO_Running | ||||||||||||||
# ${REPLICATION_STATUS[1]} - Replica_SQL_Running | ||||||||||||||
REPLICATION_STATUS=($(MYSQL_PWD="${MONITOR_PASSWORD}" ${MYSQL_CMDLINE} -e 'SHOW REPLICA STATUS' | /usr/bin/sed -n -e '12p' -e '13p' | /usr/bin/tr '\n' ' ')) | ||||||||||||||
log INFO "${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} @@super_read_only: ${READ_ONLY} Applier: ${APPLIER_STATUS}" | ||||||||||||||
|
||||||||||||||
echo "MySQL node ${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT}" | ||||||||||||||
echo "read_only: ${READ_ONLY}" | ||||||||||||||
echo "Replica_IO_Running: ${REPLICATION_STATUS[0]}" | ||||||||||||||
echo "Replica_SQL_Running: ${REPLICATION_STATUS[1]}" | ||||||||||||||
if [[ ${READ_ONLY} == '1' ]] && [[ ${APPLIER_STATUS} == "ON" ]]; then | ||||||||||||||
log INFO "${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} for backend ${HAPROXY_PROXY_NAME} is OK" | ||||||||||||||
exit 0 | ||||||||||||||
else | ||||||||||||||
log INFO "${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} for backend ${HAPROXY_PROXY_NAME} is NOT OK" | ||||||||||||||
exit 1 | ||||||||||||||
fi | ||||||||||||||
} | ||||||||||||||
|
||||||||||||||
if [[ ${READ_ONLY} == '1' ]] && [[ ${REPLICATION_STATUS[0]} == 'Yes' ]] && [[ ${REPLICATION_STATUS[1]} == 'Yes' ]]; then | ||||||||||||||
echo "MySQL node ${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} for backend ${HAPROXY_PROXY_NAME} is ok" | ||||||||||||||
exit 0 | ||||||||||||||
if [[ ${CLUSTER_TYPE} == "async" ]]; then | ||||||||||||||
check_async | ||||||||||||||
elif [[ ${CLUSTER_TYPE} == "group-replication" ]]; then | ||||||||||||||
check_gr | ||||||||||||||
else | ||||||||||||||
echo "MySQL node ${MYSQL_SERVER_IP}:${MYSQL_SERVER_PORT} for backend ${HAPROXY_PROXY_NAME} is not ok" | ||||||||||||||
log ERROR "Invalid cluster type: ${CLUSTER_TYPE}" | ||||||||||||||
exit 1 | ||||||||||||||
fi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@egegunes please use the same approach for custom conf as we have for PXC operator
https://github.com/percona/percona-docker/blob/main/haproxy/dockerdir/entrypoint.sh#L17C5-L28
In case of custom config we need to replace whole conf
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done