[ovs-dev] [PATCH v3 1/4] ovn: ovn-ctl support for HA ovn DB servers

Andy Zhou azhou at ovn.org
Fri Oct 7 00:03:52 UTC 2016


Babu,  Thank you for working on this.  At a high level, it is not clear to
me the boundary between ocf scripts and the ovn-ctl script -- i.e. which
aspect is managed by which entity.  For example, 1) which scripts are
responsible for starting the ovsdb servers. 2) Which script should manage
the fail-over -- I tried to shut down a cluster node using the "pcs"
command, and fail-over did not happen.

May be adding some higher level description of the intended usage would
help, at least to someone who is not that familiar with Linux HA, like me.

On Tue, Sep 27, 2016 at 9:30 PM, <bschanmu at redhat.com> wrote:

> From: Babu Shanmugam <bschanmu at redhat.com>
>
> This patch adds support to start_ovsdb() function in ovn-ctl to start the
> ovn db servers in backup mode. This can be done in the following ways
> 1. Use parameters --ovn-nb-sync-from-addr and --ovn-sb-sync-from-addr to
>    set the addresses of the active server.
> 2. Create files $etcdir/ovnnb-active.conf and $etcdir/ovnsb-active.conf
>    with the tcp url of the active servers.
>
> Additional functions to promote a backup server to active and demote
> active server to backup mode are also added in this patch
>
> One can optionally set the DB parameters for northd in
> $etcdir/ovn-northd-db-params.conf. For example,
>
> --ovnnb-db=tcp:172.16.247.230:6641 --ovnsb-db=tcp:172.16.247.230:6642
>
> The parameters will be used as is, by start_northd(). If this file exists,
> start_northd() will not start the DB servers even if $OVN_MANAGE_OVSDB is
> 'yes'.
>
Would you please expend above sentence? Why it behave this way?

