2017/10/18 15:13

 

一、磁盘优化

1、首先在centos7.3.16系统上格式化磁盘,先查看磁盘。

 

 

centos7 系统盘btrfs centos7安装磁盘分配_数据库

 

格式化磁盘,只创建一个分区:

 

centos7 系统盘btrfs centos7安装磁盘分配_centos7 系统盘btrfs_02

 

 

 

格式化磁盘

 

 

centos7 系统盘btrfs centos7安装磁盘分配_慢查询_03

 

 

修改/etc/fstab文件:

mount -t xfs -o rw,noatime,nodiratime /dev/sdd1 /backup/ 或者修改完配置文件重新启动系统

 

centos7 系统盘btrfs centos7安装磁盘分配_数据库_04

 

 

检查及修改配置io调度(ssd建议使用noop,普通磁盘使用deadline)

 

centos7 系统盘btrfs centos7安装磁盘分配_centos7 系统盘btrfs_05

 

已经是noop了,无需修改,如果需要修改(永久修改,需要reboot):

 

centos7 系统盘btrfs centos7安装磁盘分配_慢查询_06

 

 

临时修改:

 

centos7 系统盘btrfs centos7安装磁盘分配_centos7 系统盘btrfs_07

 

 

二、系统优化

1、vim /etc/sysctl.conf

 

1 vm.swappiness=1
2 
3 vm.dirty_background_ratio = 5
4 
5 vm.dirty_ratio = 10
6 
7 net.ipv4.tcp_tw_recycle =1
8 
9 net.ipv4.tcp_tw_reuse =1

 

2、vim /etc/security/limits.conf

1  
2 
3 * hard nofile 65535
4 
5 * soft nofile 65535

 

 

三、安装mariadb-galera

yum源信息:

[root@ebuickdealerdb1 ~]# cat /etc/yum.repos.d/maraidb.repo

[mariadb]   

name = MariaDB

#baseurl = http://mirrors.ustc.edu.cn/mariadb/mariadb-10.0.20/yum/centos6-amd64/

baseurl = http://mirrors.ustc.edu.cn/mariadb/mariadb-10.1.28/yum/centos73-amd64/

#说明:如果链接地址链接报错,可以直接选择版本在进行链接

#baseurl = http://mirrors.ustc.edu.cn/mariadb/mariadb-10.1.21/yum/centos7-amd64/

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB  

gpgcheck=0

 

yum安装mariadb和galera

yum install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.* MariaDB-compat  MariaDB-common  MariaDB-client galera MariaDB-devel MariaDB epel -y

 

 

安装xtrabackup,socat

yum -y install

 

关闭centos7的防火墙

关闭firewall:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)

 

设置系统时间

设置时区同样, 在 CentOS 7 中, 引入了一个叫 timedatectl 的设置设置程序.

用法很简单:

# timedatectl # 查看系统时间方面的各种状态
      Local time: 四 2014-12-25 10:52:10 CST
  Universal time: 四 2014-12-25 02:52:10 UTC
        RTC time: 四 2014-12-25 02:52:10
        Timezone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
 
# timedatectl list-timezones # 列出所有时区
# timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
# timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海

 

其实不考虑各个发行版的差异化, 从更底层出发的话, 修改时间时区比想象中要简单:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

数据库配置文件/etc/my.cnf.d/wsrep.cnf

 

########################client################################

[client]

#password= your_password

port= 3306        

socket= /tmp/mysql.sock

 

# The MySQL server

#########################mysqld-dir###############################

[mysqld]

# required unique id between 1 and 2^32 - 1

# defaults to 1 if master-host is not set

# but will not function as a master if omitted

server-id= 42

port= 3306

socket= /tmp/mysql.sock

#basedir = /opt/local/mysql

datadir=/datadrive/mysql                 #数据库存放目录

#relay-log=/opt/local/mysql/relaylog/s74-relay-bin                        

#pid-file = /opt/local/mysql/mysql.pid

log-error = mysqld.err

log-bin = mysql-bin                               #binlog 名称

##########################other##############################

event_scheduler=1                               #计划任务 事件调度器

open_files_limit = 65535                        #设置数据库打开文件的描述符减少too many open files 及 readin initial communication packet报错

#skip-locking

skip-external-locking                           #跳过外部锁定

back_log=500                                   #暂存的连接数量 

skip-name-resolve                               #关闭mysql的dns反查功能

#memlock                                         #将mysqld 进程锁定在内存中

lower_case_table_names = 1                      #不区分大小写

#query_response_time_stats=1                    #此参数是永远在服务器端观察数据库的响应时间(percona支持)

#core-file

#core-file-size = unlimited                     #在数据库崩溃时记录coredump内容在启动数据库时直接调用ulmit -c unlimited(maraidb不支持)

default_storage_engine         = InnoDB                                                                                      

query_cache_type               = 1       #查询缓存  (0 = off、1 = on、2 = demand)                          

query_cache_size               = 128M

#secure_file_priv                               #对导入导出进行限制无需设置(galera不支持)

