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

資訊專欄INFORMATION COLUMN

Mysql+Keepalived高可用最佳配置實踐

IT那活兒 / 1015人閱讀
Mysql+Keepalived高可用最佳配置實踐
01


背景簡介


MySQL是一個小型關系型數據庫,性能方面存在先天性不足,盡管如此,其也因為開源、免費、可自主迭代研發、總體擁有成本低等諸多優點被廣大企業使用。目前業界有許多方法可以降低MySQL性能上限不足問題,軟件層面可通過數據庫中間件解決(如MyCAT、DRDS等),架構層面可以通過業務解耦、冷熱溫數據分離存儲等方式,降低高并發業務對MySQL數據庫的沖擊。盡管如此,但在MySQL實例規模較多時,通過合理規劃MySQL配置,一是可以確保降低高并發業務沖擊數據庫導致的數據庫宕機風險,二是可以最大化的利用服務器資源,以節約企業資源投入成本,三是通過統一標準化的配置可以較大程度降低自動化運維研發投入成本。


本文重點針對MySQL+Keepalived高可用架構進行講解,包含MySQL配置、Keepalived高可用配置,并附帶有相應的VIP切換監控腳本。

02


實現原理


Mysql中Master->Slave的主主同步。主主是數據雙向同步,主從是數據單向同步。一般情況下,主庫宕機后,需要手動將連接切換到從庫上。但如果使用keepalived組件架構可實現自動切換,保證數據庫的高可用性。


在MySQL雙主結構當中,使用keepalived,通過VIP實現Mysql雙主對外連接的統一接口。即客戶端通過Vip連接數據庫;保障其中某一臺主機出現故障,無法提供服務時,VIP可自動漂移到另一臺主機上,整個過程對于客戶端接來說幾乎無感覺,從而實現高可用。


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

03


安裝實施


Mysql安裝部署:

  • 軟件信息

軟件名稱

版本號

MySQL

MySQL官方社區5.7

主機參數調整:

  • 禁用selinux

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

  • 關閉numa
    #vi/etc/default/grub
    在GRUB_CMDLINE_LINUX這一行最后添加numa=off,使其變為GRUB_CMDLINE_LINUX=”crashkernel=auto…… rhgb quiet numa=off”,變更完成后保存退出。
    #grub2-mkconfig -o /boot/grub2/grub.cfg

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

  • #vi/etc/sysctl.conf
    將該配置文件內容清空,改成以下內容
    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

創建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


初始化數據庫,MySQL數據目錄:

實例要創建在/data/mysql下,實例中目錄的具體劃分如下:

主目錄

二級目錄

三級目錄

/data/mysql/db_insname

bin(啟動腳本目錄)

login.sh

shutdown.sh

startup.sh

blog

mysql-bin.*

mysql-bin.index

conf(配置文件目錄)

init_file.sql

insname.cnf

data(數據目錄)


elog(慢日志、錯誤日志)

mysql.err

slow.log

mysql.pid


mysql.sock


mysql.sock.lock


nohup.out


rlog(表空間目錄)

ib_logfile0

ib_logfile1

ib_logfile2

tmp(臨時目錄)


ulog(undo表空間目錄)

undo001

undo002

配置參數說明

參數名

數值

配置說明

max_connections

5000

數據庫中已連接的所有用戶總數不超過5000

max_user_connections

1200

單個用戶最大連接數不超過1200

connect_timeout

10

建立數據庫連接時不允許超過十秒

wait_timeout

600

狀態為sleep的線程超過600秒會被關閉

max_execution_time

10000

執行時間超過10000毫秒的sql語句會被終止

innodb_lock_wait_timeout

10

事務中的DML語句10秒未獲得鎖,會回滾整個事務

sql_safe_updates

1

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

loose_rpl_semi_sync_master_enabled

on

開啟半同步

loose_rpl_semi_sync_master_timeout

1000

客戶端等待1秒得不到確認變為異步

loose_rpl_semi_sync_master_wait_for_slave_count

1

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

loose_rpl_semi_sync_master_wait_no_slave

on

啟動備庫后進入半同步模式

log_queries_not_using_indexes

1

查詢不使用索引會計入慢日志

secure_file_priv

/data/mysql/db_insname/tmp

在庫中提取數據的數據存放路徑


實例創建:

setserver.ini配置文件

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

setServer_57.sh配置文件





#!/bin/bash


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

INI_CFG=./setServer.ini


#IP

IP=""


#軟件目錄

SOFTDIR=""


#根目錄

BASE_DIR=""


#實例名

INS_NAME=""


#實例名前綴

INS_NAME_PRE=""


#實例端口

INS_PORT=""


#server id

SERVER_ID=""


#實例根目錄

INS_BASE_DIR=""


#管理員用戶

ADMIN_USER=""


#管理員密碼

ADMIN_PASSWD=""


#實例參數文件

INS_CNF=""


#初始化SQL文件

INIT_FILE=""


#INNODB_BUFFER_POOL_SIZE設定

BUFFER_POOL=""


function Isok()

{

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

}


#創建實例函數

function create_instance()

{


#1、創建實例相應目錄 

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

chmod -R 755 ${INS_BASE_DIR}


echo "****** 1、創建目錄:"

echo "  啟動腳本目錄:${INS_BASE_DIR}/bin"

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

echo "  數據目錄:${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 "  臨時目錄:${INS_BASE_DIR}/tmp"



#2、生成參數文件

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、生成參數文件:"

echo "  實例${INS_NAME}的參數文件: ${INS_CNF}"


# 3、實例化數據庫

echo "****** 3、初始化數據庫:"

#[ `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、生成啟動、關閉、登陸腳本

echo "****** 4、生成啟動、關閉、登陸腳本:"


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";    

#復制用戶

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

#業務數據監控用戶

create user monitorjk identified by esEYq7QWkB6F2M$;

#數據庫監控用戶

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;

#運維管理用戶

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 " 密碼修改成功!"


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

sleep 5

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

sh ${INS_BASE_DIR}/bin/startup.sh


echo "****** 6、網絡監聽:"

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


echo "****** 7、MySQL錯誤日志:"

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 "****** 實例${INS_NAME}信息: ******"

          echo "        IP: ${IP}"

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

          echo "        根目錄: ${BASE_DIR}"

          echo "        實例根目錄: ${INS_BASE_DIR}"

          echo "        實例名前綴: ${INS_NAME_PRE}"

          echo "        實例名: ${INS_NAME}"

          echo "        實例端口: ${INS_PORT}"

          echo "        server_id: ${SERVER_ID}"

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

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

  echo "        INNODB_BUFFER_POOL_SIZE設定: ${BUFFER_POOL}"

         

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

         

              echo "ERROR:創建實例相應參數不夠!"

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

                  echo -e " "

         

          #判斷端口與ibdata01文件是否存在,都不存在則創建實例。存在一個則創建失敗

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

    

          #調用創建實例函數

          create_instance;


       else

        

         echo "ERROR:端口${INS_PORT}或${INS_BASE_DIR}/data/ibdata01文件存在,創建實例失?。?

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

                   echo -e " "

         

   fi

         

done

  

else


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

 exit 1


fi


數據庫的初始化使用上面兩個腳本完成。

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

  • 2.執行setserver.sh,初使化數據庫。

setserver.ini,填寫方法如下

序列

名稱

示例

第1列

ip

0.0.0.1

第2列

軟件目錄

/usr/local/mysql

第3列

數據根目錄

/data/mysql

第4列

實例名前綴

Db

第5列

實例名

Insname

第6列

端口

20001

第7列

serverid(如果有兩個節點,serverid不能一樣,一個寫01一個寫02)

port+01/port+02

第8列

root賬號

Root

第9列

root密碼

Root

setserver.sh

用mysql用戶執行腳本完成數據庫實例初始化。

登錄數據庫

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

04


主主復制


復制方式:半同步、主主復制

操作步驟:

登陸節點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;

啟動服務

登陸節點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;

啟動服務


05


集群部署規范


集群中的每一個MySQL實例都多帶帶部署在一個物理機,考慮到容錯和網絡環境盡量實現跨機柜部署。


禁止集群的一對主從部署在同一臺物理機。
MySQL不應和高磁盤I/O,高計算任務的應用部署在同一臺物理機上

07


Keepalived安裝部署



軟件名稱

版本號

Keepalived

Keepalived-1.3.2


安裝目錄規范:

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

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

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

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

參數文件目錄:/etc/sysconfig/keepalived

執行文件目錄:/usr/sbin/keepalived

啟動文件目錄:/etc/rc.d/init.d/keepalived

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


keepalived安裝:

檢測依賴包:

在root用戶權限下執行:

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


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

如果存在未安裝的依賴包,則對缺失的依賴包進行安裝。


解壓縮編譯:

tar zxf keepalived-1.3.2.tar.gz,進入目錄并編譯

在編譯過程中,只需要執行安裝目錄,其他使用默認配置即可。

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

make && make install


所需文件創建:

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


復制可執行文件:

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


復制系統服務文件:

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


復制參數文件:

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


創建配置文件/腳本文件目錄:

mkdir -p /etc/keepalived/scripts


     修改文件目錄權限:

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

/etc/keepalived

/usr/local/keepalived

chown -R mysql:mysql /etc/keepalived

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


     修改日志輸出:

1、修改keepalived啟動參數文件

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服務

systemctl restart rsyslog


      配置keepalived:

      keepalived配置文件及說明

      參數說明:

參數名

配置說明

vrrp_script塊

keepalived調用檢測腳本塊

script

檢測腳本文件指定

ineerval

檢測腳本調用周期

vrrp_instance塊

keepalivd配置塊

state

keepalived角色狀態,只有MASTER和BACKUP兩種,必須使用大寫

interface

keepalived實例綁定網卡

virtual_router_id

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

priority

權重值

advert_int

keepalived之間心跳檢測時間間隔

nopreempt

設置不搶占

track_script

選擇檢測腳本塊

authentication

認證設置

auth_type

認證方式

auth_pass

認證密碼,最大不可超過8位

virtual_ipaddress

設置服務IP

vrrp_garp_master_refresh

Master發一次ARP包到網關的間隔時間,可以防止產生腦裂



配置文件展示:

global_defs {

vrrp_garp_master_refresh10  #Master間隔10s發一次ARP包到網關

}

vrrp_scriptcheck_run {

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


需手工修改文件中的mysql端口號

interval30

weight0

}

vrrp_instanceVI_1 {

stateBACKUP

interfaceteam0        # 網卡,根據實際情況填寫

virtual_router_id155  # 推薦使用虛IP第四段數字

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手動切換操作方案

mysql數據庫VIP切換操作步驟

序號

主任務

子任務

操作節點

操作命令

1

VIP切換前準備

檢查數據庫同步狀態

主從節點

show slave statusG

2

檢查數據庫日志

主從節點

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

3

檢查keepalived狀態

主從節點

ps -ef |grep -i keepalived

4

VIP切換階段

設置read_only為on

主節點

set global read_only=on;

5

kill應用連接

主節點

kill processid;

6

切換VIP

主節點

sudo systemctl stop keepalived

7

檢查VIP是否切換成功

主從節點

ip a

8

檢查應用連接

主從節點

show processlist;

9

檢查同步狀態

主從節點

show slave statusG

10

設置read_onlyoff

新主節點

set global read_only=off;


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

08


小結



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


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/130214.html

相關文章

  • redis ----分布式鎖

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

    imingyu 評論0 收藏0
  • Nginx+Keepalived實現站點可用

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

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

    摘要:雙主是一個比較簡單的高可用架構,適用于中小集群,今天就說說怎么用做的高可用。缺點也比較明顯,就是增加從節點的情況下,從節點不會主動切換同步對象,而且腳本需要自己實現,有一定風險。 雙主 + keepalived 是一個比較簡單的 MySQL 高可用架構,適用于中小 MySQL 集群,今天就說說怎么用 keepalived 做 MySQL 的高可用。 1 概述 1.1 keepalive...

    CarlBenjamin 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<