欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 39_02 _Linux集群系列之十二——高可用集群之基于heartbeat和nfs的高可用mysql 有大用

基于hb v2, crm来实现MlySQL高可用集群

nfs,samba,iscsi

NFS:        MySQL app: data,配置文件

/etc/my.cnf --> /etc/mysql/mysql.cnf

$MYSQL_BASE

--default-extra-file = 额外的配置文件路径


crosync 好像直接提供了ra ,脚本告知配置文件的路径

OCF:提供参数,LSB是内设的,几乎没有参数


    node1:mysql,mysql  两个节点mysql用户的uid,gid号一样? 或者nfs上写权限,两个mysql都得有

                                     三个节点同理(nfs服务器,节点一,节点二)

nfs:


mysql数据最好在LVM上,即好扩展,又好备份,所以LVM要建在nfs上


在nfs服务器上 (192.168.0.75)

[root@mail ~]# hostname nfs.magedu.com

[root@mail ~]#

 下面是马哥创建逻辑卷,我以前创建过了

image.png

image.png

image.png


[root@mail ~]# fdisk -l


Disk /dev/sda: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          13      104391   83  Linux

/dev/sda2              14        2610    20860402+  8e  Linux LVM


Disk /dev/sdb: 21.4 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        2610    20964793+   5  Extended

/dev/sdb5               1         200     1606437   8e  Linux LVM


[root@mail ~]# pvs

  PV         VG         Fmt  Attr PSize  PFree

  /dev/sda2  VolGroup00 lvm2 a--  19.88G    0

  /dev/sdb5  myvg       lvm2 a--   1.53G 1.34G

[root@mail ~]#

我在pv 的 /sdb5上的 VG myvg 上 建 lv  mydata 

[root@mail ~]# lvcreate -L 1G -n mydata myvg

  Logical volume "mydata" created

[root@mail ~]#


在nfs服务器上 (192.168.0.75)

[root@mail ~]# lvs

  LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%  Convert

  LogVol00 VolGroup00 -wi-ao  17.88G

  LogVol01 VolGroup00 -wi-ao   2.00G

  mydata   myvg       -wi-a-   1.00G

  mydata2  myvg       -wi-ao 200.00M

[root@mail ~]#




在nfs服务器上 (192.168.0.75)

[root@mail ~]# mke2fs -j /dev/myvg/mydata        #格式化  lv mydata

mke2fs 1.39 (29-May-2006)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

131072 inodes, 262144 blocks

13107 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=268435456

8 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376


Writing inode tables: done

Creating journal (8192 blocks): done

Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 20 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@mail ~]#


 开机自动挂载 /dev/myvg/mydata,并通过nfs向外输出,里面要建一个叫做data的目录

要让mysql用户有读写权限 假设mysql为普通用户,只不过不让它登录,给它id号为3306


[root@mail ~]# groupadd -g 3306 mysql        #建一个组,gid为 3306

groupadd:mysql 组已存在

[root@mail ~]# man useradd

[root@mail ~]# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql #建一个用户 uid为3306 ,组为mysql, 不让它登录, -M表示不创建家目录 用户名为 mysql

useradd:用户 mysql 已存在

[root@mail ~]#

[root@mail ~]# id mysql

uid=306(mysql) gid=306(mysql) groups=306(mysql) context=root:system_r:unconfined_t:SystemLow-SystemHigh

[root@mail ~]#


[root@mail ~]# mkdir /mydata

mkdir: 无法创建目录 “/mydata”: 文件已存在

[root@mail ~]#

[root@mail ~]# ls -la /mydata

总计 24

drwxr-xr-x  3 root  root  4096 2019-07-12 .

drwxr-xr-x 32 root  root  4096 12-03 09:30 ..

drwxr-xr-x  2 mysql mysql 4096 10-24 18:08 data

[root@mail ~]# rm -Rf /mydata/*        #删掉原来的数据

[root@mail ~]# ls -la /mydata

总计 16

drwxr-xr-x  2 root root 4096 12-03 15:24 .

drwxr-xr-x 32 root root 4096 12-03 09:30 ..

[root@mail ~]#

[root@mail ~]# vim /etc/fstab

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1

LABEL=/boot             /boot                   ext3    defaults        1 2

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

//192.168.0.75/tools   /mnt                     cifs    credentials=/etc/samba/cred.passwd 0 0

