阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL双主互备+Keepalived高可用架构实现案例

464次阅读
没有评论

共计 40139 个字符,预计需要花费 101 分钟才能阅读完成。

一、环境介绍

1.1、规划

序号

类别

版本

主机名

IP

端口

备注

1

OS

CentOS release 6.9 (Final) (minimal)

my1

172.16.210.180

8306

172.16.210.183

2

MySQL

mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

my2

172.16.210.181

8306

3

keeplived

keepalived-1.2.7.tar.gz

   

mysql下载地址:

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

keeplived下载地址:

http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

1.2MySQL双主互备 +keepalived 高可用架构介绍

MySQL主从复制架构可以在很大程度保证 MySQL 的高可用,在一主多从的架构中还可以利用读写分离将读操作分配到从库中,减轻主库压力。但是在这种架构中,主库出现故障时需要手动将一台从库提升为主库。在对写操作要求较高的环境中,主库故障在主从架构中会成为单点故障。因此需要主主互备架构,避免主节点故障造成写操作失效。

在双主互备的架构中,每台 MySQL 都充当主服务器,同时充当对方的从服务器。在任意一台服务器上的写操作都会被复制到另一台服务器上,从而保证了数据的可靠性。

在双主互备的基础上加上 keepalived,在其中一台机器上绑定虚拟ipVIP)。利用vip 统一对外服务,可以避免在两个节点同时写数据造成冲突。同时当 keepalived 主节点发生故障时,keeplived会自动将 VIP 切换到备节点上,从而实现主服务器的高可用。

二、安装mysql5.7

2.1、主机 M1 上的操作

2.1.1、安装依赖包

yum  clean all

yum -y update

yum -y install gcc gcc-c++ make autoconf automake ncurses-devel bison ncurses  cmake libaio libaio-devel  boost

yum -y install gcc-c++ gd libxml2-devel libjpeg-devel libpng-devel net-snmp-devel wget telnet vim zip unzip

yum -y install curl-devel libxslt-devel pcre-devel libjpeg libpng libcurl4-openssl-dev

yum -y install libcurl-devel libcurl freetype-config freetype freetype-devel unixODBC libxslt

yum -y install gcc automake autoconf libtool openssl-devel

yum -y install perl-devel perl-ExtUtils-Embed

yum -y install cmake ncurses-devel.x86_64  openldap-devel.x86_64 lrzsz  openssh-clients gcc-g77  bison

yum -y install libmcrypt libmcrypt-devel mhash mhash-devel bzip2 bzip2-devel

yum -y install ntpdate rsync svn  patch  iptables iptables-services

yum -y install libevent libevent-devel  cyrus-sasl cyrus-sasl-devel

yum -y install gd-devel libmemcached-devel memcached git libssl-devel libyaml-devel auto make

yum -y groupinstall "Server Platform Development" "Development tools"

yum -y groupinstall "Development tools" 

2.1.2、下载解压

rm -rf /etc/my.cnf  

mkdir -p /opt/mysql

cd /opt/mysql/

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

tar -zxf  mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

cd /usr/local/

ln -s /opt/mysql/mysql-5.7.20-linux-glibc2.12-x86_64  mysql

2.1.3、创建所需要的目录

mkdir  -p /data/mysql/mysql_8306/{data,logs,tmp}

2.1.4、更改权限

groupadd mysql

useradd -g mysql mysql -d /home/mysql -s /sbin/nologin

2.1.5、创建my.cnf

cat >/data/mysql/mysql_8306/my_8306.cnf <<EOF

#my.cnf

[client]

port            = 8306

socket          = /data/mysql/mysql_8306/tmp/mysql_8306.sock

 

[mysql]

#prompt="\u@\h:\p  \R:\m:\s [\d]>"

#tee=/data/mysql/mysql_8306/data/query.log

#prompt="\u@\h:\p  \R:\m:\s [\d]>"

prompt = "[\u@\h][\d]>\_"  

connect_timeout = 5

no-auto-rehash

 

[mysqld]

#misc

user = mysql

basedir = /usr/local/mysql

datadir = /data/mysql/mysql_8306/data

port = 8306

socket = /data/mysql/mysql_8306/tmp/mysql_8306.sock

 

#timeout

interactive_timeout = 300

wait_timeout = 300

 

#character set

character-set-server = utf8

 

open_files_limit = 65535

max_connections = 100

max_connect_errors = 100000

 

skip-name-resolve = 1

#logs

log-output=file

slow_query_log = 1

slow_query_log_file = /data/mysql/mysql_8306/logs/slow.log

log-error = /data/mysql/mysql_8306/logs/error.log

log_error_verbosity = 3

pid-file = mysql.pid

long_query_time = 1

#log-slow-admin-statements = 1

#log-queries-not-using-indexes = 1

log-slow-slave-statements = 1

 

#tmp

tmpdir=/data/mysql/mysql_8306/tmp

event_scheduler = 1

performance_schema = on

max_allowed_packet = 32M

character_set_server = utf8mb4

#character_set_server = utf8

default-time-zone = system

default-storage-engine = InnoDB

#bind_address = 172.16.151.248

explicit_defaults_for_timestamp = 1

 

 

#binlog

binlog_format = row

server-id = 1818306

log-bin = /data/mysql/mysql_8306/logs/mysql-bin

log-bin-index = /data/mysql/mysql_8306/logs/mysql-bin.index

binlog_cache_size = 4M

max_binlog_size = 1G

max_binlog_cache_size = 2G

sync_binlog = 0

expire_logs_days = 90

#replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

 

#relay log

skip_slave_start = 1

max_relay_log_size = 1G

relay_log_purge = 1

relay_log_recovery = 1

log_slave_updates

#slave-skip-errors=1032,1053,1062

 

explicit_defaults_for_timestamp=1

#buffers & cache

table_open_cache = 2048

table_definition_cache = 2048

table_open_cache = 2048

max_heap_table_size = 96M

sort_buffer_size = 2M

