国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Mysql+Keepalived高可用最佳配置實(shí)踐

IT那活兒 / 1007人閱讀
Mysql+Keepalived高可用最佳配置實(shí)踐
01


背景簡介


MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫,性能方面存在先天性不足,盡管如此,其也因?yàn)殚_源、免費(fèi)、可自主迭代研發(fā)、總體擁有成本低等諸多優(yōu)點(diǎn)被廣大企業(yè)使用。目前業(yè)界有許多方法可以降低MySQL性能上限不足問題,軟件層面可通過數(shù)據(jù)庫中間件解決(如MyCAT、DRDS等),架構(gòu)層面可以通過業(yè)務(wù)解耦、冷熱溫?cái)?shù)據(jù)分離存儲(chǔ)等方式,降低高并發(fā)業(yè)務(wù)對MySQL數(shù)據(jù)庫的沖擊。盡管如此,但在MySQL實(shí)例規(guī)模較多時(shí),通過合理規(guī)劃MySQL配置,一是可以確保降低高并發(fā)業(yè)務(wù)沖擊數(shù)據(jù)庫導(dǎo)致的數(shù)據(jù)庫宕機(jī)風(fēng)險(xiǎn),二是可以最大化的利用服務(wù)器資源,以節(jié)約企業(yè)資源投入成本,三是通過統(tǒng)一標(biāo)準(zhǔn)化的配置可以較大程度降低自動(dòng)化運(yùn)維研發(fā)投入成本。


本文重點(diǎn)針對MySQL+Keepalived高可用架構(gòu)進(jìn)行講解,包含MySQL配置、Keepalived高可用配置,并附帶有相應(yīng)的VIP切換監(jiān)控腳本。

02


實(shí)現(xiàn)原理


Mysql中Master->Slave的主主同步。主主是數(shù)據(jù)雙向同步,主從是數(shù)據(jù)單向同步。一般情況下,主庫宕機(jī)后,需要手動(dòng)將連接切換到從庫上。但如果使用keepalived組件架構(gòu)可實(shí)現(xiàn)自動(dòng)切換,保證數(shù)據(jù)庫的高可用性。


在MySQL雙主結(jié)構(gòu)當(dāng)中,使用keepalived,通過VIP實(shí)現(xiàn)Mysql雙主對外連接的統(tǒng)一接口。即客戶端通過Vip連接數(shù)據(jù)庫;保障其中某一臺(tái)主機(jī)出現(xiàn)故障,無法提供服務(wù)時(shí),VIP可自動(dòng)漂移到另一臺(tái)主機(jī)上,整個(gè)過程對于客戶端接來說幾乎無感覺,從而實(shí)現(xiàn)高可用。


為保障MySQL數(shù)據(jù)的一致性,必須避免VIP頻繁漂移。當(dāng)keepalived檢測發(fā)現(xiàn)MySQL服務(wù)工作異常時(shí),VIP漂移,為禁止VIP出現(xiàn)二次漂移,必須人工介入操作,從而保障數(shù)據(jù)的一致性及安全性。所以,在MySQL+keepalived使用過程中,master和slave兩節(jié)點(diǎn)均設(shè)置為backup,當(dāng)人工介入,對故障主機(jī)處理完畢之后,重新啟動(dòng)keepalived,不會(huì)出現(xiàn)VIP漂移的情況,只有僅當(dāng)keepalived檢測到MySQL無法提供服務(wù),才會(huì)執(zhí)行VIP漂移。

03


安裝實(shí)施


Mysql安裝部署:

  • 軟件信息

軟件名稱

版本號(hào)

MySQL

MySQL官方社區(qū)5.7

主機(jī)參數(shù)調(diào)整:

  • 禁用selinux

    #vi/etc/sysconfig/selinux
    查看是否SELINUX=disabled

  • 關(guān)閉numa
    #vi/etc/default/grub
    在GRUB_CMDLINE_LINUX這一行最后添加numa=off,使其變?yōu)镚RUB_CMDLINE_LINUX=”crashkernel=auto…… rhgb quiet numa=off”,變更完成后保存退出。
    #grub2-mkconfig -o /boot/grub2/grub.cfg

  • 文件數(shù)進(jìn)程數(shù)限制
    #vi /etc/security/limits.conf
    添加mysql用戶限制如下:
    mysqlsoft nproc 65535
    mysql hard nproc 65535
    mysql soft nofile65536
    mysql hard nofile 65536

  • #vi/etc/sysctl.conf
    將該配置文件內(nèi)容清空,改成以下內(nèi)容
    vm.swappiness=0
    net.ipv6.conf.all.disable_ipv6=1
    net.core.somaxconn=65535
    net.core.netdev_max_backlog=65535
    net.ipv4.tcp_max_syn_backlog=65535
    net.ipv4.tcp_fin_timeout=10
    net.ipv4.tcp_tw_reuse=1
    #netipv4.tcp_tw_recycle=1
    net.core.wmem_default=87380
    net.core.wmem_max=16777216
    net.core.rmem_default=87380
    net.core.rmem_max=16777216
    net.ipv4.tcp_keepalive_time=120
    net.ipv4.tcp_keepalive_intvl=30
    net.ipv4.tcp_keepalive_probes=3
    net.ipv4.ip_local_port_range= 40000 60000
    kernel.sem = 250 32000 100 128

