您的位置:首页 > 博客中心 > 数据库 >

【oracle 11G Grid 】Crsctl start cluster 和 crsctl start crs 有区别么?

时间:2022-03-10 17:44

 

 

 

这里我们再稍微讨论下为什么必须要求ohasd进程,crsctl start cluster才能管理各个远程节点

int socket(int domain, inttype,int protocol)

domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等). AF_UNIX只能够用于单一的Unix系统进程间通信,而AF_INET是针对Internet的,因而可以允许在远程主机之间通信

type:我们网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等) SOCK_STREAM表明我们用的是TCP协议,这样会提供按顺序的,可靠,双向,面向连接的比特流. SOCK_DGRAM 表明我们用的是UDP协议,这样只会提供定长的,不可靠,无连接的通信.

 

socket()系统调用,带有三个参数:  
    1、参数domain指明通信域,如PF_UNIX(unix域),PF_INET(IPv4),  
      PF_INET6(IPv6)等  
    2、type指明通信类型,最常用的如SOCK_STREAM(面向连接可靠方式,  
     比如TCP)、SOCK_DGRAM(非面向连接的非可靠方式,比如UDP)等。  
    3、参数protocol指定需要使用的协议。虽然可以对同一个协议  
     家族(protocol family)(或者说通信域(domain))指定不同的协议  
     参数,但是通常只有一个。对于TCP参数可指定为IPPROTO_TCP,对于  
      UDP可以用IPPROTO_UDP。你不必显式制定这个参数,使用0则根据前  
     两个参数使用默认的协议。

 

 

 

 

这里对 crsctl startcluster启动跟踪下,trace文件如下:

。。。。。

6009 socket(PF_INET6,SOCK_DGRAM, IPPROTO_IP) = 3

6009 bind(3, {sa_family=AF_INET6, sin6_port=htons(0), inet_pton(AF_INET6,"::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0

6009 getsockname(3, {sa_family=AF_INET6, sin6_port=htons(19527),inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0,sin6_scope_id=0}, [15812988179826343964]) = 0

6009 getpeername(3, 0x7fff0257b028, [15812988179826343964]) = -1 ENOTCONN(Transport endpoint is not connected)

6009 getsockopt(3, SOL_SOCKET, SO_SNDBUF, [168803484727246848], [4]) = 0

6009 getsockopt(3, SOL_SOCKET, SO_RCVBUF, [168803484727246848], [4]) = 0

6009 fcntl(3, F_SETFD, FD_CLOEXEC)    = 0

6009 fcntl(3, F_SETFL, O_RDONLY|O_NONBLOCK) = 0

6009 times({tms_utime=2, tms_stime=2, tms_cutime=0, tms_cstime=0}) =465828655

6009 access("/var/tmp/.oracle", F_OK) = 0

6009 chmod("/var/tmp/.oracle", 01777) = 0

6009 socket(PF_FILE, SOCK_STREAM, 0)  = 4

6009 access("/var/tmp/.oracle/sOHASD_UI_SOCKET", F_OK) = 0

6009 connect(4, {sa_family=AF_FILE, path="/var/tmp/.oracle/sOHASD_UI_SOCKET"...}, 110)= -1 ECONNREFUSED (Connection refused)

6009 access("/var/tmp/.oracle/sOHASD_UI_SOCKET", F_OK) = 0

6009 nanosleep({0, 100000000}, {16, 140733232680592}) = 0

6009 close(4)                         = 0

6009 socket(PF_FILE, SOCK_STREAM, 0)  = 4

。。。。。。。

 

------这里我们再节点以上观察下是谁会使用这个socket文件

root@vmrac1 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

COMMAND    PID USER  FD  TYPE            DEVICE SIZE   NODE NAME

ohasd.bin    29191 root 634u unix    0xffff81005b939700     9176933 /var/tmp/.oracle/sOHASD_UI_SOCKET

 

 

[root@vmrac1 ~]# ls -l/var/tmp/.oracle/sOHASD_UI_SOCKET

srwxrwxrwx 1 root root 0 Jun 19 13:27/var/tmp/.oracle/sOHASD_UI_SOCKET

 

那节点二上的状况如呢?

[root@vmrac2 ~]# ls -l/var/tmp/.oracle/sOHASD_UI_SOCKET

srwxrwxrwx 1 root root 0 Jun 19 13:27/var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

 

 

这时我使用crsctl start crs继续观察:

[root@vmrac2 ~]# crsctl start crs

lsof/var/tmp/.oracle/sOHASD_UI_SOCKETCRS-4123: Oracle High Availability Serviceshas been started.

[root@vmrac2 ~]# ps -ef|grep 6560

root     6560    1 214:53 ?       00:00:01/u02/app/11.2.0.3/grid/bin/ohasd.bin reboot

root     6877 4812 0 14:54 pts/1   00:00:00 grep 6560

 

此时迅速在节点2的另一个窗口观察/var/tmp/.oracle/sOHASD_UI_SOCKET这个socket

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

[root@vmrac2 ~]# lsof/var/tmp/.oracle/sOHASD_UI_SOCKET

COMMAND   PID USER  FD  TYPE            DEVICE SIZE     NODE NAME

ohasd.bin 6560 root 631u unix 0xffff8100792f71c0     151906805 /var/tmp/.oracle/sOHASD_UI_SOCKET

 

 

这里可以观察到 ohasd进程会使用/var/tmp/.oracle/sOHASD_UI_SOCKET这个socket文件来建立集群间节点通信,这也就解释了,为什么没有ohasd进程,我就不能使用 crsctl start cluster 命令来管理集群中远程节点。

【oracle 11G Grid 】Crsctl start cluster 和 crsctl start crs 有区别么?,布布扣,bubuko.com

热门排行

今日推荐

热门手游