join_buffer_size = 2M

thread_cache_size = 256

query_cache_size = 0

query_cache_type = 0

query_cache_limit = 256K

query_cache_min_res_unit = 512

thread_stack = 192K

tmp_table_size = 96M

key_buffer_size = 8M

read_buffer_size = 2M

read_rnd_buffer_size = 16M

bulk_insert_buffer_size = 32M

 

#myisam

myisam_sort_buffer_size = 128M

myisam_max_sort_file_size = 10G

myisam_repair_threads = 1

 

#innodb

innodb_buffer_pool_size = 10G

innodb_buffer_pool_instances = 1

innodb_data_file_path = ibdata1:1G:autoextend

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 64M

innodb_log_file_size = 500M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 50

innodb_file_per_table = 1

innodb_rollback_on_timeout

innodb_status_file = 1

innodb_io_capacity = 2000

transaction_isolation = READ-COMMITTED

innodb_flush_method = O_DIRECT

gtid_mode = ON

enforce_gtid_consistency = ON

master_info_repository = TABLE

relay-log-info-repository = TABLE

binlog_checksum = NONE

log_slave_updates = ON

 

# Two-Master configure

#server-1

auto-increment-offset = 1

auto-increment-increment = 2

 

#server-2                          

#auto-increment-offset = 2

#auto-increment-increment = 2

 

# semi sync replication settings #

plugin_dir = /usr/local/mysql/lib/plugin #官方版本的路径

#plugin_dir = /usr/local/mysql/lib/mysql/plugin

plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #官方版本的路径

#plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

 

loose_rpl_semi_sync_master_enabled = on     

loose_rpl_semi_sync_master_timeout = 5000      

loose_rpl_semi_sync_master_trace_level = 32   

loose_rpl_semi_sync_master_wait_no_slave = on

loose_rpl_semi_sync_slave_enabled = on      

loose_rpl_semi_sync_slave_trace_level = 32

loose_rpl_semi_sync_master_enabled = 1

loose_rpl_semi_sync_slave_enabled = 1

loose_rpl_semi_sync_master_timeout = 5000

loose_rpl_semi_sync_master_wait_for_slave_count=1

loose_rpl_semi_sync_master_wait_point=AFTER_SYNC

 

slave_preserve_commit_order = 1

slave_transaction_retries = 128

log_timestamps = system

show_compatibility_56 = on

slave_parallel_workers = 16

slave_parallel_type = LOGICAL_CLOCK

 

loose_innodb_numa_interleave = 1

innodb_buffer_pool_dump_pct = 40

innodb_page_cleaners = 16

innodb_undo_log_truncate = 1

innodb_max_undo_log_size = 2G

innodb_purge_rseg_truncate_frequency = 128

#transaction_write_set_extraction = MURMUR32

 

 

# group replication

##log-bin = mysql

##server-id = 618306

##gtid_mode = ON

##enforce_gtid_consistency = ON

##master_info_repository = TABLE

##relay-log-info-repository = TABLE

##binlog_checksum = NONE

##log_slave_updates = ON

##binlog_format = row

##transaction_write_set_extraction=XXHASH64

##loose-group_replication_group_name = '3db33b36-0e51-409f-a61d-c99756e90154'

##loose-group_replication_start_on_boot = off

##loose-group_replication_local_address= "10.125.141.62:28306"  # 不能超过 5 位数字

##loose-group_replication_group_seeds= "10.125.141.62:28306,10.125.141.62:23307,10.125.141.62:23308"  # 不能超过 5 位数字

##loose-group_replication_bootstrap_group= off

# loose-group_replication_single_primary_mode=FALSE   ### 本次搭建的是 mutil_mode

# loose-group_replication_enforce_update_everywhere_checks= TRUE

 

[mysqld_safe]

#malloc-lib=/usr/local/mysql/lib/jmalloc.so

nice=-19

open-files-limit=65535

EOF

2.1.6、修改目录权限

chown -R mysql.mysql /data/mysql/

2.1.7、初始化

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --initialize-insecure &

2.1.8、启动

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_8306/my_8306.cnf &

#  推荐的启动方式

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_8306/my_8306.cnf &

2.1.9、登陆方式

/usr/local/mysql/bin/mysql  -uroot -p -P8306 -S /data/mysql/mysql_8306/tmp/mysql_8306.sock

或者

/usr/local/mysql/bin/mysql  -P8306 -S /data/mysql/mysql_8306/tmp/mysql_8306.sock

2.1.10、创建授权修改密码

 
set sql_log_bin = 0;

create user 'rpl_user'@'%';

grant replication slave on *.* to 'rpl_user'@'%' identified by 'rpl_user2017';

update mysql.user set authentication_string=password('root2017') where user='root';

flush privileges;

set sql_log_bin = 1;

reset  master ; reset slave all

2.1.11change master

CHANGE MASTER TO MASTER_HOST='172.16.210.181',MASTER_USER='rpl_user',

MASTER_PASSWORD='rpl_user2017',MASTER_PORT=8306,

MASTER_CONNECT_RETRY=10,MASTER_AUTO_POSITION =1; 

start slave;

show slave status\G; 

2.1.12、设置快捷登陆方式

[root@my1 local]# /usr/local/mysql/bin/mysql_config_editor set --host=localhost --login-path=8306_localhost_login \

> --user=root --port=8306  --password --socket=/data/mysql/mysql_8306/tmp/mysql_8306.sock

Enter password:

[root@my1 local]#

 
# 查看

/usr/local/mysql/bin/mysql_config_editor print --all

 

[root@my1 local]# alias mysql.8306.login='/usr/local/mysql/bin/mysql --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --login-path=8306_localhost_login'

2.1.13、快捷关闭数据库

[root@my1 local]#alias mysql.8306.stop='/usr/local/mysql/bin/mysqladmin --login-path=8306_localhost_login shutdown'

2.1.14、加入备忘录

[root@my1 ~]# cat  >>/root/.bashrc <<EOF