>
> Signed-off-by: Babu Shanmugam <bschanmu at redhat.com>
> ---
>  ovn/utilities/ovn-ctl | 173 ++++++++++++++++++++++++++++++
> ++++++++++++--------
>  1 file changed, 148 insertions(+), 25 deletions(-)
>
> diff --git a/ovn/utilities/ovn-ctl b/ovn/utilities/ovn-ctl
> index 07bff8a..1c1687f 100755
> --- a/ovn/utilities/ovn-ctl
> +++ b/ovn/utilities/ovn-ctl
> @@ -26,6 +26,9 @@ for dir in "$sbindir" "$bindir" /sbin /bin /usr/sbin
> /usr/bin; do
>  done
>
>
> +ovnnb_active_conf_file="$etcdir/ovnnb-active.conf"
> +ovnsb_active_conf_file="$etcdir/ovnsb-active.conf"
> +ovn_northd_db_conf_file="$etcdir/ovn-northd-db-params.conf"
>  ## ----- ##
>  ## start ##
>  ## ----- ##
> @@ -45,6 +48,44 @@ stop_ovsdb () {
>      fi
>  }
>
> +demote_ovnnb() {
> +    if test ! -z "$DB_NB_SYNC_FROM_ADDR"; then
> +        echo "tcp:$DB_NB_SYNC_FROM_ADDR:$DB_NB_SYNC_FROM_PORT" >
> $ovnnb_active_conf_file
> +    fi
> +
> +    if test -e $ovnnb_active_conf_file; then
> +        ovs-appctl -t $rundir/ovnnb_db.ctl ovsdb-server/set-active-ovsdb-server
> `cat $ovnnb_active_conf_file`
> +        ovs-appctl -t $rundir/ovnnb_db.ctl ovsdb-server/connect-active-
> ovsdb-server
> +    else
> +        echo >&2 "$0: active server details not set"
> +        exit 1
> +    fi
> +}
> +
> +demote_ovnsb() {
> +    if test ! -z "$DB_SB_SYNC_FROM_ADDR"; then
> +        echo "tcp:$DB_SB_SYNC_FROM_ADDR:$DB_SB_SYNC_FROM_PORT" >
> $ovnsb_active_conf_file
> +    fi
> +
> +    if test -e $ovnsb_active_conf_file; then
> +        ovs-appctl -t $rundir/ovnsb_db.ctl ovsdb-server/set-active-ovsdb-server
> `cat $ovnsb_active_conf_file`
> +        ovs-appctl -t $rundir/ovnsb_db.ctl ovsdb-server/connect-active-
> ovsdb-server
> +    else
> +        echo >&2 "$0: active server details not set"
> +        exit 1
> +    fi
> +}
> +
> +promote_ovnnb() {
> +    rm -f $ovnnb_active_conf_file
> +    ovs-appctl -t $rundir/ovnnb_db.ctl ovsdb-server/disconnect-
> active-ovsdb-server
> +}
> +
> +promote_ovnsb() {
> +    rm -f $ovnsb_active_conf_file
> +    ovs-appctl -t $rundir/ovnsb_db.ctl ovsdb-server/disconnect-
> active-ovsdb-server
> +}
> +
>  start_ovsdb () {
>      # Check and eventually start ovsdb-server for Northbound DB
>      if ! pidfile_is_running $DB_NB_PID; then
> @@ -52,7 +93,20 @@ start_ovsdb () {
>
>          set ovsdb-server
>
> -        set "$@" --detach --monitor $OVN_NB_LOG
> --log-file=$OVN_NB_LOGFILE --remote=punix:$DB_NB_SOCK
> --remote=ptcp:$DB_NB_PORT:$DB_NB_ADDR --pidfile=$DB_NB_PID
> --unixctl=ovnnb_db.ctl
> +        set "$@" --detach --monitor $OVN_NB_LOG \
> +            --log-file=$OVN_NB_LOGFILE \
> +            --remote=punix:$DB_NB_SOCK \
> +            --remote=ptcp:$DB_NB_PORT:$DB_NB_ADDR \
> +            --pidfile=$DB_NB_PID \
> +            --unixctl=ovnnb_db.ctl
> +
> +        if test ! -z "$DB_NB_SYNC_FROM_ADDR"; then
> +            echo "tcp:$DB_NB_SYNC_FROM_ADDR:$DB_NB_SYNC_FROM_PORT" >
> $ovnnb_active_conf_file
> +        fi
> +
> +        if test -e $ovnnb_active_conf_file; then
> +            set "$@" --sync-from=`cat $ovnnb_active_conf_file`
> +        fi
>
>          $@ $DB_NB_FILE
>      fi
> @@ -63,11 +117,45 @@ start_ovsdb () {
>
>          set ovsdb-server
>
> -        set "$@" --detach --monitor $OVN_SB_LOG
> --log-file=$OVN_SB_LOGFILE --remote=punix:$DB_SB_SOCK
> --remote=ptcp:$DB_SB_PORT:$DB_SB_ADDR --pidfile=$DB_SB_PID
> --unixctl=ovnsb_db.ctl
> +        set "$@" --detach --monitor $OVN_SB_LOG \
> +            --log-file=$OVN_SB_LOGFILE \
> +            --remote=punix:$DB_SB_SOCK \
> +            --remote=ptcp:$DB_SB_PORT:$DB_SB_ADDR \
> +            --pidfile=$DB_SB_PID \
> +            --unixctl=ovnsb_db.ctl
> +
> +        if test ! -z "$DB_SB_SYNC_FROM_ADDR"; then
> +            echo "tcp:$DB_SB_SYNC_FROM_ADDR:$DB_SB_SYNC_FROM_PORT" >
> $ovnsb_active_conf_file
> +        fi
> +
> +        if test -e $ovnsb_active_conf_file; then
> +            set "$@" --sync-from=`cat $ovnsb_active_conf_file`
> +        fi
> +
>          $@ $DB_SB_FILE
>      fi
>  }
>
> +sync_status() {
> +    ovs-appctl -t $rundir/ovn${1}_db.ctl ovsdb-server/sync-status | awk
> '{if(NR==1) print $2}'
> +}
> +
> +status_ovnnb() {
> +    if ! pidfile_is_running $DB_NB_PID; then
> +        echo "not-running"
> +    else
> +        echo "running/$(sync_status nb)"
> +    fi
> +}
> +
> +status_ovnsb() {
> +    if ! pidfile_is_running $DB_SB_PID; then
> +        echo "not-running"
> +    else
> +        echo "running/$(sync_status sb)"
> +    fi
> +}
> +
>  status_ovsdb () {
>    if ! pidfile_is_running $DB_NB_PID; then
>        log_success_msg "OVN Northbound DB is not running"
> @@ -83,29 +171,36 @@ status_ovsdb () {
>  }
>
>  start_northd () {
> -  if test X"$OVN_MANAGE_OVSDB" = Xyes; then
> -      start_ovsdb
> -  fi
> +    if [ ! -e $ovn_northd_db_conf_file ]; then
> +        if test X"$OVN_MANAGE_OVSDB" = Xyes; then
> +            start_ovsdb
> +        fi
> +
> +        if ! pidfile_is_running $DB_NB_PID; then
> +            log_failure_msg "OVN Northbound DB is not running"
> +            exit
> +        fi
> +        if ! pidfile_is_running $DB_SB_PID; then
> +            log_failure_msg "OVN Southbound DB is not running"
> +            exit
> +        fi
> +        ovn_northd_params="--ovnnb-db=unix:$DB_NB_SOCK
> --ovnsb-db=unix:$DB_SB_SOCK"
> +    else
> +        ovn_northd_params="`cat $ovn_northd_db_conf_file`"
> +    fi
>
> -  if ! pidfile_is_running $DB_NB_PID; then
> -      log_failure_msg "OVN Northbound DB is not running"
> -      exit
> -  fi
> -  if ! pidfile_is_running $DB_SB_PID; then
> -      log_failure_msg "OVN Southbound DB is not running"
> -      exit
> -  fi
> +    if daemon_is_running ovn-northd; then
> +        log_success_msg "ovn-northd is already running"
> +    else
> +        set ovn-northd
> +        if test X"$OVN_NORTHD_LOGFILE" != X; then
> +            set "$@" --log-file=$OVN_NORTHD_LOGFILE
> +        fi
>
> -  if daemon_is_running ovn-northd; then
> -      log_success_msg "ovn-northd is already running"
> -  else
> -      set ovn-northd
> -      if test X"$OVN_NORTHD_LOGFILE" != X; then
> -          set "$@" --log-file=$OVN_NORTHD_LOGFILE
> -      fi
> -      set "$@" $OVN_NORTHD_LOG --ovnnb-db=unix:$DB_NB_SOCK
> --ovnsb-db=unix:$DB_SB_SOCK
> -      OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_NORTHD_PRIORITY"
> "$OVN_NORTHD_WRAPPER" "$@"
> -  fi
> +        set "$@" $OVN_NORTHD_LOG $ovn_northd_params
> +
> +        OVS_RUNDIR=${OVN_RUNDIR} start_daemon "$OVN_NORTHD_PRIORITY"
> "$OVN_NORTHD_WRAPPER" "$@"
> +    fi
>  }
>
>  start_controller () {
> @@ -127,8 +222,10 @@ start_controller_vtep () {
>  stop_northd () {
>      OVS_RUNDIR=${OVN_RUNDIR} stop_daemon ovn-northd
>
> -    if test X"$OVN_MANAGE_OVSDB" = Xyes; then
> -        stop_ovsdb
> +    if [ ! -e $ovn_northd_db_conf_file ]; then
> +        if test X"$OVN_MANAGE_OVSDB" = Xyes; then
> +            stop_ovsdb
> +        fi
>      fi
>  }
>
> @@ -176,12 +273,16 @@ set_defaults () {
>      DB_NB_FILE=$dbdir/ovnnb_db.db
>      DB_NB_ADDR=0.0.0.0
>      DB_NB_PORT=6641
> +    DB_NB_SYNC_FROM_ADDR=
> +    DB_NB_SYNC_FROM_PORT=6641
>
>      DB_SB_SOCK=$rundir/ovnsb_db.sock
>      DB_SB_PID=$rundir/ovnsb_db.pid
>      DB_SB_FILE=$dbdir/ovnsb_db.db
>      DB_SB_ADDR=0.0.0.0
>      DB_SB_PORT=6642
> +    DB_SB_SYNC_FROM_ADDR=
> +    DB_SB_SYNC_FROM_PORT=6642
>
>      DB_NB_SCHEMA=$datadir/ovn-nb.ovsschema
>      DB_SB_SCHEMA=$datadir/ovn-sb.ovsschema
> @@ -272,6 +373,10 @@ File location options:
>    --db-sb-port=PORT    OVN Southbound db ptcp port (default: $DB_SB_PORT)
>    --ovn-nb-logfile=FILE OVN Northbound log file (default: $OVN_NB_LOGFILE)
>    --ovn-sb-logfile=FILE OVN Southbound log file (default: $OVN_SB_LOGFILE)
> +  --db-nb-sync-from-addr=ADDR OVN Northbound active db tcp address
> (default: $DB_NB_SYNC_FROM_ADDR)
> +  --db-nb-sync-from-port=PORT OVN Northdbound active db tcp port
> (default: $DB_NB_SYNC_FROM_PORT)
> +  --db-sb-sync-from-addr=ADDR OVN Southbound active db tcp address
> (default: $DB_SB_SYNC_FROM_ADDR)
> +  --db-sb-sync-from-port=ADDR OVN Southbound active db tcp port (default:
> $DB_SB_SYNC_FROM_PORT)
>
>  Default directories with "configure" option and environment variable
> override:
>    logs: /usr/local/var/log/openvswitch (--with-logdir, OVS_LOGDIR)
> @@ -377,6 +482,24 @@ case $command in
>      status_controller_vtep)
>          daemon_status ovn-controller-vtep || exit 1
>          ;;
> +    promote_ovnnb)
> +        promote_ovnnb
> +        ;;
> +    promote_ovnsb)
> +        promote_ovnsb
> +        ;;
> +    demote_ovnnb)
> +        demote_ovnnb
> +        ;;
> +    demote_ovnsb)
> +        demote_ovnsb
> +        ;;
> +    status_ovnnb)
> +        status_ovnnb
> +        ;;
> +    status_ovnsb)
> +        status_ovnsb
> +        ;;
>      help)
>          usage
>          ;;
>

The newly added commands are not documented in the help, nor are they
documented in the man page.

> --
> 1.9.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list