#auto_increment_increment = 2                   #在做数据库集群的时候或者双主的时候设置此参数和offset可以防止自增id重复(galera自动设置,这里无需设置)

#auto_increment_offset = 1

 

expire_logs_days=15

character_set_server = utf8

default-storage-engine=innodb

# binary logging format - mixed recommended

binlog_format=row                               #binlog 格式 分别为 row=行格式 丶 mixed=混合格式 丶 STATEMENT=SQL语句复制模式

performance_schema=1                            #收集数据库服务器性能参数

log-slave-updates                               #从master取得并执行的二进制日志写入自己的二进制日志文件中

innodb_open_files=65535

innodb_autoinc_lock_mode=2                      #有三种值0,1,2 0为自增表级别锁traditional,1为轻量级锁在执行insert into select时是表级别锁,2所有的插入都可以立马获得锁并释放 为row的行格式下insert将获得最大的并发                         

#innodb_fast_checksum = 1

###########################thread_buffer#############################

net_read_timeout=3600                           #连接繁忙阶段(query)起作用

net_write_timeout=3600                          #连接繁忙阶段(query)起作用

key_buffer_size = 32M                           #设置索引块缓存大小

max_allowed_packet = 128M                       #通信缓冲大小

table_open_cache = 1024                         #table高速缓存的数量

sort_buffer_size = 12M                          #每个connection(session)第一次需要使用这个buffer的时候,一次性分配设置的内存

read_buffer_size = 8M                           #顺序读取数据缓冲区使用内存

#sort_buffer_size = 32M

#read_buffer_size = 32M

read_rnd_buffer_size = 32M                      #随机读取数据缓冲区使用内存

myisam_sort_buffer_size = 32M                   #MyISAM表发生变化时重新排序所需的缓冲

thread_cache_size = 120                         #内存如果很大可以设置最大连接数的值,重新利用保存在缓存中线程的数量

join_buffer_size = 8M                           #Join操作使用内存

bulk_insert_buffer_size = 32M                   #批量插入数据缓存大小

###########################delay-flush-database#############################

delay_key_write=ON                              #在表关闭之前,将对表的update操作指跟新数据到磁盘,而不更新索引到磁盘,把对索引的更改记录在内存。这样MyISAM表可以使索引更新更快。在关闭表的时候一起更新索引到磁盘

#delayed_insert_limit=4000

#delayed_insert_timeout=600

#delayed_queue_size=4000

 

###########################gtid#########################################

gtid-mode=on

log-slave-updates=True

master-info-repository=TABLE

relay-log-info-repository=TABLE

sync-master-info=1

slave-parallel-threads=2

binlog-checksum=CRC32

master-verify-checksum=1

slave-sql-verify-checksum=1

binlog-rows-query-log-events=1

report-port=3306

report-host=45

##########################connect——pool##############################

# Try number of CPU's*2 for thread_concurrency

# The variable only affects Solaris!

#thread_concurrency = 16                          #CPU核数 * 2(一丢弃)

max_connections=505                            #最大连接(用户)数。此值<1000最好,每个连接MySQL的用户均算作一个连接

max_user_connections=500                        #此值小于最大连接数

max_connect_errors=30                           #最大失败连接限制

interactive_timeout=600                         #服务器关闭交互式连接前等待活动的秒数

wait_timeout=3600                               #服务器关闭非交互连接之前等待活动的秒数

#########################slow_log###############################

slow_query_log =1                                 #慢查询记录日志

long_query_time = 2                           #慢查询记录时间  2秒

slow_query_log_file=slow_query.log            #慢查询日志路径

#log_slow_verbosity=full

log_slow_verbosity=query_plan                   #查看查询sql生成的执行计划被调用多少次(记录在慢查询日志中),记录更现象的慢查询信息(query_plan,explain,innodb)

# Replication Master Server (default)

# binary logging is required for replication

 

#########################buffer_pool###############################                              #

# Point the following paths to different dedicated disks

#tmpdir= /tmp/

#log-update = /path-to-dedicated-directory/hostname

# Uncomment the following if you are using InnoDB tables

#innodb_data_home_dir = /data/mysql-5.1.48/mysql-data/

innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend            #共享表空间启示大小和自增长按照10,共享表空间可以单独放到别的磁盘

#innodb_log_group_home_dir = /data/mysql-5.1.48/mysql-data/

# You can set .._buffer_pool_size up to 50 - 80 %

# of RAM but beware of setting memory usage too high

 

innodb_file_format=barracuda                    #数据库文件格式

innodb_file_format_max=barracuda                #数据库文件格式

innodb_file_per_table=1                         #独立表空间

innodb_fast_shutdown=0

innodb_buffer_pool_size = 40000M                #服务器内存的50%-70%

innodb_buffer_pool_instances = 16                #设置cpu盒数大小

innodb_additional_mem_pool_size = 20M

#额外内存大小,用来保存数据字典信息和其他内部数据结构的内存池的大小,单位是 byte,参数默认值为8M。数据库中的表数量越多,参数值应该越大,如果使用完了就利用系统内存

 

innodb_use_sys_malloc = on                      #如果额外内存使用完就直接使用操作系统的内存