alias mysql.8306.start='/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_8306/my_8306.cnf &'

alias mysql.8306.login='/usr/local/mysql/bin/mysql --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --login-path=8306_localhost_login'

alias mysql.8306.stop='/usr/local/mysql/bin/mysqladmin --login-path=8306_localhost_login shutdown'

EOF


[root@my1 ~]# source /root/.bash_profile

2.1.15、备份脚本

[root@my1 ~]# cat /root/all_database.sh

#!/bin/bash

/usr/local/mysql/bin/mysqldump --login-path=8306_localhost_login -R -E --triggers -e --max_allowed_packet=16777216 --net_buffer_length=16384  --master-data=2 --single-transaction --all-databases --quick  | gzip >/root/all_database_bak_`date +%Y-%m-%d_%H_%M_%S`.sql.gz

[root@my1 ~]# 

2.2、主机 M2 上的操作

2.2.1、安装依赖包

yum  clean all

yum -y update

yum -y install gcc gcc-c++ make autoconf automake ncurses-devel bison ncurses  cmake libaio libaio-devel  boost

yum -y install gcc-c++ gd libxml2-devel libjpeg-devel libpng-devel net-snmp-devel wget telnet vim zip unzip

yum -y install curl-devel libxslt-devel pcre-devel libjpeg libpng libcurl4-openssl-dev

yum -y install libcurl-devel libcurl freetype-config freetype freetype-devel unixODBC libxslt

yum -y install gcc automake autoconf libtool openssl-devel

yum -y install perl-devel perl-ExtUtils-Embed

yum -y install cmake ncurses-devel.x86_64  openldap-devel.x86_64 lrzsz  openssh-clients gcc-g77  bison

yum -y install libmcrypt libmcrypt-devel mhash mhash-devel bzip2 bzip2-devel

yum -y install ntpdate rsync svn  patch  iptables iptables-services

yum -y install libevent libevent-devel  cyrus-sasl cyrus-sasl-devel

yum -y install gd-devel libmemcached-devel memcached git libssl-devel libyaml-devel auto make

yum -y groupinstall "Server Platform Development" "Development tools"

yum -y groupinstall "Development tools"

2.2.2、下载安装

rm -rf /etc/my.cnf  

mkdir -p /opt/mysql

cd /opt/mysql/

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

tar -zxf  mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

cd /usr/local/

ln -s /opt/mysql/mysql-5.7.20-linux-glibc2.12-x86_64  mysql

2.2.3、创建所需要的目录

mkdir  -p /data/mysql/mysql_8306/{data,logs,tmp} 

2.2.4、更改权限

groupadd mysql

useradd -g mysql mysql -d /home/mysql -s /sbin/nologin

2.2.5、创建my.cnf

cat >/data/mysql/mysql_8306/my_8306.cnf <<EOF

#my.cnf

[client]

port            = 8306

socket          = /data/mysql/mysql_8306/tmp/mysql_8306.sock

 

[mysql]

#prompt="\u@\h:\p  \R:\m:\s [\d]>"

#tee=/data/mysql/mysql_8306/data/query.log

#prompt="\u@\h:\p  \R:\m:\s [\d]>"

prompt = "[\u@\h][\d]>\_"  

connect_timeout = 5

no-auto-rehash

 

[mysqld]

#misc

user = mysql

basedir = /usr/local/mysql

datadir = /data/mysql/mysql_8306/data

port = 8306

socket = /data/mysql/mysql_8306/tmp/mysql_8306.sock

 

#timeout

interactive_timeout = 300

wait_timeout = 300

 

#character set

character-set-server = utf8

 

open_files_limit = 65535

max_connections = 100

max_connect_errors = 100000

 

skip-name-resolve = 1

#logs

log-output=file

slow_query_log = 1

slow_query_log_file = /data/mysql/mysql_8306/logs/slow.log

log-error = /data/mysql/mysql_8306/logs/error.log

log_error_verbosity = 3

pid-file = mysql.pid

long_query_time = 1

#log-slow-admin-statements = 1

#log-queries-not-using-indexes = 1

log-slow-slave-statements = 1

 

#tmp

tmpdir=/data/mysql/mysql_8306/tmp

event_scheduler = 1

performance_schema = on

max_allowed_packet = 32M

character_set_server = utf8mb4

#character_set_server = utf8

default-time-zone = system

default-storage-engine = InnoDB

#bind_address = 172.16.151.248

explicit_defaults_for_timestamp = 1

 

 

#binlog

binlog_format = row

server-id = 1818306

log-bin = /data/mysql/mysql_8306/logs/mysql-bin

log-bin-index = /data/mysql/mysql_8306/logs/mysql-bin.index

binlog_cache_size = 4M

max_binlog_size = 1G

max_binlog_cache_size = 2G

sync_binlog = 0

expire_logs_days = 90

#replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

 

 

#relay log

skip_slave_start = 1

max_relay_log_size = 1G

relay_log_purge = 1

relay_log_recovery = 1

log_slave_updates

#slave-skip-errors=1032,1053,1062

 

explicit_defaults_for_timestamp=1

#buffers & cache

table_open_cache = 2048

table_definition_cache = 2048

table_open_cache = 2048

max_heap_table_size = 96M

sort_buffer_size = 2M

join_buffer_size = 2M

thread_cache_size = 256

query_cache_size = 0

query_cache_type = 0

query_cache_limit = 256K

query_cache_min_res_unit = 512

thread_stack = 192K

tmp_table_size = 96M

key_buffer_size = 8M

read_buffer_size = 2M

read_rnd_buffer_size = 16M

bulk_insert_buffer_size = 32M

 

#myisam

myisam_sort_buffer_size = 128M

myisam_max_sort_file_size = 10G

myisam_repair_threads = 1

 

#innodb

innodb_buffer_pool_size = 10G

innodb_buffer_pool_instances = 1

innodb_data_file_path = ibdata1:1G:autoextend

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 64M

innodb_log_file_size = 500M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 50

