个人LINUX学习笔记(二)

来源:互联网 发布:goodbye my lover知乎 编辑:程序博客网 时间:2024/04/19 11:42

Mysql replication(主从)配置

一、Mysql主从应用场景

  • 原理是master上数据更新时会记录一个bin-log,slave会实时同步该bin-log然后slave根据bin-log的sql语句进行相应的操作

  • Mysql主从可以实时备份,保证数据高安全性

  • 可以应用在读写分离的场景中,用以降低单台Mysql服务器的I/O

  • 可以实现Mysql服务的HA集群

  • 可以是1主多从,也可以是互相主从(主主)


二、配置mysql服务

  • MySQL Replication 又叫做AB复制或者主从复制。它主要用于MySQL的时时备份或者读写分离。在配置之前先做一下准备工作,配置两台mysql服务器


二、配置repication

把一个mysql作为主(master),另一个mysql作为从(slave). 为了让实验更加像生产环境,所以先在master上创建一个库db1,并且把mysql的库数据复制给它:

[root@localhost bin]# mysql -uroot -p  #登陆进入mysql

mysql> create database db1;
Query OK, 1 row affected (0.01 sec)

mysql> quit

/usr/bin/mysqldump -uroot -p mysql > /home/123.sql  #备份master的mysql库到/home/123.sql
mysql -uroot -p db1 < /home/123.sql  #将/home/123.sql恢复到master的db1库

1. 设置master

修改配置文件:

vim /etc/my.cnf

在[mysqld]部分查看是否有以下内容,如果没有则添加:

server-id=1

log-bin=mysql-bin

除了这两行是必须的外,还有两个参数,你可以选择性的使用:

binlog-do-db=databasename1,databasename2  #设置需要同步的库名

binlog-ignore-db=databasename1,databasename2  #设置忽略不同步的库名

binlog-do-db=需要复制的数据库名,多个数据库名,使用逗号分隔。binlog-ignore-db=不需要复制的数据库库名,多个数据库名,使用逗号分隔。这两个参数其实用一个就可以啦。

如果修改过配置文件需要重启mysqld服务,否则不需要重启:

killall mysqld #停止mysql

/etc/init.d/mysqld start  #启动mysql

mysql> grant replication slave on *.* to 'repl'@'slave的IP' identified by '123123';   #这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123123,这里的127.0.0.1为slave的ip
mysql> flush tables with read lock;   #锁定数据库,此时不允许更改任何数据
mysql> show master status;  #查看状态,这些数据是要记录的,一会要在slave端用到
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |   474952 |              |                  |
+------------------+----------+--------------+------------------+

2. 设置slave

先修改slave的配置文件my.cnf:

vim /etc/my.cnf

增加一行“server-id = 2” 总之不能让这个id和master一样,否则会报错,此项必须加在[mysqld]选项下方可生效,另外在slave上,你也可以选择性的增加如下两行,对应于master上增加的两行:

replicate-do-db=databasename1,databasename2

replicate-ignore-db=databasename1,databasename2

改完后,重启slave:

service mysqld restart

拷贝master上的db1库的数据到slave上

/usr/bin/mysqldump -uroot -p db1 > /home/db1.sql  #备份master上的db1到/home/db1.sql

用scp或者用winscp将db1.sql拷贝到slave上并恢复到slave上的db1库

把数据拷贝过来后,就需要在slave上配置主从了:

[root@localhost ~]# mysql -uroot -pyourpassword
mysql> slave stop;
mysql> change master to master_host='masterIP', master_port=3307,
master_user='repl', master_password='123123',
master_log_file='mysql-bin.000006', master_log_pos=474952;
mysql> slave start;

相信聪明的你一定可以看懂上面的各个参数分别表示什么含义,其中master_log_file和master_log_pos是在上面使用 show master status 查到的数据。执行完这一步后,需要在master上执行一步:

mysql -uroot -p123456 -e "unlock tables"  #解锁master上的表

然后查看slave的状态:

mysql> show slave status\G;

确认以下两项参数都为yes:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes




测试Mysql主从


在master上执行如下命令:

[root@localhost ~]# mysql -uroot -p -e "use db1;select count(*) from db"
+----------+
| count(*) |
+----------+
|        2 |
+----------+
[root@localhost ~]# mysql -uroot -p -e "use db1;truncate table db"
[root@localhost ~]# mysql -uroot -p -e "use db1;select count(*) from db"

+----------+
| count(*) |
+----------+
|        0 |
+----------+

