Migrating Servers to Ubuntu

TODOs

On Thursday…

Brian will make backup of /etc on gg , es1, es2 , db1 , db2 and /work on gg.

Shufei will shutdown site and start DB backup: ggkbase_production , ggkbase_help_wp , iwgm_wp

On Friday…

Brian will update the OS for gg , es1, es2 , db1 , db2

Get db1 and db2 up and running with mirroring and start the refill the database

Move all the files back in place for gg and install necessary apps: nginx, php, redis, rbenv, pyenv, system libraries

Once the database are in place, then we can start the ES index for gg-prod

 

Introduction

To make system management easier and more mainstream, all the servers support ggKbase web application will be moved to Ubuntu. Here are the server migration steps.

Schedule and Notifications

We need to first schedule the shutdown for the entire ggKbase website. The estimated time of migration would be 36 hours:

  • Backup and shutdown (6 hours)
  • Database Servers Setup (10 hours)

We need to notify the lab a week in advance of, and the subsequent days until, the day of migration.

Backup and Shutdown

Shutdown ggKbase (1 min)

RAILS_ENV=production bin/rails puma:stop
RAILS_ENV=production bin/rails sidekiq:stop
./redis_init.sh stop

Backup Database (3 hours)

mysqldump -h db1 ggkbase_production > ggkbase_production_20180419.sql
mysqldump -h db1 ggkbase_help_wp > ggkbase_help_wp_20180419.sql
mysqldump -h x1 ggkbase_development > ggkbase_development_20180419.sql
mysqldump -h x1 ggkbase_demo > ggkbase_demo_20180419.sql

Backup Web App Files (30 minutes – done in advance)

tar -czvf ggkbase_production_app.tar.gz /work/railsapps/ggkbase_production
tar -czvf ggkbase_dev_app.tar.gz /work/railsapps/ggkbase_dev
tar -czvf ggkbase_demo.tar.gz /work/railsapps/ggkbase_demo
tar -czvf ggkbase_api.tar.gz /work/railsapps/ [WHERE IS GG_API???]
tar -czvf ggkbase_help_wp.tar.gz /work/phpapps/ggkbase_help_wp
tar -czvf banfieldlab.tar.gz /var/www/banfieldlab

Backup Configuration Files (1 minutes – done in advance)

nginx: /etc/nginx
mariadb: BRIAN WILL TAKE CARE OF THIS

Database Servers Setup (db1 and db2)

Reload databases (10 hours)

After db servers are properly set up, reload the data into the databases.

mysql -h db1 cdtdb_production < cdtdb_production_20180419.sql
mysql -h db1 cdtdb_help_wp < cdtdb_help_wp_20180419.sql

Web and Application Server Setup (prod, dev, demo, api, help)

Restore files from above (15 minutes)

Install and configure server applications (15 minutes)

  • nginx
  • php-fpm
  • redis
  • tmux, tmux plugin manager, .tmux.conf
  • rbenv, rbenv-vars, ruby, bundler
  • pyenv, python

Set up nginx (5 minutes)

Set up ggKbase, dev, demo, api, help (10 minutes)

Refer to this doc more details: https://ggkbase-help.berkeley.edu/codes/setup-development-server/

Elasticsearch Servers Setup (es1)

Back up configuration files

~/elasticsearch-6.0.0/config/elasticsearch.yml

The jvm.options file does not need to be backed up. We just need to change the following parameters in the new instance:

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms31g
-Xmx31g

In the new setup, we will have set up es2 for greater scalability. Here is the servers architecture from ElastiCon:

* 2 nodes (2 data/manager)
* 4 shards ~ 50GB (Recommended limit)
* 1 replica

Upgrade ES and rebuild index (3 hours)

RAILS_ENV=production bin/thor es:create_index
RAILS_ENV=production bin/thor es:index