創(chuàng)建mysql用戶:

#groupadd mysql

#useradd -g mysql -m mysql


依賴包安裝:

軟件安裝前需檢查以下依賴包,將缺少的依賴包安裝。

#rpm-q gcc gcc-c++ zlib-devel pcre-devel readline readline-develbzip2-devel rpm-build kernel-devel libaio-develelfutils-libelf-devel compat-libstdc++-33 compat-libcap1 cmake bisonautomake ncurses-devel xinetd openssl-devel |grep "notinstalled"


軟件安裝:

#cd/opt

#tar –xzvf mysql-version-os.tar.gz

#cdmysql-version-os
#cmake .-DCMAKE_INSTALL_PREFIX=/opt/mysql-version
-DWITH_BOOST=boost/boost_1_59_0
-DDEFAULT_CHARSET=utf8mb4
-DDEFAULT_COLLATION=utf8mb4_bin
# make&&makeinstall

建立軟鏈接:

#ln-s /opt/mysql-version-os /usr/local/mysql

#ln -s/usr/local/mysql/bin/* /usr/local/bin


初始化數(shù)據(jù)庫,MySQL數(shù)據(jù)目錄:

實(shí)例要?jiǎng)?chuàng)建在/data/mysql下,實(shí)例中目錄的具體劃分如下:

主目錄

二級(jí)目錄

三級(jí)目錄

/data/mysql/db_insname

bin(啟動(dòng)腳本目錄)

login.sh

shutdown.sh

startup.sh

blog

mysql-bin.*

mysql-bin.index

conf(配置文件目錄)

init_file.sql

insname.cnf

data(數(shù)據(jù)目錄)


elog(慢日志、錯(cuò)誤日志)

mysql.err

slow.log

mysql.pid


mysql.sock


mysql.sock.lock


nohup.out


rlog(表空間目錄)

ib_logfile0

ib_logfile1

ib_logfile2

tmp(臨時(shí)目錄)


ulog(undo表空間目錄)

undo001

undo002

配置參數(shù)說明

參數(shù)名

數(shù)值

配置說明

max_connections

5000

數(shù)據(jù)庫中已連接的所有用戶總數(shù)不超過5000

max_user_connections

1200

單個(gè)用戶最大連接數(shù)不超過1200

connect_timeout

10

建立數(shù)據(jù)庫連接時(shí)不允許超過十秒

wait_timeout

600

狀態(tài)為sleep的線程超過600秒會(huì)被關(guān)閉

max_execution_time

10000

執(zhí)行時(shí)間超過10000毫秒的sql語句會(huì)被終止

innodb_lock_wait_timeout

10

事務(wù)中的DML語句10秒未獲得鎖,會(huì)回滾整個(gè)事務(wù)

sql_safe_updates

1

使用update或delete必須用where條件且使用索引

loose_rpl_semi_sync_master_enabled

on

開啟半同步

loose_rpl_semi_sync_master_timeout

1000

客戶端等待1秒得不到確認(rèn)變?yōu)楫惒?/span>

loose_rpl_semi_sync_master_wait_for_slave_count

1

主庫收到1個(gè)從庫寫成功則返回客戶端

loose_rpl_semi_sync_master_wait_no_slave

on

啟動(dòng)備庫后進(jìn)入半同步模式

log_queries_not_using_indexes

1

查詢不使用索引會(huì)計(jì)入慢日志

secure_file_priv

/data/mysql/db_insname/tmp

在庫中提取數(shù)據(jù)的數(shù)據(jù)存放路徑


實(shí)例創(chuàng)建:

setserver.ini配置文件

10.10.1.133 /usr/local/mysql /data/mysql db test1 3306 11 root 123456 512M

setServer_57.sh配置文件





#!/bin/bash


#目錄、端口、實(shí)例名等信息的配置文件

INI_CFG=./setServer.ini


#IP

IP=""


#軟件目錄

SOFTDIR=""


#根目錄

BASE_DIR=""


#實(shí)例名

INS_NAME=""


#實(shí)例名前綴

INS_NAME_PRE=""


#實(shí)例端口

INS_PORT=""


#server id

SERVER_ID=""


#實(shí)例根目錄