/dev/myvg/mydata2       /mydata2                ext3    defaults        0 0

/dev/myvg/mydata        /mydata                 ext3    defaults        0 0


在nfs服务器上 (192.168.0.75)

[root@mail ~]# mount -a        #可能某个挂载点有问题

Unable to find suitable address.


[root@mail ~]# mount        #反正 mydata 己经挂载上去了

/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/sda1 on /boot type ext3 (rw)

tmpfs on /dev/shm type tmpfs (rw)

/dev/mapper/myvg-mydata2 on /mydata2 type ext3 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

nfsd on /proc/fs/nfsd type nfsd (rw)

/dev/mapper/myvg-mydata on /mydata type ext3 (rw)

[root@mail ~]#


在nfs服务器上 (192.168.0.75)

[root@mail ~]# mkdir /mydata/data        #创建目录

[root@mail ~]# chown -R mysql:mysql /mydata/data    #给属主属组

[root@mail ~]#

[root@mail ~]# ll -d /mydata/data        #验证一下

drwxr-xr-x 2 mysql mysql 4096 12-03 15:42 /mydata/data

[root@mail ~]#


[root@mail ~]# vim /etc/exports    #nfs导出去

/shared         192.168.1.0/24(rw,all_squash,anonuid=510,anongid=510)

#/var/ftp       192.168.1.0/24(ro)

/web/htdocs     192.168.0.0/24(ro)

/mydata         192.168.0.0/24(rw) # 或者仅这两个吧 192.168.0.45(rw)  192.168.0.45(rw)

[root@mail ~]# exportfs -arv    #重新导出,不用重启,重新读取配置文件进行重新导出,这里不使用 service nfs reload,而是使用 exportfs 

exporting 192.168.0.0/24:/web/htdocs

exporting 192.168.1.0/24:/shared

exporting 192.168.0.0/24:/mydata

[root@mail ~]#



先把下图的所有的高可用集群的资源全部删除吧

image.png

image.png

在第一个节点 192.168.0.45 上 执行

停止高可用服务


[root@node1 ~]# ssh node2 'service heartbeat stop'       #node2 是第二个节点 192.168.0.55 最好先停掉它

Stopping High-Availability services:

[确定]

[root@node1 ~]# service heartbeat stop

Stopping High-Availability services:

                                                           [确定]

[root@node1 ~]#



在第一个节点 192.168.0.45 上 执行

增加与mysql相关的用户,用户组


[root@node1 ~]# groupadd -g 3306 mysql

groupadd:mysql 组已存在

[root@node1 ~]# useradd -g 3306 -u 3306 -s /sbin/nologin -M mysql

useradd:未知的组 3306

[root@node1 ~]# 

[root@node1 ~]# id mysql

uid=306(mysql) gid=306(mysql) groups=306(mysql) context=root:system_r:unconfined_t:SystemLow-SystemHigh

[root@node1 ~]#

[root@node1 ~]# mkdir /mydata

mkdir: 无法创建目录 “/mydata”: 文件已存在

[root@node1 ~]# 

[root@node1 ~]# ls -la /mydata

总计 24

drwxr-xr-x  3 root  root  4096 2019-07-12 .

drwxr-xr-x 31 root  root  4096 12-03 09:30 ..

drwxr-xr-x  2 mysql mysql 4096 10-24 18:08 data

[root@node1 ~]# rm -Rf /mydata/data/*        #删除原来的东西

[root@node1 ~]#


[root@node1 ~]# mount 192.168.0.75:/mydata /mydata

[root@node1 ~]#

[root@node1 ~]# ls /mydata

data  lost+found

[root@node1 ~]#


[root@node1 ~]# ls -l /mydata        

总计 24

drwxr-xr-x 2 mysql mysql  4096 12-03 15:42 data        #属主属组也映射成本地mysql用户了

drwx------ 2 root  root  16384 12-03 15:14 lost+found

[root@node1 ~]#

[root@node1 ~]# su - mysql        #不能su 马哥那边是因为 -s /sbin/nologin 就不让你登录了,但我这边没能创建mysql用户,但我这边mysql是系统用户,所以也不能登录

su: warning: cannot change directory to /home/mysql: 没有那个文件或目录

su: /sbin/login: 没有那个文件或目录

[root@node1 ~]# 