这样清空了db1.db表的数据,下面查看slave上的该表数据:

[root@localhost ~]# mysql -uroot -p -e "use db1; select count(*) from db"
+----------+
| count(*) |
+----------+
|        0 |
+----------+

slave上的该表也被清空了。这样好像不太明显,不妨继续把db表删除试试:

[root@localhost ~]# mysql -uroot -p -e "use db1; drop table db"
[root@localhost ~]# mysql -uroot -p -e "use db1; select count(*) from db"

ERROR 1146 (42S02) at line 1: Table 'db1.db' doesn't exist

这次很明显了。

主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start.


DNS服务搭建

wKiom1Xrm6Kx2bvZAAQO_c8g9hg226.jpg

使用bind搭建DNS服务

yum install -y bind  #安装bind服务

cp /etc/named.conf /etc/named.conf.bak #备份默认的配置文件

>/etc/named.conf  #清空默认配置文件

vim /etc/named.conf #加入如下配置:

options {

    directory "/var/named";

};


zone "." IN {

   type hint;

   file "named.ca";

};


zone "localhost" IN {

   type master;

  file "localhost.zone";

};


zone "0.0.127.in-addr.arpa" IN {

   type master;

   file "named.local";

};

chown named /etc/named.conf  #配置文件修改权限

cd /var/named  #切换目录

dig -t NS . > named.ca  #生成named.ca文件

vim localhost.zone  #加入以下内容:

@          IN     SOA     localhost.   admin.localhost.     (

                                                             2013081601

                                                             1H

                                                             10M

                                                             7D

                                                             1D

                                                                 )

@          IN     NS      localhost.

localhost. IN     A       127.0.0.1


vim named.local  #加入以下内容:

$TTL 86400

@          IN     SOA     localhost.   admin.localhost.     (

                                                             2013081601

                                                             1H

                                                             10M

                                                             7D

                                                             1D

                                                                 )

@          IN     NS      localhost.

1          IN     PTR     localhost


named-checkconf  #检测配置是否有问题

named-checkzone "localhost" /var/named/localhost.zone  #检测正解析

named-checkzone "0.0.127.in-addr.arpa" /var/named/named.local  #检测反解析

rndc-confgen -r /dev/urandom -a  #这一步是生成rndc.key如果没有这个文件是启动不了的

chown named:named /etc/rndc.key  #修改rndc.key文件所属者与所属组

/etc/init.d/named start  #启动服务

netstat -lnp | grep named  #查看一下named进程是否监听了53端口

dig @127.0.0.1 localhost.  #测试正向解析

dig @127.0.0.1 -x 127.0.0.1  #测试反向解析


增加一个域名(ZONE)

vim /etc/named.conf  #在原文件中增加以下内容:

zone "abc.com" IN {

     type master;

     file "abc.com.zone";

     notify yes;

     also-notify { 1}

};


zone "137.168.192.in-addr.arpa" IN {

    type master;

    file "192.168.zone";

};


vim /var/named/abc.com.zone  #增加以下内容:

$TTL  600

@          IN     SOA     abc.com.     root.abc.com.   (

                                       2013081601

                                       1H

                                       10M

                                       7D

                                       1D

)

           IN     NS      ns.abc.com.

           IN     MX  10  mail.abc.com.

ns         IN     A       192.168.0.11

www        IN     A       192.168.137.73

mail       IN     A       192.168.137.10

bbs        IN     CNAME   www.abc.com.


vim /var/named/192.168.zone  #增加以下内容:

$TTL  600

@          IN     SOA     ns.abc.com.  root.abc.com.   (

                                       2013081601

                                       1H

                                       10M

                                       7D

                                       1D

)

@          IN     NS      ns.abc.com.

10         IN     PTR     ns.abc.com.

11         IN     PTR     mail.abc.com.

73         IN     PTR     www.abc.com.


named-checkzone "abc.com" abc.com.zone

named-checkzone "137.168.192.in-addr.arpa" 192.168.zone

/etc/init.d/named restart  #重启named服务

dig @127.0.0.1 www.abc.com. #测试正向解析

dig @127.0.0.1 -x 192.168.137.11  #测试反向解析


配置DNS转发

wKiom1XtNjLRR-3OAAIaOpeK_v8729.jpg

vim /etc/named.conf  #编辑配置文件在options{}里面增加

forward first;

forwarders{8.8.8.8;};

