本文共 9687 字,大约阅读时间需要 32 分钟。
day6
复习昨天的内容:
数据库代理--数据库中间件
功能: | 负载均衡LB:将客户端请求以相对均衡的方式分发给后端的服务器; 读写分离:能够区分读和写,将相应的操作分汉给对应的服务; 分库分表分片:提高读性能,让后端服务器缓冲不同的数据; sql路由并发查询:将一条 复杂的sql语句分成多条 sql语句,分发给后端对应的服务器。 |
软件: | mysql-proxy和atlas:mysql官方的,使用的公司有魔兽世界 mycat:在阿里马马cobar上的二次开发,是一个神话 |
数据库高可用――HA
1、什么是高可用?
表示法:百分比、9规则
例如:0.99999%代表一年中只能有5分钟的宕机时间(365天*24*60*0.00001=5.256分)
宕机造成的损失和降低宕机时间所花费的成本的衡量
一般能做到两个9(3天)、3个9(8h)、4个9(52.56分)
2、宕机的原因归纳
硬件上最普遍的问题是磁盘空间耗尽;
性能上最普遍的问题是糟糕的sql语句;
复制问题通常是主备数据不一致导致的;
人为误操作
3、如何实现高可用
降低故障率
优化架构
4、数据库高可用软件
mariadb galera cluster
mysql NDB cluster
5、mariadb galera cluster
功能 | 同步复制 新节点加入自动同步数据 失效节点自动清除 |
优势 | 没有延迟 拓展能力强 |
适用架构 |
6、网络拓扑
序号 | 主机名 | IP地址 | 必备软件(本例用mariadb-10.0.3) |
1 | node25 | 192.168.10.25 | mariadb-server、mariadb-cluster-server |
2 | node26 | 192.168.10.26 | mariadb-server、mariadb-cluster-server |
3 | node27 | 192.168.10.27 | mariadb-server、mariadb-cluster-server |
4 | node11 | 192.168.10.11 | atlas或mysql-proxy、MyCat等dbproxy代理软件 |
7、软件和版本:
下载安装
###galera-10.0.31官方rpm包下载(以下实验首选):
centos6版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos6-amd64/rpms/
centos7版的galera-10.0.31软件(首选):http://yum.mariadb.org/10.0.31/centos7-amd64/rpms/
###galera-10.3官方rpm包下载(已测试OK):
centos6版的galera-10.3软件:http://yum.mariadb.org/10.3/centos6-amd64/rpms/
centos7版的galera-10.3软件: http://yum.mariadb.org/10.3/centos7-amd64/rpms/
专家建议:直接在官网下载整个rpms目录中的rpm软件包。然后在本地搭建galera安装包yum源,进行安装。
galera-10.0.31版的安装(本例已测OK):
yum search galera
yum install -y MariaDB-Galera-server MariaDB-client galera rsync mlocate createrepo
rpm -q MariaDB-Galera-server MariaDB-client galera
ls /etc/my.cnf.d/
galera-10.3版安装(测试OK):
yum search galera
yum install MariaDB-server MariaDB-client galera rsync mlocate createrepo -y (配置方法同下)
rpm -q MariaDB-server MariaDB-client galera
ls /etc/my.cnf.d/
galera集群配置思路:
1、在每台主机上停止运行mysqld或mariadb服务。并设置服务为开机不启动。
2、在每台主机上安装galera软件,并启动mysql服务(此处是galera的服务)。
3、在每台主机上创建用于galera同步数据的用户账号,停止mysql服务(此处是galera的服务)。
4、设置每台galera主机的配置文件/etc/my.cnf.d/server.cnf,保证设置正确。
5、初始化启动第1台galera主机的集群环境:
service mysql stop
servicemysql start --wsrep-new-cluster
mysql-uroot -p -e "show status like'wsrep_%';"
6、启动其他galera主机,验证集群状态:mysql -uroot -p -e "show status like 'wsrep_%';"
8、修改hosts文件,实现本地主机名解析
修改系每台galera主机的hosts文件,实现本地域名解析(选做,不做也不影响)。
高效率技巧:在一台主机上创建好,用scp远程推送复制到其他主机。
vi /etc/hosts 添加如下内容
192.168.10.25 node25
192.168.10.26 node26
192.168.10.27 node27
192.168.10.11 node11
9、关闭安全功能
配置防火墙规则,参考官方的说明,我这里偷懒就直接关闭了防火墙。
service iptables stop
chkconfig iptables off
setenforce 0
getenforce
sed -i '/^SELINUX=/s/enforcing/permissive/' /etc/selinux/config
10、用vsftpd在物理机共享galera软件包(192.168.10.1)。
第1步:安装并共享galera软件包。
yum install -y vsftpd ftp lftp
service vsftpd restart
chkconfig vsftpd on
cp -rv galera /var/ftp/
firefox ftp://127.0.0.1
第2步:创建galera.repo网络yum源,并测试。
vi /etc/yum.repos.d/galera.repo
[7galera]
name=galera
baseurl=ftp://192.168.10.1/galera
enabled=1
gpgcheck=0
第3步:测试yum源和仓库
yum clean all
yum repolist
yum search galera
11、需要先卸载mariadb-libs或mysql-libs
说明:不卸载会导致冲突,服务无法正常运行。
centos7 | centos6.5 |
rpm -e mariadb-libs --nodeps rpm -e mariadb-common --nodeps | rpm -e mysql-libs --nodeps rpm -e mysql-common --nodeps |
彻底卸载mysql-server:yum remove mysql-server mysql mysql-libs mysql-compact |
12、初始安装配置
安装MariaDB和galera软件
yum search galera yum install -y MariaDB-Galera-server MariaDB-client galera rsync mlocate createrepo rpm -q MariaDB-Galera-server MariaDB-client galera ls /etc/my.cnf.d/ |
安装和初始化MariaDB数据库并启动MariaDB服务,并作安全加固
centos7 | centos6.5 |
systemctl restart mysql mysql_secure_installation systemctl stop mysql | service mysql restart mysql_secure_installation service mysql stop |
说明:系统提供了mysql和mariadb两个服务脚本,可用service mariadb restart来重启。 |
附加需求:在每台主机启动mysql服务后,用grant创建两个Mysql账号,一个管理员账号admin,密码也用admin,再创建一个普通账号。
mysql -uroot grant all on *.* to admin@'%' identified by 'admin' with grant option; grant all on *.* to myroot@'%' identified by 'reppass'; FLUSH PRIVILEGES; select user,host,password from mysql.user; exit |
13、配置文件讲解
主配置文件:/etc/my.cnf
附加功能配置文件:/etc/my.cnf.d/*.cnf
查galera的API动态链接库文件路径:
updatedb
locate libgalera_smm.so
vi /etc/my.cnf.d/galera.cnf 参考代码如下
[galera] #Mandatory settings #启用wsrep API接口 wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so #启动节点时需要指定galera cluster的地址,作为cluster中第一个启动的节点wsrep_cluster_address="gcomm://",对于后续启动的节点用wsrep_cluster_address="gcomm://ip1,ip2,ip3 " wsrep_cluster_address="gcomm://" ##wsrep_cluster_address="gcomm://192.168.100.70,192.168.10.71,192.168.10.72" #集群名称(群名),所有node必须一样 wsrep_cluster_name="galera" #本节点的地址 wsrep_node_address=192.168.100.70 #本节点名称 wsrep_node_name=node70 #Snapshot Stat Transfer快照状态转移方法:mysqldump/rsync,默认mysqldump wsrep_sst_method=rsync #mysqldump同步账号和密码(grant授权的账号和密码) wsrep_sst_auth="myroot:reppass" #binlog的格式也有三种:STATEMENT、ROW、MIXED binlog_format=ROW #默认存储引擎 default_storage_engine=innodb #调整锁策略 innodb_autoinc_lock_mode=2 #本机的监听地址 bind-address=0.0.0.0 #每隔0秒同步刷新数据 innodb_flush_log_at_trx_commit=0 #设置utf8为默认字符集 #character_set_server=utf8 #指定binlog日志文件 log-bin=mysql-bin |
14、galera集群配置文件
node25主机的配置文件(192.168.10.25)
vim /etc/my.cnf.d/galera.cnf
[galera] #Mandatory settings wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://" ##wsrep_cluster_address="gcomm://192.168.10.25,192.168.10.26,192.168.10.27" wsrep_cluster_name="galera" wsrep_node_address=192.168.10.25 wsrep_node_name=node25 wsrep_sst_method=rsync wsrep_sst_auth="myroot:reppass" binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 innodb_flush_log_at_trx_commit=0 #character_set_server=utf8 log-bin=mysql-bin |
15、重启服务。
service mysql restart
#查看本机mysql服务端口
netstat -ntpl | grep sql |
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 15065/mysqld tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 15065/mysqld |
16、其他galera节点上面做相同的配置
需求:依次启动其他galera节点,其他节点会根据配置自动加入到集群中并同步数据,一定要关闭防火墙和SELinux安全功能。
service iptables stop ; chkconfig iptables stop
setenforce 0 ; getenforce
service firewalld stop ; chkconfig firewalld off
node26主机的配置文件(192.168.10.26)
vim /etc/my.cnf.d/galera.cnf
[galera] #Mandatory settings wsrep_on=ON wsrep_provider=/usr/lib64/galera/libgalera_smm.so ##wsrep_cluster_address="gcomm://" wsrep_cluster_address="gcomm://192.168.10.25,192.168.10.26,192.168.10.27" wsrep_cluster_name="galera" wsrep_node_address=192.168.10.26 wsrep_node_name=node26 wsrep_sst_method=rsync wsrep_sst_auth="myroot:reppass" binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 innodb_flush_log_at_trx_commit=0 #character_set_server=utf8 log-bin=mysql-bin |
说明:galer集群中的其他主机的galera.cnf配置文件请参考集群成员主机192.168.10.26(node26)的配置文件。
17、观察日志
cat /var/lib/mysql/node1.example.com.err
cat /var/lib/mysql/grastate.dat
18、在galera主机上查看集群状态
mysql -uroot -p show global status like 'wsrep%'; | 登录 查看集群wsrep接口状态 |
19、galera集群关机问题
第1步:逐一关闭galera成员主机。
第2步:最后关闭galera集群的群主主机。
异常处理:当机房突然停电,所有galera主机都非正常关机,来电后开机,会导致galera集群服务无法正常启动。如何处理?
20、galera集群开机问题。
第1步:开启galera集群的群主主机的mysql服务。
第2步:开启galera集群的成员主机的mysql服务。
异常处理:galera集群的群主主机和成员主机的mysql服务无法启动,,如何处理?
解决方法一:第1步、删除garlera群主主机的/var/lib/mysql/grastate.dat状态文件,service mysql restart重启服务。启动正常。登录并查看wsrep状态。
第2步:删除galera成员主机中的/var/lib/mysql/grastate.dat状态文件,service mysql restart重启服务。启动正常。登录并查看wsrep状态。
解决方法二:第1步、修改garlera群主主机的/var/lib/mysql/grastate.dat状态文件中的0为1,service mysql restart重启服务。启动正常。登录并查看wsrep状态。
第2步:修改galera成员主机中的/var/lib/mysql/grastate.dat状态文件中的0为1,service mysql restart重启服务。启动正常。登录并查看wsrep状态。
21、模拟故障实验
1、 安装了3个节点
2、 关闭第一个节点后重启服务,需要修改配置文件
3、 关闭第3个节点,去查看错误日志文件,在集群中创建库,重启服务,看是否能够同步到数据。
22、mysql-proxy数据库代理前端(中间件)
可用软件:atlas、mysql-proxy、MyCat等
本例软件:Atlas代理
##安装配置atlas读写分离(192.168.10.11)
service iptables stop
chkconfig iptables off
setenforce 0
getenforce
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
grep '^SELINUX=' /etc/selinux/config
安装和配置atlas软件
rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
echo"PATH=$PATH:/usr/local/mysql-proxy/bin/" > /etc/profile.d/mysql-proxy.sh
source /etc/profile.d/mysql-proxy.sh
ll /usr/local/mysql-proxy/
##mysql-proxy文件功能说明:
bin目录下放的都是可执行文件
“encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
“mysql-proxy”是MySQL自己的读写分离代理
“mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的
conf目录下放的是配置文件
“test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑
lib目录下放的是一些包,以及Atlas的依赖
log目录下放的是日志,如报错等错误信息的记录
进入bin目录,使用encrypt来对数据库的密码进行加密,我的MySQL数据的用户名是admin,密码是admin,我需要对密码进行加密
cd /usr/local/mysql-proxy/bin/
./encrypt admin 生成加密密码,并复制此密码la1Ux+Bu4zo=
cd /usr/local/mysql-proxy/conf/
cp -v test.cnf test.cnf.bak //备份test.cnf配置文件
vi test.conf 修改后的读写分享的完整配置文件内容
[mysql-proxy]
admin-username = user
admin-password = pwd
proxy-backend-addresses =192.168.100.25:3306
proxy-read-only-backend-addresses =192.168.100.26:3306@1,192.168.100.27:3306@2
pwds = admin:la1Ux+Bu4zo=, myroot:esSF+VYp1RM=
daemon = true
keepalive = true
event-threads = 8
log-level = message
log-path = /usr/local/mysql-proxy/log
proxy-address = 0.0.0.0:3306
admin-address = 0.0.0.0:2345
设置mysql-proxyd开机启动:
echo "/usr/local/mysql-proxy/bin/mysql-proxyd test start" >> /etc/rc.local
/usr/local/mysql-proxy/bin/mysql-proxyd test stop
source /etc/rc.local
lsof -i:3306 查端口
netstat -atunlp |grep sql 查mysql网络进程
tcpdump抓包: tcpdump -i eth0 port 3306
说明:抓取经过192.168.10.11代理主机的eth0网卡的3306端口的数据包,验证读写分离效果。
登录测试:mysql -uadmin -padmin -h 192.168.10.11 -P3306
登录到atlas管理端:mysql -uuser -ppwd -h 192.168.10.11 -P2345
-------------------------------------------------
启动atlas服务:/usr/local/mysql-proxy/bin/mysql-proxyd test start
重启atlas服务:/usr/local/mysql-proxy/bin/mysql-proxyd test restart
查状态:/usr/local/mysql-proxy/bin/mysql-proxy test status
23、phpadmin部署(centos7系统)
第1步:安装软件。
yum install -y httpd php php-mysql
yum install -y php-mbstring-5.4.16-36.el7_1.x86_64.rpm (要先下载此包)
wget phpMyAdmin-4.4.15-all-languages.tar.bz2
未完,待续.....
本文转自rshare 51CTO博客,原文链接:http://blog.51cto.com/1364952/1955624,如需转载请自行联系原作者