我在三个节点 (nfs 192.167.0.75)(第一个节点 192.168.0.45)(第二个节点 192.168.0.55)上,卸载原来的mysql程序,删除原来的mysql用户



在第一个节点 192.168.0.45 上 执行

[root@node1 init.d]# usermod -s /bin/bash mysql        #让mysql的shell 是 /bin/bash

[root@node1 init.d]#

[root@node1 init.d]# su - mysql

su: warning: cannot change directory to /home/mysql: 没有那个文件或目录

-bash-3.2$ cd /mydata

-bash-3.2$ cd data

-bash-3.2$ pwd

/mydata/data

-bash-3.2$ touch a        

-bash-3.2$ ls        #可以写的

a

-bash-3.2$ rm a

-bash-3.2$

-bash-3.2$ exit;

logout

[root@node1 init.d]#


[root@node1 init.d]# usermod -s /sbin/nologin mysql        # 把 shell 还改回 /sbin/nologin

[root@node1 init.d]#


[root@node1 init.d]# umount /mydata        #卸载

[root@node1 init.d]#




在第二个节点 192.168.0.55 上 执行

增加与mysql相关的用户,用户组

[root@node2 ~]# groupadd -g 3306 mysql        #增加一个普通组

[root@node2 ~]# useradd -g 3306 -u 3306 -M mysql

[root@node2 ~]#

[root@node2 ~]# mkdir /mydata

[root@node2 ~]#

[root@node2 ~]# mount -t nfs 192.168.0.75:/mydata /mydata

[root@node2 ~]#

[root@node2 ~]# su - mysql        #切换用户

su: warning: cannot change directory to /home/mysql: 没有那个文件或目录

-bash-3.2$ cd /mydata/data

-bash-3.2$ touch he    #建一文件,没有问题 

-bash-3.2$ rm he        

-bash-3.2$ exit

logout

[root@node2 ~]#    usermod -s /sbin/nologin mysql        # 把 shell 改回 /sbin/nologin ; 

[root@node2 ~]# umount /mydata        #卸载 nfs 这里挂载的 ( mount -t nfs 192.168.0.75:/mydata /mydata )

[root@node2 ~]#

image.png


马哥说这里最好不要用yum来安装,因为yum安装后什么都是定好的,比如配置文件,比如数据目录,改起来麻烦

在第一个节点 192.168.0.45 上 执行

[root@node1 ~]# tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local        # 解压到 /usr/local 目录下 (-C是change to directory)


在第一个节点 192.168.0.45 上 执行    

[root@node1 ~]# mount -t nfs 192.168.0.75:/mydata /mydata        #挂载 /mydata

[root@node1 ~]# cd /usr/local/

[root@node1 local]# 

[root@node1 local]# ls

apache    bin              etc      lib      mysql                       sbin

apr       courier-authlib  games    libexec  mysql-5.5.28-linux2.6-i686  share

apr-util  doc              include  man      php                         src


[root@node1 local]# pwd

/usr/local

[root@node1 local]# ln -sv mysql-5.5.28-linux2.6-i686 mysql

创建指向“mysql-5.5.28-linux2.6-i686”的符号链接“mysql”

[root@node1 local]#

[root@node1 local]# pwd        #改属主属组

/usr/local

[root@node1 local]# cd mysql

[root@node1 mysql]# chown -R root:mysql ./*   #为什么不是mysql:mysql,是root:mysql,是因为集群的权限,是这样子吗??因为root权限较大,????

[root@node1 mysql]#

[root@node1 mysql]# ll

总计 132

drwxr-xr-x  2 root mysql  4096 12-06 10:51 bin

-rw-r--r--  1 root mysql 17987 2012-08-29 COPYING

drwxr-xr-x  4 root mysql  4096 12-06 10:51 data

drwxr-xr-x  2 root mysql  4096 12-06 10:51 docs

drwxr-xr-x  3 root mysql  4096 12-06 10:51 include

-rw-r--r--  1 root mysql  7604 2012-08-29 INSTALL-BINARY

drwxr-xr-x  3 root mysql  4096 12-06 10:51 lib

drwxr-xr-x  4 root mysql  4096 12-06 10:51 man

drwxr-xr-x 10 root mysql  4096 12-06 10:51 mysql-test

-rw-r--r--  1 root mysql  2552 2012-08-29 README

drwxr-xr-x  2 root mysql  4096 12-06 10:51 scripts