innodb_file_per_table = 1

innodb_rollback_on_timeout

innodb_status_file = 1

innodb_io_capacity = 2000

transaction_isolation = READ-COMMITTED

innodb_flush_method = O_DIRECT

gtid_mode = ON

enforce_gtid_consistency = ON

master_info_repository = TABLE

relay-log-info-repository = TABLE

binlog_checksum = NONE

log_slave_updates = ON

 

# Two-Master configure

#server-1

#auto-increment-offset = 1

#auto-increment-increment = 2

 

#server-2                          

auto-increment-offset = 2

auto-increment-increment = 2

 

# semi sync replication settings #

plugin_dir = /usr/local/mysql/lib/plugin #官方版本的路径

#plugin_dir = /usr/local/mysql/lib/mysql/plugin

plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #官方版本的路径

#plugin_load = "validate_password.so;rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

 

loose_rpl_semi_sync_master_enabled = on     

loose_rpl_semi_sync_master_timeout = 5000      

loose_rpl_semi_sync_master_trace_level = 32   

loose_rpl_semi_sync_master_wait_no_slave = on

loose_rpl_semi_sync_slave_enabled = on      

loose_rpl_semi_sync_slave_trace_level = 32

loose_rpl_semi_sync_master_enabled = 1

loose_rpl_semi_sync_slave_enabled = 1

loose_rpl_semi_sync_master_timeout = 5000

loose_rpl_semi_sync_master_wait_for_slave_count=1

loose_rpl_semi_sync_master_wait_point=AFTER_SYNC

 

slave_preserve_commit_order = 1

slave_transaction_retries = 128

log_timestamps = system

show_compatibility_56 = on

slave_parallel_workers = 16

slave_parallel_type = LOGICAL_CLOCK

 

loose_innodb_numa_interleave = 1

innodb_buffer_pool_dump_pct = 40

innodb_page_cleaners = 16

innodb_undo_log_truncate = 1

innodb_max_undo_log_size = 2G

innodb_purge_rseg_truncate_frequency = 128

#transaction_write_set_extraction = MURMUR32

 

 

# group replication

##log-bin = mysql

##server-id = 618306

##gtid_mode = ON

##enforce_gtid_consistency = ON

##master_info_repository = TABLE

##relay-log-info-repository = TABLE

##binlog_checksum = NONE

##log_slave_updates = ON

##binlog_format = row

##transaction_write_set_extraction=XXHASH64

##loose-group_replication_group_name = '3db33b36-0e51-409f-a61d-c99756e90154'

##loose-group_replication_start_on_boot = off

##loose-group_replication_local_address= "10.125.141.62:28306"  # 不能超过 5 位数字

##loose-group_replication_group_seeds= "10.125.141.62:28306,10.125.141.62:23307,10.125.141.62:23308"  # 不能超过 5 位数字

##loose-group_replication_bootstrap_group= off

# loose-group_replication_single_primary_mode=FALSE   ### 本次搭建的是 mutil_mode

# loose-group_replication_enforce_update_everywhere_checks= TRUE

 

[mysqld_safe]

#malloc-lib=/usr/local/mysql/lib/jmalloc.so

nice=-19

open-files-limit=65535

EOF 

2.2.6、修改目录权限

chown -R mysql.mysql /data/mysql/

2.2.7、初始化

/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --initialize-insecure & 

2.2.8、启动

# /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_8306/my_8306.cnf &


#  推荐的启动方式

/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_8306/my_8306.cnf &

2.2.9、登陆方式

/usr/local/mysql/bin/mysql  -uroot -p -P8306 -S /data/mysql/mysql_8306/tmp/mysql_8306.sock


或者

/usr/local/mysql/bin/mysql  -P8306 -S /data/mysql/mysql_8306/tmp/mysql_8306.sock

2.2.10、创建授权修改密码

set sql_log_bin = 0;

create user 'rpl_user'@'%';

grant replication slave on *.* to 'rpl_user'@'%' identified by 'rpl_user2017';

update mysql.user set authentication_string=password('root2017') where user='root';

flush privileges;

set sql_log_bin = 1;

reset  master ; reset slave all

2.2.11change master

CHANGE MASTER TO MASTER_HOST='172.16.210.180',MASTER_USER='rpl_user',

MASTER_PASSWORD='rpl_user2017',MASTER_PORT=8306,

MASTER_CONNECT_RETRY=10,MASTER_AUTO_POSITION =1;

 

start slave;

show slave status\G;

2.2.12、设置快捷登陆方式

[root@my2 local]# /usr/local/mysql/bin/mysql_config_editor set --host=localhost --login-path=8306_localhost_login \

> --user=root --port=8306  --password --socket=/data/mysql/mysql_8306/tmp/mysql_8306.sock

Enter password:

[root@my2 local]#

# 查看

/usr/local/mysql/bin/mysql_config_editor print --all

 

[root@my2 local]# alias mysql.8306.login='/usr/local/mysql/bin/mysql --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --login-path=8306_localhost_login'

2.2.13、快捷关闭数据库

[root@my2 local]#alias mysql.8306.stop='/usr/local/mysql/bin/mysqladmin --login-path=8306_localhost_login shutdown'

2.2.14、加入备忘录

[root@my2 ~]# cat  >>/root/.bashrc <<EOF

alias mysql.8306.start='/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_8306/my_8306.cnf &'

alias mysql.8306.login='/usr/local/mysql/bin/mysql --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --login-path=8306_localhost_login'

alias mysql.8306.stop='/usr/local/mysql/bin/mysqladmin --login-path=8306_localhost_login shutdown'

EOF

[root@my2 ~]# source /root/.bash_profile 

2.2.15、备份脚本

[root@my2 ~]# cat /root/all_database.sh

#!/bin/bash

/usr/local/mysql/bin/mysqldump --login-path=8306_localhost_login -R -E --triggers -e --max_allowed_packet=16777216 --net_buffer_length=16384  --master-data=2 --single-transaction --all-databases --quick  | gzip >/root/all_database_bak_`date +%Y-%m-%d_%H_%M_%S`.sql.gz

