2016년 12월 8일 목요일

MySQL MHA 구성 정리

작업을 하면서 정리한 스크립트 입니다.

너무 오래 걸렸습니다.


1. MySQL MHA 구성 (Oracle Linux 7.3)

--
-- 01.DB Package, MHA Package Install 
-- and DB Config

Percona Database:
    www.percona.com
    
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum install Percona-Server-server-57 Percona-Server-devel-57 Percona-Server-tokudb-57 percona-toolkit percona-xtrabackup-24 jemalloc jemalloc hdparm

/* HDD Write Cache Off */
hdparm -W0 /dev/sdb
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

systemctl stop mysqld
systemctl disable mysqld

/* DB 설정 구성 (복제 구성) */

mha-01 <--> mha-02
 |
 +-> mha-03
 +-> mha-04
 
vi /etc/percona-server.conf.d/mysqld.cnf
delete auto.cnf after db copy

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
innodb_buffer_pool_size = 1024M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
log_bin=mha-bin-log
server_id = 51
binlog_cache_size                              = 8M
binlog_format                                  = ROW
max_binlog_size                                = 1024M
expire_logs_days                               = 3

relay-log                                       = mha-relay-log
relay_log_purge                                 = 0

replicate_ignore_db = mysql,sys,performance_schema,information_schema
log_slave_updates = 1
# read_only = 1
thread_handling=pool-of-threads
explicit_defaults_for_timestamp
log_timestamps=SYSTEM
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
#
user=mysql
basedir=/usr
datadir=/data/MYSQL
tmpdir=/tmp
socket=/tmp/mysql.sock
port=3306
bind_address=0.0.0.0

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#
tokudb_cache_size=512m


mysql.cnf
[MYSQL]
socket                                          = /tmp/mysql.sock
no-auto-rehash
show-warnings
default-character-set                          = utf8
prompt                                          =\u@\h:\d\_\R:\m:\\s>
pager                                           ="less -n -i -F -X -E"

/* systemctl config */
systemctl edit mysql

[Service]
LimitNOFILE=65535
PIDFile=/var/run/mysqld/mysqld.pid
Nice=-2
Environment="LD_PRELOAD=/usr/lib64/libjemalloc.so.1"


show engines;
show plugins;


--
-- Config Replication
--

/* replication user create */

CREATE USER 'replication'@'192.168.189.%' IDENTIFIED BY 'audtlr2';
GRANT REPLICATION SLAVE, REPLICATION CLIENT  ON *.* TO 'replication'@'192.168.189.%' ;

CHANGE MASTER TO
 MASTER_HOST='192.168.189.52',
MASTER_USER='replication',
 MASTER_PASSWORD='audtlr2',
 MASTER_LOG_FILE='mha-bin-log.000003',
 MASTER_LOG_POS=154;


start slave;
stop slave;
reset slave;


--
-- 02. MHA Config
-- (Service VIP 는 HAProxy 를 써서 구성 함)   


Project Site : https://code.google.com/p/mysql-master-ha/

/* Install Package */

yum install perl-DBD-MySQL  perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
if os = oracle-7.3 then
    perl-Config-Tiny download
end

yum install mha4mysql-manager-0.56-0.el6.noarch mha4mysql-node-0.56-0.el6.noarch

mkdir /etc/mha
mkdir /data/MHA

touch app1.cnf mha_master.cnf

--
-- ssh 구성
-- (전 서버 SSH 구성)

ssh-keygen -t rsa
cat id_rsa.pub > authorized_keys

--
-- 
--
/etc/mha/app1.cnf

[server default]
# mysql user and password
user=root
password=audtlr2

ssh_user=root
ping_interval=3

# working directory on the manager
manager_workdir=/data/MHA

# manager log file
manager_log=/data/MHA/app1.log

# working directory on MySQL servers
remote_workdir=/data/MHA

master_binlog_dir=/data/MYSQL

  
[server1]
hostname=192.168.189.51
candidate_master=1
 
[server2]
hostname=192.168.189.52
candidate_master=1
  
[server3]
hostname=192.168.189.53
no_master=1

[server4]
hostname=192.168.189.54
no_master=1

[root@mha-03 mha]# more masterha_default.cnf 
[server default]

# 아래 부분은 HA Proxy 에서 처리
#secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2
#master_ip_failover_script=/script/masterha/master_ip_failover
#shutdown_script= /script/masterha/power_manager
#report_script= /script/masterha/send_master_failover_mail

--
--
--

/* rc.local 에 등록 */
nohup masterha_manager --conf=/etc/mha/app1.cnf --global-conf=/etc/mha/masterha_default.cnf < /dev/null >> /data/MHA/mha_manager.log 2>&1 &

masterha_stop --conf=/etc/mha/app1.cnf --global-conf=/etc/mha/masterha_default.cnf

/* 사전 점검 */
masterha_check_status --conf=/etc/mha/app1.cnf --global-conf=/etc/mha/masterha_default.cnf
masterha_check_ssh --conf=/etc/mha/app1.cnf --global-conf=/etc/mha/masterha_default.cnf
masterha_check_repl --conf=/etc/mha/app1.cnf --global-conf=/etc/mha/masterha_default.cnf



-- relay log 삭제 설정
-- /etc/cron.d
--

#
0 5 * * * app /usr/bin/purge_relay_logs --user=root --password=audtlr2 --workdir=/data/MYSQL --disable_relay_log_purge >> /data/MHA/purge_relay_logs.log 2>&1

댓글 없음:

댓글 쓰기