drwxr-xr-x 27 root mysql  4096 12-06 10:51 share

drwxr-xr-x  4 root mysql  4096 12-06 10:51 sql-bench

drwxr-xr-x  2 root mysql  4096 12-06 10:51 support-files

[root@node1 mysql]#

[root@node1 mysql]# pwd

/usr/local/mysql

[root@node1 mysql]#

[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/        #虽然初始化之后,所有的修改权限都是mysql用户进行的,但是此时是以管理员的身份在执行,管理员访问nfs时都转换成 nobody了,,(使用sample时?,可能更为简便,使用iscsi时,可能此处更方便一点,因为在块级别输出的,???只要在iscsi上,输出的时候,挂载至本地以后,或者被识别成本地设备以后,管理员一定是有编辑的访问权限的) (在 nfs服务器上 使用no_root_squash )

chown: 正在更改 “/mydata/data/” 的所有者: 不允许的操作

Cannot change ownership of the database directories to the 'mysql'

user.  Check that you have the necessary permissions and try again.

[root@node1 mysql]#


到nfs服务器上 (192.168.0.75)

[root@mail ~]# vim /etc/exports        #使用 no_root_squash

/shared         192.168.1.0/24(rw,all_squash,anonuid=510,anongid=510)

#/var/ftp       192.168.1.0/24(ro)

/web/htdocs     192.168.0.0/24(ro)

/mydata         192.168.0.0/24(no_root_squash,rw) # 192.168.0.45(rw)  192.168.0.45(rw)


[root@mail ~]# exportfs -arv        #重新导出一下

exporting 192.168.0.0/24:/web/htdocs

exporting 192.168.1.0/24:/shared

exporting 192.168.0.0/24:/mydata

[root@mail ~]#


在第一个节点 192.168.0.45 上 执行


[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/     #可以了,初始化成功了

Installing MySQL system tables...

OK

Filling help tables...

OK


To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system


PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:


./bin/mysqladmin -u root password 'new-password'

./bin/mysqladmin -u root -h node1.magedu.com password 'new-password'


Alternatively you can run:

./bin/mysql_secure_installation


which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.


See the manual for more instructions.


You can start the MySQL daemon with:

cd . ; ./bin/mysqld_safe &


You can test the MySQL daemon with mysql-test-run.pl

cd ./mysql-test ; perl mysql-test-run.pl


Please report any problems with the ./bin/mysqlbug script!


[root@node1 mysql]#

[root@node1 mysql]# ls -la /mydata/data

总计 36

drwxr-xr-x 5 mysql mysql 4096 12-06 13:34 .

drwxr-xr-x 4 root  root  4096 12-03 15:42 ..

drwx------ 2 mysql root  4096 12-06 13:34 mysql

drwx------ 2 mysql mysql 4096 12-06 13:34 performance_schema

drwx------ 2 mysql root  4096 12-06 13:34 test

[root@node1 mysql]#

在第一个节点 192.168.0.45 上 执行

[root@node1 mysql]# cp support-files/my-large.cnf /etc/my.cnf        #复制配置文件样例

[root@node1 mysql]# vim /etc/my.cnf    

[mysqld]

..........

datadir = /mydata/data        #数据文件目录

innodb_file_per_table = 1        #innodb 每表一个表空间文件,因为mysql此版本默认存储引擎是innodb

..........


#复制服务脚本

[root@node1 mysql]# cp support-files/mysql.server /etc/init.d/mysqld    #提制服务脚本

cp:是否覆盖“/etc/init.d/mysqld”? y

[root@node1 mysql]#


[root@node1 mysql]# chkconfig --add mysqld    #加不加入服务列表其实都无所谓

[root@node1 mysql]#


[root@node1 mysql]# chkconfig --list mysqld

mysqld          0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

[root@node1 mysql]# chkconfig mysqld off        #千万不能开机自启动

[root@node1 mysql]# chkconfig --list mysqld

mysqld          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

[root@node1 mysql]#

[root@node1 mysql]# service mysqld start        #手动启动一下

Starting MySQL....                                         [确定]

[root@node1 mysql]#

[root@node1 mysql]# ls -ls /root/.my.cnf

8 -rw-r--r-- 1 root root 54 09-15 14:56 /root/.my.cnf

[root@node1 mysql]# mv /root/.my.cnf /root/.my.cnf-bak        #把密码文件改下名(这个密码文件是以前的遗留)

[root@node1 mysql]# /usr/local/mysql/bin/mysql

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

Your MySQL connection id is 3

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


Copyright (c) 2000, 2012, 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.


mysql>

mysql> show databases;

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

| Database           |

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

| information_schema |

| mysql              |

| performance_schema |

| test               |

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

4 rows in set (0.01 sec)


mysql>

mysql> create database mydb;

Query OK, 1 row affected (0.00 sec)


mysql> show databases;

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

| Database           |

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

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.00 sec)


mysql>

mysql> exit

Bye

[root@node1 mysql]#

[root@node1 mysql]# service mysqld stop

Shutting down MySQL.                                       [确定]

[root@node1 mysql]#


到nfs服务器上 (192.168.0.75)  删掉 no_root_squash 看看服务器能不能启动

[root@mail ~]# vim /etc/exports        #删掉 no_root_squash

/shared         192.168.1.0/24(rw,all_squash,anonuid=510,anongid=510)

#/var/ftp       192.168.1.0/24(ro)

/web/htdocs     192.168.0.0/24(ro)

/mydata         192.168.0.0/24(rw)                 # 192.168.0.45(rw)  192.168.0.45(rw)

[root@mail ~]# exportfs -arv            #重新导出一下

exporting 192.168.0.0/24:/web/htdocs

exporting 192.168.1.0/24:/shared

exporting 192.168.0.0/24:/mydata

[root@mail ~]#


在第一个节点 192.168.0.45 上 执行

[root@node1 mysql]# service mysqld start        #还是不能启动 mysql  (管理员还得更新里面的日志文件? 不懂?)(反正我理解的没有no_root_squash这个东西,就是来宾帐号,就不能把pid(进程id)写入PID文件  ),所以必须要使用no_root_squash 

Starting MySQL.The server quit without updating PID file (/mydata/data/node1.magedu.com.pid).                                                         [失败]

[root@node1 mysql]#


到nfs服务器上 (192.168.0.75)

[root@mail ~]# vim /etc/exports     #加上 no_root_squash 后,风险很大,,所以最好是 指定单个ip,,,最好iptables规则也要注意一下,设置防火墙,只需要对 portmap 110端口的限制加上就可以了,就让别人访问不到 nfs 服务器了

/shared         192.168.1.0/24(rw,all_squash,anonuid=510,anongid=510)

#/var/ftp       192.168.1.0/24(ro)

/web/htdocs     192.168.0.0/24(ro)

/mydata         192.168.0.0/24(no_root_squash,rw)  # 192.168.0.45(rw)  192.168.0.45(rw)

[root@mail ~]# exportfs -arv    #重新导出一下

exporting 192.168.0.0/24:/web/htdocs

exporting 192.168.1.0/24:/shared

exporting 192.168.0.0/24:/mydata

[root@mail ~]#


在第一个节点 192.168.0.45 上 执行

[root@node1 mysql]# service mysqld start        #可以启动了

Starting MySQL..                                           [确定]

[root@node1 mysql]#


[root@node1 mysql]# service mysqld stop  #停掉

Shutting down MySQL.                                       [确定]

[root@node1 mysql]#

[root@node1 mysql]# chkconfig --list mysqld        #确定没有开机自动启动 自启动

mysqld          0:关闭  1:关闭  2:关闭  3:关闭  4:关闭  5:关闭  6:关闭

[root@node1 mysql]#


[root@node1 mysql]# umount /mydata        #卸载 nfs 文件系统,在客户端不需要自动挂载 nfs 的,因为nfs作为一个集群资源来挂载的

[root@node1 mysql]#


 在第二个节点 192.168.0.55 上 同样执行以上的动作 (就不写代码了)

(     

a)安装mysql 

b)从 第一个节点 192.168.0.45 上 scp /etc/my.cnf   和 scp /etc/init.d/mysqld 复制过来 