INS_BASE_DIR=""


#管理員用戶

ADMIN_USER=""


#管理員密碼

ADMIN_PASSWD=""


#實(shí)例參數(shù)文件

INS_CNF=""


#初始化SQL文件

INIT_FILE=""


#INNODB_BUFFER_POOL_SIZE設(shè)定

BUFFER_POOL=""


function Isok()

{

[ $? == "0" ] && echo "Complete OK !" || echo " Failed !!!";exit 128

}


#創(chuàng)建實(shí)例函數(shù)

function create_instance()

{


#1、創(chuàng)建實(shí)例相應(yīng)目錄 

mkdir -p ${INS_BASE_DIR}/{bin,conf,data,rlog,ulog,blog,elog,tmp}

chmod -R 755 ${INS_BASE_DIR}


echo "****** 1、創(chuàng)建目錄:"

echo "  啟動(dòng)腳本目錄:${INS_BASE_DIR}/bin"

echo "  配置文件目錄:${INS_BASE_DIR}/conf"

echo "  數(shù)據(jù)目錄:${INS_BASE_DIR}/data"

echo "  relog目錄:${INS_BASE_DIR}/rlog"

echo "  ulog目錄:${INS_BASE_DIR}/ulog"

echo "  blog目錄:${INS_BASE_DIR}/blog"

echo "  elog目錄:${INS_BASE_DIR}/elog"

echo "  臨時(shí)目錄:${INS_BASE_DIR}/tmp"



#2、生成參數(shù)文件

cat <${INIT_FILE}

set global sql_safe_updates=1;

EOF


cat <${INS_CNF} 

[mysqld]

#************** basic ***************

datadir                         =${INS_BASE_DIR}/data

basedir                         =${SOFTDIR}

tmpdir                          =${INS_BASE_DIR}/tmp

secure_file_priv                =${INS_BASE_DIR}/tmp

port                            =${INS_PORT}

socket                          =${INS_BASE_DIR}/mysql.sock

pid_file                        =${INS_BASE_DIR}/mysql.pid


#************** connection ***************

max_connections                 =5000

max_connect_errors              =100000

max_user_connections            =1200


#************** sql timeout & limits ***************

max_execution_time              =10000

group_concat_max_len            =1048576

lock_wait_timeout               =60

#autocommit                      =0

lower_case_table_names          =1

thread_cache_size               =64

disabled_storage_engines        ="MyISAM,FEDERATED"

character_set_server            =utf8

transaction-isolation           ="READ-COMMITTED"

skip_name_resolve               =ON

explicit_defaults_for_timestamp =ON

log_timestamps                  =SYSTEM

local_infile                    =OFF

event_scheduler                 =OFF

query_cache_type                =OFF

query_cache_size                =0

lc_messages                     =en_US

lc_messages_dir                 =${SOFTDIR}/share

init_connect                    ="set names utf8"

#sql_mode                        =NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO

init_file                       =${INIT_FILE}

#init_slave


#******************* err & slow & general ***************

log_error                       =${INS_BASE_DIR}/elog/mysql.err

#log_output                      ="TABLE,FILE"

slow_query_log                  =ON

slow_query_log_file             =${INS_BASE_DIR}/elog/slow.log

long_query_time                 =1

log_queries_not_using_indexes   =0

log_throttle_queries_not_using_indexes = 10

general_log                     =OFF

general_log_file                =${INS_BASE_DIR}/elog/general.log


#************** binlog & relaylog ***************

expire_logs_days                =7

sync_binlog                     =1

log-bin                         =${INS_BASE_DIR}/blog/mysql-bin

log-bin-index                   =${INS_BASE_DIR}/blog/mysql-bin.index

max_binlog_size                 =500M

binlog_format                   =ROW

binlog_rows_query_log_events    =ON

binlog_cache_size               =2M

binlog_stmt_cache_size          =2M

max_binlog_cache_size           =512M

max_binlog_stmt_cache_size      =512M


relay_log                       =${INS_BASE_DIR}/blog/relay

relay_log_index                 =${INS_BASE_DIR}/blog/relay.index

max_relay_log_size              =500M

relay_log_purge                 =ON

relay_log_recovery              =ON


#*************** rpl_semi_sync ***************

loose_rpl_semi_sync_master_enabled                =ON

loose_rpl_semi_sync_master_timeout                =1000

loose_rpl_semi_sync_master_trace_level            =32

loose_rpl_semi_sync_master_wait_for_slave_count   =1

loose_rpl_semi_sync_master_wait_no_slave          =ON

loose_rpl_semi_sync_master_wait_point             =AFTER_SYNC

loose_rpl_semi_sync_slave_enabled                 =ON

loose_rpl_semi_sync_slave_trace_level             =32


#*************** group commit ***************

binlog_group_commit_sync_delay              =1

binlog_group_commit_sync_no_delay_count     =1000


#*************** gtid ***************

gtid_mode                       =ON

enforce_gtid_consistency        =ON

master_verify_checksum          =ON

sync_master_info                =1


#*************slave ***************

skip-slave-start                =1

#read_only                      =ON

#super_read_only                =ON

log_slave_updates               =ON

server_id                       =${SERVER_ID}

report_host                     =$IP

report_port                     =${INS_PORT}

slave_load_tmpdir               =${INS_BASE_DIR}/tmp

slave_sql_verify_checksum       =ON

slave_preserve_commit_order     =1


#*************** muti thread slave ***************

slave_parallel_type                         =LOGICAL_CLOCK

slave_parallel_workers                      =4

master_info_repository                      =TABLE

relay_log_info_repository                   =TABLE


#*************** buffer & timeout ***************

read_buffer_size                =1M

read_rnd_buffer_size            =2M

sort_buffer_size                =1M

join_buffer_size                =1M

tmp_table_size                  =16777216

max_allowed_packet              =64M

max_heap_table_size             =64M

connect_timeout                 =10

wait_timeout                    =600

interactive_timeout             =600

net_read_timeout                =30

net_write_timeout               =30


#*********** myisam ***************

skip_external_locking           =ON

key_buffer_size                 =2M

bulk_insert_buffer_size         =16M

concurrent_insert               =ALWAYS

open_files_limit                =65000

table_open_cache                =16000

table_definition_cache          =16000


#*********** innodb ***************

default_storage_engine              =InnoDB

default_tmp_storage_engine          =InnoDB

internal_tmp_disk_storage_engine    =InnoDB

innodb_data_home_dir                =${INS_BASE_DIR}/data

innodb_log_group_home_dir           =${INS_BASE_DIR}/rlog

innodb_log_file_size                =1024M

innodb_log_files_in_group           =3

innodb_undo_directory               =${INS_BASE_DIR}/ulog

innodb_undo_log_truncate            =on  

innodb_max_undo_log_size            =1024M

innodb_undo_tablespaces             =3

innodb_flush_log_at_trx_commit      =2

innodb_fast_shutdown                =1

innodb_flush_method                 =O_DIRECT

innodb_io_capacity                  =1000

innodb_io_capacity_max              =4000

innodb_buffer_pool_size             =${BUFFER_POOL}

innodb_log_buffer_size              =8M

innodb_autoinc_lock_mode            =1

innodb_buffer_pool_load_at_startup  =ON

innodb_buffer_pool_dump_at_shutdown =ON

innodb_buffer_pool_dump_pct         =15

innodb_max_dirty_pages_pct          =85

innodb_lock_wait_timeout            =10

#innodb_locks_unsafe_for_binlog      =1

innodb_old_blocks_time              =1000

innodb_open_files                   =63000

innodb_page_cleaners                =4

innodb_strict_mode                  =ON

innodb_thread_concurrency           =0

innodb_sort_buffer_size             =64M

innodb_print_all_deadlocks          =1

innodb_rollback_on_timeout          =ON

EOF



echo "****** 2、生成參數(shù)文件:"

echo "  實(shí)例${INS_NAME}的參數(shù)文件: ${INS_CNF}"


# 3、實(shí)例化數(shù)據(jù)庫

echo "****** 3、初始化數(shù)據(jù)庫:"

#[ `echo $USER` == "root" ] && chown mysql:root $INS_BASE_DIR

${SOFTDIR}/bin/mysqld --defaults-file=${INS_CNF}

--initialize-insecure --user=mysql

--basedir=${SOFTDIR}

--datadir=${INS_BASE_DIR}/data


#4、生成啟動(dòng)、關(guān)閉、登陸腳本

echo "****** 4、生成啟動(dòng)、關(guān)閉、登陸腳本:"


cat <${INS_BASE_DIR}/bin/startup.sh

#!/bin/bash

source /etc/profile

source ~/.bash_profile

export UMASK=0644

export UMASK_DIR=0750

## vars

SOFTDIR=${SOFTDIR}

DBHOME=${INS_BASE_DIR}

DBNAME=${INS_NAME}

CNF=${DBHOME}/conf/${DBNAME}.cnf

DATADIR=${DBHOME}/data

## startup

nohup ${SOFTDIR}/bin/mysqld_safe --defaults-file=${CNF} --ledir=${SOFTDIR}/bin >${DBHOME}/nohup.out 2>&1 &

EOF



cat <${INS_BASE_DIR}/bin/shutdown.sh

#!/bin/bash

source /etc/profile

source ~/.bash_profile

## vars

SOFTDIR=${SOFTDIR}

DBHOME=${INS_BASE_DIR}

DBNAME=${INS_NAME}

CNF=${DBHOME}/conf/${DBNAME}.cnf

SOCK=${DBHOME}/mysql.sock

## shutdown

${SOFTDIR}/bin/mysqladmin --defaults-file=${CNF} -uroot -p -S${SOCK} shutdown

EOF



cat <${INS_BASE_DIR}/bin/login.sh

SOFTDIR=${SOFTDIR}

DBHOME=${INS_BASE_DIR}

DBNAME=${INS_NAME}

SOCK=${DBHOME}/mysql.sock

${SOFTDIR}/bin/mysql -uroot -p -S${SOCK} -A

EOF


chmod 700 ${INS_BASE_DIR}/bin/startup.sh ${INS_BASE_DIR}/bin/shutdown.sh ${INS_BASE_DIR}/bin/login.sh


#5、修改管理員密碼

echo "****** 5、修改管理員密碼:"

hostname=`hostname`


sh ${INS_BASE_DIR}/bin/startup.sh

sleep 30

${SOFTDIR}/bin/mysql -uroot -S${INS_BASE_DIR}/mysql.sock<

#install semi sync

install plugin rpl_semi_sync_slave soname semisync_slave.so;

install plugin rpl_semi_sync_master soname semisync_master.so;

#root

alter user root@localhost identified by "${ADMIN_PASSWD}";

delete from mysql.user where user=root and host=lower("${hostname}");

#備份用戶

GRANT SELECT,SHOW VIEW,TRIGGER,LOCK TABLES,RELOAD,PROCESS,SUPER ON *.* TO bkpuser@% IDENTIFIED BY "n#CJ^f&i";    

#復(fù)制用戶

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO replic@% IDENTIFIED BY "4%REplic";

#業(yè)務(wù)數(shù)據(jù)監(jiān)控用戶

create user monitorjk identified by esEYq7QWkB6F2M$;

#數(shù)據(jù)庫監(jiān)控用戶

grant PROCESS, REPLICATION CLIENT, SELECT on *.* to zabbixjk identified by CvNYz!6WIb9u;

#4A用戶

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, ALTER, SHOW DATABASES, CREATE USER ,RELOAD ON *.* TO aiuap@% IDENTIFIED BY "p#1nVF.|c1" WITH GRANT option;

#運(yùn)維管理用戶

GRANT ALL ON *.* TO myrobot@127.0.0.1 identified by Si*hx79*HIqHQdLY with grant option;

#inception用戶

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, PROCESS, INDEX, ALTER, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, TRIGGER ON *.* TO inception identified by fF&w@tw5qZK1WRvi;

flush privileges;

shutdown;

EOF

[ $? == "0" ] && echo " 密碼修改成功!"


#修改配置文件,使半同步參數(shù)生效

sleep 5

sed -i s/loose_//g ${INS_CNF}

sh ${INS_BASE_DIR}/bin/startup.sh


echo "****** 6、網(wǎng)絡(luò)監(jiān)聽:"

netstat -pltn 2>/dev/null |grep -E "Proto|$INS_PORT|mysql"


echo "****** 7、MySQL錯(cuò)誤日志:"

grep -Ei "error|warning" $INS_BASE_DIR/elog/mysql.err

}