[root@my2 ~]# 

三、验证同步情况

3.1、在 my1 中操作

[root@my1 ~]# mysql.8306.login

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 6

Server version: 5.7.20-log MySQL Community Server (GPL)

 

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

[root@localhost][(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

4 rows in set (0.00 sec)

 

[root@localhost][(none)]> create database db1;

Query OK, 1 row affected (0.01 sec)

 

[root@localhost][(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db1                |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

[root@localhost][(none)]>

[root@localhost][(none)]> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State:

                  Master_Host: 172.16.210.181

                  Master_User: rpl_user

                  Master_Port: 8306

                Connect_Retry: 10

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 150

               Relay_Log_File: my1-relay-bin.000003

                Relay_Log_Pos: 4

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 150

              Relay_Log_Space: 721

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File:

           Master_SSL_CA_Path:

              Master_SSL_Cert:

            Master_SSL_Cipher:

               Master_SSL_Key:

        Seconds_Behind_Master: NULL

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 0

                  Master_UUID: d14b54b4-de49-11e7-96ea-8ae132e2dda2

             Master_Info_File: mysql.slave_master_info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State:

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set:

            Executed_Gtid_Set: ce20a632-de49-11e7-9587-c2c763ed137c:1

                Auto_Position: 1

         Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

1 row in set (0.00 sec)

 

ERROR:

No query specified

 

[root@localhost][(none)]> 

3.2、在 my2 中操作

[root@my2 local]# mysql.8306.login

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 32

Server version: 5.7.20-log MySQL Community Server (GPL)

 

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

 

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

 

[root@localhost][(none)]> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| db1                |

| mysql              |

| performance_schema |

| sys                |

+--------------------+

5 rows in set (0.00 sec)

 

[root@localhost][(none)]> create database db2;

Query OK, 1 row affected (0.00 sec)

 

[root@localhost][(none)]> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 172.16.210.180

                  Master_User: rpl_user

                  Master_Port: 8306

                Connect_Retry: 10

              Master_Log_File: mysql-bin.000003

          Read_Master_Log_Pos: 303

               Relay_Log_File: my2-relay-bin.000003

                Relay_Log_Pos: 508

        Relay_Master_Log_File: mysql-bin.000003

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 303

              Relay_Log_Space: 910

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File:

           Master_SSL_CA_Path:

              Master_SSL_Cert:

            Master_SSL_Cipher:

               Master_SSL_Key:

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 1808306

                  Master_UUID: ce20a632-de49-11e7-9587-c2c763ed137c

             Master_Info_File: mysql.slave_master_info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set: ce20a632-de49-11e7-9587-c2c763ed137c:1

            Executed_Gtid_Set: ce20a632-de49-11e7-9587-c2c763ed137c:1,

d14b54b4-de49-11e7-96ea-8ae132e2dda2:1

                Auto_Position: 1

         Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

1 row in set (0.00 sec)

 

ERROR:

No query specified

同步正常 

四、同步故障处理举例

# gtid 故障处理

模拟在从库删除库,然后再在主库删除该库,报如下错误

 Last_SQL_Error: Error 'Can't drop database 'db1'; database doesn't exist' on query. Default database: 'db1'. Query: 'drop database db1'

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 628306

                  Master_UUID: 11526eb0-fcbc-11e6-af7d-005056b937e2

             Master_Info_File: mysql.slave_master_info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State:

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp: 170227 15:44:06

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set: 11526eb0-fcbc-11e6-af7d-005056b937e2:1-2

            Executed_Gtid_Set: 11526eb0-fcbc-11e6-af7d-005056b937e2:1,

1760a7a5-fcbc-11e6-8f14-005056b90358:1

                Auto_Position: 1

         Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

 

处理方法:stop slave;

set gtid_next='11526eb0-fcbc-11e6-af7d-005056b937e2:2';

begin;

commit;

set gtid_next='automatic';

start slave;

show slave status\G; 

五、配置 keeplived 实现高可用

参考资料:

http://www.linuxidc.com/Linux/2015-06/118767.htm

5.1、在 my1 中的操作

yum install -y pcre-devel openssl-devel popt-devel libnl-* libn*# 安装依赖包

#  将 keepalived 配置成系统服务

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

tar zxvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

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

make && make install

 

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

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

mkdir /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

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

chmod +x /etc/init.d/keepalived

 

# server1

cat >/etc/keepalived/keepalived.conf <<EOF

! Configuration File forkeepalived

global_defs {

# notification_email {

# test@sina.com

#  }

# notification_email_from  admin@test.com

# smtp_server 127.0.0.1

# smtp_connect_timeout 30

router_id MYSQL_HA18      #标识,双主相同

 }

vrrp_instance VI_1 {

 state BACKUP           #两台都设置 BACKUP

 interface eth0

 virtual_router_id 18       #主备相同

 priority 100           #优先级,backup 设置 90

 advert_int 1

 nopreempt             #不主动抢占资源,只在 master 这台优先级高的设置,backup 不设置

 authentication {

 auth_type PASS

 auth_pass 1111

 }

 virtual_ipaddress {172.16.210.183

 }

}

virtual_server 172.16.210.183 8306 {delay_loop 2

 #lb_algo rr              #LVS 算法,用不到,我们就关闭了

 #lb_kind DR              #LVS 模式,如果不关闭,备用服务器不能通过 VIP 连接主 MySQL

 persistence_timeout 50  #同一 IP 的连接 60 秒内被分配到同一台真实服务器

 protocol TCP

 real_server 172.16.210.180 8306 {   #检测本地 mysql,backup 也要写检测本地 mysql

 weight 3

 notify_down /usr/local/keepalived/mysql.sh    #当 mysq 服 down 时,执行此脚本,杀死 keepalived 实现切换

 TCP_CHECK {connect_timeout 3    #连接超时

 nb_get_retry 3       #重试次数

 delay_before_retry 3 #重试间隔时间

  }

}

EOF

 

cat >/usr/local/keepalived/mysql.sh <<EOF

#!/bin/bash

pkill keepalived

EOF

chmod +x /usr/local/keepalived/mysql.sh

chmod +x /etc/init.d/keepalived

/etc/init.d/keepalived start 

5.2、在 my2 中的操作

yum install -y pcre-devel openssl-devel popt-devel libnl-* libn*# 安装依赖包

 

#  将 keepalived 配置成系统服务

wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz

tar zxvf keepalived-1.2.7.tar.gz

cd keepalived-1.2.7

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

make && make install

 

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

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

mkdir /etc/keepalived/

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

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

chmod +x /etc/init.d/keepalived

 

# server2

cat >/etc/keepalived/keepalived.conf <<EOF

cat /etc/keepalived/keepalived.conf

! Configuration File forkeepalived

global_defs {

# notification_email {

# test@sina.com

#  }

# notification_email_from  admin@test.com

# smtp_server 127.0.0.1

# smtp_connect_timeout 30

router_id MYSQL_HA18      #标识,双主相同

 }

vrrp_instance VI_1 {

 state BACKUP           #两台都设置 BACKUP

 interface eth0

 virtual_router_id 18       #主备相同

 priority 90           #优先级,backup 设置 90

 advert_int 1

 #nopreempt             #不主动抢占资源,只在 master 这台优先级高的设置,backup 不设置

 authentication {

 auth_type PASS

 auth_pass 1111

 }

 virtual_ipaddress {172.16.210.183

 }

}

virtual_server 172.16.210.183 8306 {delay_loop 2

 #lb_algo rr              #LVS 算法,用不到,我们就关闭了

 #lb_kind DR              #LVS 模式,如果不关闭,备用服务器不能通过 VIP 连接主 MySQL

 persistence_timeout 50  #同一 IP 的连接 60 秒内被分配到同一台真实服务器

 protocol TCP

 real_server 172.16.210.181 8306 {   #检测本地 mysql,backup 也要写检测本地 mysql

 weight 3

 notify_down /usr/local/keepalived/mysql.sh    #当 mysq 服 down 时,执行此脚本,杀死 keepalived 实现切换

 TCP_CHECK {connect_timeout 3    #连接超时

 nb_get_retry 3       #重试次数

 delay_before_retry 3 #重试间隔时间

  }

}

EOF



cat >/usr/local/keepalived/mysql.sh <<EOF

#!/bin/bash

pkill keepalived

EOF

chmod +x /usr/local/keepalived/mysql.sh

chmod +x /etc/init.d/keepalived

/etc/init.d/keepalived start

六、测试高可用性

6.1、启动 my1keeplive服务

[root@my1 ~]# /etc/init.d/keepalived start

Starting keepalived:                                       [OK]

[root@my1 ~]#

 

[root@my1 ~]# tail  /var/log/messages

Dec 12 15:12:46 localhost Keepalived_healthcheckers[13090]: IPVS: Service not defined

Dec 12 15:12:46 localhost Keepalived_healthcheckers[13090]: Using LinkWatch kernel netlink reflector...

Dec 12 15:12:46 localhost Keepalived_healthcheckers[13090]: Activating healthchecker for service [172.16.210.180]:8306

Dec 12 15:12:46 localhost kernel: IPVS: Scheduler module ip_vs_ not found

Dec 12 15:12:50 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Transition to MASTER STATE

Dec 12 15:12:51 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Entering MASTER STATE

Dec 12 15:12:51 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) setting protocol VIPs.

Dec 12 15:12:51 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.210.183

Dec 12 15:12:51 localhost Keepalived_healthcheckers[13090]: Netlink reflector reports IP 172.16.210.183 added

Dec 12 15:12:56 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.210.183

[root@my1 ~]# 

6.2、启动 my2keeplived服务

[root@my2 ~]# /etc/init.d/keepalived  start

Starting keepalived:                                       [OK]

[root@my2 ~]#

[root@my2 ~]# tail  /var/log/messages

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Opening file '/etc/keepalived/keepalived.conf'.

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Configuration is using : 10232 Bytes

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Using LinkWatch kernel netlink reflector...

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) Entering BACKUP STATE

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: VRRP sockpool: [ifindex(2), proto(112), fd(10,11)]

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: IPVS: Scheduler not found

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: IPVS: Service not defined

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Using LinkWatch kernel netlink reflector...

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Activating healthchecker for service [172.16.210.181]:8306

Dec 12 15:15:02 localhost kernel: IPVS: Scheduler module ip_vs_ not found

[root@my2 ~]# 

6.3、关闭 my1mysql服务

[root@my1 ~]# ps -ef|grep mysql

root     13119 10926  0 15:15 pts/0    00:00:00 grep mysql

root     19296     1  0 Dec11 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_8306/my_8306.cnf

mysql    20709 19296  0 Dec11 ?        00:00:55 /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_8306/my_8306.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/mysql_8306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql_8306/logs/error.log --open-files-limit=65535 --pid-file=mysql.pid --socket=/data/mysql/mysql_8306/tmp/mysql_8306.sock --port=8306

[root@my1 ~]# mysql.8306.stop

[root@my1 ~]# ps -ef|grep mysql

root     13138 10926  0 15:18 pts/0    00:00:00 grep mysql

[root@my1 ~]#

 

#  查看 my1 的日志

[root@my1 ~]# tail -20 /var/log/messages  

Dec 12 15:12:46 localhost Keepalived_healthcheckers[13090]: IPVS: Service not defined

Dec 12 15:12:46 localhost Keepalived_healthcheckers[13090]: Using LinkWatch kernel netlink reflector...

Dec 12 15:12:46 localhost Keepalived_healthcheckers[13090]: Activating healthchecker for service [172.16.210.180]:8306

Dec 12 15:12:46 localhost kernel: IPVS: Scheduler module ip_vs_ not found

Dec 12 15:12:50 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Transition to MASTER STATE

Dec 12 15:12:51 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Entering MASTER STATE

Dec 12 15:12:51 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) setting protocol VIPs.

Dec 12 15:12:51 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.210.183

Dec 12 15:12:51 localhost Keepalived_healthcheckers[13090]: Netlink reflector reports IP 172.16.210.183 added

Dec 12 15:12:56 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.210.183

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: TCP connection to [172.16.210.180]:8306 failed !!!

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: Removing service [172.16.210.180]:8306 from VS [172.16.210.183]:8306

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: IPVS: Service not defined

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: Executing [/usr/local/keepalived/mysql.sh] for service [172.16.210.180]:8306 in VS [172.16.210.183]:8306

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: Lost quorum 1-0=1 > 0 for VS [172.16.210.183]:8306

Dec 12 15:18:34 localhost Keepalived[13089]: Stopping Keepalived v1.2.7 (12/12,2017)

Dec 12 15:18:34 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) sending 0 priority

Dec 12 15:18:34 localhost Keepalived_vrrp[13091]: VRRP_Instance(VI_1) removing protocol VIPs.

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: Netlink reflector reports IP 172.16.210.183 removed

Dec 12 15:18:34 localhost Keepalived_healthcheckers[13090]: IPVS: No such service

[root@my1 ~]# 

6.4、查看 my2 的日志及其 vip 情况

[root@my2 ~]# ip add

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 8a:e1:32:e2:dd:a2 brd ff:ff:ff:ff:ff:ff

    inet 172.16.210.181/24 brd 172.16.210.255 scope global eth0

    inet 172.16.210.183/32 scope global eth0

    inet6 fe80::88e1:32ff:fee2:dda2/64 scope link

       valid_lft forever preferred_lft forever

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000

    link/ether f6:da:a4:00:84:cc brd ff:ff:ff:ff:ff:ff

[root@my2 ~]#

[root@my2 ~]# tail  -30 /var/log/messages

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: No such interface, eth1

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Netlink reflector reports IP 172.16.210.181 added

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Netlink reflector reports IP fe80::88e1:32ff:fee2:dda2 added

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Registering Kernel netlink reflector

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Registering Kernel netlink command channel

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Registering gratuitous ARP shared channel

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Interface queue is empty

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: No such interface, eth1

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Netlink reflector reports IP 172.16.210.181 added

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Netlink reflector reports IP fe80::88e1:32ff:fee2:dda2 added

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Registering Kernel netlink reflector

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Registering Kernel netlink command channel

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Opening file '/etc/keepalived/keepalived.conf'.

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Configuration is using : 61661 Bytes

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Opening file '/etc/keepalived/keepalived.conf'.

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Configuration is using : 10232 Bytes

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: Using LinkWatch kernel netlink reflector...

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) Entering BACKUP STATE

Dec 12 15:15:02 localhost Keepalived_vrrp[26721]: VRRP sockpool: [ifindex(2), proto(112), fd(10,11)]

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: IPVS: Scheduler not found

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: IPVS: Service not defined

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Using LinkWatch kernel netlink reflector...

Dec 12 15:15:02 localhost Keepalived_healthcheckers[26719]: Activating healthchecker for service [172.16.210.181]:8306

Dec 12 15:15:02 localhost kernel: IPVS: Scheduler module ip_vs_ not found

Dec 12 15:18:34 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) Transition to MASTER STATE