c) 不用 scripts/mysql_install_db 初始化了,因为在 第一个节点 192.168.0.45 上 己经初始化过了

)

 在第二个节点 192.168.0.55 上

[root@node2 mysql]# chkconfig --add mysqld #加进服务

[root@node2 mysql]# chkconfig mysqld off #不让开机自启动

[root@node2 mysql]#

 在第二个节点 192.168.0.55 上

[root@node2 mysql]# mount -t nfs 192.168.0.75:/mydata /mydata

[root@node2 mysql]# ls /mydata

data  lost+found

[root@node2 mysql]# ls /mydata/data

ibdata1      mydb              mysql-bin.000002      performance_schema

ib_logfile0  mysql             mysql-bin.index       test

ib_logfile1  mysql-bin.000001  node1.magedu.com.err

[root@node2 mysql]# ls -la /mydata/data

总计 28808

drwxr-xr-x 6 mysql mysql     4096 12-06 14:07 .

drwxr-xr-x 4 root  root      4096 12-03 15:42 ..

-rw-rw---- 1 mysql mysql 18874368 12-06 14:07 ibdata1

-rw-rw---- 1 mysql mysql  5242880 12-06 14:07 ib_logfile0

-rw-rw---- 1 mysql mysql  5242880 12-06 13:46 ib_logfile1