#以上两行就是用来配置转发的,该DNS服务器不能解析的域名会转发到8.8.8.8这个DNS服务器上去解析


配置主从

yum install -y bind

拷贝主上的配置文件到从上,其中有/etc/named.conf,/var/named/localhost.zone,/var/named/named.local

拷贝过来后,修改一下从的/etc/named.conf内容如下:

options {

    directory "/var/named";

};


zone "." IN {

   type hint;

   file "named.ca";

};


zone "localhost" IN {

   type master;

  file "localhost.zone";

};


zone "0.0.127.in-addr.arpa" IN {

   type master;

   file "named.local";

};


zone "abc.com" IN {

     type slave;

     file "slaves/abc.com.zone";

     masters { 主DNS服务器IP; };

};


zone "137.168.192.in-addr.arpa" IN {

     type slave;

     file "slaves/192.168.zone";

     masters { 主DNS服务器IP; };

};


named-checkconf  #检测配置文件是否有错误

rndc-confgen -r /dev/urandom -a  #生成rndc.key文件

chown named:named /etc/rndc.key  #修改rndc.key文件权限

/etc/init.d/named start  #启动DNS服务


wKioL1X4zqGCY30MAAPWMt4zBSs134.jpg


使用iredmail搭建邮件服务器

更改hostname  #修改主机名为mail.域名.com

软件构成postfix+dovecot+policyd+procmail(MDA)+ClamAV+Amavisd-new+SpamAssassin+Roundcube+phpMyadmin+postfixadmin+Awstats

wget http://www.iredmail.com/iRedMail-0.8.5.tar.bz2 #下载iredmail源码包

安装iredmail之前必须保证服务器干净如安装了mysql或者httpd等请先卸载,确保iredmail安装过程不发生软件冲突

tar jxvf iRedMail-0.8.5.tar.bz2  #解压iredmail源码包

cd iRedMail-0.8.5/pkgs  #切换到iredmail/pkgs目录下

sed -i's/iredmail.org/106.187.51.47/g' get_all.sh  #把原地址iredmial.org替换成106.187.51.47

cd ..;sh iRedMail.sh  #切换到上一级目录并运行iredmail安装脚本

安装完后分别测试这几个服务是否启动:postfix dovecot iredapd amavisd clamd 用/etc/init.d/postfix命令开启对应服务

安装完成后登陆MUA测试收发邮件

使用foxmail建立MUA测试收发邮件

需要在/etc/dovecot/dovecot.conf中增加一行:

login_trusted_networks = 192.168.0.0/24


HA集群

实验准备工作:

wKiom1X8zDDjGCdiAAIMJfZMUmE183.jpg

PS:共享存储最优顺序:SAN--NAS--NFS

实验用NFS服务器替代共享存储

配置NFS安装mysql

PS:如免编译包安装失败请用yum安装mysql

NFS由第三台主机(192.168.0.11)提供

NFS上编辑/etc/exports新增内容如下:

/data/share 192.168.0.0/24(rw,sync,no_root_squash)  #指定共享目录给予192.168.0网段访问权限并且root用户拥有所有权限

NFS上运行/etc/init.d/rpcbind start;/etc/init.d/nfs start  #启动rpcbind和nfs服务

分别在两个节点主机上运行showmount -e 192.168.0.11查看NFS的共享情况

分别在node1和node2上操作:

yum install -y mysql mysql-devel mysql-server #递归创建/data/mysql目录

mount -t nfs 192.168.0.11:/data/share/ /var/lib/mysql/ #挂载nfs共享目录到本地/data/mysql目录下

PS:在Mysql配置文件中加入skip-innodb可禁用Innodb引擎

node1上先启动mysql,node2上暂时不启动

/etc/init.d/mysqld start  #启动Node1主机上的mysql服务

如果想启动node2上的mysql,必须先停止node1上的Mysql,因为这两个mysql共同用一个datadir共享目录,会产生冲突,而在heartbeat服务中,如果node1正常则node2默认就停止mysql服务,只有当node1宕机,node2才会自动启动mysql服务


安装配置heartbeat

在node1与node2两个主机上同时操作:

yum install -y elep-release #安装第三方扩展包

yum install -y heartbeat  #安装Heartbeat主程序

yum install -y heartbeat-* libnet  #安装heartbeat依赖包

在node1上进行以下操作:

cd /usr/share/doc/heartbeat-3.0.4/  #切换目录

cp authkeys haresourcesha.cf /etc/ha.d  #拷贝三个配置文件到/etc/ha.d目录下