if [ -f ${INI_CFG} ]; then


 grep -v "^#" ${INI_CFG} | while read line


 do

   

          IP=`echo ${line} | cut -d" " -f1`

          SOFTDIR=`echo ${line} | cut -d" " -f2 | sed s//$//`

          BASE_DIR=`echo ${line} | cut -d" " -f3 | sed s//$//`

          INS_NAME_PRE=`echo ${line} | cut -d" " -f4`

          INS_NAME=`echo ${line} | cut -d" " -f5`

          INS_PORT=`echo ${line} | cut -d" " -f6`

          SERVER_ID=`echo ${line} | cut -d" " -f7`

          ADMIN_USER=`echo ${line} | cut -d" " -f8`

          ADMIN_PASSWD=`echo ${line} | cut -d" " -f9`

  BUFFER_POOL=`echo ${line} | cut -d" " -f10`

          INS_BASE_DIR=${BASE_DIR}/${INS_NAME_PRE}_${INS_NAME}

          INS_CNF=${INS_BASE_DIR}/conf/${INS_NAME}.cnf

  INIT_FILE=${INS_BASE_DIR}/conf/init_file.sql

         

          echo "****** 實(shí)例${INS_NAME}信息: ******"

          echo "        IP: ${IP}"

          echo "        軟件目錄: ${SOFTDIR}"

          echo "        根目錄: ${BASE_DIR}"

          echo "        實(shí)例根目錄: ${INS_BASE_DIR}"

          echo "        實(shí)例名前綴: ${INS_NAME_PRE}"

          echo "        實(shí)例名: ${INS_NAME}"

          echo "        實(shí)例端口: ${INS_PORT}"

          echo "        server_id: ${SERVER_ID}"

          echo "        管理員用戶: ${ADMIN_USER}"

          echo "        管理員密碼: ${ADMIN_PASSWD}"

  echo "        INNODB_BUFFER_POOL_SIZE設(shè)定: ${BUFFER_POOL}"

         

          if [ `echo ${line} | awk {print NF}` != "10" ]; then

         

              echo "ERROR:創(chuàng)建實(shí)例相應(yīng)參數(shù)不夠!"

        echo "##############################################################################################"

                  echo -e " "

         

          #判斷端口與ibdata01文件是否存在,都不存在則創(chuàng)建實(shí)例。存在一個(gè)則創(chuàng)建失敗

          elif [ X"`netstat -ltn | grep ${INS_PORT}`" = X"" ] && [ ! -f ${INS_BASE_DIR}/data/ibdata01 ]; then

    

          #調(diào)用創(chuàng)建實(shí)例函數(shù)

          create_instance;


       else

        

         echo "ERROR:端口${INS_PORT}或${INS_BASE_DIR}/data/ibdata01文件存在,創(chuàng)建實(shí)例失敗!"

         echo "##############################################################################################"

                   echo -e " "

         

   fi

         