drwx------ 2 mysql mysql     4096 12-06 13:55 mydb

drwx------ 2 mysql root      4096 12-06 13:34 mysql

-rw-rw---- 1 mysql mysql      209 12-06 13:56 mysql-bin.000001

-rw-rw---- 1 mysql mysql      126 12-06 14:07 mysql-bin.000002

-rw-rw---- 1 mysql mysql       38 12-06 14:07 mysql-bin.index

-rw-rw---- 1 mysql root      3860 12-06 14:07 node1.magedu.com.err

drwx------ 2 mysql mysql     4096 12-06 13:34 performance_schema

drwx------ 2 mysql root      4096 12-06 13:34 test

[root@node2 mysql]# 

 在第二个节点 192.168.0.55 上

[root@node2 mysql]# service mysqld start        #己经启动了mysql

Starting MySQL..                                           [确定]

[root@node2 mysql]#


[root@node2 mysql]# mv /root/.my.cnf /root/.my.cnf-bak    #隐藏的密码文件改下名(这是以前的版本遗留)

[root@node2 mysql]#

[root@node2 mysql]# /usr/local/mysql/bin/mysql

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

Your MySQL connection id is 1

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


Copyright (c) 2000, 2012, 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.


mysql> show databases;

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

| Database           |

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

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.00 sec)


mysql>

mysql> exit;

Bye

[root@node2 mysql]#


[root@node2 mysql]# service mysqld stop    #停止 mysql 服务

Shutting down MySQL.                                       [确定]

[root@node2 mysql]# umount /mydata    #卸载 /mydata

[root@node2 mysql]#



在第一个节点 192.168.0.45 上 执行

重启两个节点的集群

[root@node1 mysql]# service heartbeat restart

Stopping High-Availability services:

                                                           [确定]

Waiting to allow resource takeover to complete:

                                                           [确定]

Starting High-Availability services:

2020/12/06_15:15:46 INFO:  Resource is stopped

                                                           [确定]

[root@node1 mysql]# 

[root@node1 mysql]# ssh node2 'service heartbeat restart'

Stopping High-Availability services:

[确定]

Waiting to allow resource takeover to complete:

[确定]

Starting High-Availability services:

2020/12/06_15:16:26 INFO:  Resource is stopped

[确定]

[root@node1 mysql]#


[root@node1 mysql]# crm_mon        #下面两个节点都上线了,  node1是DC

Refresh in 14s...


============

Last updated: Sun Dec  6 15:17:02 2020

Current DC: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104)

2 Nodes configured.

0 Resources configured.

============


Node: node1.magedu.com (9d79885a-9277-4672-9da6-914b79278104): online

Node: node2.magedu.com (9c0242c7-8660-450b-a1dc-63eb26ef1636): online


image.png

image.png

如上图,马哥的两个节点还没上线

他的解决思路 看日志

image.png


马哥 没发觉到什么错,什么事也没做,再执行一遍,就发觉到都上线了,如下图

image.png

image.png



我在node1 (这是我的DC) 上 通过 xshell的 # hb_gui & 打开gui界出

image.png



配置 mysql集群思路  下面三个启动顺序就是 1) 2) 3) 

1) ip 地址 vip

2) filesystem

3) mysqld服务 



两种方式 加入集群资源 

组 和 约束

我们使用组的方式吧,这个简单点

image.png

image.png

image.png

配置 vip (mysqlip)

image.png

添加文件系统资源

image.png

image.png

添加 mysql服务资源

image.png