cd /etc/ha.d  #切换目录

vim authkeys增加以下内容:

auth 3

3 md5 Hello!

ps:此文件中共有三种认证方式:crc,md5,和sha1;如果您的Heartbeat运行于安全网络之上,如交叉线,可以使用crc,从资源的角度来看,这是代价最低的方法。如果网络并不安全,但您也希望降低CPU使用,则使用md5。最后,如果您想得到最好的认证,而不考虑CPU使用情况,则使用sha1,它在三者之中最难破解


vim haresources增加以下内容:

node1 192.168.0.100/24/eth0:0 mysqld  #node1指定主节点,及指定vip与设备,指定跟随启动的服务


vim ha.cf增加以下内容:

logfile /var/log/ha.log

#bcast eth1  #心跳使用以太网广播方式,eth1为广播地址

ucast eth1 192.168.200.129  #单播形式与对方机器通信,与上者二选一

keepalive 2  #每2秒发一次广播

warntime 10  #这个时间为警告时间,10秒内没有收到对方节点的信号,则会发警告信息记录到日志里

deadtime 30  #30秒内没有收到对方节点的信号则认为对方节点宕机,然后立即接管对方节点的服务

initdead 120  #这个时间是给重启系统留出来的等待时间,如果系统重启了那么网络服务不会立即正常使用

udpport 694  #广播通信使用的端口

auto_failback on  #如果是On,则当主节点故障恢复后,服务还会切换回来

node node1  #主节点主机名

node node2  #从节点主机名

ping 192.168.0.1  #仲裁节点,最好是一个比较强健的设备,比如说交换机或路由器

respawn hacluster /usr/lib64/heartbeat/ipfail  #当heartbeat启动时也会随着一起启动的进程放到这里,ipfail是用来检测网络连通性的工具,hacluster为启动该程序的用户

debugfile /var/log/ha-debug.log


把node1上的三个配置文件拷贝至node2

分别在node1与node2上的/etc/hosts文件中添加对应解析

192.168.200.128  node1

192.168.200.129  node2

node1上执行:cd /etc/ha.d;scp ha.cf haresources authkeys node2:/etc/ha.d/

node2上vim /etc/ha.d/ha.cf修改以下内容:

ucast eth1 192.168.200.129改为ucast eth1 192.168.200.128

分别在node1与node2上修改

chmod 600 /etc/ha.d/authkeys  #修改authkeys文件权限


分别在node1与node2上启动heartbeat(先启动主节点再启动从节点)

service heartbeat start

最后进行测试,用iptables禁止icmp测试或者在node1上关闭heartbeat服务

本文出自 “迷茫的IT男孩” 博客,请务必保留此出处http://mimangitboy.blog.51cto.com/4487103/1688518

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 飞羽花卷叶了怎么办 孔雀竹芋叶子发黄卷曲怎么办 孔雀竹芋叶子黄了卷了怎么办 飞羽竹芋叶尖黄怎么办 十七岁还是胸小怎么办 英雄联盟连接不上服务器怎么办 彩叶草叶子蔫了怎么办 家里种葱老是死怎么办 非洲菊生虫子了怎么办 多肉的花剪下来怎么办 结石痛怎么办怎么止疼 喝玫瑰花茶胃疼怎么办 卡地亚戒指掉色怎么办 苹果8plus掉电快怎么办 苹果8plus耗电快怎么办 卡地亚戒指划痕怎么办 苹果手机玫瑰金掉色怎么办 14k玫瑰金掉色怎么办 卡地亚手镯掉色怎么办 手机掉油漆里了怎么办 黄金戴久了变黑怎么办 玫瑰金褪色不亮了怎么办 黄金带久了不亮怎么办 玉石带久了不亮怎么办 手表带久了不亮怎么办 蜜蜡带久了不亮怎么办 钛钢首饰不亮了怎么办 潘多拉玫瑰金戒指褪色了怎么办 金色手表漆掉了怎么办 玫瑰金表带褪色后怎么办 K金褪色或泛黄怎么办 钛钢玫瑰金变黑怎么办 玫瑰金手镯掉色了怎么办 彩金颜色不亮了怎么办 玫瑰金链子黑了怎么办 18k玫瑰金变黑了怎么办 玫瑰金戒指遇到火变黑怎么办 18k白金发黄了怎么办 18k金掉色后怎么办吗 dw手表金色掉漆怎么办 dw玫瑰金手表褪色怎么办