Dec 12 15:18:35 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) Entering MASTER STATE

Dec 12 15:18:35 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) setting protocol VIPs.

Dec 12 15:18:35 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.210.183

Dec 12 15:18:35 localhost Keepalived_healthcheckers[26719]: Netlink reflector reports IP 172.16.210.183 added

Dec 12 15:18:40 localhost Keepalived_vrrp[26721]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 172.16.210.183

[root@my2 ~]#

表明已经切换完成。 

七、系统参数优化配置

7.1、系统配置

# 手工的执行如下的动作, 使之立刻生效,以下是物理机中会有,根据实际可能需要修改:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo deadline > /sys/block/sda/queue/scheduler

echo "16" > /sys/block/sda/queue/read_ahead_kb

echo "512" > /sys/block/sda/queue/nr_requests

 

 

#减少预读:/sys/block/sda/queue/read_ahead_kb,默认 128,调整为 16

#增大队列:/sys/block/sda/queue/nr_requests,默认 128,调整为 512

 

echo "16" > /sys/block/sda/queue/read_ahead_kb

echo "512" > /sys/block/sda/queue/nr_requests

 

#如果是使用普通 SAS 盘的话, 使用 elevator=deadline

#如果是使用 SSD/FLASH 卡的话, 使用 elevator=noop

echo noop > /sys/block/sda/queue/scheduler

echo deadline > /sys/block/sda/queue/scheduler

 

#对于关闭透明大页的问题, 也执行如下的操作: 编辑 /etc/rc.local, 添加如下内容

 

cat >> /etc/rc.local <<EOF

#echo noop > /sys/block/sda/queue/scheduler

echo deadline > /sys/block/sda/queue/scheduler

echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo "16" > /sys/block/sda/queue/read_ahead_kb

echo "512" > /sys/block/sda/queue/nr_requests

 

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then

   echo never > /sys/kernel/mm/transparent_hugepage/enabled

fi

if test -f /sys/kernel/mm/transparent_hugepage/defrag; then

   echo never > /sys/kernel/mm/transparent_hugepage/defrag

fi

EOF

 

# 修改目录权限

chown -R mysql.mysql /data/mysql/ 

7.2、修改系统内核参数

cat >> /etc/sysctl.conf <<EOF

fs.file-max=655360

fs.aio-max-nr = 1048576

kernel.sem = 5050 646400 5050 128

kernel.shmmax = 137438953472

kernel.shmall = 4294967296

kernel.shmmni = 4096

net.ipv4.ip_local_port_range = 9000 65500

net.ipv4.tcp_mem = 94500000 915000000 927000000

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