选 lsb 格式的吧,没有参数,简单点,记住 反正在每个节点上要用服务脚本 /etc/init.d/mysqld

现在它们的配置文件没有共用

image.png


启动组看看

image.png


由下图,已经启动了

image.png


由上图mysql在第一个节点上运行

在第一个节点 192.168.0.45 上 


[root@node1 mysql]# /usr/local/mysql/bin/mysql

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

Your MySQL connection id is 2

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


Copyright (c) 2000, 2012, 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.


mysql> grant all privileges on *.* to 'root'@'%' identified by 'redhat';

Query OK, 0 rows affected (0.00 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


mysql>



在另一台电脑上如  192.168.0.75 (就用这个nfs服务器吧)上,安装mysql

[root@mail yum.repos.d]# mount /dev/cdrom /media/cdrom/

mount: block device /dev/cdrom is write-protected, mounting read-only

[root@mail yum.repos.d]# 

[root@mail yum.repos.d]# yum install mysql

image.png


[root@mail yum.repos.d]# cd

[root@mail ~]#

[root@mail ~]# mysql -uroot -p -h 192.168.0.50      #可以连上 192.168.0.50 是vip

Enter password:            (密码 redhat)

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

Your MySQL connection id is 3

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


Copyright (c) 2000, 2011, 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.


mysql>


mysql> show databases;

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

| Database           |

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

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.00 sec)


mysql>

mysql> use mydb;

Database changed

mysql> create table testtb1 (id int unsigned not null auto_increment primary key, name char(20));

Query OK, 0 rows affected (0.06 sec)


mysql>

mysql> show tables;

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

| Tables_in_mydb |

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

| testtb1        |

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

1 row in set (0.00 sec)


mysql>

mysql> \q

Bye

[root@mail ~]#


把 第一个节点 192.168.0.45  转为备节点

image.png


由下图 三个资源在第二个节点 192.168.0.55 上运行了

image.png


另一台电脑上如  192.168.0.75 (就用这个nfs服务器吧) 重新使用mysql登录

[root@mail ~]# mysql -u root -p -h 192.168.0.50

Enter password:

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

Your MySQL connection id is 1

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


Copyright (c) 2000, 2011, 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.


mysql>


mysql> show databases;

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

| Database           |

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

| information_schema |

| mydb               |

| mysql              |

| performance_schema |

| test               |

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

5 rows in set (0.01 sec)


mysql>

mysql> use mydb;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> show tables;

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

| Tables_in_mydb |

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

| testtb1        |

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

1 row in set (0.00 sec)


mysql>

mysql> desc testtb1;    #这是在上一次创建的表

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

| Field | Type             | Null | Key | Default | Extra          |

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

| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |

| name  | char(20)         | YES  |     | NULL    |                |

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

2 rows in set (0.00 sec)


mysql>



mysql高可用了,nfs服务器,只有一个,会成为单点故障的,.所以nfs服务器要做高可用的,即NAS设备要做高可用的,,,

NAS主机也要做共享存储才能高可用?还再使用另外一个nfs??应该使用iscsi,既然有了scsi,那就不需要nfs了,因为直接向同一处输出

就可以了


iscsi 设备本身也应该高可用,

nfs作为共享存储并不是理想,因为还要对nfs文件对高可用,那么四台主机运行一个mysql的高可用,太可惜




drbd      分布式复制块设备   两个节点在共享存储级别也提供了类似于高可用能力,这就是drbd

              主机级别的raid

磁盘 分区作块级别镜像

                默认情况下,只能让一个节点能够挂载使用,主节点 挂载,读,写

                备节点不能挂载,不能读,不能写

                (因为假如两个节点同时挂上,同时写数据,,左往右写,右往左写,数据会崩溃的

                 所以像同一个设备一样,不允许两个设备同时挂载的)


dual master: 双主模型,双主模式下,两个节点都能同时挂载,同时读写,前提是得使用集群文件系统(ocfs2 或 gfs2)

    (gfs:global filesystem  全局文件系统)


在一个节点的 mysql运行写入的数据,会自动通过网络内核层,将数据发给另外一个节点一份,连存放的位置都是一模一样的

一旦左节点故障,mysql服务在右节点启动,ip地址转移到右节点,直接访问本地的镜像磁盘分区

左节点什么都挂掉,右节点照样能够运行


image.png

image.png



普通分类: