migrating from postgresql to mysql at cocolog

47
Migrating from PostgreSQL to MySQL at Cocolog Naoto Yokoyama, NIFTY Corporation Garth Webb, Six Apart Lisa Phillips, Six Apart Credits: Kenji Hirohama, Sumisho Computer Systems Corp.

Upload: naoto-yokoyama

Post on 06-Jul-2015

564 views

Category:

Technology


1 download

DESCRIPTION

NIFTY Corporation will discuss their experiences with MySQL and how they changed the configuration in TypePad to meet the Japanese market’s requirement, such as more availability, more cell phone support, and so on. Migration from PostgreSQL to MySQL, administration, optimization, and maintenance are also covered. Through this session, the audience will recognize how to deal with scenarios when the number of servers grows quickly from six to three hundred, and also learn about real-life security and administration best practices.

TRANSCRIPT

Page 1: Migrating from PostgreSQL to MySQL at Cocolog

Migrating from PostgreSQL to MySQLat Cocolog

Naoto Yokoyama, NIFTY Corporation

Garth Webb, Six Apart

Lisa Phillips, Six Apart

Credits:Kenji Hirohama, Sumisho Computer Systems Corp.

Page 2: Migrating from PostgreSQL to MySQL at Cocolog

Agenda

1. What is Cocolog

2. History of Cocolog

3. DBP: Database Partitioning

4. Migration From PostgreSQL to MySQL

Page 3: Migrating from PostgreSQL to MySQL at Cocolog

1. What is Cocolog

Page 4: Migrating from PostgreSQL to MySQL at Cocolog

What is Cocolog

NIFTY Corporation

Established in 1986

A Fujitsu Group Company

NIFTY-Serve (licensed and interconnected with CompuServe)

One of the largest ISPs in Japan

Cocolog

First blog community at a Japanese ISP

Based on TypePad technology by SixApart

Several hundred million PV/month

History

Dec/02/2003: Cocolog for ISP users launch

Nov/24/2005: Cocolog Free for free launch

April/05/2007: Cocolog for Mobile Phone launch

Page 5: Migrating from PostgreSQL to MySQL at Cocolog

2008/04

700 Thousand Users

Cocolog (Screenshot of home page)

Page 6: Migrating from PostgreSQL to MySQL at Cocolog

Cocolog (Screenshot of home page)

TypePadCocolog

Page 7: Migrating from PostgreSQL to MySQL at Cocolog

Cocolog template sets

Page 8: Migrating from PostgreSQL to MySQL at Cocolog

Cocolog Growth (User) ■Cocolog ■Cocolog Free

phase1 phase2 phase3 phase4

Page 9: Migrating from PostgreSQL to MySQL at Cocolog

Cocolog Growth (Entry) ■Cocolog ■Cocolog Free

phase1 phase2 phase3 phase4

Page 10: Migrating from PostgreSQL to MySQL at Cocolog

Technology at Cocolog

Core System

Linux 2.4/2.6

Apache 1.3/2.0/2.2 & mod_perl

Perl 5.8+CPAN

PostgreSQL 8.1

MySQL 5.0

memcached/TheSchwartz/cfengine

Eco System

LAMP,LAPP,Ruby+ActiveRecord, Capistrano

Etc...

Page 11: Migrating from PostgreSQL to MySQL at Cocolog

Monitoring

Management Tool Proprietary in-house development with PostgreSQL, PHP,

and Perl

Monitoring points (order of priority) response time of each post

number of spam comments/trackbacks

number of comments/trackbacks

source IP address of spam

number of entries

number of comments via mobile devices

page views via mobile devices

time of batch completion

amount of API usage

bandwidth usage

DB Disk I/O

Memory and CPU usage

time of VACUUM analyze

APP number of active processes

CPU usage

Memory usage

Hard

DB

Service

APL

Page 12: Migrating from PostgreSQL to MySQL at Cocolog

2. History of Cocolog

Page 13: Migrating from PostgreSQL to MySQL at Cocolog

Phase1 2003/12~(Entry: 0.04Million)

Register

Postgre

SQL

NAS

WEB

Static contents

Published

Before DBP

10servers

TypePad

Page 14: Migrating from PostgreSQL to MySQL at Cocolog

Podcast

Portal

Profile

Etc..

Phase2 2004/12~ (Entry: 7Million)

Rich templatePublish Book

Tel Operator

Support