net.core.netdev_max_backlog = 32768

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_fin_timeout = 10

net.ipv4.tcp_keepalive_time = 300

net.ipv4.tcp_max_syn_backlog = 32768

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_timestamps = 0

net.ipv4.conf.default.accept_source_route = 0

vm.swappiness=1

EOF

 

sysctl -p

 

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore       

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce       

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore       

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce 

附录:新安装的虚拟机修改信息

1、修改主机名

yum -y install vim telnet unzip zip lrzsz

hostname IT_rio_dev_test

sed -i 's/HOSTNAME=localhost.localdomain/HOSTNAME=IT_rio_dev_test/g' /etc/sysconfig/network

sed -n '/HOSTNAME/p' /etc/sysconfig/network

2、关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

setenforce 0

3、关闭防火墙

/etc/init.d/iptables  stop

cat >>/etc/rc.local <<EOF

/etc/init.d/iptables  stop

EOF

4、修改网卡 ip 信息

cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF

TYPE=Ethernet

BOOTPROTO=static

NAME=eth0

DEVICE=eth0

ONBOOT=yes

IPADDR=172.16.210.111

NETMASK=255.255.255.0

GATEWAY=172.16.210.250

EOF

5、重启网卡服务

/etc/init.d/network restart

6、修改dns

cat >/etc/resolv.conf <<EOF

nameserver 172.16.110.11

nameserver 8.8.8.8

EOF

7、系统初始化配置

7.1、关闭SELINUX

# 修改配置文件, 重启服务后永久生效。sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

#命令行设置立即生效

setenforce 0

7.2、防火墙设置

cat >>/etc/rc.local <<EOF

/etc/init.d/iptables  stop

EOF

 

cp /etc/sysconfig/iptables /root/iptables.bak

cat >/etc/sysconfig/iptables <<EOF

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT DROP [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -s 175.41.54.216/29 -p tcp -m tcp --dport 10050 -j ACCEPT

-A INPUT -s 175.41.54.216/29 -p udp -m udp --dport 161 -j ACCEPT

-A INPUT -s 58.71.118.56/29 -p udp -m udp --dport 161 -j ACCEPT

-A INPUT -s 116.93.118.104/29 -p udp -m udp --dport 161 -j ACCEPT

-A INPUT -s 58.71.118.56/29 -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -s 58.71.118.56/29 -p tcp -m tcp --dport 10050 -j ACCEPT

-A INPUT -s 116.93.118.104/29 -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -s 116.93.118.104/29 -p tcp -m tcp --dport 873 -j ACCEPT

-A INPUT -s 116.93.118.104/29 -p tcp -m tcp --dport 10050 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

EOF

/etc/init.d/iptables  restart 

7.3、安装基础依赖包

# yum  -y install  gcc-c++ gd libxml2-devel libjpeg-devel libpng-devel net-snmp-devel wget telnet vim zip unzip

# yum  -y install  curl-devel libxslt-devel pcre-devel libjpeg libpng libxml2 libcurl4-openssl-dev

# yum  -y install  libcurl-devel libcurl freetype-config freetype freetype-devel unixODBC libxslt

yum  clean all

yum -y update

yum -y install gcc-c++ gd libxml2-devel libjpeg-devel libpng-devel net-snmp-devel wget telnet vim zip unzip

yum -y install curl-devel libxslt-devel pcre-devel libjpeg libpng libcurl4-openssl-dev

yum -y install libcurl-devel libcurl freetype-config freetype freetype-devel unixODBC libxslt

yum -y install gcc automake autoconf libtool openssl-devel

yum -y install perl-devel perl-ExtUtils-Embed

yum -y install cmake ncurses-devel.x86_64  openldap-devel.x86_64 lrzsz  openssh-clients gcc-g77  bison

yum -y install libmcrypt libmcrypt-devel mhash mhash-devel bzip2 bzip2-devel

yum -y install ntpdate rsync svn  patch  iptables iptables-services

yum -y install libevent libevent-devel  cyrus-sasl cyrus-sasl-devel

yum -y install gd-devel libmemcached-devel memcached git libssl-devel libyaml-devel auto make

yum -y groupinstall "Server Platform Development" "Development tools"

yum -y groupinstall "Development tools"

 

yum -y install gcc.x86_64 libxml2.x86_64 libxml2-devel.x86_64 openssl.x86_64 openssl-devel.x86_64 libcurl.x86_64 libcurl-devel.x86_64

yum -y install gd.x86_64 gd-devel.x86_64  gcc-c++.x86_64 readline.x86_64 readline-devel.x86_64

7.4、时间同步

cat >/root/ntp.sh <<EOF

#!/bin/bash

# ntp.sh

#NTP 服务器数组列表

ntpServer=([0]=tw.pool.ntp.org

[1]=time.stdtime.gov.tw

[2]=asia.pool.ntp.org

[3]=10.30.0.5

)

 

#校验#

serverNum=`echo \${#ntpServer[*]}`

NUM=0

for ((i=0; i<=\$serverNum; i++)); do

    echo -n "正在和 NTP 服务器:\${ntpServer[\$NUM]}校验中..."

    /usr/sbin/ntpdate \${ntpServer[\$NUM]} >> /dev/null 2>&1

    if [\$? -eq 0 ]; then

        echo -e "\e[1;32m\t[成功]\e[0m"

        echo -e "\e[1;32m 同步成功, 退出......\e[0m"

        break

    else

        echo -e "\e[1;31m\t[失败]\e[0m"

        echo -e "\e[1;31m 继续同步下一个!!!!!\e[0m"

        let NUM++

    fi

    sleep 2

done

EOF

chmod +x /root/ntp.sh

sh /root/ntp.sh

 

cat >>/etc/crontab <<EOF

01 * * * *  /root/ntp.sh

#0 0 */5 * * /bin/bash /root/cutlog.sh

EOF

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149495.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计40139字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7992894
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...