done

  

else


 echo "ERROR:${INI_CFG}配置文件不存在!"

 exit 1


fi


數(shù)據(jù)庫的初始化使用上面兩個(gè)腳本完成。

  • 1.填寫setserver.ini配置文件。

  • 2.執(zhí)行setserver.sh,初使化數(shù)據(jù)庫。

setserver.ini,填寫方法如下

序列

名稱

示例

第1列

ip

0.0.0.1

第2列

軟件目錄

/usr/local/mysql

第3列

數(shù)據(jù)根目錄

/data/mysql

第4列

實(shí)例名前綴

Db

第5列

實(shí)例名

Insname

第6列

端口

20001

第7列

serverid(如果有兩個(gè)節(jié)點(diǎn),serverid不能一樣,一個(gè)寫01一個(gè)寫02)

port+01/port+02

第8列

root賬號(hào)

Root

第9列

root密碼

Root

setserver.sh

用mysql用戶執(zhí)行腳本完成數(shù)據(jù)庫實(shí)例初始化。

登錄數(shù)據(jù)庫

數(shù)據(jù)庫登錄腳本在/data/mysql/db_InsName/bin下,login.sh。

04


主主復(fù)制


復(fù)制方式:半同步、主主復(fù)制

操作步驟:

登陸節(jié)點(diǎn)1:

步驟

操作

解釋

1

mysql>RESET MASTER;

重置

2

mysql>CHANGE MASTER TO
MASTER_HOST=HOSTIP2,
MASTER_USER=replicuser,
MASTER_PASSWD=passwd,
MASTER_PORT=PORT,
MASTER_AUTO_POSITION=1;

配置主主

3

mysql>START SLAVE;

啟動(dòng)服務(wù)

登陸節(jié)點(diǎn)2:

步驟

操作

解釋

1

mysql>RESET MASTER;

重置

2

mysql>CHANGE MASTER TO
MASTER_HOST=HOSTIP1,
MASTER_USER=replicuser,
MASTER_PASSWD=passwd,
MASTER_PORT=PORT,
MASTER_AUTO_POSITION=1;

配置主主

3

mysql>START SLAVE;

啟動(dòng)服務(wù)


05


集群部署規(guī)范


集群中的每一個(gè)MySQL實(shí)例都多帶帶部署在一個(gè)物理機(jī),考慮到容錯(cuò)和網(wǎng)絡(luò)環(huán)境盡量實(shí)現(xiàn)跨機(jī)柜部署。


禁止集群的一對主從部署在同一臺(tái)物理機(jī)。
MySQL不應(yīng)和高磁盤I/O,高計(jì)算任務(wù)的應(yīng)用部署在同一臺(tái)物理機(jī)上

07


Keepalived安裝部署



軟件名稱

版本號(hào)

Keepalived

Keepalived-1.3.2


安裝目錄規(guī)范:

軟件安裝目錄:/usr/local/keepalived

日志輸出目錄:/usr/local/keepalived/log/keepalived.log

配置文件目錄:/etc/keepalived/keepalived.conf

檢測腳本目錄:/etc/keepalived/scripts/

參數(shù)文件目錄:/etc/sysconfig/keepalived

執(zhí)行文件目錄:/usr/sbin/keepalived

啟動(dòng)文件目錄:/etc/rc.d/init.d/keepalived

源碼存放目錄:/tmp/keepalived-1.3.2/


keepalived安裝:

檢測依賴包:

在root用戶權(quán)限下執(zhí)行:

rpm-qa make gcc libpopt-dev libnl-dev libcurl4-openssl-dev | grep "notinstall"


查看是否存在未安裝的依賴包。(注意:當(dāng)操作系統(tǒng)語言為中文時(shí)需注意,notinstall篩選不出結(jié)果,可自行查看是否存在對應(yīng)依賴包。)

如果存在未安裝的依賴包,則對缺失的依賴包進(jìn)行安裝。


解壓縮編譯:

tar zxf keepalived-1.3.2.tar.gz,進(jìn)入目錄并編譯

在編譯過程中,只需要執(zhí)行安裝目錄,其他使用默認(rèn)配置即可。

./configure –prefix=/usr/local/keepalived

make && make install


所需文件創(chuàng)建:

在keepalived1.3.2中,部分系統(tǒng)所需使用的腳本文件在源碼安裝包中,即腳本存在位置為:/tmp/keepalived-1.3.2/keepalived/etc。


復(fù)制可執(zhí)行文件:

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/


復(fù)制系統(tǒng)服務(wù)文件:

cp/tmp/keepalived-1.3.2/keepalived/etc/init.d/keepalived  /etc/rc.d/init.d/


復(fù)制參數(shù)文件:

cp/usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/


創(chuàng)建配置文件/腳本文件目錄:

mkdir -p /etc/keepalived/scripts


     修改文件目錄權(quán)限:

將以下目錄用戶及所屬組該為mysql

/etc/keepalived

/usr/local/keepalived

chown -R mysql:mysql /etc/keepalived

chown -R mysql:mysql /usr/local/keepalived


     修改日志輸出:

1、修改keepalived啟動(dòng)參數(shù)文件

vi /etc/sysconfig/keepalvied

將文件中KEEPALIVED_OPTIONS=”-D”修改為:

KEEPALIVED_OPTIONS=”-D -d -S 0”

2、修改rsyslog.conf文件

vi /etc/rsyslog.conf

在文件最后增加一行:

local0.* /usr/local/keepalived/log/keepalived.log

3、重啟rsyslog服務(wù)

systemctl restart rsyslog


      配置keepalived:

      keepalived配置文件及說明

      參數(shù)說明:

參數(shù)名

配置說明

vrrp_script塊

keepalived調(diào)用檢測腳本塊

script

檢測腳本文件指定

ineerval

檢測腳本調(diào)用周期

vrrp_instance塊

keepalivd配置塊

state

keepalived角色狀態(tài),只有MASTER和BACKUP兩種,必須使用大寫

interface

keepalived實(shí)例綁定網(wǎng)卡

virtual_router_id

實(shí)例ID,用于主備之間互通,主備必須相同,值范圍:0-255

priority

權(quán)重值

advert_int

keepalived之間心跳檢測時(shí)間間隔

nopreempt

設(shè)置不搶占

track_script

選擇檢測腳本塊

authentication

認(rèn)證設(shè)置

auth_type

認(rèn)證方式

auth_pass

認(rèn)證密碼,最大不可超過8位

virtual_ipaddress

設(shè)置服務(wù)IP

vrrp_garp_master_refresh

Master發(fā)一次ARP包到網(wǎng)關(guān)的間隔時(shí)間,可以防止產(chǎn)生腦裂



配置文件展示:

global_defs {

vrrp_garp_master_refresh10  #Master間隔10s發(fā)一次ARP包到網(wǎng)關(guān)

}

vrrp_scriptcheck_run {

script"/etc/keepalived/scripts/keepalived_check_mysql.sh"#


需手工修改文件中的mysql端口號(hào)

interval30

weight0

}

vrrp_instanceVI_1 {

stateBACKUP

interfaceteam0        # 網(wǎng)卡,根據(jù)實(shí)際情況填寫

virtual_router_id155  # 推薦使用虛IP第四段數(shù)字

priority101

advert_int1

authentication{

auth_typePASS

auth_pass1111

}

virtual_ipaddress{

0.0.0.1     # 虛IP

}

track_script{

check_run

}

notify_master/etc/keepalived/scripts/notify_master.sh

}

   

Keepalived手動(dòng)切換操作方案

mysql數(shù)據(jù)庫VIP切換操作步驟

序號(hào)

主任務(wù)

子任務(wù)

操作節(jié)點(diǎn)

操作命令

1

VIP切換前準(zhǔn)備

檢查數(shù)據(jù)庫同步狀態(tài)

主從節(jié)點(diǎn)

show slave statusG

2

檢查數(shù)據(jù)庫日志

主從節(jié)點(diǎn)

tail -1000f  /data/db_{實(shí)例名}/elog/mysql.err

3

檢查keepalived狀態(tài)

