Skip to main content

Amazon RDS Blue/Green Deployments


In order to avoid some errors I experienced when proceeding as described in the official
documentation, I describe what I did in order.

1) Modify parameters of source_database
* error: Blue Green Deployments requires cluster parameter group has binlog enabled.

RDS
Parameter groups: source-params-group
binlog_format => MIXED

mysql> show global variables like 'binlog_format';

2) Insert a row after rebooting the source database, to avoid this error.

* error: Correct the replication errors and then switch over.
Read Replica Replication Error - IOError: 1236, reason: Got fatal error 1236 from master
when reading data from binary log: 'Could not find first log file name in binary log index file'

=> To Fix: You need to change the data in the source database.

INSERT INTO dummy_table (`favorite_id`, `favorite_order`, `user_id`, `board_id`)
VALUES ('100001', '1', '11111', '11111');

3) Modify the parameters in the target database parameter group
The target database parameter group must be "binlog_format => MIXED".

4) Create Green cluster from Blue cluster
aws rds create-blue-green-deployment \
--blue-green-deployment-name source_database-bg \
--source arn:aws:rds:xxx:xxx:db:source_database\
--target-engine-version 5.7 \
--target-db-parameter-group-name source-params-group

4-1) Check two clusters
ex)
source_database Regional cluster (Blue)
- source_database Writer instance
=>
source_database-bg Blue/Green Deployment
- source_database-green-yyy Regional cluster (Green)
- source_database-green-xxx Writer instance



4-2) Check target database parameter group status
ex)
DB cluster parameter group
target database parameter group should have "binlog_format => MIXED"

Pending reboot
=> Need to reboot

5) Check Data Synchronization

=> Insert a row into the source database.

INSERT INTO dummy_table (`favorite_id`, `favorite_order`, `user_id`, `board_id`)
VALUES ('100003', '1', '11111', '11111');

=> Check in target database

SELECT * FROM dummy_table where favorite_id in (100001, 100003);
If sync doesn't work, Switch-over will be failed.

6) Switch-over
Run default 5 minutes

7) Clean-up
After conversion, Blue/Green Deployments do not delete the old production environment.
You can access the old production environment for further validation and performance/
regression testing if needed.

To check whether there is no interruption, query the db every second and record the result
in elasticsearch.
Access to the existing db was stopped for about 1 minute, but at that point, it was
determined that the endpoint of the app was switched to a new db, not the existing db
(therefore, there may be a momentary in-app service stop)


Test result)
-. Endpoints are automatically switched to the new db, so there is no need to change the app.
-. If a problem occurs when switching over in the middle,
it does not proceed and the service is maintained with the existing db (no effect)
-. Right after the start of the 5-minute switch over,
the existing db is converted to readonly (therefore, a server operation notice is required)
-. Connection of existing db may be interrupted (less than 1 minute)


Comments

Popular posts from this blog

DevOps JD's required skills from LinkedIn

From some of DevOps JD on linkedIn, I realised that DeveOps should be the leader of the organization. https://docs.google.com/spreadsheets/d/1P520nH0pYcAdN0rJcnMQqsgu9cV9GdknztJ92J8l7-s/pubhtml DevOps' Required Skills From LinkedIn on 8/30/16: DevOps should be the leader of the company! Yahoo Netflix Samsung Salesforce Fortinet SUM OS admin UNIX systems Unix platforms Linux administrator Linux VMs Docker VMs VMware, OpenStack, Hyper-V Openstack, KVM, VMWare Version control version control systems Git, SVN Cloud Amazon AWS AWS AWS, Azure DB MySql Oracle, MySQL, NoSQL Mysql administration and strong command of SQL MySQL RabbitMQ MySql, MongoDB, Redis, Oracle, ProgreSQL N/W TCP/IP networking, DNS, HTTP NAS Understanding of network stack, network tuning, subnet/VLANs. HAProxy, DNS, IPTable Script Lang Shell, Perl, Python, Ruby, PHP bash Python, Bash/tcsh a scripting language: Perl, Python and Unix Shell preferred Python, Perl, Ruby Python, Ruby, Shell, PHP Web LAMP stack

Ubuntu GUI with VNC on Xenserver

Xenserver 에서 Ubuntu GUI 를 쓰기 위해서는 VNC 가 답인 듯... Installing Ubuntu Gnome GUI on Ubuntu Server 12.10 with VNC Update Repositories # apt-get update Install gnome and vnc: # apt-get install gnome-core vnc4server Start VNC Server: # vncserver (You’ll then be prompted to create and verify a new VNC connect password) Kill the currently running VNC Session: # vncserver -kill :1 Edit VNC startup config file: # vim .vnc/xstartup Uncomment the following line: unset SESSION_MANAGER Add the following line: gnome-session --session=gnome-classic & Comment Out the following two lines: x-terminal-emulator -geometry 1280x1024+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & End result should look like: #!/bin/sh # Uncomment the following two lines for normal desktop: unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc gnome-session --session=gnome-classic & [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/

Install CoreOs on linode without VM

Install CoreOs on linode without VM 1. Add a Linode 2. Create a new Disk   CoreOS 3. Rescue > Reboot into Rescue Mode 4. Remote Access   Launch Lish Console 5. make an install script cat <<'EOF1' > install.sh # add needed package sudo apt-get update sudo apt-get install -y curl wget whois sudo apt-get install -y ca-certificates #sudo apt-get install gawk -y # get discovery url discoveryUrl=`curl https://discovery.etcd.io/new` # write cloud-config.yml cat <<EOF2 > cloud-config.yml #cloud-config users:   - name: core     groups:       - sudo       - docker coreos:   etcd:     name: node01     discovery: $discoveryUrl hostname: node01 EOF2 # get the coreos installation script #wget https://raw.github.com/coreos/init/master/bin/coreos-install wget https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install # run installation chmod 755 coreos-install sudo ./coreos-install \       -d /dev/sda \       -