log_bin_trust_function_creators=1

########################log-buffer################################

# Set .._log_file_size to 25 % of buffer pool size

innodb_log_file_size = 512M

innodb_log_buffer_size = 8M

innodb_log_files_in_group = 3

innodb_strict_mode = ON                         #在启动页数据压缩功能开启此功能,在alter create时如果语法错误直接抛出错误,不记录到错误日志

innodb_file_format_check = 1

#在启动数据库时此参数会检查但却数据表的格式,检测到不支持的启动失败,如果没有开启此参数则仅给出警告不会启动失败,启动页压缩一定要开启此参数,不然会造成数据丢失,如果关闭此参数那么必须设置innodb_fast_shutdown=0(double write buffer/insert buffer依赖)

######################flush-page##################################

 

innodb_flush_log_at_trx_commit = 2

innodb_lock_wait_timeout = 3

innodb_rollback_on_timeout = on

#动态统计表信息关闭每当查询information_schema元数据库里的表时,InnoDB还会随机提取其他数据库每个表索引页的部分数据

innodb_flush_method=O_DIRECT

#sql_mode=TRADITIONAL,ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER   #请稍做改动

transaction-isolation=READ-COMMITTED

#########################background-thread###############################

innodb_thread_concurrency=16    #设置大于cpu*2

innodb_io_capacity=800          #根据磁盘的性能设置

innodb_purge_threads=2          #独立purge线程undo回收

 

#innodb_stats_update_need_lock=0

#innodb_flush_neighbor_pages=0

#innodb_aio_pending_ios_per_thread=256

#for binlog_format=row

 

innodb_read_io_threads = 16

innodb_write_io_threads = 16

innodb_stats_on_metadata = 0

#######################thread_pool#################################

#使用线程池处理连接

thread_handling=pool-of-threads

thread_pool_oversubscribe=30

thread_pool_size=16

thread_pool_idle_timeout=7200

thread_pool_max_threads=2000

#######################optimizer_switch#################################

#查询优化器开关

optimizer_switch='index_condition_pushdown=on'

optimizer_switch='mrr=on'

optimizer_switch='mrr_sort_keys=on'

#optimizer_switch='mrr_cost_based=off'

#mrr_buffer_size=32M

#optimizer_switch='join_cache_incremental=on'

#optimizer_switch='join_cache_hashed=on'

#optimizer_switch='join_cache_bka=on'

#join_cache_level=4

#join_buffer_size=32M

#join_buffer_space_limit=32M

########################galera-wsrep################################

#WSREP parameter

wsrep_on                       = on      #only mariadb>=10.1                           

#wsrep_provider                 = none    #启动没有galera集群的mariadb                         

wsrep_provider                 = /usr/lib64/galera/libgalera_smm.so    #galera集群插件位置

#wsrep_provider                 = /usr/lib64/galera-3/libgalera_smm.so  #galera集群插件位置(centos7)

wsrep_provider_options         = 'gcache.size=1G'                 #此参数依赖于服务器的负载,gcache代表存放在galera缓存中的数据大小,保留位IST使用

wsrep_cluster_name             = "Ebuick Galera Cluster"            #galera集群名称                        

wsrep_cluster_address          = "gcomm://10.127.18.42,10.127.18.43,10.127.18.44"   #集群几点地址

wsrep_node_name                = "Node 42"                         #集群中唯一节点名称  

wsrep_node_address             = "10.127.18.42"                      #集群中完成复制的地址  

wsrep_sync_wait                = 1                                #如果需要实时的全同步复制(galera3.6+)  

wsrep_slave_threads            = 16                               #galera核心同步线程不超过wsrep_cert_deps_distance  

wsrep_sst_method               = xtrabackup                            #同步方式(mysqldump,rsync,rsync_wan,xtrabackup,xtrabackup-v2)  

wsrep_sst_auth                 = sstuser:bjyappam                       #同步所使用的用户及密码  

wsrep_sst_receive_address      = "10.127.18.42"                   #sst使用的地址

########################mysqldump################################

[mysqldump]

quick

max_allowed_packet = 16M

########################mysql################################

[mysql]

no-auto-rehash

# Remove the next comment character if you are not familiar with SQL

#safe-updates

########################myisamchk################################

[myisamchk]

key_buffer_size = 256M

sort_buffer_size = 256M

read_buffer = 2M

write_buffer = 2M

########################isamchk################################

[isamchk]

key_buffer_size = 256M

sort_buffer_size = 256M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

 

 

注释:需要修改相关参数符合服务器信息

 

启动maraidb-galera集群

第一次启动时需要使用:galera_new_cluster

直接启动,无需添加参数,在centos6版本时启动方式为:service mysql start --wsrep-new-cluster

如果出现报错可以使用如下命令查看报错信息:

1、systemctl status mariadb.service

2、tail -400f /var/log/messages

3、journalctl -xe (看到的信息不是太详细)

4、tail -400f /datadrive/mysql/mysqld.err (数据库错误日志,可以看到详细信息)

 

至此安装和设置性能等告一段落。