feature:TSG-15851:新增cm-cache切换主备cm的功能
This commit is contained in:
@@ -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
|
||||
|
||||
188
ansible/roles/cm-cache/files/cm-cache-extra-scripts.yaml
Normal file
188
ansible/roles/cm-cache/files/cm-cache-extra-scripts.yaml
Normal 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
|
||||
9
ansible/roles/cm-cache/files/cm-cache-extra-secrets.yaml
Normal file
9
ansible/roles/cm-cache/files/cm-cache-extra-secrets.yaml
Normal 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
|
||||
BIN
ansible/roles/cm-cache/files/redis-6.2.5.tgz
Normal file
BIN
ansible/roles/cm-cache/files/redis-6.2.5.tgz
Normal file
Binary file not shown.
21
ansible/roles/cm-cache/tasks/main.yml
Normal file
21
ansible/roles/cm-cache/tasks/main.yml
Normal 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/
|
||||
Binary file not shown.
@@ -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') }}"
|
||||
|
||||
Reference in New Issue
Block a user