主從節(jié)點(diǎn)

ps -ef |grep -i keepalived

4

VIP切換階段

設(shè)置read_only為on

主節(jié)點(diǎn)

set global read_only=on;

5

kill應(yīng)用連接

主節(jié)點(diǎn)

kill processid;

6

切換VIP

主節(jié)點(diǎn)

sudo systemctl stop keepalived

7

檢查VIP是否切換成功

主從節(jié)點(diǎn)

ip a

8

檢查應(yīng)用連接

主從節(jié)點(diǎn)

show processlist;

9

檢查同步狀態(tài)

主從節(jié)點(diǎn)

show slave statusG

10

設(shè)置read_onlyoff

新主節(jié)點(diǎn)

set global read_only=off;


說明:為保障MySQL數(shù)據(jù)庫數(shù)據(jù)的一致性,防止keepalived虛擬IP節(jié)點(diǎn)漂移次數(shù)過于頻繁,在state中設(shè)置為雙BACKUP,即主從均為BACKUP,此時(shí),如果主機(jī)出現(xiàn)故障或宕機(jī),從機(jī)檢測到之后,接管VIP,并繼續(xù)提供服務(wù)。主機(jī)恢復(fù),仍不會(huì)爭用VIP,直至下次從機(jī)出現(xiàn)故障宕機(jī),VIP才會(huì)進(jìn)行第二次漂移,恢復(fù)到原主機(jī),繼續(xù)提供服務(wù)。該設(shè)置避免頻繁切換數(shù)據(jù)庫節(jié)點(diǎn),導(dǎo)致數(shù)據(jù)的不一致。

08


小結(jié)



當(dāng)提供服務(wù)的一臺(tái)出現(xiàn)故障的時(shí)候,另外一臺(tái)會(huì)馬上自動(dòng)接管并且提供服務(wù),而且切換的時(shí)間非常短,mysql雙主復(fù)制,即互為Master-Slave(只有一個(gè)Master提供寫操作),可以實(shí)現(xiàn)數(shù)據(jù)庫服務(wù)器的熱備,但是一個(gè)Master宕機(jī)后不能實(shí)現(xiàn)動(dòng)態(tài)切換。使用Keepalived,可以通過虛擬IP,實(shí)現(xiàn)雙主對外的統(tǒng)一接口以及自動(dòng)檢查、失敗切換機(jī)制,基本不需要人工干預(yù)操作,從而實(shí)現(xiàn)MySQL數(shù)據(jù)庫的高可用性。


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/130214.html

相關(guān)文章

  • redis ----分布式鎖

    摘要:假設(shè)反向代理層是,里能夠配置多個(gè)后端,并且能夠探測到多個(gè)后端的存活性。以為例,天然支持主從同步,官方也有哨兵機(jī)制,來做的存活性檢測。方法論上,高可用是通過冗余自動(dòng)故障轉(zhuǎn)移來實(shí)現(xiàn)的。 究竟啥才是互聯(lián)網(wǎng)架構(gòu)高可用 一、什么是高可用 高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之一,它通常是指,通過設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間。假設(shè)系統(tǒng)一直能夠提供服...

    imingyu 評(píng)論0 收藏0
  • Nginx+Keepalived實(shí)現(xiàn)站點(diǎn)可用

    摘要:在協(xié)議實(shí)現(xiàn)里,虛擬路由器使用作為虛擬地址,就是唯一的,這個(gè)地址同一時(shí)間只有一個(gè)物理路由器占用。在虛擬路由器里面的物理路由器組里面通過多播地址來定時(shí)發(fā)送通告消息。負(fù)責(zé)健康檢查,包括常見的各種檢查方式。 公司內(nèi)部 OA 系統(tǒng)要做線上高可用,避免單點(diǎn)故障,所以計(jì)劃使用2臺(tái)虛擬機(jī)通過 Keepalived 工具來實(shí)現(xiàn) nginx 的高可用(High Avaiability),達(dá)到一臺(tái)nginx...

    Songlcy 評(píng)論0 收藏0
  • MySQL集群搭建(6)-雙主+keepalived可用

    摘要:雙主是一個(gè)比較簡單的高可用架構(gòu),適用于中小集群,今天就說說怎么用做的高可用。缺點(diǎn)也比較明顯,就是增加從節(jié)點(diǎn)的情況下,從節(jié)點(diǎn)不會(huì)主動(dòng)切換同步對象,而且腳本需要自己實(shí)現(xiàn),有一定風(fēng)險(xiǎn)。 雙主 + keepalived 是一個(gè)比較簡單的 MySQL 高可用架構(gòu),適用于中小 MySQL 集群,今天就說說怎么用 keepalived 做 MySQL 的高可用。 1 概述 1.1 keepalive...

    CarlBenjamin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<