NAS

WEB

Static contents

Published

Postgre

SQLRegister

TypePad2004/12~

2005/5~

Before DBP

50servers

Page 15: Migrating from PostgreSQL to MySQL at Cocolog

Phase2 - Problems

The system is tightly coupled.

Database server is receiving from multiple

points.

It is difficult to change the system design and

database schema.

Page 16: Migrating from PostgreSQL to MySQL at Cocolog

Phase3 2006/3~ (Entry: 12Million)

NAS

WEB

Static contents

Published

Web-API

memcached

Podcast

Portal

Profile

Etc..

Postgre

SQL

Rich templatePublish Book

Tel Operator

Support

RegisterTypePad

Before DBP

200servers

Page 17: Migrating from PostgreSQL to MySQL at Cocolog

Phase4 2007/4~ (Entry: 16Million)

Web-API

Static contents

Published

memcached

Atom

Mobile

WEB

Rich templatePublish Book

Tel Operator

Support

Register

Typepad

Postgre

SQL

Before DBP

300servers

Page 18: Migrating from PostgreSQL to MySQL at Cocolog

Now 2008/4~

Web-API

Static contents

Published

memcached

Atom

Mobile

WEB

Typepad

Rich templatePublish Book

Tel Operator

Support

Register

Multi

MySQL

After DBP

150servers

Page 19: Migrating from PostgreSQL to MySQL at Cocolog

3. TypePad Database Partitioning

Page 20: Migrating from PostgreSQL to MySQL at Cocolog

Steps for Transitioning

• Server PreparationHardware and software setup

• Global WriteWrite user information to the global DB

• Global ReadRead/write user information on the global DB

• Move SequenceTable sequences served by global DB

• User Data MoveMove user data to user partitions

• New User PartitionAll new users saved directly to user partition 1

• New User StrategyDecide on a strategy for the new user partition

• Non User Data MoveMove all non-user owned data

Page 21: Migrating from PostgreSQL to MySQL at Cocolog

Storage

TypePad Overview (PreDBP)

Database

(Postgres)

Static Content (HTML,

Images, etc)

Application

Server

Web

Server

TypeCast

Server

ATOM

ServerMEMCACHED

Data Caching servers to

reduce DB load

Dedicated Server for

TypeCast (via ATOM)

https(443)

http(80)

http(80) : atom apimemcached(11211)

postgres(5432)

Mail

Server

Internet

nfs(2049)

ADMIN(CRON)

Server

smtp(25) / pop(110)Blog Readers

Blog Owners

Mobile Blog

Readers

smtp(25) / pop(110)

Cron Server for periodic

asynchronous tasks

Page 22: Migrating from PostgreSQL to MySQL at Cocolog

TypePad

TypePad

TypePad

Non-

User Role

Why Partition?

TypePad

User Role

(User0)

All inquires (access) go to one

DB(Postgres)

After DBPCurrent setup

Inquiries (access) are divided among

several DB(MySQL)

TypePad

TypePad

TypePadTypePad

Global

Role

Non-User

Role

User Role

(User1)

User Role

(User2)

User Role

(User3)

Page 23: Migrating from PostgreSQL to MySQL at Cocolog

Non-

User Role

Server Preparation

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

New expanded setup

DB(MySQL) for partitioned data

Current Setup

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

User information is

partitioned

Maintains user mapping

and primary key generation Stores job

details

Server for

executing Jobs

※Grey areas are not used in current

steps

Asynchronous Job Server

Information that does not

need to be partitioned

(such as session

information)

Page 24: Migrating from PostgreSQL to MySQL at Cocolog

Global WriteCreating the user map

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:For new registrations only, uniquely identifying user data is written to the global DB

②:This same data continues to be written to the existing DB

DB(MySQL) for partitioned data

Asynchronous Job Server

Maintains user mapping

and primary key generation

※Grey areas are not used in current steps

Page 25: Migrating from PostgreSQL to MySQL at Cocolog

Global ReadUse the user map to find the user partition

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:Migrate existing user data to the global DB

②:At start of the request, the application queries global DB for the location of user data

③:The application then talks to this DB for all queries about this user. At this stage the global DB points

to the user0 partition in all cases.

DB(MySQL) for partitioned data

Maintains user mapping

and primary key generation

Migrate existing

user data

Asynchronous Job Server

※Grey areas are not used in current steps

Page 26: Migrating from PostgreSQL to MySQL at Cocolog

Move SequenceMigrating primary key generation

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:Postgres sequences (for generating unique primary keys) are migrated to tables on the global DB that

act as “pseudo-sequences”.

② Application requests new primary keys from global DB rather than the user partition.

DB(MySQL) for partitioned data

Maintains user mapping

and primary key generation

※Grey areas are not used in current steps

Migrate sequence

management

Asynchronous Job Server

Page 27: Migrating from PostgreSQL to MySQL at Cocolog

User Data MoveMoving user data to the new user-role partitions

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:Existing users that should be migrated by Job Server are submitted as new Schwartz jobs. User data is

then migrated asynchronously

②:If a comment arrives while the user is being migrated, it is saved in the Schwartz DB to be published later.

③:After being migrated all user data will exist on the user-role DB partitions

④:Once all user data is migrated, only non-user data is on Postgres

DB(MySQL) for partitioned data

Stores job

details

Server for

executing Jobs

Maintains user mapping

and primary key generation

User information is

partitioned

※Grey areas are not used in current steps

Migrating each

user data

DB(MySQL) for partitioned data

Page 28: Migrating from PostgreSQL to MySQL at Cocolog

New User PartitionNew registrations are created on one user role partition

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:When new users register, user data is written to a user role partition.

②:Non-user data continues to be served off Postgres

DB(MySQL) for partitioned data

Maintains user mapping

and primary key generation

User information is

partitioned

※Grey areas are not used in current steps

Asynchronous Job Server

Page 29: Migrating from PostgreSQL to MySQL at Cocolog

New User StrategyPick a scheme for distributing new users

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:When new users register, user data is written to one of the user role partitions, depending on a set

distribution method (round robin, random, etc)

②:Non-user data continues to be served off Postgres

DB(MySQL) for partitioned data

Maintains user mapping

and primary key generation

User information is

partitioned

※Grey areas are not used in current steps

Asynchronous Job Server

Page 30: Migrating from PostgreSQL to MySQL at Cocolog

Non User Data MoveMigrate data that cannot be partitioned by user

Non-

User Role

TypePad

User Role

(User0)

DB(PostgreSQL)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:Migrate non-user role data left on PostgreSQL to the MySQL side.

DB(MySQL) for partitioned data

Maintains user mapping

and primary key generation

User information is

partitioned

※Grey areas are not used in current steps

Migrate non-User

data

Asynchronous Job Server

Information that does not

need to be partitioned

(such as session

information)

Page 31: Migrating from PostgreSQL to MySQL at Cocolog

Data migration done

Non-

User Role

TypePad

User Role

(User0)

DB(Postgres)

User Role

(User1)

User Role

(User2)

User Role

(User3)

Global

Role

Non-User

Role

Job Server

+ TypePad

+ Schwartz

Schwartz

DB

Explanation

①:All data access is now done through MySQL

②:Continue to use The Schwartz for asynchronous jobs

DB(MySQL) for partitioned data

Stores job

details

Server for

executing Jobs

Maintains user mapping

and primary key generation

User information is

partitioned

※Grey areas are not used in current steps

②Asynchronous Job Server

Information that does not

need to be partitioned

(such as session

information)

Page 32: Migrating from PostgreSQL to MySQL at Cocolog

Storage

The New TypePad configuration

Database

(MySQL)

Static Content

(HTML,

Images, etc)

Application

Server

Web

Server

TypeCast

Server

ATOM

ServerMEMCACHED

Data Caching servers to

reduce DB load

Dedicated Server for

TypeCast (via ATOM)

https(443)

http(80)

http(80) : atom api

memcached(11211)

MySQL(3306)

Mail

Server

Internet

nfs(2049)

ADMIN(CRON)

Server

smtp(25) / pop(110)

Blog Readers

Blog Owners

(management

interface)

Mobile Blog

Readers

smtp(25) / pop(110)

Cron Server for periodic

asynchronous tasks

Job

Server

TheSchwartz server for

running ad-hoc jobs

asynchronously

Page 33: Migrating from PostgreSQL to MySQL at Cocolog

4. Migration from PostgreSQL to MySQL

Page 34: Migrating from PostgreSQL to MySQL at Cocolog

DB Node Spec History

Time OS(RedHat) CPU Xeon MEM DiskArray

2003/12

2007/11

7.4(2.4.9) 1.8GHz/512k×1 1GB No

ES2.1(2.4.9) 3.2GHz/1M×2 4GB No

ES2.1(2.4.9) 3.2GHz/1M×2 4GB Yes

AS2.1(2.4.9) 3.2GHz/1M×4 12G

B

Yes

AS4 (2.6.9) 3.2GHz/1M×4 12G

B

Yes

AS4 (2.6.9) MP3.3GHz/1M×4

〔2Core×4〕

16G

B

Yes

History of scale up PostgreSQL server, Before DBP

Page 35: Migrating from PostgreSQL to MySQL at Cocolog

DB DiskArray Spec

[FUJITSU ETERNUS8000]

Best I/O transaction performance in the world

146GB (15 krpm) * 32disk with RAID - 10

MultiPath FibreChannel 4Gbps

QuickOPC (One Point Copy)

OPC copy functions let you create a duplicate copy

of any data from the original at any chosen time.

http://www.computers.us.fujitsu.com/www/pro

ducts_storage.shtml?products/storage/fujitsu/

e8000/e8000

History of scale up PostgreSQL server, Before DBP

Page 36: Migrating from PostgreSQL to MySQL at Cocolog

Scale out MySQL servers, After DBP

A role configuration

Each role is configured as HA cluster

HA Software: NEC ClusterPro

Shared Storage

Page 37: Migrating from PostgreSQL to MySQL at Cocolog

Scale out MySQL servers, After DBP

Postgre

SQL

FibreChannel SAN

DiskArray

heart beat

MySQL

Role3

MySQL

Role2

MySQL

Role1

TypePad

Application

Page 38: Migrating from PostgreSQL to MySQL at Cocolog

Scale out MySQL servers, After DBP

Backup

Replication w/ Hot backup

Page 39: Migrating from PostgreSQL to MySQL at Cocolog

Scale out MySQL servers, After DBP

Postgre

SQL

FibreChannel SAN

DiskArray

heart beat

MySQL

Role3

MySQL

Role2

MySQL

Role1

MySQL

BackupRole

TypePad

Application

mysqld mysqld mysqld

rep rep rep

opc

mysqld

mysqld

mysqld

Page 40: Migrating from PostgreSQL to MySQL at Cocolog

Troubles with PostreSQL 7.4 – 8.1

Data size

over 100 GB

40% is index

Severe Data Fragmentation

VACUUM

“VACUUM analyze” cause the performance problem

Takes too long to VACUUM large amounts of data

dump/restore is the only solution for de-fragmentation

Auto VACUUM

We don’t use Auto VACUUM since we are worried about

latent response time

Page 41: Migrating from PostgreSQL to MySQL at Cocolog

Troubles with PostgreSQL 7.4 – 8.1

Character set

PostgreSQL allow the out of boundary UTF-8

Japanese extended character sets and multi

bytes character sets which normally should

come back with an error - instead of

accepting them.

Page 42: Migrating from PostgreSQL to MySQL at Cocolog

“Cleaning” data

Removing characters set that are out of the

boundries UTF-8 character sets.

Steps

PostgreSQL.dumpALL

Split for Piconv

UTF8 -> UCS2 -> UTF8 & Merge

PostgreSQL.restore

dump Split UTF8->UCS2->UTF8 Mergerestore

Page 43: Migrating from PostgreSQL to MySQL at Cocolog

TypePadTypePad

Migration from PostgreSQL to MySQL using TypePad script

Steps

PostgreSQL -> PerlObject & tmp publish

-> MySQL -> PerlObject & last publish

diff tmp & last Object (data check)

diff tmp & last publish (file check)

PostgreSQL

Document

Object

tmp

Document

Object

lastFile check

data check

Page 44: Migrating from PostgreSQL to MySQL at Cocolog

Troubles with MySQL

convert_tz function

doesn't support the input value outside the

scope of Unix Time

sort order

different sort order without “order by” clause

Page 45: Migrating from PostgreSQL to MySQL at Cocolog

Cocolog Future Plans

Dynamic

Job queue

Page 46: Migrating from PostgreSQL to MySQL at Cocolog

Consulting by

Sumisho Computer Systems Corp.

System Integrator

first and best partner of MySQL in Japan

since 2003

provide MySQL consulting, support, training

service

HA

Maintenance

online backup

Japanese character support

Page 47: Migrating from PostgreSQL to MySQL at Cocolog

Questions