feature:TSG-15851:新增cm-cache切换主备cm的功能

This commit is contained in:
fumingwei
2023-07-03 19:00:45 +08:00
committed by 付明卫
parent 80377951be
commit 54f34bc716
7 changed files with 219 additions and 12 deletions

View File

@@ -173,6 +173,7 @@
- {role: sosreport, tags: sosreport}
- {role: nm-config, tags: nm-config}
- {role: tsg-os-logo, tags: tsg-os-logo}
- {role: cm-cache, tags: cm-cache}
- hosts: TSG-X-NXR620G40-R01-P0906-init
remote_user: root

View File

@@ -0,0 +1,188 @@
apiVersion: v1
data:
switch_available_redis.sh: |-
#!/bin/bash
pwd=`pwd`
function check_replicaof_alive()
{
check_redis_ip=$1
check_redis_port=$2
if [ -n "$TLS_REDIS_FILE" ]; then
redis-cli -h $check_redis_ip -p $check_redis_port --tls --cacert $TLS_REDIS_FILE ping > /dev/null
else
redis-cli -h $check_redis_ip -p $check_redis_port ping > /dev/null
fi
if [[ $? -eq 0 ]]; then
return 0
else
return 1
fi
}
function start()
{
current_date=$(date +%Y-%m-%d)
#Get the IP of the current redis synchronization
redis_info=$(redis-cli -h $REDIS_HOST -p $HOST_PORT CONFIG GET replicaof)
str=(${redis_info//,/})
db_ip=${str[1]}
db_port=${str[2]}
#1.Check whether the current redis connection address is CM master
if [ "$db_ip" = "$REDIS_MASTER" -a "$MASTER_PORT" = "$db_port" ];then
check_redis 0
elif [ "$db_ip" = "$REDIS_SLAVE" -a "$SLAVE_PORT" = "$db_port" ];then
check_redis 1
else
check_redis 2
fi
}
function check_redis()
{
CHECK_TYPE=$1
# Starting time
start_time=$(date +%s)
while true; do
# Use redis-cli to detect connections
check_replicaof_alive $REDIS_MASTER $MASTER_PORT
# check return value
if [[ $? -eq 0 ]]; then
#If the current redis slaveof is not the master IP, check whether the master IP is alive and change the redis slaveof
if [ "$CHECK_TYPE" != "0" ]; then
echo "[`date '+%Y-%m-%d %T'`] update redis slaveof: $REDIS_MASTER $MASTER_PORT "
up_redis $REDIS_MASTER $MASTER_PORT
break
fi
sleep 1
break
else
echo "[`date '+%Y-%m-%d %T'`] unable to connect to $REDIS_MASTER $MASTER_PORT redis server"
#If the current redis slaveof is slave IP, jump out of the loop and no longer continue to change redis slaveof
if [ "$CHECK_TYPE" = "1" ]; then
sleep 1
break
fi
fi
# Check if the duration is exceeded
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
if [[ $elapsed_time -ge $CHECK_DURATION ]]; then
check_replicaof_alive $REDIS_SLAVE $SLAVE_PORT
if [[ $? -eq 0 ]]; then
echo "[`date '+%Y-%m-%d %T'`] update redis slaveof: $REDIS_SLAVE $SLAVE_PORT redis server"
up_redis $REDIS_SLAVE $SLAVE_PORT
break
else
echo "[`date '+%Y-%m-%d %T'`] unable to connect to $REDIS_SLAVE $SLAVE_PORT redis server"
fi
fi
sleep 1
done
}
function up_redis()
{
UP_IP=$1
UP_PORT=$2
check_replicaof_alive $UP_IP $UP_PORT
if [[ $? -eq 0 ]]; then
redis-cli -h $REDIS_HOST -p $HOST_PORT REPLICAOF $UP_IP $UP_PORT
echo "[`date '+%Y-%m-%d %T'`] successfully changed Redis slaveof : $UP_IP $UP_PORT"
sleep $INTERVAL_TIME
else
echo "[`date '+%Y-%m-%d %T'`] Change failed, unable to connect to $UP_IP $UP_PORT redis server"
fi
}
REDIS_HOST="127.0.0.1"
HOST_PORT=6379
#Redis connection timeout (seconds)
CHECK_DURATION=120
# Redis master-slave switch synchronization interval time
INTERVAL_TIME=5m
REDIS_MASTER=""
MASTER_PORT=""
REDIS_SLAVE=""
SLAVE_PORT=""
TLS_REDIS_FILE=""
usage()
{
echo "Usage: $0 [-m <master_ip:port>] [-s <slave_ip:port>] [-T <on/off>] [-t <time>] [-i <time>]"
echo "Options:"
echo " -m <master_ip:port> Specify value for option -m"
echo " -s <slave_ip:port> Specify value for option -s"
echo " -T <on/off> TLS file certificate enable"
echo " -t <value> Connection detection time (seconds) Set option -t"
echo " -i <value> Redis master-slave switch synchronization interval time Set option -i"
exit 1
}
while getopts ":m:s:t:i:T:" opt; do
case $opt in
m)
m_value=$OPTARG
;;
s)
s_value=$OPTARG
;;
t)
t_option=$OPTARG
;;
i)
i_option=$OPTARG
;;
T)
tls_option=$OPTARG
;;
\?)
echo "Invalid option: -$OPTARG"
usage
;;
:)
echo "Option -$OPTARG requires an argument."
usage
;;
esac
done
if [[ -z $m_value ]] || [[ -z $s_value ]]; then
echo "Missing required options."
usage
else
m_str=(${m_value//:/ })
REDIS_MASTER=${m_str[0]}
MASTER_PORT=${m_str[1]}
s_str=(${s_value//:/ })
REDIS_SLAVE=${s_str[0]}
SLAVE_PORT=${s_str[1]}
if [ "on" = "$tls_option" ]; then
TLS_REDIS_FILE="/opt/bitnami/extra/certs/self-sign.crt"
fi
if [ -n "$t_option" ]; then
CHECK_DURATION=${t_option}
fi
if [ -n "$i_option" ]; then
INTERVAL_TIME=${i_option}
fi
while true; do
start
done
fi
kind: ConfigMap
metadata:
name: cm-cache-extra-scripts
namespace: tsg-os-system

View File

@@ -0,0 +1,9 @@
apiVersion: v1
data:
self-sign.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlDQlRDQ0FhdWdBd0lCQWdJSkFOMWVnN2FYSmEwQU1Bb0dDQ3FHU000OUJBTUNNR294Q3pBSkJnTlZCQVlUDQpBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSERBMVRZVzRnUm5KaGJtTnBjMk52DQpNUk13RVFZRFZRUUtEQXBIWkc1MExXTnNiM1ZrTVJrd0Z3WURWUVFEREJBcUxtZGtiblF0WTJ4dmRXUXVZMjl0DQpNQjRYRFRJeE1EZ3pNVEExTlRrME1sb1hEVE14TURneU9UQTFOVGswTWxvd2FqRUxNQWtHQTFVRUJoTUNWVk14DQpFekFSQmdOVkJBZ01Da05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNNRFZOaGJpQkdjbUZ1WTJselkyOHhFekFSDQpCZ05WQkFvTUNrZGtiblF0WTJ4dmRXUXhHVEFYQmdOVkJBTU1FQ291WjJSdWRDMWpiRzkxWkM1amIyMHdXVEFUDQpCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSSmNGQ2RlMWV0ODJHWmpabXI3TThuc3g3ZFFraTNTSjZ2DQpFZlZ4clJPNkFhQWtnZTZlcTFtZzBNeVlSQ2MyajhRK1c0Zm95MnRsVnd5d1JKQ2lLbnZ6b3pvd09EQUpCZ05WDQpIUk1FQWpBQU1Dc0dBMVVkRVFRa01DS0NFQ291WjJSdWRDMWpiRzkxWkM1amIyMkNEbWRrYm5RdFkyeHZkV1F1DQpZMjl0TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSUJpNVNJVGpORzdQLzVxVnM2RXlKMkU5NjAyS2lOVVMxRWJZDQozQ0ozM3owWUFpRUF5U1ErTU90VEVTeFJ6UmdreHVRSEZrdHlDR3lSV21xcmtPRURFUzFqK1FRPQ0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ0K
self-sign.key: LS0tLS1CRUdJTiBFQyBQQVJBTUVURVJTLS0tLS0NCkJnZ3Foa2pPUFFNQkJ3PT0NCi0tLS0tRU5EIEVDIFBBUkFNRVRFUlMtLS0tLQ0KLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tDQpNSGNDQVFFRUlDNnFGZUlpSnZrR3FZSXhwZmwxNE5aOGJPdTZGazBqZkx1bWczOWxUVExNb0FvR0NDcUdTTTQ5DQpBd0VIb1VRRFFnQUVTWEJRblh0WHJmTmhtWTJacSt6UEo3TWUzVUpJdDBpZXJ4SDFjYTBUdWdHZ0pJSHVucXRaDQpvTkRNbUVRbk5vL0VQbHVINk10clpWY01zRVNRb2lwNzh3PT0NCi0tLS0tRU5EIEVDIFBSSVZBVEUgS0VZLS0tLS0NCg==
kind: Secret
metadata:
name: cm-cache-extra-secrets
namespace: tsg-os-system
type: Opaque

Binary file not shown.

View File

@@ -0,0 +1,21 @@
- name: "Copy cm-cache redis helm chart to dest"
copy:
src: "{{ role_path }}/files/redis-6.2.5.tgz"
dest: /var/lib/rancher/k3s/server/static/charts/
- name: "Download cm-cache redis chart images to dest"
get_url:
url: https://repo.geedge.net/filerepo/install/release/tsg-container-images/redis-6.2.5.tar
dest: /var/lib/rancher/k3s/agent/images/redis-6.2.5.tar
url_username: "{{ lookup('env', 'PULP_REPO_USERNAME') }}"
url_password: "{{ lookup('env', 'PULP_REPO_PASSWORD') }}"
- name: "Copy cm-cache-extra-scripts.yaml chart to dest"
copy:
src: "{{ role_path }}/files/cm-cache-extra-scripts.yaml"
dest: /var/lib/rancher/k3s/server/manifests/
- name: "Copy cm-cache-extra-secrets.yaml chart to dest"
copy:
src: "{{ role_path }}/files/cm-cache-extra-secrets.yaml"
dest: /var/lib/rancher/k3s/server/manifests/

View File

@@ -61,15 +61,3 @@
dest: /var/lib/rancher/k3s/agent/images/reloader.tar
url_username: "{{ lookup('env', 'PULP_REPO_USERNAME') }}"
url_password: "{{ lookup('env', 'PULP_REPO_PASSWORD') }}"
- name: "copy cm-cache redis helm chart to dest"
copy:
src: "{{ role_path }}/files/cm-cache/redis-6.2.5.tgz"
dest: /var/lib/rancher/k3s/server/static/charts/
- name: "get cm-cache redis chart images to dest"
get_url:
url: https://repo.geedge.net/filerepo/install/release/tsg-container-images/redis-6.2.5.tar
dest: /var/lib/rancher/k3s/agent/images/redis-6.2.5.tar
url_username: "{{ lookup('env', 'PULP_REPO_USERNAME') }}"
url_password: "{{ lookup('env', 'PULP_REPO_PASSWORD') }}"